Odev Posted May 27, 2014 Share Posted May 27, 2014 (edited) Bonjour, je vous expose mon soucis : je doit mettre en place pour chaque attribut une infobulle qui décrit l'attribut. C'est à dire que lorsque l'on ajoute un attribut on rentre son nom, le nom public et un textarea pour la description qui apparaitra dans l'infobulle. Puis cela s'affichera sur la fiche produit à côté de son attribut (la mise en forme je m'en occuperais). Mon problème est que je ne sais pas comment récupérer une valeur dans la base de données ni comment l'insérer. J'ai rajouter un champs 'infobulle' de type TEXT dans la table 'attribute_lang'. Merci Edited June 24, 2014 by Odev (see edit history) Link to comment Share on other sites More sharing options...
Odev Posted June 3, 2014 Author Share Posted June 3, 2014 Besoin d'autre détails ? Link to comment Share on other sites More sharing options...
herve25 Posted June 3, 2014 Share Posted June 3, 2014 (edited) Bonjour, Quelle est votre version de prestashop ?Il faudrait également préciser si votre description s'applique au groupe d'attribut : ex : Couleur( Dans ce cas il faut modifier la table attribute_group_lang et surcharger le modèle AttributeGroup) Ou à la valeur de cet attribut : ex: jaune( Dans ce cas il faut modifier la table attribute_lang et surcharger le modèle Attribute ) Edited June 3, 2014 by herve25 (see edit history) Link to comment Share on other sites More sharing options...
Odev Posted June 3, 2014 Author Share Posted June 3, 2014 (edited) Version 1.5.6. Oui elle s'applique au groupe d'attribut et non au valeur. J'ai donc rajouter une colonne 'infos' dans la table _attibute_group_lang. Maintenant faut que je vois pour surcharger le modèle. Merci Edited June 3, 2014 by Odev (see edit history) Link to comment Share on other sites More sharing options...
Odev Posted June 3, 2014 Author Share Posted June 3, 2014 J'ai surcharger AttributeGroup dans override/classes. Quel fonction dois-je modifier ? Car j'ai vu qu'il y a la fonction native getAttributeGroup qui récupère normalement tous les données de la table attribute_group_lang donc ma colonne rajouté 'infos'. Que dois je faire à présent pour récupérer l'infos dans ma product.tpl ? Link to comment Share on other sites More sharing options...
herve25 Posted June 3, 2014 Share Posted June 3, 2014 Je dirais qu'il faudrait encore surcharger les fichiers suivants : classes/Product.php ( fonction getAttributesGroups : rajouter le nouveau champ dans la requête sql ) controller/front/ProductController.php ( fonction assignAttributesGroups() : renseigner la valeur du champ dans la variable $groups ) Ensuite tu pourra accéder à la nouvelle information depuis le fichier tpl via la variable $group.champ <div class="product_attributes"> {if isset($groups)} <!-- attributes --> <div id="attributes"> {foreach from=$groups key=id_attribute_group item=group} {if $group.attributes|@count} <fieldset class="attribute_fieldset"> <label class="attribute_label" for="group_{$id_attribute_group|intval}">{$group.name|escape:'htmlall':'UTF-8'} :</label> {assign var="groupName" value="group_$id_attribute_group"} <div class="attribute_list"> {if ($group.group_type == 'select')} <select name="{$groupName}" id="group_{$id_attribute_group|intval}" class="attribute_select" onchange="findCombination();getProductAttribute();{if $colors|@count > 0}$('#wrapResetImages').show('slow');{/if};"> {foreach from=$group.attributes key=id_attribute item=group_attribute} <option value="{$id_attribute|intval}"{if (isset($smarty.get.$groupName) && $smarty.get.$groupName|intval == $id_attribute) || $group.default == $id_attribute} selected="selected"{/if} title="{$group_attribute|escape:'htmlall':'UTF-8'}">{$group_attribute|escape:'htmlall':'UTF-8'}</option> {/foreach} </select> {elseif ($group.group_type == 'color')} <ul id="color_to_pick_list" class="clearfix"> {assign var="default_colorpicker" value=""} {foreach from=$group.attributes key=id_attribute item=group_attribute} <li{if $group.default == $id_attribute} class="selected"{/if}> <a id="color_{$id_attribute|intval}" class="color_pick{if ($group.default == $id_attribute)} selected{/if}" style="background: {$colors.$id_attribute.value};" title="{$colors.$id_attribute.name}" onclick="colorPickerClick(this);getProductAttribute();{if $colors|@count > 0}$('#wrapResetImages').show('slow');{/if}"> {if file_exists($col_img_dir|cat:$id_attribute|cat:'.jpg')} <img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$colors.$id_attribute.name}" width="20" height="20" /><br> {/if} </a> </li> {if ($group.default == $id_attribute)} {$default_colorpicker = $id_attribute} {/if} {/foreach} </ul> <input type="hidden" class="color_pick_hidden" name="{$groupName}" value="{$default_colorpicker}" /> {elseif ($group.group_type == 'radio')} {foreach from=$group.attributes key=id_attribute item=group_attribute} <input type="radio" class="attribute_radio" name="{$groupName}" value="{$id_attribute}" {if ($group.default == $id_attribute)} checked="checked"{/if} onclick="findCombination();getProductAttribute();{if $colors|@count > 0}$('#wrapResetImages').show('slow');{/if}"> {$group_attribute|escape:'htmlall':'UTF-8'}<br/> {/foreach} {/if} </div> </fieldset> {/if} {/foreach} </div> {/if} Link to comment Share on other sites More sharing options...
Odev Posted June 3, 2014 Author Share Posted June 3, 2014 Super ! Merci pour la réponse, je test ça de suite ! Link to comment Share on other sites More sharing options...
Odev Posted June 3, 2014 Author Share Posted June 3, 2014 Super !! ça fonctionne J'ai donc ajouter mon champs dans la table. J'ai surcharger les méthodes correspondant dans les fichiers : -Product, AttributeGroup et ProductController. Puis j'ai afficher dans mon product.tpl. Meerci beaucoup Herve Link to comment Share on other sites More sharing options...
Odev Posted June 3, 2014 Author Share Posted June 3, 2014 Ha oui j'ai oublier, il faut qu'il soit éditable dans les attributs. Je vais faire mes recherches mais si vous avez des propositions je suis preneur Link to comment Share on other sites More sharing options...
Odev Posted June 12, 2014 Author Share Posted June 12, 2014 (edited) Voila c'est bon chaque attribut à son infobulle qui s'affiche mais pour mettre du texte dans les infobulles, je doit aller dans la base de données et éditer via phpmyadmin. Mon besoin serait que dans le back office, quand je vais dans Catalogue -> Attributs et Valeurs -> et que je clique sur éditer un attribut, j'aurais une textarea pour pouvoir éditer mes infobulles. Dans quel fichier dois-je faire ses ajouts ? Merci. Edited June 12, 2014 by Odev (see edit history) Link to comment Share on other sites More sharing options...
herve25 Posted June 12, 2014 Share Posted June 12, 2014 Il faudrait que tu surcharge le fichier controllers/admin/AdminAttributesGroupsController.php Et rajouter ton nouveau champ dans la fonction renderForm() Link to comment Share on other sites More sharing options...
Odev Posted June 16, 2014 Author Share Posted June 16, 2014 Voila j'ai surchagrer le controller pourtant rien ne change, je l'ai mis dans override -> controllers -> admin. <?php class AdminAttributesGroupsController extends AdminAttributesGroupsControllerCore{ public function renderForm() { $this->table = 'attribute_group'; $this->identifier = 'id_attribute_group'; $group_type = array( array( 'id' => 'select', 'name' => $this->l('Drop-down list') ), array( 'id' => 'radio', 'name' => $this->l('Radio button') ), array( 'id' => 'color', 'name' => $this->l('Color') ), ); $this->fields_form = array( 'legend' => array( 'title' => $this->l('Attributes'), 'image' => '../img/admin/asterisk.gif' ), 'input' => array( array( 'type' => 'text', 'label' => $this->l('Name:'), 'name' => 'name', 'lang' => true, 'size' => 33, 'required' => true, 'hint' => $this->l('Invalid characters:').' <>;=#{}' ), array( 'type' => 'text', 'label' => $this->l('Public name:'), 'name' => 'public_name', 'lang' => true, 'size' => 33, 'required' => true, 'hint' => $this->l('Invalid characters:').' <>;=#{}', 'desc' => $this->l('Group name displayed to the customer') ), array( 'type' => 'text', 'label' => $this=>l('Infobulle :'), 'name' => 'infos', 'lang' => true, 'required' => true, 'hint' => $this->l('Invalid characters:').' <>;=#{}' ), array( 'type' => 'select', 'label' => $this->l('Attribute type:'), 'name' => 'group_type', 'required' => true, 'options' => array( 'query' => $group_type, 'id' => 'id', 'name' => 'name' ), 'desc' => $this->l('Choose the type of the attribute') ) ) ); if (Shop::isFeatureActive()) { $this->fields_form['input'][] = array( 'type' => 'shop', 'label' => $this->l('Shop association:'), 'name' => 'checkBoxShopAsso', ); } $this->fields_form['submit'] = array( 'title' => $this->l('Save '), 'class' => 'button' ); if (!($obj = $this->loadObject(true))) return; return parent::renderForm(); } } Merci beaucoup Hervé pour tes réponses ! Link to comment Share on other sites More sharing options...
herve25 Posted June 17, 2014 Share Posted June 17, 2014 Bonjour, A la fin de ta fonction remplace return parent::renderForm(); par return AdminController::renderForm(); De mon côté cela fonctionne bien après. Link to comment Share on other sites More sharing options...
Odev Posted June 18, 2014 Author Share Posted June 18, 2014 Bonjour, J'ai oublié de préciser dans le message précèdent : quand je me rendais dans la partie 'Attributs et Valeurs', j'avais une page blanche. J'ai remplacer le return dans la fonction et j'ai toujours une page blanche quand je vais dans la partie admin 'Attributs et Valeurs'. Tu as bien mis la surcharge dans override -> controllers -> admin ? Link to comment Share on other sites More sharing options...
herve25 Posted June 18, 2014 Share Posted June 18, 2014 Si tu as une page blanche, active l'affichage des erreurs cela t'en donnera la source ;-)Oui l'emplacement de la surcharge est bon Link to comment Share on other sites More sharing options...
Odev Posted June 18, 2014 Author Share Posted June 18, 2014 Je l'ai activé et je n'ai aucune erreur qui s'affiche Link to comment Share on other sites More sharing options...
Odev Posted June 18, 2014 Author Share Posted June 18, 2014 (edited) C'est bon j'ai trouver mon erreur à présent ça s'affiche ! 'label' => $this=>l('Infobulle :'), La flèche double à la place d'une flèche simple -> .. Erreur de frappe . Merci beaucoup Hervé pour ta patience et tes réponses. Tout fonctionne parfaitement à présent ! Je passe en résolu ! Edited June 18, 2014 by Odev (see edit history) Link to comment Share on other sites More sharing options...
Odev Posted June 19, 2014 Author Share Posted June 19, 2014 Oups dernier soucis, je récupère bien la valeur existante de l'infobulle dans mon formulaire en backoffice mais lorsque je rentre une nouvelle valeur, elle n'est pas pris en compte. Je suppose qu'il y a une fonction avec requête UPDATE à modifier pour prendre en compte mon infos mais je ne trouve pas cette requête. Link to comment Share on other sites More sharing options...
herve25 Posted June 19, 2014 Share Posted June 19, 2014 Il faut encore surcharger le modèle AttributeGroup et rajouter ton nouveau champ pour qu'il soit pris en compte lors des modifications du modèle. Link to comment Share on other sites More sharing options...
Odev Posted June 19, 2014 Author Share Posted June 19, 2014 (edited) Je penser l'avoir fait, je l'ai déclaré dans 'classes -> AttributeGroup.php'. /** @var string Name */ public $name; public $is_color_group; public $position; public $group_type; public $infos; /** @var string Public Name */ public $public_name; J'ai déclaré mon nouveau champ infos. J'arrive à le récupérer mais pas à le modifier. Edit: Je modifie et j'enregistre, il me dit 'Mise à jour réussi' pourtant il n'enregistre pas. Edited June 19, 2014 by Odev (see edit history) Link to comment Share on other sites More sharing options...
Odev Posted June 23, 2014 Author Share Posted June 23, 2014 (edited) Up pour le dernier petit soucis C'est ok, autant pour moi j'avais oublier de surcharger le tableau $definition en y ajoutant mon champ. Merci ! Edited June 24, 2014 by Odev (see edit history) 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