Невозможно получить новый атрибут продукта в сетке - PullRequest
1 голос
/ 08 апреля 2010

Я добавил новый атрибут в мои продукты (логическое поле "да / нет").Это переменная, позволяющая включить / отключить отображение цены на странице сведений о продукте и в виде сетки.

Мне удалось заставить ее работать на странице информации о продукте.Но на странице сетки продуктов я не могу получить доступ к этой переменной.В частности, шаблон, с которым я работаю, это catalog / product / price.phtml.Из того, что я могу сказать, цена отображается одной и той же группой if-операторов как на странице сведений о продукте, так и на странице сетки.Это сбивает меня с толку, потому что я не могу найти какой-либо код в этом шаблоне для обработки нескольких продуктов, просто кучу вложенных операторов if.

Вот как я пытаюсь получить доступ к этой новой переменной, используя $ _displayPrice.в строке 36 каталога / product / price.html

<?php $_product = $this->getProduct();  ?>

<?php $_id = $_product->getId() ?>
<?php $_displayPrice = $_product->getDisplayPrice() ? "Yes" : "No";

echo $_displayPrice;?>

Что меня еще больше смутило, так это то, что при отображении $ _product-> getData () моя новая переменная отсутствует среди этих данных.

спасибо заранее

1 Ответ

3 голосов
/ 08 апреля 2010

Хорошо, сначала причина, по которой ваши атрибуты не будут загружаться. Magento использует модель EAV для хранения данных каталога. Это означает, что (в основном) каждый фрагмент данных в массиве getData поступает из объединения таблиц. Это означает, что Magento скуп на то, как он запрашивает данные из базы данных. Если вам не нужно ваше поле, оно не потрудится включить его (и сэкономит время на запрос).

Таким образом, при загрузке страницы категории каталога Magento использует Mage_Catalog_CategoryController и действие просмотра. Через магию Magento это впоследствии вызывает Mage_Catalog_Model_Layer::getProductCollection, который загружает все необходимые атрибуты. Как вы выбираете, какие атрибуты включить? Он получает их из конфигурации в Mage_Catalog_Model_Config::getProductCollectionAttributes конечно! Итак, если мы хотим включить ваш новый атрибут, нам нужно изменить конфигурацию.

Глядя на файл конфигурации, путь, по которому обрабатываются загружаемые столбцы, равен frontend/product/collection/attributes, поэтому вам необходимо добавить следующее в файл config.xml расширения:

<frontend>
    <product>
        <collection>
            <attributes>
               <display_price /> 
            </attributes>
        </collection>
    </product>
</frontend>

Это добавит атрибут display_price в список атрибутов для загрузки в коллекцию продуктов по умолчанию, и теперь вы сможете вызывать $_product->getDisplayPrice() и получать данные, которые вы ищете.

Обязательно очистите кэш, прежде чем ожидать каких-либо изменений!

Надеюсь, это поможет.

Спасибо, Джо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...