tony2805 Posted June 18, 2014 Share Posted June 18, 2014 Bonjour, Je souhaiterai avoir le résultat de mon .php dans mon fichier product.tpl, je m'explique je souhaite récupérer le contenu de la balise d'un site externe jusqu’à la aucun soucis tout marche quand je lance mon php mon .php contient: <?php $contenu = file_get_contents('http://www.exemple.com'); $balise = '#id="LB"(.*\n?)#'; if(preg_match( $balise, $contenu)) { echo '1'; } else { echo '2'; } ?> J'aimerai afficher le résultat du .php dans mon product.tpl Si vous avez une idée comment je peut faire, Je vous en remercie d'avance je suis sous prestashop 1.6.0.5 Link to comment Share on other sites More sharing options...
Szed Posted June 18, 2014 Share Posted June 18, 2014 Deux solutions, dont une qui ne marchera pas je pense ^^ : - Utiliser les balises PHP de smarty, ca ne me semble pas terrible. - Faire les choses correctement et surcharger le controller de votre template, ou en passant par un module. Link to comment Share on other sites More sharing options...
tony2805 Posted June 18, 2014 Author Share Posted June 18, 2014 Merci pour ta réponse. Deux solutions, dont une qui ne marchera pas je pense ^^ : - Utiliser les balises PHP de smarty, ca ne me semble pas terrible. - Faire les choses correctement et surcharger le controller de votre template, ou en passant par un module. - Utiliser les balises PHP de smarty, ca ne me semble pas terrible. ne marche pas en effets - Faire les choses correctement et surcharger le controller de votre template, ou en passant par un module. Ses ce que j'avais pensait aussi, mais je ne sais pas comment mis prendre peut tu m'expliquer comment je doit faire? Link to comment Share on other sites More sharing options...
Szed Posted June 18, 2014 Share Posted June 18, 2014 Il vous faut vous pencher sur la notion de surcharge de controller. Par exemple, sur la fiche produit, il vous faudrait surcharger le controller ProductController. Dans celui ci, vous pourrez alors appelez une nouvelle fonction (depuis la fonction initContent() je pense), avec votre propre PHP, qui assignera des variables smarty à votre product.tpl Link to comment Share on other sites More sharing options...
tony2805 Posted June 18, 2014 Author Share Posted June 18, 2014 (edited) Il vous faut vous pencher sur la notion de surcharge de controller. Par exemple, sur la fiche produit, il vous faudrait surcharger le controller ProductController. Dans celui ci, vous pourrez alors appelez une nouvelle fonction (depuis la fonction initContent() je pense), avec votre propre PHP, qui assignera des variables smarty à votre product.tpl Si j'ai bien compris sa devrait donner: class ProductControllerCore extends FrontController { public function initContent() { <?php $contenu = file_get_contents('http://www.exemple.com'); $balise = '#id="LB"(.*\n?)#'; if(preg_match( $balise, $contenu)) { echo '1'; } else { echo '2'; } ?> } .... Sa me met page blanche une idée? Edited June 18, 2014 by tony2805 (see edit history) Link to comment Share on other sites More sharing options...
Szed Posted June 18, 2014 Share Posted June 18, 2014 Alors. Plusieurs choses incorrect. Un : inutile d'ouvrir et de ferme vos balises php, vous êtes déjà dans un fichier php, avec l'ouverture tout en haut du fichier Deux : ProductControllerCore devrait étendre ProductController je pense Via un override, vous surcharger complètement la fonction init_content. Donc il vous faut tout de même récupérer la fonction complète dans le controller original, sinon plus rien ne marchera. Ensuite, plutôt que coller votre php dans initContent, appelez une fonction $this->maFonction(); Et du coup, en dessous de la fonction init_content, vous y mettez votre fonction : function maFonction(){ // votre php } Il vous faut également voir le passage de variable d'un controller à un template Link to comment Share on other sites More sharing options...
tony2805 Posted June 18, 2014 Author Share Posted June 18, 2014 (edited) Alors. Plusieurs choses incorrect. Un : inutile d'ouvrir et de ferme vos balises php, vous êtes déjà dans un fichier php, avec l'ouverture tout en haut du fichier Deux : ProductControllerCore devrait étendre ProductController je pense Via un override, vous surcharger complètement la fonction init_content. Donc il vous faut tout de même récupérer la fonction complète dans le controller original, sinon plus rien ne marchera. Ensuite, plutôt que coller votre php dans initContent, appelez une fonction $this->maFonction(); Et du coup, en dessous de la fonction init_content, vous y mettez votre fonction : function maFonction(){ // votre php } Il vous faut également voir le passage de variable d'un controller à un template je suis désolée un peu du mal a comprendre se qui faut vraiment faire en gros j'ouvre mon ProductController.php, je remplace ProductControllerCore par ProductController, enssuite initContent n'existe pas donc je le met en dessous de class ProductController extends FrontController, et dans iniContent toujours j'appelle une fonction est sa donne sa: class ProductController extends FrontController { public function initContent() { $contenu = file_get_contents('http://www.exemple.com'); $balise = '#id="LB"(.*\n?)#'; if(preg_match( $balise, $contenu)) { echo '1'; } else { echo '2'; } } Esce-bien sa? je vous fait par de mon ProductController.php Edited June 18, 2014 by tony2805 (see edit history) Link to comment Share on other sites More sharing options...
Szed Posted June 18, 2014 Share Posted June 18, 2014 Il ne faut pas ouvrir le productController qui est dans Controller. Comme dis plus haut, vous devez vous renseigner sur la fonction d'override d'un controller. C'est à dire qu'au final, vous devez avoir dans /overide/controller/front un fichier productController.php d'a peu prés ce style : <?php class ProductController extends ProductControllerCore { public function initContent() { //je ne le colle pas car elle est grosse, mais il doit y avoir le contenu de la fonction de base à laquelle vous rajoutera un appel à une fonction par exemple, ou votre php, etc. // Et si, initContent est bien présente dans votre ProductController.php } } Par contre, éviter de coller des pavé de code comme cela, ca empêche toute lecture. Si vous devez copier un gros bout de code, passez par pastebin.com par exemple Link to comment Share on other sites More sharing options...
tony2805 Posted June 18, 2014 Author Share Posted June 18, 2014 Merci pour ces réponse je me penche sur le sujet et désolée pour le pavé je vais le supprimer, je le serait pour l'avenir Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now