beijoca Posted July 2, 2015 Share Posted July 2, 2015 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 More sharing options...
joseantgv Posted July 2, 2015 Share Posted July 2, 2015 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 More sharing options...
Recommended Posts