2013-09-24 3 views
0

Я создал специальный модуль, где я хочу показать некоторую информацию о продукте. В config.xml я добавилMagento 1.7 - Пользовательский модуль, функция вызова

<blocks> 
    <mymodule> 
     <class>Namespace_MyModule_Block</class> 
    </mymodule> 
</blocks> 

Класс блок расширяет Mage_Catalog_Block_Product_View. Но я не могу назвать

$this->getProduct() 

в * .phtml файл в соответствии с модулем (mymodule.phtml). В XMLs настроены хорошо, так что я могу назвать .phtml с

<?php echo $this->getChildHtml('mymodule'); ?> 

но $ продуктов всегда нулем. В соответствии с конфигурацией в modules config.xml $ this-> getProduct() должен получить доступ к Mynamespace_MyModule_Block_View и вызвать функцию. Я попытался использовать фиктивную функцию, которая просто возвращает строковое значение, но это тоже не работает.

Я надеюсь, что кто-то может дать мне прогноз погоды, есть недостающая или неправильная конфигурация.

EDIT 1: Содержание layout.xml

<?xml version="1.0"?> 
<layout> 
    <catalog_product_view> 
     <reference name="product.info"> 
      <block type="core/template" name="product_available_price" as="product_available_price" 
        template="productavailable/price.phtml"/> 
      <block type="core/template" name="product_available_info" as="product_available_info" 
        template="productavailable/info.phtml"/> 
      <block type="core/template" name="product_available_button" as="product_available_button" 
        template="productavailable/button.phtml"/> 
     </reference> 
    </catalog_product_view> 
</layout> 

В button.phtml я называю $ this-> getProduct() и метод в Mynamespace_MyModule_Block_Button

+0

Может быть, вы должны добавить в вопросе содержимое файла макета – Marius

ответ

3

в одном из моего пользовательского модуля я использовал, как показано ниже

класс Yournamespace_Brand_Block_View расширяет Mage_Catalog_Block_Product_Abstract

И я также использовал все возможности продукта с функциональностью Magento по умолчанию, как

пагинацией и панель инструментов и т.д.

Редактировать

изменить тип блока от core/template к productavailable/button

<block type="productavailable/button" name="product_available_button" as="product_available_button"      template="productavailable/button.phtml"/> 

надеюсь, что это решит вашу проблему.

дайте мне знать, если я могу вам помочь.

+0

Я попытался класс 'Mynamespace_ProductAvailable_Block_Button расширяет Mage_Catalog_Block_Product_Abstract' но вызова $ this-> getProduct в кнопке. phtml по-прежнему возвращает null. – s4lfish

+0

попытайтесь вызвать в своем блочном файле, а затем назначить или вернуть в свои файлы phtml – liyakat

+0

Как вы называете «назначать или возвращать»? Я попробовал аналогичную функциональность, как в default view.phtml, где вызывается $ this-> getProduct() из View.php. – s4lfish

2

Возможно, я не понял вашу проблему, но если я прав, вы пытаетесь позвонить $this->getProduct(), который является функцией в вашем пользовательском блоке Mynamespace_ProductAvailable_Block_Button. Если я смотрю на ваш XML ваш блок не связан с PHTML:

<block type="core/template" name="product_available_button" as="product_available_button" 
       template="productavailable/button.phtml"/> 

Это должно быть:

<block type="productavailable/button" name="product_available_button" as="product_available_button" 
        template="productavailable/button.phtml"/> 

«Тип» атрибут связывает блок с PHTML, так что вы пропали без вести это.Теперь вы используете класс шаблона ядра, которые не имеют getProduct() метод

+0

Это точно ответ. Лиякат также упомянул об этой ошибке в комментариях, но для дальнейших посетителей я принимаю этот ответ, чтобы они могли быстро найти решение. – s4lfish

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