Autoload et smarty

Résolu
cs_zzzzzz Messages postés 408 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 18 décembre 2012 - 29 sept. 2011 à 22:15
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.

7 réponses

phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
30 sept. 2011 à 23:57
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.



______________________________________________________________________
3
Zut13 Messages postés 50 Date d'inscription dimanche 6 mai 2007 Statut Membre Dernière intervention 14 novembre 2011
29 sept. 2011 à 23:01
Tu peux mettre les 12 premières lignes de ton fichier register.php ?

@('(°)_(°) )@
0
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
30 sept. 2011 à 00:34
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



______________________________________________________________________
0
cs_zzzzzz Messages postés 408 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 18 décembre 2012
30 sept. 2011 à 20:03
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
30 sept. 2011 à 20:36
-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');


______________________________________________________________________
0
cs_zzzzzz Messages postés 408 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 18 décembre 2012
30 sept. 2011 à 21:05
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.
0
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
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 !
0
Rejoignez-nous