Magento: отображение атрибутов в списке товаров

[16 июля 2019 г.]    Российская сборка Magento 2.52.2
Magento 2: модули и услуги
magereport.com: составление перечня необходимых для установки заплаток SUPEE
#1 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

29.09.2010 20:45

Отображение атрибутов на странице списка товаров

Было:
Изображение

Стало:
Изображение


Шаг 1.
Создаём атрибуты.
Отмечаем для атрибутов: Used in Product Listing


Шаг 2.
Создаём набор атрибутов и добавляем в набор созданные на шаге 1 атрибуты


Шаг 3.
Создаём товар.
Указываем значения атрибутов.


Шаг 4.
Сообщаем Magento о нашем намерении использовать наши атрибуты на странице списка товаров
app/design/frontend/default/default/layout/catalog.xml


<catalog_category_default translate="label">

	(...)
	
	<reference name="content">
		<block type="catalog/category_view" name="category.products" template="catalog/category/view.phtml">
			<block type="catalog/product_list" name="product_list" template="catalog/product/list.phtml">

				[b]
				<action method="addAttribute"><name>piano_keyboard_type</name></action>
				<action method="addAttribute"><name>piano_timbre_count</name></action>
				[/b]

				(...)
			</block>
		</block>
	</reference>
</catalog_category_default>




Шаг 5.
Отображаем атрибуты в шаблоне списка товаров:

echo $_product->getPianoKeyboardType ();
echo $_product->getPianoTimbreCount (); 


#2 Grand
  • Группа: Пользователь
  • Сообщений: 13
  • Регистрация: 20.10.2010

27.10.2010 20:56

Да, но...

Не совсем понятна логика. Зачем делать в администраторском интерфейсе выбор "Used in Product Listing", если после того как выбрал "Да" нужно каждый атрибут прописать в коде?! Ведь есть же в настройках атрибута отлично работающая функция "Видимый на странице просмотра товара в пользовательской части", благодаря которой, все отмеченные выбором "Да" атрибуты, как и обещано, отображаются в таблице на странице описания товара.

Неужели нельзя сделать абсолютно то же самое на странице списка товаров, отфильтровав атрибуты по значению поля "Used in Product Listing"?!

Всё же сноска, гласящая, "Зависит от темы дизайна" возле "злополучного" поля, наталкивает на мысль, что где-то, в каких-то темах именно так это всё и реализовано. :)

#3 Sergey
  • Группа: Пользователь
  • Сообщений: 9
  • Регистрация: 28.10.2010

28.10.2010 20:49

Просмотр сообщенияGrand (27.10.2010 20:56) писал:

Ведь есть же в настройках атрибута отлично работающая функция "Видимый на странице просмотра товара в пользовательской части", благодаря которой, все отмеченные выбором "Да" атрибуты, как и обещано, отображаются в таблице на странице описания товара.

Неужели нельзя сделать абсолютно то же самое на странице списка товаров, отфильтровав атрибуты по значению поля "Used in Product Listing"?

Меня тоже интересует этот вопрос.

Может кто-нибудь видел тему с подобным решением или решил сам? Поделитесь, пожалуйста!
Если нет, то хотябы подскажите, как в указанном выше решении вывести перед значением атрибута его название.

#4 mirosya
  • Группа: Пользователь
  • Сообщений: 17
  • Регистрация: 02.11.2010

18.11.2010 18:17

ооочень хочу сама понять(думать хочется, а нечем - я не программист, да:)

Мне нужно чтобы в списке товаров отображался атрибут, код которого "author" (в списке уже отображается название товара, цена, короткое описание).

Пооожжжжалуйста, научите "на пальцах", что и куда вписать.

#5 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

18.11.2010 21:28

Именно отображение атрибута и описано выше.
Если описание вам непонятно, а думать действительно хочется - значит, начните с более простых вещей.
Например, с изучения языка PHP.
Как обычно и бывает, владение языком - это основа успешного восприятия материала.

#6 mirosya
  • Группа: Пользователь
  • Сообщений: 17
  • Регистрация: 02.11.2010

18.11.2010 22:49

Где "шаблон списка товаров" искать. подскажите

#7 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

19.11.2010 07:53

Тема Default, например, не имеет такого собственного шаблона, а заимствует его из темы Base:
app/design/frontend/base/default/template/catalog/product/list.phtml

#8 Андрей Колоденский
  • Группа: Пользователь
  • Сообщений: 24
  • Регистрация: 18.11.2010

24.02.2011 17:45

Добрый день!

Каким образом в данном примере можно получить не ЗНАЧЕНИЕ атрибута, а НАЗВАНИЕ атрибута?

Т.е., например, "количество тембров"?

#9 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

24.02.2011 18:08

Как получить витринное название атрибута программно

#10 Евгений Шевченко (вор)
  • ворует чужие модули и перепродаёт
  • Группа: Заблокирован
  • Сообщений: 126
  • Регистрация: 17.08.2010

18.08.2011 22:01

<?php echo $_product->getAttributeText('') ?>
выводит значения атрибутов выпадающего списка
<?php echo $_product->get() ?>
выводит значения текстовых атрибутов, но почему то дописывает Array к тексту
а как вывести имя атрибута?

