Jump to content

Problema en el nombre de la tienda en los Meta Tags en multitiendas


Recommended Posts

Me gustaría reportar un bug en Prestashop 1.6.0.14 que ya he arreglado en mi tienda, pero que estaría bien que Prestashop lo solucionara para sus próximas versiones: los meta tags en multitiendas. Actualmente cuando el usuario utiliza la opción de multitenda de Prestashop el nombre de la tienda sale siempre el de la tienda por defecto y no el de la que corresponde. Esto se debe a que los métodos getHomeMetas(), getCategoryMetas(), getManufacturerMetas(), getSupplierMetas(), getCmsMetas(), getCmsCategoryMetas() y completeMetaTags() de la clase Meta leen el nombre de la tienda desde Configuration::get('PS_SHOP_NAME') en vez de la tabla *_shop.

 

Para solucionarlo, he agregado el siguiente código en cada método:

 

$shop_id = Shop::getContextShopID();
if($shop_id){
    $shop = Shop::getShop($shop_id);
    $shop_name = $shop['name'];
}else
    $shop_name = Configuration::get('PS_SHOP_NAME');

 

Y donde estaba escrito Configuration::get('PS_SHOP_NAME') en el código original lo he cambiado por $shop_name.

 

 

Saludos.

Link to comment
Share on other sites

Me gustaría reportar un bug en Prestashop 1.6.0.14 que ya he arreglado en mi tienda, pero que estaría bien que Prestashop lo solucionara para sus próximas versiones: los meta tags en multitiendas. Actualmente cuando el usuario utiliza la opción de multitenda de Prestashop el nombre de la tienda sale siempre el de la tienda por defecto y no el de la que corresponde. Esto se debe a que los métodos getHomeMetas(), getCategoryMetas(), getManufacturerMetas(), getSupplierMetas(), getCmsMetas(), getCmsCategoryMetas() y completeMetaTags() de la clase Meta leen el nombre de la tienda desde Configuration::get('PS_SHOP_NAME') en vez de la tabla *_shop.

 

Para solucionarlo, he agregado el siguiente código en cada método:

 

$shop_id = Shop::getContextShopID();

if($shop_id){

    $shop = Shop::getShop($shop_id);

    $shop_name = $shop['name'];

}else

    $shop_name = Configuration::get('PS_SHOP_NAME');

 

Y donde estaba escrito Configuration::get('PS_SHOP_NAME') en el código original lo he cambiado por $shop_name.

 

 

Saludos.

 

Hola,

 

creo que el error debe estar en otro sitio. Has revisado lo que hace la función get de la clase Configuration? Ya debería tener en cuenta la multitienda:


	/**
	  * Get a single configuration value (in one language only)
	  *
	  * @param string $key Key wanted
	  * @param integer $id_lang Language ID
	  * @return string Value
	  */
	public static function get($key, $id_lang = null, $id_shop_group = null, $id_shop = null)
	{
		if (defined('_PS_DO_NOT_LOAD_CONFIGURATION_') && _PS_DO_NOT_LOAD_CONFIGURATION_)
			return false;
		
		// If conf if not initialized, try manual query
		if (!isset(self::$_cache[self::$definition['table']]))
		{
			Configuration::loadConfiguration();
			if (!self::$_cache[self::$definition['table']])
				return Db::getInstance()->getValue('SELECT `value` FROM `'._DB_PREFIX_.bqSQL(self::$definition['table']).'` WHERE `name` = "'.pSQL($key).'"');
		}
		$id_lang = (int)$id_lang;
		if ($id_shop === null)
			$id_shop = Shop::getContextShopID(true);
		if ($id_shop_group === null)
			$id_shop_group = Shop::getContextShopGroupID(true);

		if (!isset(self::$_cache[self::$definition['table']][$id_lang]))
			$id_lang = 0;
			
		if ($id_shop && Configuration::hasKey($key, $id_lang, null, $id_shop))
			return self::$_cache[self::$definition['table']][$id_lang]['shop'][$id_shop][$key];
		elseif ($id_shop_group && Configuration::hasKey($key, $id_lang, $id_shop_group))
			return self::$_cache[self::$definition['table']][$id_lang]['group'][$id_shop_group][$key];
		elseif (Configuration::hasKey($key, $id_lang))
			return self::$_cache[self::$definition['table']][$id_lang]['global'][$key];
		return false;
	}
Link to comment
Share on other sites

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