Атрибут не загружен в Список продуктов и многоуровневую навигацию
У меня есть система разработки, здесь все работает так, как ожидалось. И у меня есть промежуточная система, здесь атрибут не загружен. Такое ощущение, что система не знает, что атрибут не существует в хранилище/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
устраняет проблему;-)
Честно говоря: я думаю, что я что-то сломал в базе данных, меняя настройки непосредственно в таблицах.
Есть ли какие-либо связь между атрибутами и хранилищами?
Есть какие-нибудь идеи по этой проблеме?
6 answers
Взгляните на настройки атрибутов, убедитесь, что "Отображается на странице просмотра продукта в интерфейсе" - да, и "Использовать в многоуровневой навигации" - тоже да (только если атрибут раскрывающийся)
ОБНОВЛЕНИЕ:
Еще одна вещь, которую вы можете попробовать, это добавить:
<product>
<collection>
<attributes>
<artist_id/>
</attributes>
</collection>
</product>
В config.xml модуля, в разделе .
Если он работает на разработчике, но не на промежуточной стадии, а база кода является точной копией, то ваша проблема заключается в самой вашей базе данных.
Вы можете очень легко подтвердить это, заменив свою промежуточную базу данных на базу данных разработки и посмотреть, произойдет ли это по-прежнему.
То, что вы описываете, просто не должно происходить, если вы не вносили ручные изменения в базу данных - или код отличается на ваших двух сайтах.
Есть ли значение по умолчанию для этого атрибута в таблице 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 будет в порядке), первая часть запроса не вернет результата, ЛЕВОЕ СОЕДИНЕНИЕ не будет работать, и ваш атрибут не будет загружен - даже если у вас есть значение для конкретного хранилища.
К сожалению, я уже сталкивался с этим однажды, мы сделали что-то не так с импортом, и мне пришлось довольно много отлаживать, пока я наконец не понял, что произошло. Может быть, проверьте свою базу данных.
Я совершенно НЕ представляю, как это произошло, вот конец истории:
backend_type
было varchar
вместо int
.
Для меня очевидно, что коллекция не может загрузить artist_id
, если magento не знает, где искать значение, но почему $_product->load()
может получить значение? Я должен это расследовать.
Может быть, попробуем:
$product->getData('artist_id');
Проверьте, добавлен ли атрибут ('artist_id') в набор атрибутов , к которому принадлежит конкретный продукт.