#11 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

19.08.2011 06:03

Как получить витринное название атрибута программно

#12 Евгений Шевченко (вор)
  • ворует чужие модули и перепродаёт
  • Группа: Заблокирован
  • Сообщений: 126
  • Регистрация: 17.08.2010

19.08.2011 20:25

Не стоило повторять одну и ту же ссылку два раза, этот способ у меня вызывает только ошибку на странице
почему пишет array?

#13 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

19.08.2011 23:36

Приведите точный текст диагностического сообщения, которое пишет интерптератор в результате примерения способа по ссылкею

#14 Евгений Шевченко (вор)
  • ворует чужие модули и перепродаёт
  • Группа: Заблокирован
  • Сообщений: 126
  • Регистрация: 17.08.2010

20.08.2011 19:41

Fatal error: Call to a member function getFrontend() on a non-object in /app/design/frontend/default/hellocanvas/template/catalog/product/list.phtml on line 65

я хочу сделать перечисление всех атрибутов товара через /
т.е. мощность: 1000 Вт / масса: 35 кг / материал: пластик / ...

#15 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

20.08.2011 21:42

А вы слепо скопировали или переменная $attribute у вас действительно существует и имеет класс атрибута?

#16 core
  • Группа: Пользователь
  • Сообщений: 6
  • Регистрация: 08.08.2011

21.08.2011 00:43

а теперь вопрос на засыпку - что случится с вашим магазином, когда кому-то взбредет в голову удалить упомянутый атрибут из атрибут сета для этого товара?

#17 Евгений Шевченко (вор)
  • ворует чужие модули и перепродаёт
  • Группа: Заблокирован
  • Сообщений: 126
  • Регистрация: 17.08.2010

21.08.2011 01:46

Просмотр сообщенияДмитрий Федюк (20.08.2011 21:42) писал:

А вы слепо скопировали или переменная $attribute у вас действительно существует и имеет класс атрибута?

безусловно, атрибут maxload

Просмотр сообщенияcore (21.08.2011 00:43) писал:

а теперь вопрос на засыпку - что случится с вашим магазином, когда кому-то взбредет в голову удалить упомянутый атрибут из атрибут сета для этого товара?

будет вот так
Fatal error: Call to a member function getSource() on a non-object in

у меня общие атрибуты для всех типов товаров

#18 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

21.08.2011 01:46

Интерпретатор говорит вам, что у вас переменная $attribute не является объектом.
Если вы не понимаете, что это означает - обратитесь к программисту.

#19 Евгений Шевченко (вор)
  • ворует чужие модули и перепродаёт
  • Группа: Заблокирован
  • Сообщений: 126
  • Регистрация: 17.08.2010

01.09.2011 18:35

Просмотр сообщенияДмитрий Федюк (21.08.2011 01:46) писал:

Интерпретатор говорит вам, что у вас переменная $attribute не является объектом.
Если вы не понимаете, что это означает - обратитесь к программисту.

<?php echo $_product->getFrontend()->getLabel('attribute'); ?> 


#20 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

01.09.2011 18:41

Если $_product - это объект класса Mage_Catalog_Model_Product, то ваш код вообще бессмысленен, потому что у класса Mage_Catalog_Model_Product нет метода getFrontend.

#21 Евгений Шевченко (вор)
  • ворует чужие модули и перепродаёт
  • Группа: Заблокирован
  • Сообщений: 126
  • Регистрация: 17.08.2010

01.09.2011 19:38

[/quote]
 /* Standart attributes */
00067         foreach ($attributes as $attribute) {
00068             if (($attribute->getIsRequired()
00069                 && $attribute->getApplyTo()
00070                 // If not applied to configurable
00071                 && !in_array(Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE, $attribute->getApplyTo())
00072                 // If not used in configurable
00073                 && !in_array($attribute->getId(),$this->_getProduct()->getTypeInstance(true)->getUsedProductAttributeIds($this->_getProduct())))
00074                 // Or in additional
00075                 || in_array($attribute->getAttributeCode(), $attributesConfig['additional'])) {
00076 
00077                 $inputType = $attribute->getFrontend()->getInputType();
00078                 if (!in_array($inputType, $availableTypes)) {
00079                     continue;
00080                 }
00081                 $attributeCode = $attribute->getAttributeCode();
00082                 $attribute->setAttributeCode('simple_product_' . $attributeCode);
00083                 $element = $fieldset->addField(
00084                     'simple_product_' . $attributeCode,
00085                      $inputType,
00086                      array(
00087                         'label'    => $attribute->getFrontend()->getLabel(),
00088                         'name'     => $attributeCode,
00089                         'required' => $attribute->getIsRequired(),

вообще если верить файлу simple.php, то всё должно выводиться в первозданном виде
но в любом случае я получаю ошибку Fatal error: Call to a member function getFrontend()

Вы ведь сами создали тему с решением, способным выводить атрибуты в списке товаров, а на деле оно не работает

#22 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

05.09.2011 14:48

Решение рассчитано на программистов.
Все другие должны платить деньги.
Это описано в концепции форума.

Поделиться темой: