Jump to content

[presque résolu] Ajout d'un champ Description dans Produit


Recommended Posts

Bonjour,

 

Je cherche à ajouter un deuxième champ Description dans la fiche Produit.

 

J'ai suivi le tutoriel suivant :

 

http://www.webbax.ch...ice-prestashop/

 

- Ajout d'un champ description_sp dans la table ps_product_lang

- Création d'un fichier /override/classes/Product.php surchargeant uniquement les bonnes fonctions

- Modification du fichier /admin/tabs/AdminProduct.php pour ajouter le champs dans le formulaire du BO

- Modification du fichier /themes/mon_theme/product.php

 

Dans la partie Préférence, j'ai désactivé le cache.

 

 

Je visualise bien le nouveau champ dans le Back-office et dans le Front-Office.

 

Si j'alimente directement le contenu du champ dans la BDD et que je consulte le produit, le nouveau champ affiche bien le contenu.

 

Par contre, si je modifie le champ depuis la back-office et que je clique sur Sauvegarder, la modif n'est pas prise en compte dans la BDD.

 

 

J'ai tout vérifié 15 fois et je sèche.

 

Quelqu'un aurait-il une piste ? Quel endroit ais-je oublier de mettre à jour pour tenir compte de l'update dans la Back-office ?

 

Toute aide serait grandement appréciée.

 

 

 

Code du fichier /override/classes/Product.php :

 


<?php
/*
* 2007-2011 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to [email protected] so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
*  @author PrestaShop SA <[email protected]>
*  @copyright  2007-2011 PrestaShop SA
*  @version  Release: $Revision: 7798 $
*  @license	http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
*  International Registered Trademark & Property of PrestaShop SA
*/

define('_CUSTOMIZE_FILE_', 0);
define('_CUSTOMIZE_TEXTFIELD_', 1);

