Jump to content
UDM-PRESTA

Ajout de php dans certaines fiches articles

Recommended Posts

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. :wub:

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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 ?

Share this post


Link to post
Share on other sites

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 :P

 

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

  • Like 1

Share this post


Link to post
Share on other sites

Tu vas me faire aimer le codage toi :wub: du moins m'inciter à plonger un peu plus dedans par la suite :D j'aime bien tes explications :D si en plus tu me détailles pour mieux comprendre et faire, là tu mérites bien plus qu'un bisou virtuel :lol:

Share this post


Link to post
Share on other sites

coucou

 

bon j'ai réussi hehe :D

 

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

Share this post


Link to post
Share on other sites

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

 

basesql.th.jpg

 

 

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

 

inspecterelement.th.jpg

 

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)

 

resultat1.th.jpg

 

 

resultat2.th.jpg

 

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 :P

 

Loulou66

  • Like 1

Share this post


Link to post
Share on other sites

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 :D

Share this post


Link to post
Share on other sites

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)

Share this post


Link to post
Share on other sites

coucou

 

si tu est la demain on va passé avec skype ^^ je pe mp mon speudo

 

@++

 

Loulou66

Share this post


Link to post
Share on other sites

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}

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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 :D

Share this post


Link to post
Share on other sites

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...

Share this post


Link to post
Share on other sites

Autant pour moi, je m'étais trompé de table... Pour autant, la case se décoche toujours à chaque enregistrement de la fiche produit...

Share this post


Link to post
Share on other sites

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!

Share this post


Link to post
Share on other sites

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?

Share this post


Link to post
Share on other sites

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!

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More