Olecorre Posted January 7, 2009 Share Posted January 7, 2009 Bonjour,Comment ajouter un colonne "ordre" pour les fabriquants ? nous avons notre propre marque et je souhaiterai quelle soit toujours en tête de la liste des fabriquants !Merci, je débute sous prestashop qui me plais beaucoup mais pas encore percé sont fonctionnementOlivier Link to comment Share on other sites More sharing options...
Olecorre Posted January 7, 2009 Author Share Posted January 7, 2009 Bon pour répondre à ma problématique voici ce que j'ai fait :J'ai ajouter un champ "ordre" à la table ps_manufacturer ALTER TABLE `ps_manufacturer` ADD `ordre` INT( 10 ) NOT NULL AFTER `date_upd` ; Puis j'ai saisie quelques fabricants dont notre marque et pour ce champ dans phpmyadmin je lui ai mis la valeur de 1 UPDATE `prestashop`.`ps_manufacturer` SET `ordre` = '1' WHERE `ps_manufacturer`.`id_manufacturer` =4 LIMIT 1 ; et dans le fichier "Manufacturer.php" à la ligne 132 j'ai modifier l'ordre : $sql.= ' ORDER BY m.ordre DESC, m.`name` ASC'.($p ? ' LIMIT '.((intval($p) - 1) * intval($n)).','.intval($n) : ''); Voila notre marque apparait en premier et les autres sont classés par ordre alphabétique Link to comment Share on other sites More sharing options...
guyk Posted May 6, 2009 Share Posted May 6, 2009 Pour ma part j'ai fait comme pour product et category (c'est quand meme moche) ajout d'un n. en debut de nom1.sony2.nintendoetcje pensais que c'était prévu eh ben non.j'ai du rajouter hideManufacturerPosition dans class/Manufacturer /** * Hide prefix used for position * * @param string $name name * @return string Name without position */ static public function hideManufacturerPosition($name) { return preg_replace('/^[0-9]+\./', '', $name); } /** * Return name from id * * @param integer $id_manufacturer Manufacturer ID * @return string name */ static public function getNameById($id_manufacturer) { $result = Db::getInstance()->getRow(' SELECT `name` FROM `'._DB_PREFIX_.'manufacturer` WHERE `id_manufacturer` = '.intval($id_manufacturer)); if (isset($result['name'])) return Manufacturer::hideManufacturerPosition($result['name']); return false; } et au passage j'ai aussi rajouté dans class/Product.php static public function getProductProperties($id_lang, $row) { .... $row['allow_oosp'] = Product::isAvailableWhenOutOfStock($row['out_of_stock']); /* ajout gk pour maro */ $row['manufacturer_name'] = Manufacturer::getNameById(intval($row['id_manufacturer'])); return $row; } pour avoir le manufacturer dans les résultats de recherches Link to comment Share on other sites More sharing options...
fonzie Posted November 15, 2010 Share Posted November 15, 2010 Bonjour,J'ai également fait quelque chose de pas très propre==> Ajout d'un espace devant le nom du fabricant que je souhaitais en 1er2 espace pour le second, 3 espaces pour le troisième etc ...Voilà si ça peut aider 1 Link to comment Share on other sites More sharing options...
hitomiie Posted January 24, 2013 Share Posted January 24, 2013 Bonjour, Quelqu'un saurait comment adapter la solution ci-dessous pour Prestashop 1.5? Merci de votre aide Pour ma part j'ai fait comme pour product et category (c'est quand meme moche) ajout d'un n. en debut de nom 1.sony 2.nintendo etc je pensais que c'était prévu eh ben non. j'ai du rajouter hideManufacturerPosition dans class/Manufacturer /** * Hide prefix used for position * * @param string $name name * @return string Name without position */ static public function hideManufacturerPosition($name) { return preg_replace('/^[0-9]+\./', '', $name); } /** * Return name from id * * @param integer $id_manufacturer Manufacturer ID * @return string name */ static public function getNameById($id_manufacturer) { $result = Db::getInstance()->getRow(' SELECT `name` FROM `'._DB_PREFIX_.'manufacturer` WHERE `id_manufacturer` = '.intval($id_manufacturer)); if (isset($result['name'])) return Manufacturer::hideManufacturerPosition($result['name']); return false; } et au passage j'ai aussi rajouté dans class/Product.php static public function getProductProperties($id_lang, $row) { .... $row['allow_oosp'] = Product::isAvailableWhenOutOfStock($row['out_of_stock']); /* ajout gk pour maro */ $row['manufacturer_name'] = Manufacturer::getNameById(intval($row['id_manufacturer'])); return $row; } pour avoir le manufacturer dans les résultats de recherches Link to comment Share on other sites More sharing options...
Florian D Posted February 28, 2013 Share Posted February 28, 2013 (edited) Bonjour, Quelqu'un saurait comment adapter la solution ci-dessous pour Prestashop 1.5? Merci de votre aide Prestashop 1.5.3.1 Créer ou éditer le fichier Manufacturer.php dans le dossier /override/classes/ Si votre fichier est vide vous pouvez remplacer tout le contenu par le suivant : <?php class Manufacturer extends ManufacturerCore { /** * Override core manufacturer getLink function */ public function getLink() { $this->name = Manufacturer::hideManufacturerPosition($this->name); return Tools::link_rewrite($this->name, false); } /** * Hide prefix used for position * * @param string $name name * @return string Name without position */ static public function hideManufacturerPosition($name) { return preg_replace('/^[0-9]+\./', '', $name); } /** * Return name from id * * @param integer $id_manufacturer Manufacturer ID * @return string name */ static protected $cacheName = array(); public static function getNameById($id_manufacturer) { if (!isset(self::$cacheName[$id_manufacturer])) { // We store result from db in a var $manufacturer_name = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue(' SELECT `name` FROM `' . _DB_PREFIX_ . 'manufacturer` WHERE `id_manufacturer` = ' . (int) $id_manufacturer . ' AND `active` = 1' ); // We check for if (isset($manufacturer_name)) self::$cacheName[$id_manufacturer] = Manufacturer::hideManufacturerPosition($manufacturer_name); else { return false; } } return self::$cacheName[$id_manufacturer]; } /** * Return manufacturers * * @param boolean $get_nb_products [optional] return products numbers for each * @return array Manufacturers */ public static function getManufacturers($get_nb_products = false, $id_lang = 0, $active = true, $p = false, $n = false, $all_group = false) { if (!$id_lang) $id_lang = (int) Configuration::get('PS_LANG_DEFAULT'); $sql = 'SELECT m.*, ml.`description`, ml.`short_description` FROM `' . _DB_PREFIX_ . 'manufacturer` m LEFT JOIN `' . _DB_PREFIX_ . 'manufacturer_lang` ml ON ( m.`id_manufacturer` = ml.`id_manufacturer` AND ml.`id_lang` = ' . (int) $id_lang . ' ) ' . Shop::addSqlAssociation('manufacturer', 'm'); if ($active) $sql .= ' WHERE m.`active` = 1'; $sql .= ' GROUP BY m.id_manufacturer ORDER BY m.`name` ASC' . ($p ? ' LIMIT ' . (((int) $p - 1) * (int) $n) . ',' . (int) $n : ''); $manufacturers = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql); if ($manufacturers === false) return false; if ($get_nb_products) { $sql_groups = ''; if (!$all_group) { $groups = FrontController::getCurrentCustomerGroups(); $sql_groups = (count($groups) ? 'IN (' . implode(',', $groups) . ')' : '= 1'); } foreach ($manufacturers as $key => $manufacturer) { // We use this foreach to rename manufacturers (delete 01. 02. from the manufacturer name ) $manufacturers[$key]['name'] = Manufacturer::hideManufacturerPosition($manufacturer['name']); $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS( 'SELECT p.`id_product` FROM `' . _DB_PREFIX_ . 'product` p ' . Shop::addSqlAssociation('product', 'p') . ' LEFT JOIN `' . _DB_PREFIX_ . 'manufacturer` as m ON (m.`id_manufacturer`= p.`id_manufacturer`) WHERE m.`id_manufacturer` = ' . (int) $manufacturer['id_manufacturer'] . ($active ? ' AND product_shop.`active` = 1 ' : '') . ($all_group ? '' : ' AND p.`id_product` IN ( SELECT cp.`id_product` FROM `' . _DB_PREFIX_ . 'category_group` cg LEFT JOIN `' . _DB_PREFIX_ . 'category_product` cp ON (cp.`id_category` = cg.`id_category`) WHERE cg.`id_group` ' . $sql_groups . ' )') ); $manufacturers[$key]['nb_products'] = count($result); } } $total_manufacturers = count($manufacturers); $rewrite_settings = (int) Configuration::get('PS_REWRITING_SETTINGS'); for ($i = 0; $i < $total_manufacturers; $i++) if ($rewrite_settings) $manufacturers[$i]['link_rewrite'] = Tools::link_rewrite($manufacturers[$i]['name'], false); else $manufacturers[$i]['link_rewrite'] = 0; return $manufacturers; } } Quelques explications : Ce code permet d'ordonner les marques (manufacturers) en ajoutant "01.", "02.", etc devant le nom de la marque, ceci ne devrait pas être utilisé avec un site proposant un grand nombre de marque, c'est une légère amélioration. L'override permet de reprendre (surcharger) des fonctions natives à Prestashop et d'en ajouter si nécessaire. (modif) La fonction getLink permet d'obtenir le lien de la page sans le numéro devant.. on utilise la fonction des posts précédents hideManufacturerPosition (ajout) La fonction hideManufacturerPosition : le regex permettant d'enlever le numéro de la marque ! (modif) La fonction getNameById renvoi le nom sans le préfixe "01.", etc. Utilisation du regex.. (modif) La fonction getManufacturers : renvoie le nom sans le préfixe dans une liste de marques. Edited February 28, 2013 by Florian D (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts