samsab Posted December 9, 2009 Share Posted December 9, 2009 Bonjour à tousbon beh, c'est un peu le [auto censure;-)] binzz ces caractéristiques techniques dés que l'on a des produits.....techniques.l'ordre d'affichage est alphanumérique; c'est bien mais à quoi cela sert? à rien.comment peut on modifier l'ordre d'affichage pour donner un peu de cohérence à tout ça?merci pour vos conseils.A+ Link to comment Share on other sites More sharing options...
Codigo Posted December 14, 2009 Share Posted December 14, 2009 Bonjour,ayant été confronté au même problème je propose ici une solution.* Pour modifier l'ordre d'affichage des produits sur le frontil faut modifier la classe Product (classes/Product.php) au niveau de la fonction getFrontFeaturesStaticC'est au niveau de cette fonction qu'est lancée la requête SQL pour la récupération des caractéristiquesIl est donc possible de trier :- en modifiant la requête SQL pour pouvoir y ajouter une clause ORDER BY- en récupérant le résultat de la requête SQL pour le manipuler dans la fonctionexemple : static public function getFrontFeaturesStatic($id_lang, $id_product) { // 1. Spécifier un ordre de tri (ici, tri par nom de la caractéristique) // 2. Récupérer le résultat de la requête dans le tableau $results $results = 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) . ' ORDER BY name ASC'); // 3. Manipuler le tableau $results // pour chaque caractéristique produit... foreach ($results as $result_line){ // ... effectuer le tri ICI // ... } // 4. Retourner le tableau trié return $results; } * Pour modifier l'ordre d'affichage des produits sur l'adminmême principe, il faut modifier la classe Product (classes/Product.php) au niveau de la fonction getFeaturesStaticRemarque : ici, la requête ne récupère pas le nom et la valeur des caractéristiques, donc pour un tri via SQL il faudra modifier la requête en entier (et pas seulement ajouter un ORDER BY). Link to comment Share on other sites More sharing options...
samsab Posted December 14, 2009 Author Share Posted December 14, 2009 merci pour ta réponsej'essaie de comprendre....A+ Link to comment Share on other sites More sharing options...
samsab Posted December 14, 2009 Author Share Posted December 14, 2009 ce qu'il faudrait (le rêve quoi), ce serait cette possibilité: pour chaque catégorie de produits (pour chaque famille de produits), on pourrait définir un certain nombre de caractéristiques à remplir de façon facultative en BO; le top serait de définir à ce moment l'ordre avec lequel ces caract. doivent s'afficher .exempleproduit pomme -> catégorie Fruit ->; caractéristiques: appellation, origine, insecticide soit 3 caractéristiquesproduit renault clio -> catégorie automobile -> caractéristiques: puissance fiscale, nombre de portes, cylindrées, accessoires, soit 4 caractéristiques toutes disjointes (ou non d'ailleurs) par rapport à mon premier produitce serait bien de pouvoir n 'avoir accès qu'à ces 4 là qd je rentre un nouveau véhicule en BO.qui a une idée Link to comment Share on other sites More sharing options...
Codigo Posted December 14, 2009 Share Posted December 14, 2009 Effectivement, ce serait une fonctionnalité très intéressante : pouvoir créer des "groupes de caractéristiques".Une bonne idée de module !!!:-)J'ai contourné le problème en nommant les caractéristiques avec un préfixe contenant le nom du groupe et l'ordre (un peu à la manière du nommage des catégories pour le tri des catégories)exemple : si je veux 2 groupes de caractéristiques, 1 pour les fruits, 1 pour les automobiles, je crée les caractéristiquesFRUIT.01.AppellationFRUIT.02.OrigineFRUIT.03....AUTO.01.Puissance fiscaleAUTO.02.Nombre de portesAUTO.03....ensuite, je trie les caractéristiques par ordre alphabétique (et donc par groupe), et je supprime le préfixe pour qu'il n'apparaisse pas dans l'affichage de la fiche produit (ni dans le front ni dans le back-office).Au niveau du back-office, toutes les caractéristiques apparaissent mais elles sont triées donc c'est un peu moins gênant pour la saisie. Link to comment Share on other sites More sharing options...
samsab Posted December 14, 2009 Author Share Posted December 14, 2009 est ce que FRUIT.01. disparait en FO? comme cela se passe pour les catégories? Link to comment Share on other sites More sharing options...
Codigo Posted December 15, 2009 Share Posted December 15, 2009 @samsab : oui, dans le front-office, le préfixe FRUIT.01. disparait.Au niveau du back-office, je laisse le préfixe dans l'onglet Catalogue >> Caractéristiques,par contre, dans l'onglet Caractéristiques de la fiche produit dans le back-office, je le supprime,mais je trie les caractéristiques pour avoir un tableau du type :FRUITOrigineAppellation[...]AUTOPuissance fiscaleNb de portes[...] Link to comment Share on other sites More sharing options...
samsab Posted December 15, 2009 Author Share Posted December 15, 2009 merci pour ta réponsepas ceratin de comprendre.aurais tu 2 ou 3 screen à mettre ici pour bien piger.comment peux tu "dans l’onglet Caractéristiques de la fiche produit dans le back-office, je le supprime,mais je trie les caractéristiques pour avoir un tableau du type :"A te lireA+ Link to comment Share on other sites More sharing options...
Codigo Posted December 15, 2009 Share Posted December 15, 2009 Voilà deux écrans du BO.Pour le front, tout se passe comme si il n'y avait pas de préfixe. Link to comment Share on other sites More sharing options...
samsab Posted December 15, 2009 Author Share Posted December 15, 2009 mercimais comment obtiens tu une séparation aussi sexy en BO?argh je viens d'essayer: FRUIT.01. apparait bien en FO. Link to comment Share on other sites More sharing options...
Codigo Posted December 15, 2009 Share Posted December 15, 2009 pour le BO, j'ai modifié la classe AdminProducts(fichier admin/tabs/AdminProducts.php, fonction displayFormFeatures() )pouru le FO, j'ai modifié la classe Product(fichier classes/Product.php, fonction getFrontFeaturesStatic() ) Link to comment Share on other sites More sharing options...
samsab Posted December 15, 2009 Author Share Posted December 15, 2009 crois tu possible de nous communiquer le détail des modif? :cheese: Link to comment Share on other sites More sharing options...
Codigo Posted December 15, 2009 Share Posted December 15, 2009 oui bien sur, je posterai ici les modifs que j'ai effectuées dès que j'aurais un peu de temps Link to comment Share on other sites More sharing options...
samsab Posted December 15, 2009 Author Share Posted December 15, 2009 superc'est sympa de ta part. Link to comment Share on other sites More sharing options...
distri Posted December 20, 2009 Share Posted December 20, 2009 ça m'intéresse également car je suis en train de chercher comment faire... mais je n'ai pas complétement résolu le pb.J'ai réussi à modifier sur le front office mais pas sur le back office...Quel est la modif exacte à faire sur pour changer l'apparition sur le BO et trier par ordre alphabétique et non par id Link to comment Share on other sites More sharing options...
tons28 Posted February 3, 2010 Share Posted February 3, 2010 up ? Link to comment Share on other sites More sharing options...
samsab Posted February 3, 2010 Author Share Posted February 3, 2010 up! :coolsmile: Link to comment Share on other sites More sharing options...
perrone971 Posted April 21, 2010 Share Posted April 21, 2010 Bonjour,Je suis intéressé par la proposition de Codigo.Mais il n'y a pas la solution.Qui peut m'aider Link to comment Share on other sites More sharing options...
samsab Posted April 21, 2010 Author Share Posted April 21, 2010 re re up :coolsmile: Link to comment Share on other sites More sharing options...
neastea18 Posted July 2, 2010 Share Posted July 2, 2010 Bonsoir, je me permets de faire un petit up car je suis trés intéressé par cette modificationMerci beaucoup Link to comment Share on other sites More sharing options...
corint1 Posted August 7, 2010 Share Posted August 7, 2010 Vous pouvez poster les deux fichiers. Je ne suis pas. êtes un débutant et d'essayer de reproduire ce que vous avez écrit ne résulte pas rien. désolé pour mon français, mais en utilisant Google Translate. crois tu possible de nous communiquer le détail des modif?Merci d'avance Link to comment Share on other sites More sharing options...
amaury Posted August 8, 2010 Share Posted August 8, 2010 Pour info (je part dans une direction différente), sur les catégories, pour les mettre dans l'ordre on utilise la méthode NUMERO.Nom de produit, ainsi la liste :5.Patate2.Huitre9.Banane se remet dans l'ordre. Il y a une fonction qui existe (je ne sais plus laquelle) pour afficher une chaine de caractère sans le "NUMERO." devant dont les catégories se servent.Il suffit donc d'afficher les caractéristiques par ordre alphabétique et d'appliquer cette fameuse fonction quand on affiche ces caractéristiques. Link to comment Share on other sites More sharing options...
corint1 Posted August 8, 2010 Share Posted August 8, 2010 acceptent de travailler en groupes, mais comment peuvent travailler sur les caractéristiques? l'image dans mon message ci-dessus montrent clairement que ne fonctionne pas. désolé pour mon français. Link to comment Share on other sites More sharing options...
amaury Posted August 8, 2010 Share Posted August 8, 2010 Oops, don't understand ^^ Link to comment Share on other sites More sharing options...
corint1 Posted August 9, 2010 Share Posted August 9, 2010 Your proposal does not work in features. want to get something similar in characteristicsFRUITOriginAppellation[...]AUTOPuissance taxNb of Portes[...]see previous posts. Codigo's Posted: 15 December 2009 11:47 PM. is that possible? he said yes, but never answered. please if you can help. or would no longer be a possibility. extratabs module can use but I want to be different for each product. Thanks in advance. I do not know if I was very explicit. sorry for English. Google Translate. as for French Link to comment Share on other sites More sharing options...
deniss Posted August 12, 2010 Share Posted August 12, 2010 Voici le code à utiliser, il fonctionne parfaitement pour moi sur la version 1.3.1.1: static public function getFrontFeaturesStatic($id_lang, $id_product) { $result = 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).' order by name'); $resultsArray = array(); foreach ($result AS $row) { $row['name'] = product::hideFeaturePosition($row['name']); $resultsArray[] = $row; } return $resultsArray; } static public function hideFeaturePosition($name) { return preg_replace('/^[0-9]+\./', '', $name); } Le mieux est de faire 1 fonction distincte, il ne faut pas oublier de mettre le "$result=" à la première ligne. Ensuite, .intval($id_product).' order by name'); Je n'ai pas mis ASC car c'est mis par défaut. Le mieux est de copier ce code et remplacer par l'ancien pour éviter les erreurs. Link to comment Share on other sites More sharing options...
corint1 Posted August 12, 2010 Share Posted August 12, 2010 Sorry, but the same result. I copied your text into Product.php but the result is the same. necessary to change and other file? I attach my file Product.php and you can check it. using 1.3.1. Thanks in advance.exactly what i need is to put in his answer Codigo. category features which contain more properties. I want the same in BO. possible? Product.php Link to comment Share on other sites More sharing options...
deniss Posted August 12, 2010 Share Posted August 12, 2010 re corant1, (je vais parler français comme c'est un topic français, mais dis-moi si tu es anglais)J'avais pas bien observer la forme de tes caractéristiques. En fait le code que tu a collé est bon, mais ce code va simplement enlever ce qui est avant une caractéristique seulement s'il commence par un nombre (nombre.texte). Or, tes caractéristiques sont de la forme texte.nombre.texte. C'est juste l'expression Regex à changer. En fait tu dois juste changer cette ligne: return preg_replace('/^[0-9]+\./', '', $name); Par: return preg_replace('/^[a-zA-Z0-9\.]+\./', '', $name); En fait le deuxième code est un peu mieux car il va virer tous ce qui se trouve avant le dernier "point" qu'il y ait des chiffres ou des lettres avant.Cette fois ça devrait être bon. Link to comment Share on other sites More sharing options...
corint1 Posted August 26, 2010 Share Posted August 26, 2010 Désolé de revenir, mais ne peut pas obtenir ce que fait Codigo (si vous voulez vérifier les photos de son message). Je ne veux pas être trop insistant, mais déclare que le changement et fichier admin / tabs / AdminProducts.php, displayFormFeatures Fonction () ... s'il vous plaît aider si vous pouvez obtenir la même chose que lui, pour les catégories caractéristiques ... Merci d'avance ... désolé pour le français (Google Translate)... Peut-être vous pouvez joindre votre fichier Product.php ... Link to comment Share on other sites More sharing options...
atout66 Posted October 26, 2010 Share Posted October 26, 2010 Bonjour, Voici un extrait de mon fichier juste en pratiquant la modification indiquée par deniss #25. Marche très bien pour moi sous 1.3.2 avec des catégories écrites comme ceci en BO:01.cat102.cat203.cat3etc.A partir de la ligne 2274 fonction getProductsProperties static public function getProductsProperties($id_lang, $query_result) { $resultsArray = array(); foreach ($query_result AS $row) if ($row2 = Product::getProductProperties($id_lang, $row)) $resultsArray[] = $row2; return $resultsArray; } /* * Select all features for a given language * * @param $id_lang Language id * @return array Array with feature's data */ /* MODIF DE STRATIC PUBLIC FUNCTION 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)); } */ /* MODIF ON TRIE LES CARACTERISTISQUES PERSO via 01; 02; 03, etc. */ static public function getFrontFeaturesStatic($id_lang, $id_product) { $result=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).' order by name'); $resultsArray = array(); foreach ($result AS $row) { $row['name'] = product::hideFeaturePosition($row['name']); $resultsArray[] = $row; } return $resultsArray; } static public function hideFeaturePosition($name) { return preg_replace('/^[0-9]+\./', '', $name); } /* FIN MODIF */ public function getFrontFeatures($id_lang) { return self::getFrontFeaturesStatic($id_lang, $this->id); } static public function getAttachmentsStatic($id_lang, $id_product) { return Db::getInstance()->ExecuteS(' SELECT * FROM '._DB_PREFIX_.'product_attachment pa LEFT JOIN '._DB_PREFIX_.'attachment a ON a.id_attachment = pa.id_attachment LEFT JOIN '._DB_PREFIX_.'attachment_lang al ON (a.id_attachment = al.id_attachment AND al.id_lang = '.intval($id_lang).') WHERE pa.id_product = '.intval($id_product)); } public function getAttachments($id_lang) { return self::getAttachmentsStatic($id_lang, $this->id); } /* ** Customization management */ Bonne chance ;-) Link to comment Share on other sites More sharing options...
Mister Denial Posted March 4, 2011 Share Posted March 4, 2011 Bonjour tout le monde,quelqu'un a une idée comment adapter cette solution pour 1.4 ?Merci d'avance pour votre aide!Daniel Link to comment Share on other sites More sharing options...
Peutiange Posted May 15, 2011 Share Posted May 15, 2011 si qqn à la soluce : je suis preneuse également Link to comment Share on other sites More sharing options...
Rixou Posted June 10, 2011 Share Posted June 10, 2011 La solution marche aussi pour prestashop 1.4.1 Rechercher dans Product.php situé dans le dossier classes la fonction getProduct Properties coller le code et ca marche. Link to comment Share on other sites More sharing options...
Thurdan Posted June 13, 2011 Share Posted June 13, 2011 FANTASTIQUE !!!Ca marche également chez moi en 1.4.0.17Des semaines que je cherchais !Merci, Merci, Merci. Link to comment Share on other sites More sharing options...
jolvil Posted June 19, 2011 Share Posted June 19, 2011 Ce qui serait bien c'est d'avoir un module fonctionnant comme attributeposition (permet le tri des attributs en BO et drag and drop) d’Henri Baeyens mais pour le tri des caracteristiques.Voir: pour ps13 et adapté par broceliande pour ps1.4 http://www.prestashop.com/forums/viewthread/67912/#464305 Link to comment Share on other sites More sharing options...
misterphil Posted June 21, 2012 Share Posted June 21, 2012 (edited) Pour ceux qui n'ont pas peur de mettre leur nez dans le code et dans la base, mais en mode facile, j'ai usé d'une autre procédure en deux étapes, sans trop de bricolage. Etape 1 : modification dans la base de données (via PHPMyAdmin) Pour définir la position de chaque caractéristique, il faut créer un nouvel enregistrement dans la table "features_position" id_feature_pos => champ auto-incrémenté id_feature : saisir l'id du champ éponyme de la table "feature_product" correspondant à la caractéristique position_feature : saisir le numéro de la position souhaitée pour la caractéristique Etape 2 : modification dans la page PHP située dans "classes/Product.php" 1 ligne à ajouter et 1 ligne à modifier dans le code : self::$_frontFeaturesCache[$id_product.'-'.$id_lang] = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' SELECT name, value, pf.id_feature FROM '._DB_PREFIX_.'feature_product pf LEFT JOIN '._DB_PREFIX_.'features_position fp ON fp.id_feature = pf.id_feature 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) . ' ORDER BY fp.position_feature ASC '); Edited June 21, 2012 by misterphil (see edit history) Link to comment Share on other sites More sharing options...
intissar Posted March 11, 2014 Share Posted March 11, 2014 pour le BO, j'ai modifié la classe AdminProducts (fichier admin/tabs/AdminProducts.php, fonction displayFormFeatures() ) pouru le FO, j'ai modifié la classe Product (fichier classes/Product.php, fonction getFrontFeaturesStatic() ) svp donne mois le code de modification Link to comment Share on other sites More sharing options...
intissar Posted March 11, 2014 Share Posted March 11, 2014 Voilà deux écrans du BO. Pour le front, tout se passe comme si il n'y avait pas de préfixe. svppp quels sont les modifications pour obtenir comme ces 2 images urgentttttttt svp 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