Onglet supplémentaire dans la fiche produit

Programmation, discussions et suggestions pour l'amélioration de OpenCart

Onglet supplémentaire dans la fiche produit

Messagepar Imaxine » 16 Avr 2010, 04:16

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 :
Pièces jointes
characteristic_admin.png
characteristic_admin.png (77.3 Kio) Consulté 11402 fois
characteristic_catalog.png
characteristic_catalog.png (172.59 Kio) Consulté 11404 fois
Imaxine
 
Messages: 3023
Inscrit le: 27 Juil 2009, 19:28

Re: Onglet supplémentaire dans la fiche produit

Messagepar CORSIDISCOUNT » 16 Avr 2010, 05:58

Merci pour ton travail !!
V 1.4.7 Fr
CORSIDISCOUNT
 
Messages: 19
Inscrit le: 07 Avr 2010, 12:20

Re: Onglet supplémentaire dans la fiche produit

Messagepar CORSIDISCOUNT » 16 Avr 2010, 06:32

Et je confirme que cela fonctionne parfaitement une fois mis en place !!
Une fois de plus, merci beaucoup !
V 1.4.7 Fr
CORSIDISCOUNT
 
Messages: 19
Inscrit le: 07 Avr 2010, 12:20

Re: Onglet supplémentaire dans la fiche produit

Messagepar Pilou » 17 Avr 2010, 10:01

Bonjour,

J'ai une bête question:

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

Merci d'avance
OpenCart v1.4.8b Fr - O2Switch
Avatar de l’utilisateur
Pilou
 
Messages: 42
Inscrit le: 14 Avr 2010, 10:36
Localisation: Belgique

Re: Onglet supplémentaire dans la fiche produit

Messagepar Imaxine » 17 Avr 2010, 13:25

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.
Imaxine
 
Messages: 3023
Inscrit le: 27 Juil 2009, 19:28

Re: Onglet supplémentaire dans la fiche produit

Messagepar CORSIDISCOUNT » 17 Avr 2010, 15:05

Moi j'utilise "Compare it" qui est pas mal également
V 1.4.7 Fr
CORSIDISCOUNT
 
Messages: 19
Inscrit le: 07 Avr 2010, 12:20

Re: Onglet supplémentaire dans la fiche produit

Messagepar Christouphh » 24 Fév 2012, 15:13

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'],
Dernière édition par Christouphh le 24 Fév 2012, 15:42, édité 4 fois au total.
OpenCart 1.5.1 || template : defaut
Christouphh
 
Messages: 4
Inscrit le: 08 Déc 2011, 23:01

Re: Onglet supplémentaire dans la fiche produit

Messagepar Imaxine » 24 Fév 2012, 15:29

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
Imaxine
 
Messages: 3023
Inscrit le: 27 Juil 2009, 19:28

Re: Onglet supplémentaire dans la fiche produit

Messagepar Niecbaso » 24 Fév 2012, 23:28

Super tutoriel en effet! Merci! :D
Vs Opencart: OpenCart v1.5.1Fr
Hébergeur OVH
Niecbaso
 
Messages: 18
Inscrit le: 22 Fév 2012, 00:24

Re: Onglet supplémentaire dans la fiche produit

Messagepar dan » 30 Juil 2012, 13:15

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:
Débutant sur Opencart... Mais ne m'appelez pas noob s'il vous plaît ;)

hébergeur : oxito
version : 1.5.1 VERSION FRANCAISE (FR)
dan
 
Messages: 37
Inscrit le: 16 Oct 2010, 17:32


Retour vers Développement

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit et 2 invité(s)

Copyright © 2009-2013 OpenCart France - Tous droits réservés