Jump to content

Ajouter une colonne Ordre au fabriquant


Olecorre

Recommended Posts

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 fonctionnement
Olivier

Link to comment
Share on other sites

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

  • 3 months later...

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

  • 1 year later...
  • 2 years later...

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

  • 1 month later...

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 by Florian D (see edit history)
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...