Jump to content
sandra nanou

Champ personnalisé sur product-list

Recommended Posts

Bonjour à tous,

 

Je m'arrache les cheveux depuis plusieurs semaines. Je n'arrive pas à afficher des champs personnalisés sur ma liste produit.

Les champ sont bien présents en base (ps_product_lang) et s'affichent correctement sur la page produit (en back et front office).

 

Pour cela, j'ai modifier Override classes > Product.php :

class Product extends ProductCore
{
  	public $fab1;
	public $ref1;
	 
    public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)
    {
      	  Product::$definition['fields']['fab1'] = array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isString');
	  Product::$definition['fields']['ref1'] = array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isString');
	  
      parent::__construct($id_product, $full, $id_lang, $id_shop, $context);
    }
 
}

Modifier informations.tpl puis ajouter mes champs sur product.tpl :

{if isset ($product->fab1)}{$product->fab1|escape:'html':'UTF-8'}{else} - {/if} 
{if isset ($product->ref1)}{$product->ref1|escape:'html':'UTF-8'}{else} - {/if}

Pour ajouter ces champs à product list, j'ai modifier override>classes>Category.php :

  $sql = 'SELECT p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) AS quantity'.(Combination::isFeatureActive() ? ', IFNULL(product_attribute_shop.id_product_attribute, 0) AS id_product_attribute,
					product_attribute_shop.minimal_quantity AS product_attribute_minimal_quantity' : '').', pl.`description`, pl.`description_short`, pl.`available_now`,
					pl.`available_later`, pl.`link_rewrite`, pl.`fab1`, pl.`ref1`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, image_shop.`id_image` id_image,
					il.`legend` as legend, m.`name` AS manufacturer_name, cl.`name` AS category_default,
					DATEDIFF(product_shop.`date_add`, DATE_SUB("'.date('Y-m-d').' 00:00:00",
					INTERVAL '.(int)$nb_days_new_product.' DAY)) > 0 AS new, product_shop.price AS orderprice
				FROM `'._DB_PREFIX_.'category_product` cp
				LEFT JOIN `'._DB_PREFIX_.'product` p
					ON p.`id_product` = cp.`id_product`
				'.Shop::addSqlAssociation('product', 'p').
                (Combination::isFeatureActive() ? ' LEFT JOIN `'._DB_PREFIX_.'product_attribute_shop` product_attribute_shop
				ON (p.`id_product` = product_attribute_shop.`id_product` AND product_attribute_shop.`default_on` = 1 AND product_attribute_shop.id_shop='.(int)$context->shop->id.')':'').'
				'.Product::sqlStock('p', 0).'
				LEFT JOIN `'._DB_PREFIX_.'category_lang` cl
					ON (product_shop.`id_category_default` = cl.`id_category`
					AND cl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('cl').')
				LEFT JOIN `'._DB_PREFIX_.'product_lang` pl
					ON (p.`id_product` = pl.`id_product`
					AND pl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('pl').')
				LEFT JOIN `'._DB_PREFIX_.'image_shop` image_shop
					ON (image_shop.`id_product` = p.`id_product` AND image_shop.cover=1 AND image_shop.id_shop='.(int)$context->shop->id.')
				LEFT JOIN `'._DB_PREFIX_.'image_lang` il
					ON (image_shop.`id_image` = il.`id_image`
					AND il.`id_lang` = '.(int)$id_lang.')
				LEFT JOIN `'._DB_PREFIX_.'manufacturer` m
					ON m.`id_manufacturer` = p.`id_manufacturer`
				WHERE product_shop.`id_shop` = '.(int)$context->shop->id.'
					AND cp.`id_category` = '.(int)$this->id
                    .($active ? ' AND product_shop.`active` = 1' : '')
                    .($front ? ' AND product_shop.`visibility` IN ("both", "catalog")' : '')
                    .($id_supplier ? ' AND p.id_supplier = '.(int)$id_supplier : '');

Et modifier product-list.tpl :

{if isset($fab1)} {$product.fab1|escape:'html':'UTF-8'} {/if}
{if isset($ref1)} {$product.ref1|escape:'html':'UTF-8'} {/if}

rien se s'affiche !

 

Vous avez une idée de se que j'ai pu rater ??

 

Merci !

 

Sandra

 

Share this post


Link to post
Share on other sites

Bonjour,

 

Sans avoir éplucher ton code dans le détail (mais à vue de nez tout semble ok), je pense que ton erreur est là

 

{if isset($fab1)} {$product.fab1|escape:'html':'UTF-8'} {/if}
{if isset($ref1)} {$product.ref1|escape:'html':'UTF-8'} {/if}

 

Tu testes l'existence des variables $fab1 et $ref1... Ca ne colle pas.

Il faut que tu remplaces par 

{if isset($product.fab1)} {$product.fab1|escape:'html':'UTF-8'} {/if}
{if isset($product.ref1)} {$product.ref1|escape:'html':'UTF-8'} {/if}

Share this post


Link to post
Share on other sites

Merci beaucoup pour ta réponse, malheureusement le problème ne vient pas de là. 

Mes 2 variables ne sont renseignée, j'ai vérifié en mode {debug} mes variables n’existent pas.

D’ailleurs, si je n'ajoute que {$product.fab1|escape:'html':'UTF-8'}  dans product-list.tpl j'ai ce message d'erreur :

Notice: Undefined index: fab1 in /var/www/vhosts/xxx.fr/xxx/tools/smarty/sysplugins/smarty_internal_templatebase.php(157) : eval()'d code on line 346

 

Encore merci,

Sandra

Share this post


Link to post
Share on other sites

Tu as bien supprimé le fichier cache/class_index.php après avoir créé tes fichiers d'override ?

Share this post


Link to post
Share on other sites

J'ai trouvé ! Incompatibilité avec le module advanced search 4. Je vais contacter le développeur.

 

merci encore pour votre aide !

 

Sandra

Share this post


Link to post
Share on other sites

Ce module utilise déjà des overrides pour les mêmes modèles et contrôleurs j'imagine.

 

Pense à passer ton topic sur "[Résolu]"

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More