UDM-PRESTA Posted January 17, 2012 Share Posted January 17, 2012 Bonjour à toutes et tous (ou bonsoir ), je cherche à intégrer du php dans certaines fiches articles de catégories différentes. J'ai saisi qu'il faille ajouter la balise suivante: {php} include('/chemin/vers/leficher.php'); {/php} Or, ma question est la suivante: comment insérer ce code uniquement dans certaines fiches produits de certaines catégories (ou sous-catégories) ? car toutes mes fiches produits n'ont pas besoin de ce php à insérer. Merci d'avance de vos éclaircissements. Link to comment Share on other sites More sharing options...
loulou66 Posted January 18, 2012 Share Posted January 18, 2012 coucou tu pourrait ajouter un case a cocher + texte (afficher le php ) dans la pages produit de la BO avec une variable ($affcihephp) suivant que la case est cocher ou non et une conditions dans le product.tpl avant le bloc ou tu déclare l'affichage de ton fichier php si condition vrai ( case cocher =$affcihephp=1) class="affichephp" si condition fausse ( case non cocher=$affcihephp=0) class="hidden" display:none ajouter dans le global.css .affichephp { display:block; + ta mise en forme pour l'affichage)} et la class .hidden existe deja normalement sinon .hidden {display:none} comme ca tu affiche ton php suivant les produits que tu veut voilou @++ Loulou66 Link to comment Share on other sites More sharing options...
UDM-PRESTA Posted January 18, 2012 Author Share Posted January 18, 2012 Merci Loulou66, toutefois c'est pas du chinois pour moi mais du langage inadapté à ma compréhension actuelle. Je comprend dans les grandes lignes ce que tu dis, mais pour coder ça, va falloir que je décode déjà ce que tu me dis. Si je résume, voici ce que je dois faire (?) : Ouvrir global.css, y mettre le code suivant: .affichephp { display:block; monfichier.php} .hidden {display:none} Ouvrir product.tpl et placer ce code là où je veux sur la page produit: {if $affichephp = 1} <div> {php} include('/chemin/vers/leficher.php'); {/php} Ais-je bien saisi ? Link to comment Share on other sites More sharing options...
loulou66 Posted January 18, 2012 Share Posted January 18, 2012 coucou heu non tout ça c’était pour t'expliquer mon raisonnent, j'ai un peu avancer sur ton sujet j'ai créer une case a cocher dans la page Adminproduct.php ( pages produit de la BO) j'ai créer un variable dans la base de donnée avec la variable de la case a cocher dans la clé product j'ai créer un conteneur( <div> ) qui m'affiche pour le moment une phrase sous les liens ( agrandir...etc) dans product.tpl (page qui affiche le produit en FO) ça c’était la partie facile mais il faut que j'arrive a relier tout ça maintenant hehe^^ cad. : enregistrer la condition de ma case a cocher dans la variable de la base de donnée a partir de la page produits de la BO et recuperer cette variable dans product.tpl pour l'affichage ou non ( 1=affichage 0=pas d'affichage=) pour le css on vera un fois que ca fonctionneras je suis pas la cette aprèm je posterai ce soir le code que j'ai ajouter @++ Loulou66 1 Link to comment Share on other sites More sharing options...
UDM-PRESTA Posted January 18, 2012 Author Share Posted January 18, 2012 Tu vas me faire aimer le codage toi du moins m'inciter à plonger un peu plus dedans par la suite j'aime bien tes explications si en plus tu me détailles pour mieux comprendre et faire, là tu mérites bien plus qu'un bisou virtuel Link to comment Share on other sites More sharing options...
loulou66 Posted January 18, 2012 Share Posted January 18, 2012 coucou bon j'ai réussi hehe je suis en train de te faire un tuto ^^ profites en pour installer un Prestashop en local pour tester dessus avant ( voir xampp pour le server local) et de faire une sauvegarde de ta base de donnée de ta boutique( on sait jamais ) @++ Loulou66 Link to comment Share on other sites More sharing options...
loulou66 Posted January 18, 2012 Share Posted January 18, 2012 coucou oui oui des bisous ^^ Tout d'abord je suis en version 1.4.6.2 donc peut -être qu’ il faudra adapter a ta version J’ai effectuer tout ces étapes sur ma boutique test en server local et je te conseil de faire de même comme ca si tu te trompe tu plante pas ta boutique Donc install la même version que ta boutique en local avec thème par default Tout les fichiers que je vais te demander d'éditer tu en feras un copie dans le répertoire ou se trouve le fichier avant de travailler dessus (notepad++ ==>Fichier ==>enregistrer un copie... moi je les enregistre en nom_du_fichier_ori.extension par exemple pour Adminproduct.php la copie sera Adminproduct_ori.php bon alors 1°) - ajout de la case a cocher coter admin dans la fiche produits va dans ton-répertoire_admin/tabs/ et edites le fichier Adminproduct.php 1-1 déclaration de la variable "showitem" recherches online_only tu doit trouver $object->online_only = Tools::isSubmit('online_only'); juste après tu ajoutes la ligne $object->showitem = Tools::isSubmit('showitem'); 1-2 déclaration de la case a cocher recherches le mot $id_supplier je le trouve a la ligne 2328 ou j'ai cette portion de code if ($id_supplier = $this->getFieldValue($obj, 'id_supplier')) echo ' <option value="'.$id_supplier.'" selected="selected">'.Supplier::getNameById($id_supplier).'</option> <option disabled="disabled">----------</option>'; echo ' </select> <a href="?tab=AdminSuppliers&addsupplier&token='.Tools::getAdminToken('AdminSuppliers'.(int)(Tab::getIdFromClassName('AdminSuppliers')).(int)($cookie->id_employee)).'" onclick="return confirm(\''.$this->l('Are you sure you want to delete entered product information?', __CLASS__, true, false).'\');"><img src="../img/admin/add.gif" alt="'.$this->l('Create').'" title="'.$this->l('Create').'" /> <b>'.$this->l('Create').'</b></a> </td> </tr> juste après le </tr> ajoute les lignes suivantes <tr> <td style="vertical-align:top;text-align:right;padding-right:10px;font-weight:bold;">'.$this->l('Show Item:').'</td> <td> <input style="float: left;" type="checkbox" name="showitem" id="showitem" value="1" '.($this->getFieldValue($obj, 'showitem') ? 'checked="checked" ' : '').' /> <label for="showitem" class="t"><img src="../img/admin/picture.gif" alt="'.$this->l('showitem').'" title="'.$this->l('showitem').'" style="float:left; padding:0px 5px 0px 5px" />'.$this->l('show item in your product page').'</label> </td> </tr> tu sauvegardes le fichier dans son dossier ton-répertoire_admin/tabs/Adminproduct.php voila dans la fiche produit de la BO en dessous de Fournisseur en haut a droite tu as maintenant Show Item (une case a cocher) show item in your product page ( il faudra traduire via la traduction) ( je me suis baser sur la case a cocher un peu plus haut online_only que j'ai adapter) Ensuite 2°)- création de la colonne showitem dans la base sql avec phpmyadmin tu va dans la base de ta boutique tu click sur SQL et dans la fenêtre ou il y a marque ( tapes 127.0.0.1/phpmyadmin dans ton navigateur)(127.0.0.1= ton site en local / pour ta base de donnée avec ton hebergeur tu doit avoir une autre adresse pour OVH par exemple c'est https://phpmyadmin.ovh.net/ ) tu vas dans ta base de donnée et tu sélectionne la clé _DB_PREFIX_product ans la collone de gauche et tu click sur le bouton SQL en haut Remplacer _DB_PREFIX_ par le prefix de ta base de donnée ( par exemple moi c'est PS_ tu voit cette requête dans la zone de texte SELECT * FROM `_DB_PREFIX_product` WHERE 1 tu effaces tout et tu colles ceci ALTER TABLE `_DB_PREFIX_product` ADD `showitem` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `online_only` et tu click sur exécuter voir image ci-dessous Ensuite 3°)déclaration de la variable showitem a SMARTY donc il faut Ovverride la class Product dans ton éditeur de text tu ouvres un nouveau document vierge et tu recherche colles les ligne suivantes <?php class Product extends ProductCore { /** @var boolean showitem */ public $showitem = false; protected $fieldsValidate = array( 'id_tax_rules_group' => 'isUnsignedId', 'id_manufacturer' => 'isUnsignedId', 'id_supplier' => 'isUnsignedId', 'id_category_default' => 'isUnsignedId', 'id_color_default' => 'isUnsignedInt', /* unsigned integer because its value could be 0 if the feature is disabled */ 'minimal_quantity' => 'isUnsignedInt', 'price' => 'isPrice', 'additional_shipping_cost' => 'isPrice', 'wholesale_price' => 'isPrice', 'on_sale' => 'isBool', 'online_only' => 'isBool', 'showitem' => 'isBool', 'ecotax' => 'isPrice', 'unit_price' => 'isPrice', 'unity' => 'isString', 'reference' => 'isReference', 'supplier_reference' => 'isReference', 'location' => 'isReference', 'width' => 'isUnsignedFloat', 'height' => 'isUnsignedFloat', 'depth' => 'isUnsignedFloat', 'weight' => 'isUnsignedFloat', 'out_of_stock' => 'isUnsignedInt', 'quantity_discount' => 'isBool', 'customizable' => 'isUnsignedInt', 'uploadable_files' => 'isUnsignedInt', 'text_fields' => 'isUnsignedInt', 'active' => 'isBool', 'available_for_order' => 'isBool', 'condition' => 'isGenericName', 'show_price' => 'isBool', 'ean13' => 'isEan13', 'upc' => 'isUpc', 'indexed' => 'isBool', 'cache_is_pack' => 'isBool', 'cache_has_attachments' => 'isBool' ); public function getFields() { parent::validateFields(); if (isset($this->id)) $fields['id_product'] = (int)($this->id); $fields['id_tax_rules_group'] = (int)($this->id_tax_rules_group); $fields['id_manufacturer'] = (int)($this->id_manufacturer); $fields['id_supplier'] = (int)($this->id_supplier); $fields['id_category_default'] = (int)($this->id_category_default); $fields['id_color_default'] = (int)($this->id_color_default); $fields['quantity'] = (int)($this->quantity); $fields['minimal_quantity'] = (int)($this->minimal_quantity); $fields['price'] = (float)($this->price); $fields['additional_shipping_cost'] = (float)($this->additional_shipping_cost); $fields['wholesale_price'] = (float)($this->wholesale_price); $fields['on_sale'] = (int)($this->on_sale); $fields['online_only'] = (int)($this->online_only); $fields['showitem'] = (int)($this->showitem); $fields['ecotax'] = (float)($this->ecotax); $fields['unity'] = pSQL($this->unity); $fields['unit_price_ratio'] = (float)($this->unit_price > 0 ? $this->price / $this->unit_price : 0); $fields['ean13'] = pSQL($this->ean13); $fields['upc'] = pSQL($this->upc); $fields['reference'] = pSQL($this->reference); $fields['supplier_reference'] = pSQL($this->supplier_reference); $fields['location'] = pSQL($this->location); $fields['width'] = (float)($this->width); $fields['height'] = (float)($this->height); $fields['depth'] = (float)($this->depth); $fields['weight'] = (float)($this->weight); $fields['out_of_stock'] = pSQL($this->out_of_stock); $fields['quantity_discount'] = (int)($this->quantity_discount); $fields['customizable'] = (int)($this->customizable); $fields['uploadable_files'] = (int)($this->uploadable_files); $fields['text_fields'] = (int)($this->text_fields); $fields['active'] = (int)($this->active); $fields['available_for_order'] = (int)($this->available_for_order); $fields['condition'] = pSQL($this->condition); $fields['show_price'] = (int)($this->show_price); $fields['indexed'] = 0; // Reset indexation every times $fields['cache_is_pack'] = (int)($this->cache_is_pack); $fields['cache_has_attachments'] = (int)($this->cache_has_attachments); $fields['cache_default_attribute'] = (int)($this->cache_default_attribute); $fields['date_add'] = pSQL($this->date_add); $fields['date_upd'] = pSQL($this->date_upd); return $fields; } } enregistres le fichier override/classes/product.php 4°) l'affichage dans le site alors maintenant il faut savoir ou tu veut afficher ton item ( phrase /images/ php /video etc...) pour ce faire tu ouvre un page produit du FO n"importe laquelle par exemple 1 er produit Ipod Nano et avec chrome ou firefox la ou tu veut mettre l'item tu click avec le bouton droit puis tu chois "inspecter élément et tu repere dans la sectoin en bas la balise que se touve juste avant ( voir images) moi je l'est mis apres "IMPRIMER" qui appartient au conteneur UL avec l id="usefull_link_block (pour IE il faut appuyer sur F12 et develloper le code en cliquant sur les +) voir image ci-dessous donc va dans thème/ton_thème/ et édites le fichier product.tpl et recherche usefull_link_block et apres la balise qui ferme le conteneur </ul> rajoute la condition+ce que tu veut afficher {if $product->showitem} <div class="showitem"> <p> ici j'affiche mon item</p> </div> {/if} Ou {if $product->showitem} si la case est cocher=vrai dans la base sql= 1 donc il affiche le conteneur qui suit <div id="showitem"> est mon conteneur avec l'id a déclarer dans le CSS pour la mise en forme ( couleur taille fond etc...) <p>blabla </p>pour ma phrase toi qui veut mètre du php si je reprend ton 1er post tu met a la place {php} include('/chemin/vers/leficher.php'); {/php} je ne suis pas sur de la balise {php} dans le tpl a verifié ^^ {esle} si le case n'est pas cocher=faux dans la base sql=0 donc il affiche le conteneur après ( qui sera cacher par le CSS ^^ avec la class .hidden) et </div> pour fermer le conteneur sauvegardes le fichier thème/ton_thème/product.tpl 4°) et enfin déclaration de l'id showitem dans le CSS va dans thème/ton_thème/css/ et édites le fichier global.css tu descend tout a la fin et tu rajoute #showitem { xxxxx; yyyyy; zzzzz;} ou xxx yyyy zzzz sont les variables pour la mise en forme séparé par des point-virgule et en fermant l'accolade après la dernière déclaration sauvegardes le fichier theme/ton_theme/css/global.css et la tu test avec les produits case cochée et case non cochée si ca fonctionne en rafraichissant tes pages avec F5 voila le résultat ( jai pas fait de mise en forme) Si tu as des problème pour placer ton item dans la fiche produit et avec le CSS ca ne devrait pas poser de problème fait moi des screen de ce que tu veut afficher le chemin du fichier a afficher et détails la mise en forme (taille couleur etc...) voilou je pense rien avoir oublier si j'ai commis des erreurs soyez indulgent et si quelqu'un peut dire si les étapes sont bonnes ca serai sympa aussi @++ Edit correction de la partie 3°) override de la classs product et correction de la partie 2°) merci Coeos.pro Loulou66 1 Link to comment Share on other sites More sharing options...
UDM-PRESTA Posted January 19, 2012 Author Share Posted January 19, 2012 Coucou loulou66, ouha bah j'ai de la lecture ! bon, je testes cela cette fin de semaine (au mieux samedi au plus dimanche), car avant je vais m'imprégner de tout cela pour bien saisir étape par étape du travail à réaliser. Bon sinon, envoies-moi en mp un lien sur lequel je peux te faire un don pour tout ce que tu as déjà fait ça sera mieux que des bisous Link to comment Share on other sites More sharing options...
UDM-PRESTA Posted January 21, 2012 Author Share Posted January 21, 2012 Coucou, avant de donner la juste valeur du don, j'ai suivi ce matin le tuto. Toutefois, un souci: si je coche la case dans le BO et que je sauvegarde (que ce soit juste "enregistrer" ou que je fasse "enregistrer et rester" c'est pareil), systématiquement la case se décoche et donc en FO je n'ai rien (pour tester j'ai gardé le code <p> ici j'affiche mon item</p> Tu as une idée du pourquoi du comment ? (j'ai refais le tuto 3 fois et toujours le même résultat) Link to comment Share on other sites More sharing options...
loulou66 Posted January 21, 2012 Share Posted January 21, 2012 coucou si tu est la demain on va passé avec skype ^^ je pe mp mon speudo @++ Loulou66 Link to comment Share on other sites More sharing options...
coeos.pro Posted January 21, 2012 Share Posted January 21, 2012 Bonjour, je n'ai pas tout lu en détail (gros pavé...) mais j'ai quelques conseils à donner : - ne JAMAIS utiliser {php} dans le smarty notemment pour des raisons de sécurité (pour un fichier php le code n'est pas visible, pour les tpl si) - afficher et cacher du code sont 2 choses différentes, "display:none" permet de ne pas afficher visuellement quelque chose, mais dès que l'on regarde le code c'est visible... - pour les requêtes, il ne faut pas mettre SELECT * FROM `ps_product` WHERE... mais SELECT * FROM `'._DB_PREFIX_.'product` WHERE ... sauf si tu travail dans easymyadmin ou il faut alors utiliser le préfixe des tables, si le préfixe est azerty_ : SELECT * FROM `azerty_product` WHERE... - si tu veux afficher une portion de code si ton produit appartient à une liste de produits alors met ceci dans le fichier tpl de ta page (product.tpl pour la page "produit") : Au lieu de mettre : {if ....} le code à afficher {else} <p class="hidden">rien</p> {/if} met tout simplement : {if ....} le code à afficher {/if} Link to comment Share on other sites More sharing options...
loulou66 Posted January 22, 2012 Share Posted January 22, 2012 coucou Merci pour tes conseils Coeos.pro oui pour afficher le fichier php je pense que {include file="chemin/fichier php"} sera mieux pour la base de donne vu que on modifie en direct on non dans un module je passe par "phpmyadmin" et lui injecte la requête en direct. pour if /If vi j'iai pas encore le réflexe ^^ @++ Loulou66 Link to comment Share on other sites More sharing options...
UDM-PRESTA Posted January 23, 2012 Author Share Posted January 23, 2012 Hello Loulou66, dès que j'ai le temps d'aller tester ça sur le PC de mon atelier, je te remonte mon retour de test du zip que tu m'as envoyé. Bonne journée et merci pour tes efforts. Bisous virtuel avant de recevoir le bisou en don Link to comment Share on other sites More sharing options...
typiac Posted February 15, 2012 Share Posted February 15, 2012 Je trouve ce tuto vraiment super intéressant mais j'ai le même problème que UDM-PRESTA, à savoir que la case Item se décoche à chaque fois. A noter que dans la base de données, lorsque je sélectionne 'product', je n'ai pas du tout de 'online_only', je l'ai donc mis à la fin... Link to comment Share on other sites More sharing options...
typiac Posted February 16, 2012 Share Posted February 16, 2012 Autant pour moi, je m'étais trompé de table... Pour autant, la case se décoche toujours à chaque enregistrement de la fiche produit... Link to comment Share on other sites More sharing options...
typiac Posted February 16, 2012 Share Posted February 16, 2012 Je viens de tester en mettant manuellement la valeur "1" sur la colonne "showitem" créée dans la base de données sur une fiche produit mais lorsque je check la fiche dans le BO, elle reste décochée et la div n'apparaît pas dans la fiche produit. J'ai également vérifié que la div était bien placée et c'est bon... J'avoue être un peu perdu! Link to comment Share on other sites More sharing options...
typiac Posted February 16, 2012 Share Posted February 16, 2012 Je note que pour ce bout de code que tu indiques pour le fichier AdminProducts.php: <tr> <td style="vertical-align:top;text-align:right;padding-right:10px;font-weight:bold;">'.$this->l('Show Item:').'</td> <td> <input style="float: left;" type="checkbox" name="showitem" id="showitem" value="1" '.($this->getFieldValue($obj, 'showitem') ? 'checked="checked" ' : '').' /> <label for="showitem" class="t"><img src="../img/admin/picture.gif" alt="'.$this->l('showitem').'" title="'.$this->l('showitem').'" style="float:left; padding:0px 5px 0px 5px" />'.$this->l('show item in your product page').'</label> </td> </tr> ...il n'y a pas de fonction onclick...est-ce normal? Link to comment Share on other sites More sharing options...
typiac Posted February 17, 2012 Share Posted February 17, 2012 Bon, là j'avoue que je suis complètement perdu... J'ai la même version de prestashop, j'ai testé le tuto en local, sur le theme par défaut, sans aucun module additionnel.... Quelqu'un a réussi la manoeuvre parce qu'il n'y a aucun retour! Link to comment Share on other sites More sharing options...
typiac Posted February 21, 2012 Share Posted February 21, 2012 Bon, finalement j'ai trouvé la solution à l'aide de cet excellent tuto. Le problème venait de l'override: http://www.webbax.ch/2011/06/24/comment-ajouter-un-nouveau-champ-sur-la-fiche-produit-et-dans-le-back-office-prestashop/ 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