Page 1 sur 1

Onglet supplémentaire dans la fiche produit

MessagePublié: 16 Avr 2010, 04:16
par Imaxine
Suite à un souhait exprimé par CORSIDISCOUNT, voici une modification de code qui vous permet d'ajouter un onglet supplémentaire à la fiche produit.
J'ai nommé cet onglet "Caractéristiques", le nom est abrégé dans l'onglet de la fiche produit du catalogue par mesure de place (voir l'image de la fiche produit du catalogue, plus bas).

Il vous faut créer un champ supplémentaire dans la table "product_description" en injectant cette requête via l'onglet "sql" situé dans phpMyAdmin de votre base de données :

ALTER TABLE `product_description` ADD `characteristic` text collate utf8_bin NOT NULL;


Dans le fichier upload\admin\controller\catalog\product.php,
Chercher cette ligne :
Code: Tout sélectionner
      $this->data['entry_tags'] = $this->language->get('entry_tags');
et dessous ajouter celle-ci :
Code: Tout sélectionner
      $this->data['entry_characteristic'] = $this->language->get('entry_characteristic');

Dans le fichier upload\admin\language\french\catalog\product.php,
Ajouter cette ligne :
Code: Tout sélectionner
$_['entry_characteristic']    = 'Caractéristiques :';

Dans le fichier upload\admin\view\template\catalog\product_form.tpl,
chercher ces lignes :
Code: Tout sélectionner
            <tr>
              <td><?php echo $entry_description; ?></td>
              <td><textarea name="product_description[<?php echo $language['language_id']; ?>][description]" id="description<?php echo $language['language_id']; ?>"><?php echo isset($product_description[$language['language_id']]) ? $product_description[$language['language_id']]['description'] : ''; ?></textarea></td>
            </tr>
et dessous ajouter celles-ci :
Code: Tout sélectionner
            <tr>
              <td><?php echo $entry_characteristic; ?></td>
              <td><textarea name="product_description[<?php echo $language['language_id']; ?>][characteristic]"  cols="125" rows="5"><?php echo isset($product_description[$language['language_id']]) ? $product_description[$language['language_id']]['characteristic'] : ''; ?></textarea></td>
            </tr>


Dans le fichier upload\admin\model\catalog\product.php,
chercher cette ligne :
Code: Tout sélectionner
         $this->db->query("INSERT INTO " . DB_PREFIX . "product_description SET product_id = '" . (int)$product_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', description = '" . $this->db->escape($value['description']) . "'");
et remplacer la par celle-ci :
Code: Tout sélectionner
         $this->db->query("INSERT INTO " . DB_PREFIX . "product_description SET product_id = '" . (int)$product_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', description = '" . $this->db->escape($value['description']) . "', characteristic = '" . $this->db->escape($value['characteristic']) . "'");
chercher cette ligne :
Code: Tout sélectionner
         $this->db->query("INSERT INTO " . DB_PREFIX . "product_description SET product_id = '" . (int)$product_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', description = '" . $this->db->escape($value['description']) . "'");
et remplacer la par celle-ci :
Code: Tout sélectionner
         $this->db->query("INSERT INTO " . DB_PREFIX . "product_description SET product_id = '" . (int)$product_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', description = '" . $this->db->escape($value['description']) . "', characteristic = '" . $this->db->escape($value['characteristic']) . "'");
chercher cette ligne :
Code: Tout sélectionner
            'description'      => $result['description']
et remplacer la par celles-ci :
Code: Tout sélectionner
            'description'      => $result['description'],
            'characteristic'   => $result['characteristic']

Dans le fichier upload\catalog\controller\product\product.php
chercher ces lignes :
Code: Tout sélectionner
         if (isset($this->request->get['description'])) {
            $url .= '&description=' . $this->request->get['description'];
         }
et dessous ajouter celles-ci :
Code: Tout sélectionner
         if (isset($this->request->get['characteristic'])) {
            $url .= '&characteristic=' . $this->request->get['characteristic'];
         }
         
chercher ces lignes :
Code: Tout sélectionner
         if (isset($this->request->get['description'])) {
            $url .= '&description=' . $this->request->get['description'];
         }
            
et dessous ajouter celles-ci :
Code: Tout sélectionner
         if (isset($this->request->get['characteristic'])) {
            $url .= '&characteristic=' . $this->request->get['characteristic'];
         }

chercher cette ligne :
Code: Tout sélectionner
         $this->data['tab_description'] = $this->language->get('tab_description');
et dessous ajouter celle-ci :
Code: Tout sélectionner
         $this->data['tab_characteristic'] = $this->language->get('tab_characteristic');
chercher cette ligne :
Code: Tout sélectionner
         $this->data['description'] = html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8');
et dessous ajouter celle-ci :
Code: Tout sélectionner
         $this->data['characteristic'] = html_entity_decode($product_info['characteristic'], ENT_QUOTES, 'UTF-8');
chercher ces lignes :
Code: Tout sélectionner
         if (isset($this->request->get['description'])) {
            $url .= '&description=' . $this->request->get['description'];
         }
et dessous ajouter celles-ci :
Code: Tout sélectionner
         if (isset($this->request->get['characteristic'])) {
            $url .= '&characteristic=' . $this->request->get['characteristic'];
         }


Dans le fichier upload\catalog\language\french\product\product.php
ajouter cette ligne :
Code: Tout sélectionner
$_['tab_characteristic']  = 'Caract.';

Dans le fichier upload\catalog\view\theme\default\template\product\product.php
chercher cette ligne :
Code: Tout sélectionner
    <div class="tabs"><a tab="#tab_description"><?php echo $tab_description; ?></a><a tab="#tab_image"><?php echo $tab_image; ?></a><a tab="#tab_review"><?php echo $tab_review; ?></a><a tab="#tab_related"><?php echo $tab_related; ?></a></div>
et remplacer la par celle-ci :
Code: Tout sélectionner
    <div class="tabs"><a tab="#tab_description"><?php echo $tab_description; ?></a><a tab="#tab_characteristic"><?php echo $tab_characteristic; ?></a><a tab="#tab_image"><?php echo $tab_image; ?></a><a tab="#tab_review"><?php echo $tab_review; ?></a><a tab="#tab_related"><?php echo $tab_related; ?></a></div>
chercher cette ligne :
Code: Tout sélectionner
    <div id="tab_description" class="tab_page"><?php echo $description; ?></div>
et dessous ajouter celle-ci :
Code: Tout sélectionner
    <div id="tab_characteristic" class="tab_page"><?php echo $characteristic; ?></div>

Comme vous le constaterez sur l'image de l'admin je n'ai pas inclus l'éditeur HTML "ckeditor" parce que je n'ai pas voulu chercher mais aussi parce qu' il vous suffit de mettre votre texte en code source HTML pour qu'il soit interprété.

Voila ce que cela donne en images :

Re: Onglet supplémentaire dans la fiche produit

MessagePublié: 16 Avr 2010, 05:58
par CORSIDISCOUNT
Merci pour ton travail !!

Re: Onglet supplémentaire dans la fiche produit

MessagePublié: 16 Avr 2010, 06:32
par CORSIDISCOUNT
Et je confirme que cela fonctionne parfaitement une fois mis en place !!
Une fois de plus, merci beaucoup !

Re: Onglet supplémentaire dans la fiche produit

MessagePublié: 17 Avr 2010, 10:01
par Pilou
Bonjour,

J'ai une bête question:

Ces modifications sont-elles à refaire en cas de mise à jour d'Opencart ?

Merci d'avance

Re: Onglet supplémentaire dans la fiche produit

MessagePublié: 17 Avr 2010, 13:25
par Imaxine
Oui tout à fait puisqu'elles ne figurent pas dans la version originelle, ce sont un développement spécifique.

C'est pour cela qu'il est nécessaire que vous ayez un logiciel de comparaison de fichier. Personnellement j'utilise WinMerge qui est gratuit : http://winmerge.org/, et qui me convient. D'autres sont de meilleure facture mais payants.

Re: Onglet supplémentaire dans la fiche produit

MessagePublié: 17 Avr 2010, 15:05
par CORSIDISCOUNT
Moi j'utilise "Compare it" qui est pas mal également

Re: Onglet supplémentaire dans la fiche produit

MessagePublié: 24 Fév 2012, 15:13
par Christouphh
Bonjour,
j'ai tenté d'utiliser votre tutoriel pour mettre en place en nouvel onglet: "recette", seulement je rencontre quelque problème.

Premièrement, lorsque je suis sur la partie admin que je saisi du texte pour pour nouvel onglet, celui-ci n'est pas enregistré en bdd. (je n'ai aucun message d'erreur.)
[Edit]Pardon, le texte est bien enregistré en BDD [/edit]
Deuxièmement, lorsque je suis sur la partie Catalog, j'ai bien le nouvel onglet qui s'affiche mais pas le contenu.
Là par-contre j'ai un message d'erreur :
Notice: Undefined index: recette in ***/web/catalog/controller/product/product.php on line 303

qui correspond à cette ligne :
Code: Tout sélectionner
$this->data['recette'] = html_entity_decode($product_info['recette'], ENT_QUOTES, 'UTF-8');


Je confirme bien que j'ai modifié dans l'ensemble du tuto "characteristic" par "recette".

Je précise que je suis sur la version 1.5.1.


Merci d'avance de votre aide


/*-------------------- SOLUTION--------------*/
dans catalog\model\catalog\product.php

il faut ajouter cette ligne
Code: Tout sélectionner
'recette'         => $query->row['recette'],


ou par rapport au tuto :
Code: Tout sélectionner
'characteristic' => $query->row['characteristic'],

Re: Onglet supplémentaire dans la fiche produit

MessagePublié: 24 Fév 2012, 15:29
par Imaxine
Bonjour,

Pour ton problème, cela me fait penser qu'il doit manquer la variable "recette" dans catalog/model/product/product.php dans les requêtes "INSERT", "DELETE" et "UPDATE' qui mettent à jour la base de données

Re: Onglet supplémentaire dans la fiche produit

MessagePublié: 24 Fév 2012, 23:28
par Niecbaso
Super tutoriel en effet! Merci! :D

Re: Onglet supplémentaire dans la fiche produit

MessagePublié: 30 Juil 2012, 13:15
par dan
Hello!

Tout d'abord merci pour ce SUPER tuto ;)

J'ai une question, qui s'avère être assez ardue je penses. Comment faire pour que le champ ajouté à mes tabs soit administrables avec un éditeur WISIWIG? Je suis pas très friand des solutions coûteuse car je préfère apprendre à développer. J'ai vu que des postes proposaient un module et je ne trouve aucune doc à ce sujet..Du coup ça coince..Y a-t-il des cracks qui peuvent m'éclairer un peu sur le sujet ? 8-)

Bref je sais que je déterre quelque peu ce poste mais ça me semblerai intéressant d'ajouter cette petite touche de folie ;)

Un grand MERCI d'avance à tous ceux qui pourront m'aider! :mrgreen: