Автор Тема: Шаблон default-bootstrap. Проблема c несколькими языками в каталоге товаров  (Прочитано 1270 раз)

30 Июнь 2014, 15:29:04
  • Старожил
  • ****
  • Сообщений: 300
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Здравствуйте!
Установлен шаблон default-bootstrap. На сайте использую два языка (ru, en).
При просмотре товаров в каталоге, видим у каждого товара несколько цветов (квадратики с разными цветами).
Так вот, если смотрю сайт на английском языке и нажимаю на квадратик с цветом, то по ссылке отображается товар на русском языке, т.е.
должно быть
/en/bags/274-palio-11361A.html#/color-redа переход идёт на
/ru/bags/274-palio-11361A.html#/color-redКак быть?
30 Июнь 2014, 17:14:08
Ответ #1
  • Старожил
  • ****
  • Сообщений: 300
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Удивительное дело..
вывожу id языка в
product-list.tpl и product-list-colors.tpl
В product-list-colors.tpl квадратики с цветом и отображаются...
Так вот указываю Context::getContext()->language->id

И меняю языки. Для product-list.tpl id меняется, а вот для product-list-colors.tpl id не меняется...
Подскажите как передать id языка в product-list-colors.tpl?
30 Июнь 2014, 23:47:51
Ответ #2
  • Ветеран
  • *****
  • Сообщений: 13832
  • Репутация: +14564/-2
  • Сообщество PrestaShop
    • Просмотр профиля
В шаблоны передавать нужно переменную smarty, а инициализировать ее в контроллере.
$this->context->language->id;
01 Июль 2014, 09:50:39
Ответ #3
  • Старожил
  • ****
  • Сообщений: 300
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Передаю в /classes/controller/FrontController.php
public function addColorsToProductList(&$products)
{
..........
$tpl = $this->context->smarty->createTemplate(_PS_THEME_DIR_.'product-list-colors.tpl');
if (isset($colors[$product['id_product']]))
$tpl->assign(array(
'id_product' => $product['id_product'],
'colors_list' => $colors[$product['id_product']],
'link' => Context::getContext()->link,
'img_col_dir' => _THEME_COL_DIR_,
'col_img_dir' => _PS_COL_IMG_DIR_,
'lang_zae' => $this->context->language->id
));
.......
Однако передаётся старый вариант языка, а не тот который я выбрал...
Как быть?

Такое впечатление, что product-list-colors.tpl кэшируется и после этого отображается старая информация....
01 Июль 2014, 10:39:45
Ответ #4
  • Старожил
  • ****
  • Сообщений: 300
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Интересное дело...
Отключил кэш в настройках производительности и всё заработало...

Теперь возникает другой вопрос, как заставить работать product-list-colors.tpl
при включенном кэше???

01 Июль 2014, 12:22:15
Ответ #5
  • Ветеран
  • *****
  • Сообщений: 20938
  • Репутация: +25280/-0
  • Prestashop - просто и эффективно
    • Просмотр профиля
Не использовать кеширование для модуля/блока.
$this->display(__FILE__, 'mytemplate.tpl', $this->getCacheId())
...
return Cache::retrieve($cache_id);
...
Cahe::isStored($cache_id)
;
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
01 Июль 2014, 13:48:20
Ответ #6
  • Старожил
  • ****
  • Сообщений: 300
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Сделал следующие изменения в /classes/controller/FrontController.php
...
//Tools::clearCache(null, 'product-list-colors.tpl');
...
foreach ($products as &$product)
//if (!$this->isCached(_PS_THEME_DIR_.'product-list-colors.tpl', $this->getColorsListCacheId($product['id_product'])))
$products_need_cache[] = (int)$product['id_product'];
....
//Tools::enableCache();
...
//Tools::restoreCacheSettings();
В настройках включил кеш. Вроде всё работает...