class Product extends ProductCore
{

/** @var string description_sp*/
public		  $description_sp;	

protected $fieldsValidateLang = array(
	'meta_description' => 'isGenericName',
	'meta_keywords' => 'isGenericName',
	'meta_title' => 'isGenericName',
	'link_rewrite' => 'isLinkRewrite',
	'name' => 'isCatalogName',
	'description' => 'isString',
	'description_short' => 'isString',
	'description_sp' => 'isString',
	'available_now' => 'isGenericName',
	'available_later' => 'IsGenericName');


/**
* Check then return multilingual fields for database interaction
*
* @return array Multilingual fields
*/
public function getTranslationsFieldsChild()
{
	self::validateFieldsLang();

	$fieldsArray = array('meta_description', 'meta_keywords', 'meta_title', 'link_rewrite', 'name', 'available_now', 'available_later');
	$fields = array();
	$languages = Language::getLanguages(false);
	$defaultLanguage = Configuration::get('PS_LANG_DEFAULT');
	foreach ($languages as $language)
	{
		$fields[$language['id_lang']]['id_lang'] = $language['id_lang'];
		$fields[$language['id_lang']][$this->identifier] = (int)($this->id);
		$fields[$language['id_lang']]['description'] = (isset($this->description[$language['id_lang']])) ? pSQL($this->description[$language['id_lang']], true) : '';
		$fields[$language['id_lang']]['description_short'] = (isset($this->description_short[$language['id_lang']])) ? pSQL($this->description_short[$language['id_lang']], true) : '';
		$fields[$language['id_lang']]['description_sp'] = (isset($this->description_sp[$language['id_lang']])) ? pSQL($this->description_sp[$language['id_lang']], true) : '';			
		foreach ($fieldsArray as $field)
		{
			if (!Validate::isTableOrIdentifier($field))
				die(Tools::displayError());

			/* Check fields validity */
			if (isset($this->{$field}[$language['id_lang']]) AND !empty($this->{$field}[$language['id_lang']]))
				$fields[$language['id_lang']][$field] = pSQL($this->{$field}[$language['id_lang']]);
			elseif (in_array($field, $this->fieldsRequiredLang))
			{
				if ($this->{$field} != '')
					$fields[$language['id_lang']][$field] = pSQL($this->{$field}[$defaultLanguage]);
			}
			else
				$fields[$language['id_lang']][$field] = '';
		}
	}
	return $fields;
}


/**
* Get new products
*
* @param integer $id_lang Language id
* @param integer $pageNumber Start from (optional)
* @param integer $nbProducts Number of products to return (optional)
* @return array New products
*/
public static function getNewProducts($id_lang, $pageNumber = 0, $nbProducts = 10, $count = false, $orderBy = NULL, $orderWay = NULL)
{
	if ($pageNumber < 0) $pageNumber = 0;
	if ($nbProducts < 1) $nbProducts = 10;
	if (empty($orderBy) || $orderBy == 'position') $orderBy = 'date_add';
	if (empty($orderWay)) $orderWay = 'DESC';
	if ($orderBy == 'id_product' OR $orderBy == 'price' OR $orderBy == 'date_add')
		$orderByPrefix = 'p';
	elseif ($orderBy == 'name')
		$orderByPrefix = 'pl';
	if (!Validate::isOrderBy($orderBy) OR !Validate::isOrderWay($orderWay))
		die(Tools::displayError());

	$groups = FrontController::getCurrentCustomerGroups();
	$sqlGroups = (count($groups) ? 'IN ('.implode(',', $groups).')' : '= 1');

	if ($count)
	{
		$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
		SELECT COUNT(`id_product`) AS nb
		FROM `'._DB_PREFIX_.'product` p
		WHERE `active` = 1
		AND DATEDIFF(p.`date_add`, DATE_SUB(NOW(), INTERVAL '.(Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20).' DAY)) > 0
		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` '.$sqlGroups.'
		)');
		return (int)($result['nb']);
	}

	$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
	SELECT p.*, pl.`description`, pl.`description_short`, pl.`description_sp`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, p.`ean13`, p.`upc`,
		i.`id_image`, il.`legend`, t.`rate`, m.`name` AS manufacturer_name, DATEDIFF(p.`date_add`, DATE_SUB(NOW(), INTERVAL '.(Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20).' DAY)) > 0 AS new,
		(p.`price` * ((100 + (t.`rate`))/100)) AS orderprice, pa.id_product_attribute
	FROM `'._DB_PREFIX_.'product` p
	LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = '.(int)($id_lang).')
	LEFT OUTER JOIN `'._DB_PREFIX_.'product_attribute` pa ON (p.`id_product` = pa.`id_product` AND `default_on` = 1)
	LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = p.`id_product` AND i.`cover` = 1)
	LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = '.(int)($id_lang).')
	LEFT JOIN `'._DB_PREFIX_.'tax_rule` tr ON (p.`id_tax_rules_group` = tr.`id_tax_rules_group`
	   AND tr.`id_country` = '.(int)Country::getDefaultCountryId().'
	   AND tr.`id_state` = 0)
  	 LEFT JOIN `'._DB_PREFIX_.'tax` t ON (t.`id_tax` = tr.`id_tax`)
	LEFT JOIN `'._DB_PREFIX_.'manufacturer` m ON (m.`id_manufacturer` = p.`id_manufacturer`)
	WHERE p.`active` = 1
	AND DATEDIFF(p.`date_add`, DATE_SUB(NOW(), INTERVAL '.(Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20).' DAY)) > 0
	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` '.$sqlGroups.'
	)
	ORDER BY '.(isset($orderByPrefix) ? pSQL($orderByPrefix).'.' : '').'`'.pSQL($orderBy).'` '.pSQL($orderWay).'
	LIMIT '.(int)($pageNumber * $nbProducts).', '.(int)($nbProducts));

	if ($orderBy == 'price')
		Tools::orderbyPrice($result, $orderWay);
	if (!$result)
		return false;

	$productsIds = array();
	foreach ($result as $row)
		$productsIds[] = $row['id_product'];
	// Thus you can avoid one query per product, because there will be only one query for all the products of the cart
	Product::cacheFrontFeatures($productsIds, $id_lang);

	return Product::getProductsProperties((int)$id_lang, $result);
}


/**
* Get a random special
*
* @param integer $id_lang Language id
* @return array Special
*/
public static function getRandomSpecial($id_lang, $beginning = false, $ending = false)
{
	$currentDate = date('Y-m-d H:i:s');
	$ids_product = self::_getProductIdByDate((!$beginning ? $currentDate : $beginning), (!$ending ? $currentDate : $ending));

	$groups = FrontController::getCurrentCustomerGroups();
	$sqlGroups = (count($groups) ? 'IN ('.implode(',', $groups).')' : '= 1');

	// Please keep 2 distinct queries because RAND() is an awful way to achieve this result
	$sql = '
	SELECT p.id_product
	FROM `'._DB_PREFIX_.'product` p
	WHERE 1
	AND p.`active` = 1
	AND p.`id_product` IN ('.implode(', ', $ids_product).')
	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` '.$sqlGroups.'
	)
	ORDER BY RAND()';
	$id_product = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql);

	if (!$id_product)
		return false;

	$row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
	SELECT p.*, pl.`description`, pl.`description_short`, pl.`description_sp`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, p.`ean13`,  p.`upc`,
		i.`id_image`, il.`legend`, t.`rate`
	FROM `'._DB_PREFIX_.'product` p
	LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = '.(int)($id_lang).')
	LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = p.`id_product` AND i.`cover` = 1)
	LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = '.(int)($id_lang).')
	LEFT JOIN `'._DB_PREFIX_.'tax_rule` tr ON (p.`id_tax_rules_group` = tr.`id_tax_rules_group`
   											AND tr.`id_country` = '.(int)Country::getDefaultCountryId().'
  												   AND tr.`id_state` = 0)
  	 LEFT JOIN `'._DB_PREFIX_.'tax` t ON (t.`id_tax` = tr.`id_tax`)
	WHERE p.id_product = '.(int)$id_product);

	return Product::getProductProperties($id_lang, $row);
}


/**
* Get prices drop
*
* @param integer $id_lang Language id
* @param integer $pageNumber Start from (optional)
* @param integer $nbProducts Number of products to return (optional)
* @param boolean $count Only in order to get total number (optional)
* @return array Prices drop
*/
public static function getPricesDrop($id_lang, $pageNumber = 0, $nbProducts = 10, $count = false, $orderBy = NULL, $orderWay = NULL, $beginning = false, $ending = false)
{
	if (!Validate::isBool($count))
		die(Tools::displayError());

	if ($pageNumber < 0) $pageNumber = 0;
	if ($nbProducts < 1) $nbProducts = 10;
	if (empty($orderBy) || $orderBy == 'position') $orderBy = 'price';
	if (empty($orderWay)) $orderWay = 'DESC';
	if ($orderBy == 'id_product' OR $orderBy == 'price' OR $orderBy == 'date_add')
		$orderByPrefix = 'p';
	elseif ($orderBy == 'name')
		$orderByPrefix = 'pl';
	if (!Validate::isOrderBy($orderBy) OR !Validate::isOrderWay($orderWay))
		die (Tools::displayError());
	$currentDate = date('Y-m-d H:i:s');
	$ids_product = self::_getProductIdByDate((!$beginning ? $currentDate : $beginning), (!$ending ? $currentDate : $ending));

	$groups = FrontController::getCurrentCustomerGroups();
	$sqlGroups = (count($groups) ? 'IN ('.implode(',', $groups).')' : '= 1');

	if ($count)
	{
		$sql = '
		SELECT COUNT(DISTINCT p.`id_product`) AS nb
		FROM `'._DB_PREFIX_.'product` p
		WHERE p.`active` = 1
		AND p.`show_price` = 1
		'.((!$beginning AND !$ending) ? ' AND p.`id_product` IN('.((is_array($ids_product) AND sizeof($ids_product)) ? implode(', ', $ids_product) : 0).')' : '').'
		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` '.$sqlGroups.'
		)';
		$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($sql);
		return (int)($result['nb']);
	}
	$sql = '
	SELECT p.*, pl.`description`, pl.`description_short`, pl.`description_sp`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`,
	pl.`name`, p.`ean13`, p.`upc`, i.`id_image`, il.`legend`, t.`rate`, m.`name` AS manufacturer_name,
	DATEDIFF(p.`date_add`, DATE_SUB(NOW(), INTERVAL '.(Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20).' DAY)) > 0 AS new
	FROM `'._DB_PREFIX_.'product` p
	LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = '.(int)($id_lang).')
	LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = p.`id_product` AND i.`cover` = 1)
	LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = '.(int)($id_lang).')
	LEFT JOIN `'._DB_PREFIX_.'tax_rule` tr ON (p.`id_tax_rules_group` = tr.`id_tax_rules_group`
   											AND tr.`id_country` = '.(int)Country::getDefaultCountryId().'
  												   AND tr.`id_state` = 0)
  	 LEFT JOIN `'._DB_PREFIX_.'tax` t ON (t.`id_tax` = tr.`id_tax`)
	LEFT JOIN `'._DB_PREFIX_.'manufacturer` m ON (m.`id_manufacturer` = p.`id_manufacturer`)
	WHERE 1
	AND p.`active` = 1
	AND p.`show_price` = 1
	'.((!$beginning AND !$ending) ? ' AND p.`id_product` IN ('.((is_array($ids_product) AND sizeof($ids_product)) ? implode(', ', $ids_product) : 0).')' : '').'
	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` '.$sqlGroups.'
	)
	ORDER BY '.(isset($orderByPrefix) ? pSQL($orderByPrefix).'.' : '').'`'.pSQL($orderBy).'`'.' '.pSQL($orderWay).'
	LIMIT '.(int)($pageNumber * $nbProducts).', '.(int)($nbProducts);
	$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS($sql);
	if ($orderBy == 'price')
		Tools::orderbyPrice($result,$orderWay);
	if (!$result)
		return false;
	return Product::getProductsProperties($id_lang, $result);
}


