Используйте имя атрибута в классе 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 навыки.
Может ли кто-нибудь предложить способ, который работает?
4 answers
Вы должны die(var_dump($_filter))
вар, чтобы увидеть, что внутри. После этого вы сможете использовать свойство нужного вам объекта для достижения желаемого.
Эта ошибка говорит о том, что $_filter
не является объектом в определенное время, поэтому я бы посмотрел, что $_filter
возвращается, когда возникает эта ошибка. Вы можете сделать это с помощью журнала (при ошибке должно произойти странное событие).
Перед вызовом echo $this->__($_filter...
запишите $_filter
с помощью этого Mage::log(var_dump($_filter))
. Если это не объект, то вы должны получить строку или число или пустой var o.o.
Я считаю, что ваш подход is_object() здесь верен, вы, скорее всего, просто неправильно его использовали.
Я предполагаю, что у вас было что-то похожее на это:
<?php if (is_object($_filter)): ?> ... <?php endif ?>
Я бы попробовал изменить его следующим образом:
<?php if (is_object($_filter->attribute_model)): ?> ... <?php endif ?>
Спасибо за ваши предложения, которые помогли мне понять, что я делал неправильно. По сути, это был мой бедный php. Теперь у меня есть следующее, что означает, что ошибка больше не возникает.
<dd<?php if (!is_null($_filter->attribute_model)) {echo ' class="' . $this->__($_filter->attribute_model->attribute_code) . '" ';} ?>><?php echo $_filter->getHtml() ?></dd>