Autoload et smarty [Résolu]

Messages postés
408
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
18 décembre 2012
- - Dernière réponse : cs_zzzzzz
Messages postés
408
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
18 décembre 2012
- 1 oct. 2011 à 12:07
Bonjour,

J'ai une question de débutant concernant autoload, j'ai installé smarty et la classe se situe dans le repertoire smarty et non dans mon repertoire class.

J'utilise donc le code :

require_once 'smarty/Smarty.class.php';
function __autoload($class_name) {
require_once './class/'.$class_name.'.php';
}

Seulement quand j'appelle une class autre que smarty dans le rep class j'ai
:
Fatal error: Class 'Secure' not found in /home/site/public_html/site/register.php on line 12


J'ai trouvé un topic intéressent sur SMARTY et autoload mais je ne comprends RIEN :

http://www.smarty.net/forums/viewtopic.php?p=60667

Comment faire?

Merci d'avance pour votre aide.
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
403
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
4
3
Merci
Comment cette fonction fait?

Je ne peux pas être plus claire que la doc (lien que je t'ai donné plus haut d'ailleurs) :
Si vous devez utiliser plusieurs fonctions d'autochargement, la fonction spl_autoload_register() est faîte pour cela. Elle crée une file d'attente de fonctions d'autochargement, et les exécute les unes après les autres, dans l'ordre qu'elles ont été définies. A contrario, la fonction __autoload() ne peut être définie qu'une seule fois.

Dit simplement, spl_autoload_register() = __autoload() multiples
spl_autoload_register enregistre toutes les fonctions __autoload() en les empilants --> quand une classe est appelé il va utiliser spl_autolad_call pour exécuté les fonctions __autoload() définies.
Ca s'apparente effectivement, au parcours d'une arborescence.

Require_once() ou le combo class_exists()+require(), c'est au choix, pourvu que le require_once() soit bien utilisé.
En effet, le combo fait directement référence à la classe(ce qui nous intéresse) et non au fichier. Si dans un fichier du définie deux classes, il est probable que la classe à laquelle tu souhaites accéder ne soit pas accessible justement, puisque __autoload() appelle la classe nommé au fichier avec les paramètres prédéfinies('/Dossierclasses/CLASSNAME.php' ou pour d'autres : '/CLASSNAME.inc.php', etc etc), sauf si tu la définie implicitement bien sûre.


Comme je te l'ai dit dans l'autre post, ça semble être un problème HTML/CSS ou de formatage plutôt qu'un problème avec smarty.
Donc regarde ce que la fonction "decrypt" de ton captcha renvoi : éventuellement code html, etc...qui ferait "interférence", avec le code de ton template.



______________________________________________________________________

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 138 internautes nous ont dit merci ce mois-ci

Commenter la réponse de phpAnonyme
Messages postés
50
Date d'inscription
dimanche 6 mai 2007
Statut
Membre
Dernière intervention
14 novembre 2011
0
Merci
Tu peux mettre les 12 premières lignes de ton fichier register.php ?

@('(°)_(°) )@
Commenter la réponse de Zut13
Messages postés
403
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
4
0
Merci
Smarty utilise déjà la fonction _autoload(), la solution est d'utiliser spl_autoload_register() à la place.

Voir un exemple de mon tuto :
http://www.phpcs.com/tutoriaux/GENERER-PDF-GRACE-HTMLTOPDF-SMARTY_1218.aspx
OU
http://fr.php.net/manual/fr/function.spl-autoload-register.php



______________________________________________________________________
Commenter la réponse de phpAnonyme
Messages postés
408
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
18 décembre 2012
0
Merci
Salut, merci pour ta réponse.. Je ne pige pas vraiment, il faut que je supprime l'autoload que j'ai pas celui de smarty? Si oui, je dois autoload le rep class.. qui est different de celui de smarty. Concrètement je dois faire comment?

Merci d'avance
Commenter la réponse de cs_zzzzzz
Messages postés
403
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
4
0
Merci
-Tu touches pas à Smarty.
-Au niveau de ton application, au lieu d'utiliser __autoload(), tu dois utiliser spl_autoload_register().

function AutoloadClass($classname)
if(!class_exists($classname, false))
require($classname);

spl_autoload_register('AutoloadClass');


______________________________________________________________________
Commenter la réponse de phpAnonyme
Messages postés
408
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
18 décembre 2012
0
Merci
Merci infiniment pour ton aide... Je débute avec smarty et la POO et c'est la misère.

En fait mes classes y comprit smarty (qui est dans un repertoire different) semblent bien se charger avec ton code mais je ne comprends pas. Comment cette fonction fait? Elle parcours toute l'arborescence / ou bien? Ne faut-il pas utiliser plutôt require_once aussi?

Deuxième point (désolé ^^)

Toi qui utilises smarty, arrives tu à intégrer un CAPTCHA et surtout à le POSITIONNER. ? J'essaye d'intégrer captcha.fr à smarty, il s'affiche mais tout en haut à gauche de la page (début de code). Impossible de le mettre à sa place {$CAPTCHA}. Une idée ou une suggestion de CAPTCHA?

Merci d'avance pour ton aide.
Commenter la réponse de cs_zzzzzz
Messages postés
408
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
18 décembre 2012
0
Merci
Merci encore pour ton aide, j'ai déja bien avancé. Pour cette histoire de CAPTCHA, je laisse tombé j'ai bien regardé le code mais rien de spéciale, pas de css particulier juste :

function dsp_crypt($cfg=0,$reload=1) {
// Affiche le cryptogramme
echo ", \";
if ($reload) echo \", \";
echo "
";
}

Bref, je crois que je vais oublié smarty juste pour ma page de register et que je verrai ca plus tard quand je serai un peu plus avancé avce tout ca.

Bref encore merci !
Commenter la réponse de cs_zzzzzz