/**
* Get product accessories
*
* @param integer $id_lang Language id
* @return array Product accessories
*/
public function getAccessories($id_lang, $active = true)
{
	$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
	SELECT p.*, pl.`description`, pl.`description_short`, pl.`description_sp`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, p.`ean13`, p.`upc`,
	i.`id_image`, il.`legend`, t.`rate`, m.`name` as manufacturer_name, cl.`name` AS category_default, DATEDIFF(p.`date_add`, DATE_SUB(NOW(),
	INTERVAL '.(Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20).' DAY)) > 0 AS new
	FROM `'._DB_PREFIX_.'accessory`
	LEFT JOIN `'._DB_PREFIX_.'product` p ON p.`id_product` = `id_product_2`
	LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = '.(int)($id_lang).')
	LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (p.`id_category_default` = cl.`id_category` AND cl.`id_lang` = '.(int)($id_lang).')
	LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = p.`id_product` AND i.`cover` = 1)
	LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = '.(int)($id_lang).')
	LEFT JOIN `'._DB_PREFIX_.'manufacturer` m ON (p.`id_manufacturer`= m.`id_manufacturer`)
	LEFT JOIN `'._DB_PREFIX_.'tax_rule` tr ON (p.`id_tax_rules_group` = tr.`id_tax_rules_group`
   											AND tr.`id_country` = '.(int)Country::getDefaultCountryId().'
  												   AND tr.`id_state` = 0)
  	 LEFT JOIN `'._DB_PREFIX_.'tax` t ON (t.`id_tax` = tr.`id_tax`)
	WHERE `id_product_1` = '.(int)($this->id).'
	'.($active ? 'AND p.`active` = 1' : ''));

	if (!$result)
		return false;

	return $this->getProductsProperties($id_lang, $result);
}

}

post-289537-0-61492100-1317308698_thumb.jpg

Link to comment
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...