Используйте имя атрибута в классе css многоуровневой навигации


В моей многоуровневой навигации я хочу иметь возможность по-разному оформлять содержимое для каждого атрибута. Я сделал это, создав свою собственную версию app\design\frontend\base\default\template\catalog\layer\view.phtml и добавив класс с именем атрибута (который я затем могу настроить с помощью css), изменив эту строку из

<dd><?php echo $_filter->getHtml() ?></dd>

До

<dd class="<?php echo $this->__($_filter->attribute_model->attribute_code) ?>"><?php echo $_filter->getHtml() ?></dd>

Это работает нормально, но я заметил, что в этой строке в моем журнале появляется следующая ошибка:

ОШИБКА (3): Примечание: Попытка получить свойство не-объекта в приложении/дизайне/интерфейсе/мифеме/по умолчанию/шаблоне/каталоге/слое/представлении.phtml в строке 53

К счастью, он невидим на переднем конце, и я хотел бы его устранить.

До меня дошло, что это происходит, когда многоуровневая навигация находится в дереве категорий, и поэтому активных атрибутов нет. Я попытался проверить, существует ли атрибут, используя подобные is_object, но ничего не сработало, и это исчерпало мой, по общему признанию, ограниченный PHP навыки.

Может ли кто-нибудь предложить способ, который работает?

Author: PedroKTFC, 2015-01-28

4 answers

Вы должны die(var_dump($_filter)) вар, чтобы увидеть, что внутри. После этого вы сможете использовать свойство нужного вам объекта для достижения желаемого.

 2
Author: mbalparda, 2015-01-28 23:07:31

Эта ошибка говорит о том, что $_filter не является объектом в определенное время, поэтому я бы посмотрел, что $_filter возвращается, когда возникает эта ошибка. Вы можете сделать это с помощью журнала (при ошибке должно произойти странное событие).

Перед вызовом echo $this->__($_filter... запишите $_filter с помощью этого Mage::log(var_dump($_filter)). Если это не объект, то вы должны получить строку или число или пустой var o.o.

 2
Author: Aedonis, 2015-01-28 23:10:01

Я считаю, что ваш подход is_object() здесь верен, вы, скорее всего, просто неправильно его использовали.

Я предполагаю, что у вас было что-то похожее на это:

<?php if (is_object($_filter)): ?> ... <?php endif ?>

Я бы попробовал изменить его следующим образом:

<?php if (is_object($_filter->attribute_model)): ?> ... <?php endif ?>

 2
Author: Darren Felton, 2015-01-28 23:37:39

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

 <dd<?php if (!is_null($_filter->attribute_model)) {echo ' class="' . $this->__($_filter->attribute_model->attribute_code) . '" ';} ?>><?php echo $_filter->getHtml() ?></dd>
 2
Author: PedroKTFC, 2015-02-06 13:22:28