Автор Тема: [ РЕШЕНО ] Проблема с getProductLink  (Прочитано 2081 раз)

01 Октябрь 2015, 08:59:56
Ответ #30
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86688
  • Репутация: +25428/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Выводы после тестирования разных версий prestashop:

1. В prestashop 1.6 ид в url обязательно для атрибутов (фильтров).
Ссылки должны быть такого вида
#/14-color-blueесли ссылках в фильтре нет ид
#/color-blueто будет показанна комбинация по умолчанию.

2. В prestashop версиях 1.6.0.9 - 1.6.0.14 баг при формировании ссылок комбинаций товара на странице категории, ссылки у атрибутов неправильные они без ид.
В prestashop 1.6.1 это исправлено.
01 Октябрь 2015, 10:37:13
Ответ #31
  • Ветеран
  • *****
  • Сообщений: 527
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Выводы после тестирования разных версий prestashop:

1. В prestashop 1.6 ид в url обязательно для атрибутов (фильтров).
Ссылки должны быть такого вида
#/14-color-blueесли ссылках в фильтре нет ид
#/color-blueто будет показанна комбинация по умолчанию.

2. В prestashop версиях 1.6.0.9 - 1.6.0.14 баг при формировании ссылок комбинаций товара на странице категории, ссылки у атрибутов неправильные они без ид.
В prestashop 1.6.1 это исправлено.

В наличии Версия Prestashop 1.6.0.14
Можно ли исправить этот баг более точено, без перехода на 1.6.1?
01 Октябрь 2015, 11:05:49
Ответ #32
  • Ветеран
  • *****
  • Сообщений: 3419
  • Репутация: +79/-6
  • Сообщество PrestaShop
    • Просмотр профиля
Попробуй обновить только тему и модуль blocklayered.
01 Октябрь 2015, 11:22:10
Ответ #33
  • Ветеран
  • *****
  • Сообщений: 527
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Попробуй обновить только тему и модуль blocklayered.

За формирование ссылки в каталоге товаров отвечает function getProductLink
в /classes/Link.php

Думаю здесь копать нужно...
01 Октябрь 2015, 11:32:50
Ответ #34
  • Ветеран
  • *****
  • Сообщений: 3419
  • Репутация: +79/-6
  • Сообщество PrestaShop
    • Просмотр профиля
Он одинаковый в этих версиях prestashop.
01 Октябрь 2015, 11:37:57
Ответ #35
  • Ветеран
  • *****
  • Сообщений: 3419
  • Репутация: +79/-6
  • Сообщество PrestaShop
    • Просмотр профиля
01 Октябрь 2015, 11:41:51
Ответ #36
  • Ветеран
  • *****
  • Сообщений: 3419
  • Репутация: +79/-6
  • Сообщество PrestaShop
    • Просмотр профиля
Нашел разницу, в линии 142 в prestashop 1.6.0.14
$anchor = $ipa ? $product->getAnchor($ipa) : '';В новой версии
$anchor = $ipa ? $product->getAnchor((int)$ipa, (bool)$add_anchor) : '';
01 Октябрь 2015, 11:45:40
Ответ #37
  • Ветеран
  • *****
  • Сообщений: 527
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Нашел разницу, в линии 142 в prestashop 1.6.0.14
$anchor = $ipa ? $product->getAnchor($ipa) : '';В новой версии
$anchor = $ipa ? $product->getAnchor((int)$ipa, (bool)$add_anchor) : '';

Вот здесь собака закопана: getAnchor (добавляется id_attribute)
$anchor .= '/'.($with_id && isset($a['id_attribute']) && $a['id_attribute']? (int)$a['id_attribute'].$sep : '').$a['group'].$sep.$a['name'];
Победил меняем в classes/product.php на следующее и всё работает:
public function getAnchor($id_product_attribute)
{
$attributes = Product::getAttributesParams($this->id, $id_product_attribute);
$anchor = '#';
$sep = Configuration::get('PS_ATTRIBUTE_ANCHOR_SEPARATOR');
foreach ($attributes as &$a)
{
foreach ($a as &$b)
$b = str_replace(Configuration::get('PS_ATTRIBUTE_ANCHOR_SEPARATOR'), '_', Tools::link_rewrite($b));
$anchor .= '/'.(int)$a['id_attribute'].$sep.$a['group'].Configuration::get('PS_ATTRIBUTE_ANCHOR_SEPARATOR').$a['name'];
}
return $anchor;
}
01 Октябрь 2015, 11:50:51
Ответ #38
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
Если менять, то с учетом будущих измений
/classes/Product.php
public function getAnchor($id_product_attribute, $with_id = false)
{
$attributes = Product::getAttributesParams($this->id, $id_product_attribute);
$anchor = '#';
$sep = Configuration::get('PS_ATTRIBUTE_ANCHOR_SEPARATOR');
foreach ($attributes as &$a)
{
foreach ($a as &$b)
$b = str_replace($sep, '_', Tools::link_rewrite($b));
$anchor .= '/'.($with_id && isset($a['id_attribute']) && $a['id_attribute']? (int)$a['id_attribute'].$sep : '').$a['group'].$sep.$a['name'];
}
return $anchor;
}
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
01 Октябрь 2015, 11:52:51
Ответ #39
  • Ветеран
  • *****
  • Сообщений: 3419
  • Репутация: +79/-6
  • Сообщество PrestaShop
    • Просмотр профиля
Какая разница? При обновлении все равно этот класс поменяется.