Атрибут не загружается на продукт_листа и многослойную навигацию

magento.stackexchange https://magento.stackexchange.com/questions/744

Вопрос

У меня есть система разработки, здесь все работает, как и ожидалось. И у меня есть система постановки, здесь атрибут не загружен. Такое ощущение, что 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') в Набор атрибутов к которому принадлежит конкретный продукт.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top