Атрибут не загружается на продукт_листа и многослойную навигацию
-
16-10-2019 - |
Вопрос
У меня есть система разработки, здесь все работает, как и ожидалось. И у меня есть система постановки, здесь атрибут не загружен. Такое ощущение, что Sytem не знает, что атрибут не существует в магазине/attribute_set/...?
У меня есть атрибут artist_id
И этот атрибут не загружен.
Коллекции инициализируются с атрибутом:
if (!is_null($this->_productCollection)) {
return $this->_productCollection;
}
$collection = parent::_getProductCollection();
$collection->addAttributeToSelect('artist_id');
Я проверил, находится ли атрибут в коллекции, и это:
[_selectAttributes:protected] => Array
(
[name] => 71
[short_description] => 73
[price] => 75
[special_price] => 76
[special_from_date] => 77
[special_to_date] => 78
[small_image] => 86
[thumbnail] => 87
[news_from_date] => 93
[news_to_date] => 94
[status] => 96
[url_key] => 97
[required_options] => 110
[image_label] => 112
[small_image_label] => 113
[thumbnail_label] => 114
[msrp_enabled] => 118
[msrp_display_actual_price_type] => 119
[msrp] => 120
[tax_class_id] => 122
[price_type] => 124
[weight_type] => 126
[price_view] => 127
[shipment_type] => 128
[links_purchased_separately] => 129
[links_exist] => 132
[artist_id] => 146
)
Но когда я пытаюсь получить $_product->getArtistId()
Там нет удостоверения личности.
Отладка в этой системе действительно сложно. Я попытался найти ту часть, где построен запрос, но еще не нашел ее.
ОБНОВИТЬ: Плоские столы выключены.
А теперь плохая часть: немного
<?php $_product->load($_product->getId()); ?>
в foreach
принадлежащий product/list.phtml
Исправляет проблему ;-)
Честно говоря: я думаю, что я что -то сломал в базе данных, изменяя директив настройки в таблицах.
Есть ли связь между атрибутами и магазинами?
Есть идеи по этой проблеме?
Решение 4
Я абсолютно понятия не имею, как это случилось, вот конец истории:
А backend_type
был varchar
вместо int
.
Мне очевидно, что коллекция не может загрузить artist_id
Если Magento не знает, где искать ценность, но почему $_product->load()
в состоянии получить ценность? Я должен исследовать это.
Другие советы
Взгляните на настройки атрибутов, убедитесь, что «видно на странице просмотра продукта на фронт-конце»-это да, а «использование в слоистой навигации» тоже (только если атрибут раскрывается)
ОБНОВИТЬ:
Еще одна вещь, которую вы можете попробовать, это добавить:
<product>
<collection>
<attributes>
<artist_id/>
</attributes>
</collection>
</product>
В config.xml модуля, вu003Cfrontend> раздел.
Если он работает на DEV, но не на постановке - а кодовая база - это точная копия - тогда ваша проблема - ваша DB.
Вы можете очень легко подтвердить, заменив свой постановку DB на DB Development и посмотреть, произойдет ли это.
То, что вы описываете, просто не должно произойти, если вы не делаете ручных прав в DB - или код отличается на ваших двух сайтах.
Есть ли значение по умолчанию для этого атрибута в таблице EAV? Посмотрите на этот запрос:
SELECT
`t_d`.`entity_id`,
`t_d`.`attribute_id`,
`t_d`.`value` AS `default_value`,
`t_s`.`value` AS `store_value`,
IF(t_s.value_id IS NULL, t_d.value, t_s.value) AS `value`
FROM `catalog_product_entity_varchar` AS `t_d`
LEFT JOIN `catalog_product_entity_varchar` AS `t_s`
ON t_s.attribute_id = t_d.attribute_id AND t_s.entity_id = t_d.entity_id AND t_s.store_id = 3
...
Вот как Magento загружает каждый атрибут EAV в коллекции. Как вы видите, если нет никаких значений для магазина по умолчанию (без входа в базу данных, NULL будет в порядке), первая часть запроса не вернет результат, левое соединение не будет работать, а ваш атрибут выиграл ' T, загруженную - даже если у вас есть значение для магазина.
К сожалению, я уже однажды столкнулся с этим, мы сделали что -то не так с импортом, и мне приходилось отлаживать довольно много, пока я наконец не понял, что случилось. Может быть, проверьте свой БД.
Может попробовать:
$product->getData('artist_id');
Проверьте, добавляется ли атрибут ('Artist_id') в Набор атрибутов к которому принадлежит конкретный продукт.