HARVIE Posted October 28, 2010 Share Posted October 28, 2010 Bonjour,- Il existe un module pour trier les catégories (en drag'n'drop)- Il existe un module pour trier les attributs et declinaisons (en drag'n'drop)Mais existe-il un module pour trier les caractéristiques?Merci,Cordialement,Hervé Link to comment Share on other sites More sharing options...
BVince Posted October 28, 2010 Share Posted October 28, 2010 Bonjour,Trier les caractéristiques reviendrait à court-circuiter l'utilisation des classes de Prestashop, je me suis donc plutôt penché sur la modification du Core de Prestashop et c'est faisable mais nécessite néanmoins des modifications importantes et à de multiples endroits, et aussi la modification d'une table (Feature). Link to comment Share on other sites More sharing options...
HARVIE Posted October 28, 2010 Author Share Posted October 28, 2010 Bonjour,Dans ce topic:http://www.prestashop.com/forums/viewthread/36968/P0/discussion_generale/gestion_de_lordre_daffichage_des_caracteristiquesCodigo proposait une solution:- avec même un groupe de caractéristiques(réponse #4)- et les caractéristiques triées sur le Front mais aussi sur le Back (réponse #8)J'ai testé cette solution pour le Front et ça fonctionne en faisant des modifs sur Product.php comme indiqué dans le topic. Maintenant je ne sais pas comment il a fait pour affiché les caractéristiques dans le BO comme sur les photos de la réponse #8Tu en penses quoi? Link to comment Share on other sites More sharing options...
BVince Posted October 28, 2010 Share Posted October 28, 2010 Je ne voyais pas ça comme ça, en effet dans cette solution, nous sommes devant ce que j'appelle "une rustine", cela fait ce qu'on lui demande mais bon... La solution que j'ai codé ce matin permet d'organiser les caractéristiques en Drag'n'Drop directement dans la liste des catégories, je trouve ça beaucoup plus propre. En attendant cette solution nécessite des modifications importantes... Link to comment Share on other sites More sharing options...
HARVIE Posted October 28, 2010 Author Share Posted October 28, 2010 Oui solution rustine en effet...votre solution fonctionne-telle ou est-elle toujours en cours de création? Link to comment Share on other sites More sharing options...
BVince Posted October 28, 2010 Share Posted October 28, 2010 Pour le moment je la teste sur différentes versions de Prestashop, je posterai ici dès que ça sera fini... Link to comment Share on other sites More sharing options...
BVince Posted October 28, 2010 Share Posted October 28, 2010 Détail des modifications à effectuer :1 - Ajouter un champ dans la table Feature : nom : featureOrder type : INT taille : 10 valeur par défaut : 99 2 - Modification du fichier "Feature.php" dans le dossier "Classes" :Fonction getFields :AVANT : public function getFields() { return array('id_feature' => NULL); } APRES : public function getFields() { //MODIFIY BY BVINCE return array('id_feature' => NULL, 'featureOrder' => intval($this->featureOrder)); } Fonction getFeatures :AVANT : static public function getFeatures($id_lang) { return Db::getInstance()->ExecuteS(' SELECT * FROM `'._DB_PREFIX_.'feature` f LEFT JOIN `'._DB_PREFIX_.'feature_lang` fl ON (f.`id_feature` = fl.`id_feature` AND fl.`id_lang` = '.intval($id_lang).') ORDER BY fl.`name` ASC'); } APRES : static public function getFeatures($id_lang) { //MODIFIY BY BVINCE return Db::getInstance()->ExecuteS(' SELECT * FROM `'._DB_PREFIX_.'feature` f LEFT JOIN `'._DB_PREFIX_.'feature_lang` fl ON (f.`id_feature` = fl.`id_feature` AND fl.`id_lang` = '.intval($id_lang).') ORDER BY f.`featureOrder`, fl.`name` ASC'); } 3 - Modification du fichier "AdminFeatures.php" dans le dossier "admin/tabs/" :Fonction __construct : AVANT : public function __construct() { $this->adminFeaturesValues = new AdminFeaturesValues(); $this->table = 'feature'; $this->className = 'Feature'; $this->lang = true; $this->edit = true; $this->delete = true; $this->fieldsDisplay = array( 'name' => array('title' => $this->l('Name'), 'width' => 128), 'value' => array('title' => $this->l('Values'), 'width' => 255, 'orderby' => false, 'search' => false)); parent::__construct(); } APRES : public function __construct() { $this->adminFeaturesValues = new AdminFeaturesValues(); $this->table = 'feature'; $this->className = 'Feature'; $this->lang = true; $this->edit = true; $this->delete = true; $this->_defaultOrderBy = false; $this->_orderBy = "featureOrder"; $this->fieldsDisplay = array( 'featureOrder' => array('order' => $this->l('Order'), 'width' => 20, 'orderby' => false), 'name' => array('title' => $this->l('Name'), 'width' => 128, 'orderby' => false), 'value' => array('title' => $this->l('Values'), 'width' => 255, 'orderby' => false, 'search' => false)); parent::__construct(); } Fonction displayList: Après global $currentIndex; Ajouter //ADD BY BVINCE if(isset($_POST['updateOrganization'])) { $tabOrganization = explode(",", $_POST['updateOrganization']); $i=1; foreach($tabOrganization as $k=>$organization) { $tabIdFeature = explode("_", $organization); $orderFeature = $tabIdFeature[1]; Db::getInstance()->Execute('UPDATE '._DB_PREFIX_.'feature SET featureOrder='.$i.' WHERE id_feature='.$orderFeature); $i++; } } echo ''; echo ''; echo ' function SortableElements() { $("#sortable").sortable({ opacity: 0.6, cursor: "move"}); $("#sortable").disableSelection(); } $(function() { $("#sortable").sortable({ opacity: 0.6, cursor: "move", update: function() { $.ajax({ type: "POST", async: true, cache: false, data: "updateOrganization="+$(this).sortable("toArray") }); [spam-filter]); $("#sortable").disableSelection(); }); '; //*************** Pensez à remettre le mot SCRIPT dans le bon sens, je l'ai écris à l'envers pour pas qu'il soit shooté par le forumA suivre... Link to comment Share on other sites More sharing options...
BVince Posted October 28, 2010 Share Posted October 28, 2010 Repérer le code foreach ($this->_list AS $tr) { $id = intval($tr['id_'.$this->table]); echo ' <input type="checkbox" name="'.$this->table.'Box[]" value="'.$id.'" class="noborder" /> '.$tr['name'].' <input type="checkbox" name="checkme" class="noborder"></th> '.$this->l('Value').''.$this->l('Actions').'<input type="checkbox" name="feature_value'.$id.'Box[]" value="'.$feature['id_feature_value'].'" class="noborder" /></td> '.$feature['value'].' token.'"> l('Edit').'" title="'.$this->l('Edit').'" /> token.'" onclick="return confirm(\''.$this->l('Delete value', __CLASS__, true, false).' #'.$feature['id_feature_value'].'?\');"> l('Delete').'" title="'.$this->l('Delete').'" /> '.$this->l('No values defined').' <input type="Submit" class="button" name="submitDelfeature_value" value="'.$this->l('Delete selection').'" onclick="changeFormParam(this.form, \'?tab=AdminFeatures\', '.$id.'); return confirm(\''.$this->l('Delete selected items?', __CLASS__, true, false).'\');" /> '; echo ' table.'='.$id.'&update;'.$this->table.'&token;='.$this->token.'"> l('Edit').'" title="'.$this->l('Edit').'" /> table.'='.$id.'&delete;'.$this->table.'&token;='.$this->token.'" onclick="return confirm(\''.$this->l('Delete item', __CLASS__, true, false).' #'.$id.'?\');"> l('Delete').'" title="'.$this->l('Delete').'" /> '; } A suivre... Link to comment Share on other sites More sharing options...
BVince Posted October 28, 2010 Share Posted October 28, 2010 et le remplacer par ceci : > //MODIFIY BY BVINCE echo ''; echo '</pre> <ul>'; foreach ($this->_list AS $tr) { $id = intval($tr['id_'.$this->table]); $order = intval($tr['featureOrder']); echo ' <input type="checkbox" name="'.$this->table.'Box[]" value="'.$id.'" class="noborder" />'.$tr['name'].' <input type="checkbox" name="checkme" class="noborder"></th> '.$this->l('Value').''.$this->l('Actions').'<input type="checkbox" name="feature_value'.$id.'Box[]" value="'.$feature['id_feature_value'].'" class="noborder" /></td> '.$feature['value'].' token.'"> l('Edit').'" title="'.$this->l('Edit').'" /> token.'" onclick="return confirm(\''.$this->l('Delete value', __CLASS__, true, false).' #'.$feature['id_feature_value'].'?\');"> l('Delete').'" title="'.$this->l('Delete').'" /> '.$this->l('No values defined').' <input type="Submit" class="button" name="submitDelfeature_value" value="'.$this->l('Delete selection').'" onclick="changeFormParam(this.form, \'?tab=AdminFeatures\', '.$id.'); return confirm(\''.$this->l('Delete selected items?', __CLASS__, true, false).'\');" /> table.'='.$id.'&update;'.$this->table.'&token;='.$this->token.'"> l('Edit').'" title="'.$this->l('Edit').'" /> table.'='.$id.'&delete;'.$this->table.'&token;='.$this->token.'" onclick="return confirm(\''.$this->l('Delete item', __CLASS__, true, false).' #'.$id.'?\');"> l('Delete').'" title="'.$this->l('Delete').'" /> '; } echo '</ul>';<br>echo '';<br>//****************************** A suivre... Link to comment Share on other sites More sharing options...
BVince Posted October 28, 2010 Share Posted October 28, 2010 3 - Modification du fichier "Product.php" dans le dossier "Classes" :Fonction getFrontFeaturesStatic: AVANT : static public function getFrontFeaturesStatic($id_lang, $id_product) { return Db::getInstance()->ExecuteS(' SELECT name, value, pf.id_feature FROM '._DB_PREFIX_.'feature_product pf LEFT JOIN '._DB_PREFIX_.'feature_lang fl ON (fl.id_feature = pf.id_feature AND fl.id_lang = '.intval($id_lang).') LEFT JOIN '._DB_PREFIX_.'feature_value_lang fvl ON (fvl.id_feature_value = pf.id_feature_value AND fvl.id_lang = '.intval($id_lang).') WHERE pf.id_product = '.intval($id_product)); } APRES : static public function getFrontFeaturesStatic($id_lang, $id_product) { //MODIFIY BY BVINCE return Db::getInstance()->ExecuteS(' SELECT name, value, pf.id_feature FROM '._DB_PREFIX_.'feature_product pf LEFT JOIN '._DB_PREFIX_.'feature f ON (f.id_feature = pf.id_feature) INNER JOIN '._DB_PREFIX_.'feature_lang fl ON (fl.id_feature = pf.id_feature AND fl.id_lang = '.intval($id_lang).') LEFT JOIN '._DB_PREFIX_.'feature_value_lang fvl ON (fvl.id_feature_value = pf.id_feature_value AND fvl.id_lang = '.intval($id_lang).') WHERE pf.id_product = '.intval($id_product).' ORDER BY f.`featureOrder` ASC'); } 4 - Modification du fichier "AdminTab.php" dans le dossier "Classes" :Fonction getList: Trouver la ligne : $this->_orderBy = $orderBy; la remplacer par : if($this->_orderBy) $orderBy = $this->_orderBy; else $this->_orderBy = $orderBy; Il faut aussi ajouter les 2 fichier js ci-joint et les mettre dans votre dossier js/ puis transférer l'image move.png dans le dossier img/admin/ de votre site.Et voilà, je crois que j'ai tout mis, je pense néanmoins que ce n'est pas à faire directement sur le serveur en production.!!!!! THE END !!!!! js.zip Link to comment Share on other sites More sharing options...
HARVIE Posted November 2, 2010 Author Share Posted November 2, 2010 Merci pour votre réponse...Nous allons essayer cela...Petite question vous avez écrit "Ajouter un champ dans la table Feature". Ou devons-nous ajouter cela?Merci, Link to comment Share on other sites More sharing options...
BVince Posted November 2, 2010 Share Posted November 2, 2010 Dans la base de données, il y a une table "Feature" dans laquelle il faut ajouter le champ en question Link to comment Share on other sites More sharing options...
HARVIE Posted November 5, 2010 Author Share Posted November 5, 2010 Je n'ai toujours pas eu accès à la BDD donc je n'ai pas pu tester ces modifications mais merci d'avance pour cela...Au fait je viens d'installer le module Compte client et il est vraiment super... Link to comment Share on other sites More sharing options...
leeloo Posted November 5, 2010 Share Posted November 5, 2010 Ou trouver ce module Compte Client ? Link to comment Share on other sites More sharing options...
BVince Posted November 5, 2010 Share Posted November 5, 2010 Pour modifier la table, tu peux aussi lancer une simple requête, soit en PHP ou avec un outil comme PhpMyAdmin ou SQLYOg :Voici la syntaxe SQL : ALTER TABLE TONPREFIX_feature ADD(featureOrder INT(10) NOT NULL default 99) @+ Link to comment Share on other sites More sharing options...
HARVIE Posted November 5, 2010 Author Share Posted November 5, 2010 Tu peux trouver ce module sur http://developpement.cc-web.fr/ Link to comment Share on other sites More sharing options...
Shoghi Posted November 7, 2010 Share Posted November 7, 2010 Bonsoir,Cette modification de code est-elle compatible avec PS 1.3.1.1?J'ai adapté tout le code, mais la page caractéristique est complètement vide. Pas de message d'erreur.Aurais-je oublié qqch?Merci pour votre retour.Sho... C'est dommage de Prestashop n'a pas intégré cela de base, car il y a des centaines d'utilisateurs comme moi qui utilisent énormément de caractéristiques (shop computer et Télécoms) Link to comment Share on other sites More sharing options...
BVince Posted November 7, 2010 Share Posted November 7, 2010 Elle est compatible à partir de 1.2.X, donnez moi des accès FTP en MP, je ferais les vérifications et modifications pour que cela fonctionne... Link to comment Share on other sites More sharing options...
phar Posted February 5, 2011 Share Posted February 5, 2011 Bonjour, BVince.la solution est-elle compatible 1.3.3.0? quelqu'un l'aurait essayé sur cette version? avant de me lancer... merci. Link to comment Share on other sites More sharing options...
BVince Posted February 5, 2011 Share Posted February 5, 2011 Bonjour,Je viens de faire une installation de ce code sur une 1.3.5 et ça fonctionne sans problèmes... Link to comment Share on other sites More sharing options...
phar Posted February 7, 2011 Share Posted February 7, 2011 Bonjour,je viens de faire les manips, j'ai une page vide dans l'onglet "Caractéristiques" du Catalogue... Les caractéristiques des fiches techniques sont encore plus désordonnées qu'avant.J'ai vérifié mes manips, mais je ne vois pas. Je suis en 1.3.3.0.Je vais prendre l'air... 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