sangria777 Posted September 9, 2013 Share Posted September 9, 2013 (edited) Bonjour à tous, Je me décide à demander de l'aide après des heures de recherche ! Même si ma demande est surement très bête, je n'y arrive pas, je ne comprend pas... Le sujet est souvent abordé, mais il me manque des billes ! Je voudrais comprendre tout le fonctionnement pour une faire une requete sql. Je suis en version 1.5.2 Par exemple sur une table que j'ai ajouté (oo-promo) et sur la page authentication. première étape Je dois faire une class avec ma requête. Je l'ai mis dans class/controller/FrontControler, c'est bien la ? public function testPromo() { global $smarty, $cookie; $req = Db::getInstance()->executeS('SELECT * FROM `'._DB_PREFIX_.'ad-promo`'); $this->context->smarty->assign('requete',$req); $this->setTemplate(_PS_THEME_DIR_.'authentication.tpl'); } Est-ce que le code est correct ? Deuxième étape Je dois mettre dans le authentication.tpl un code pour afficher le résultat de la requête. {foreach from=$requete item=testPromo} promo : {$testPromo} {/foreach} Mais je ne comprend pas ce que je dois mettre pour item : le nom de la class ? Et normalement ça suffit ? Merci vraiment à ceux qui prendrons le temps de m'expliquer la démarche pour ma version. J'aimerai vraiment comprendre ! Edited September 10, 2013 by sangria777 (see edit history) Link to comment Share on other sites More sharing options...
sangria777 Posted September 10, 2013 Author Share Posted September 10, 2013 class/controller/FrontControler Est-ce que je place la fonction au bon endroit ? Link to comment Share on other sites More sharing options...
Szed Posted September 10, 2013 Share Posted September 10, 2013 Il vous faut vous renseigner au sujet des "surcharges" (override) des controller. Sinon, vous ne pourrez pas mettre à jour votre boutique si vous modifier directement les classes ou controller. Ensuite, concernant le template. Dans votre controller, vous assigner au template des variables (int, string, array, ...) et ce sont ces variables que vous appelez dans le template. Link to comment Share on other sites More sharing options...
sangria777 Posted September 10, 2013 Author Share Posted September 10, 2013 (edited) Merci pour cette réponse, je voudrais vraiment comprendre ! J'ai déjà surchargé des class et j'ai lu beaucoup de chose à ce sujet, mais la je ne vois pas ou et surtout laquelle, enfaite. Si je veux afficher un élément d'un table perso sur une page comme authentication.tpl Dans quel fichier je dois mettre ma fonction avec la requete sql ? Edited September 10, 2013 by sangria777 (see edit history) Link to comment Share on other sites More sharing options...
sangria777 Posted September 10, 2013 Author Share Posted September 10, 2013 Est-ce dans le fichier override/classes/controller/FrontController.php ? Peux-être que si je met la fonction ici je pourrais l'afficher dans n'importe quel .tpl, c'est ça ? Link to comment Share on other sites More sharing options...
Szed Posted September 10, 2013 Share Posted September 10, 2013 Je n'ai jamais eu l'occaz et l'utilisé d'avoir à effectuer un override, donc je ne pourrais répondre à votre question. En attendant qu'un dev passe dans le coin... Link to comment Share on other sites More sharing options...
sangria777 Posted September 10, 2013 Author Share Posted September 10, 2013 Ha ok, est-ce que quelqu'un sait si je suis au bon endroit et surtout si ma démarche est la bonne ? Link to comment Share on other sites More sharing options...
sangria777 Posted September 11, 2013 Author Share Posted September 11, 2013 Mais question est surement maladroite puisque pas de réponse ? Link to comment Share on other sites More sharing options...
DevNet Posted September 11, 2013 Share Posted September 11, 2013 Bonjour, Oula ! tout ça semble bien confus ! Pour aller plus vite, indiquez exactement ce que vous souhaitez faire. Est-ce que vous souhaitez afficher une seule donnée de votre table dans la page d'authentification (quelle étape exactement ?), ou plusieurs ? Il faut savoir où vous souhaitez agir et avec quoi, et on pourra vous aider plus. pour votre demande sur l'item testPromo, c'est pas une classe non c'est simplement une variable temporaire qui permettra de faire ressortir vos données dans la boucle par : item.monchampdelatable, puisque que vous faites un select * dans la sql. A+ Link to comment Share on other sites More sharing options...
sangria777 Posted September 12, 2013 Author Share Posted September 12, 2013 Bonjour, Alors je vais essayer d être plus clair!! Dans la table que j ai crée je vais chercher 3 valeurs (une date d application, une date de fin et un libellé) Je veux afficher ces valeurs dans la page authentification. Je pensais devoir faire une class, mais c est vrai que je veux seulement afficher des variables! Merci pour votre aide! Link to comment Share on other sites More sharing options...
spacm Posted September 12, 2013 Share Posted September 12, 2013 Pour ce que j'ai compris: Si tes valeurs sont associées à ta table customer, il te suffit d'overrider le modèle customer, et modifier ton template. Sinon, il vaut probablement mieux: -soit overrider le controlleur d'authentification. -soit y accrocher un hook de display qui renseigne le smarty (peut être que ça doit passer par l'override du controller) Et bien entendu, modifier le template (de préférence dans un thème à toi) Link to comment Share on other sites More sharing options...
sangria777 Posted September 12, 2013 Author Share Posted September 12, 2013 (edited) Alors les valeurs sont dans une table que j'ai créer : ad-promo Du coup on arrive la ou je but : ou puis-je overider le controller d'authentification ? Dans override/controllers/front ? -> je n'ai pas de fichier authentication ?? Edited September 12, 2013 by sangria777 (see edit history) Link to comment Share on other sites More sharing options...
spacm Posted September 12, 2013 Share Posted September 12, 2013 (edited) A mon avis, tu peux t'en sortir sans override avec un de ces hooks: displayCustomerAccount Display on page account of the customer displayCustomerAccountForm Display some information on the form to create a customer account Sinon, voir: controllers/front/AuthController.php qui gère le login et l'appel des formulaires de compte client (+ éventuellement adresses) ou controllers/front/MyAccountController.php appelle aussi ces formulaires, depuis 'mon compte' et controllers/admin/AdminCustomersController.php qui prépare réellement le smarty du formulaire client note: tout ceci est à vérifier, je n'ai pas exploré en profondeur Par ailleurs, je pense que c'est toujours mieux d'éviter un override s'il n'est pas nécessaire (pour les updates à venir, et éviter les conflits avec d'éventuels autres overrides). Edited September 12, 2013 by spacm (see edit history) Link to comment Share on other sites More sharing options...
sangria777 Posted September 12, 2013 Author Share Posted September 12, 2013 Merci pour ta réponse spacm, Bien que je ne la comprenne pas tout ! Si c'est mieux d'éviter un override, que dois-je faire avec les hooks ? ça se passe ou ? Link to comment Share on other sites More sharing options...
spacm Posted September 12, 2013 Share Posted September 12, 2013 (edited) Les hooks, ça se passe dans ton module si tu en développe un (j'avais supposé que c'était le cas). Dans le script principal de ton module, tu définis une fonction qui s'accrochera (hook) là où le hook est défini dans prestashop. Cette fonction peut éventuellement appeler un modèle perso que tu auras défini dans un coin de ton module. require_once('models/MonModele.php'); //MonModele hérite de ObjectModel (si tu utilises un modele) class MonModule extends Module { public function __construct() { $this->name = 'MonModule'; $this->tab = 'front_office_features'; $this->version = 0.1; $this->author = 'moi'; $this->displayName = $this->l('Mon module'); $this->description = $this->l('Module pour ajouter 3 champs à l'inscription client.'); parent :: __construct(); //$this->registerHook('displayCustomerAccount'); // ça, on peut le décommenter une fois pour enregistrer le module } //pour l'installation du module dans le Back Office public function install() { return parent :: install() && $this->resetDb() //drop si existe et install des tables && $this->registerHook('displayCustomerAccount'); ; } private function resetDb() { //opérations en BD pour installer le module } public function hookDisplayCustomerAccount($params) { //on prépare le smarty, éventuellement en utilisant la classe dérivée d'ObjectModel appropriée, ou avec une requete SQL this->context->smarty->assign(... //ça peut être suffisant si tu as modifié directement le template dans ton thème //sinon, peut être return $this->display(__FILE__, 'MonTEmplateAInserer.tpl'); } } Edited September 12, 2013 by spacm (see edit history) Link to comment Share on other sites More sharing options...
sangria777 Posted September 12, 2013 Author Share Posted September 12, 2013 Heu non, pas de module enfaite. Du coup je regarde le override/controllers/front/AuthController.php J'y ai mis la class : public function testPromo() { global $smarty, $cookie; $req = Db::getInstance()->executeS('SELECT * FROM `'._DB_PREFIX_.'ad-promo`'); $this->context->smarty->assign('requete',$req); $this->setTemplate(_PS_THEME_DIR_.'authentication.tpl'); } Ensuite dans authentication.tpl, j'ai mis : {foreach from=$requete item=testPromo} promo : {$testPromo} {/foreach} ça ne marche pas, pourtant c'est quelque chose comme ça que je dois faire ? Link to comment Share on other sites More sharing options...
sangria777 Posted September 16, 2013 Author Share Posted September 16, 2013 Bonjour, Est-ce que je suis sur la bonne piste ? Les codes sont-ils au bon endroit ? Merci pour vos réponses! Link to comment Share on other sites More sharing options...
sangria777 Posted September 16, 2013 Author Share Posted September 16, 2013 Pas de réponse ! Est-ce qu'il faut que j'explique d'autre chose ? Ou peut être y a-t-il des tutos pour faire une requête d'une table perso ? Dites-moi ce que je dois faire pour être plus claire ! Link to comment Share on other sites More sharing options...
spacm Posted September 22, 2013 Share Posted September 22, 2013 Quand tu fais un override, c'est en principe pour remplacer une classe existante de prestashop par une classe fille dans laquelle tu redéfinis certaines fonctions. donc plutôt un contenu du genre: class AuthController extends AuthControllerCore { //la fonction que tu veux redéfinir/ étendre, par exemple intiContent() public function initContent() { //éventuellement, ta requête à la main pour récupérer tes valeurs //cependant; il est en principe mieux de passer par une classe dérivée d'objectModel pour accéder à tes ressources dans la base //tes assign smarty à toi parent::initContent(); } } Link to comment Share on other sites More sharing options...
sangria777 Posted September 24, 2013 Author Share Posted September 24, 2013 Du coup dans mon cas : je veux faire une requête sur une table 'perso'. Est-ce un override que je dois faire ? Car ce n'est pas vraiment une redéfinition de fonction, si ? 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