2010-04-07 1 views
1

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

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

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

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

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

echo $_displayPrice;?> 

Что есть я более запуталась в том, что, когда дисплей $ _product-> GetData(), моя новая переменная не где-нибудь среди этих данных.

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

ответ

3

Ладно, первая причина, ваши атрибуты не будут загружаться. 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() и получить данные, которые вы ищете.

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

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

Спасибо, Джо

+0

Это проясняет ВСЁ! Разработал проблему, добавив вместо этого свой оператор if в каталог/product/view.html, где он влияет только на детали продукта. В идеале я могу использовать информацию, которую вы мне дали, чтобы исправить price.phtml, поэтому я не добавляю soo многих непредсказуемых if-операторов в случайных шаблонах. Спасибо, йо! – russjman

+0

Я все еще не могу получить доступ к новым атрибутам. Я добавил их в список в app/core/Mage/Catalog/etc/config.xml, и я отключил кеш сайта. Я предполагаю, что добавление туда сделает их доступными в шаблоне/catalog/product/list.phtml. – russjman

+2

Это только я, или Magento действительно сложнее и раздуто? : | – jayarjo

Смежные вопросы