ошибка на странице списка отзывов
В моем наблюдателе за core_layout_block_create_after
Я проверяю
public function addButtonBlock($observer)
{
$block = $observer->getEvent()->getBlock();
if (($block->getAction()->getFullActionName() == 'catalog_product_view') && ($block->getNameInLayout() == 'product.info')) {
}}
Он отлично работает на странице просмотра продукта, в то время как на странице списка отзывов с формой он выдает ошибку
Неустранимая ошибка PHP: Вызов функции-члена getFullActionName() в строке в /var/www/html/meemee/app/code/community/Tebet/SocialShare/Model/Observer.php в строке 15, ссылка: http://localhost/meemee/asd.html
Я могу получить эхо для список рецензий_продуктов для $block->getAction()->getFullActionName()
, но при его использовании в условии if он выдает ошибку
1 answers
Здесь возникает интересная проблема.
В основном проблема заключается в том, что метод getAction
, объявленный в Mage_Core_Block_Abstract
, определенно является тем, что вам нужно использовать здесь, и ваш код определенно правильный.
Предполагается, что он возвращает Mage_Core_Controller_Varien_Action
, который вы можете использовать для получения полного имени действия.
Однако блок Mage_Review_Block_Form
полностью переписывает метод getAction
со следующим кодом:
public function getAction()
{
$productId = Mage::app()->getRequest()->getParam('id', false);
return Mage::getUrl('review/product/post', array('id' => $productId, '_secure' => $this->_isSecure()));
}
Этот код возвращает строку, поэтому вы не можете вызвать метод getFullActionName
для нее, это проблема.
Я не уверен, почему команда Magento использовала то же имя, что и такая важная функция родительского блока, для меня это звучит как ошибка.
Чего вы можете избежать, так это:
Либо используйте вместо этого следующий код:
Mage::app()->getFrontController()->getAction()->getFullActionName()
Или, если вы хотите что-то сделать для определенного блока, а не для каждого созданного блока, добавьте условие для проверки класса блоков:
if ($block instanceof The_Block_You_Want)
{
if (($block->getAction()->getFullActionName() == 'catalog_product_view') && ($block->getNameInLayout() == 'product.info'))
{
//
}
}
Конечно, это не сработает, если блок, который вы хотите протестировать, является Mage_Review_Block_Form
^^
На примечание, пожалуйста, обратите внимание, что следующий блок также переписывает метод getAction
: Mage_Customer_Block_Newsletter
(и он также возвращает строку)