Вызов функции-члена setCanReadPrice() для не-объекта в option.php
Я создал расширение с помощью "http://magento.ikantam.com/qa/custom-input-types-custom-options "ссылка. Я изменил имя основной папки на Nettantradevelopment, а имя модуля - на Webtoprint.
После изменения всех файлов у меня появилась ошибка "Фатальная ошибка: Вызов функции-члена setCanReadPrice() для не-объекта в option.php .
Мой option.php похоже на
<?php
class Nettantradevelopment_Webtoprint_Block_Adminhtml_Catalog_Product_Edit_Tab_Options_Option
extends Mage_Adminhtml_Block_Catalog_Product_Edit_Tab_Options_Option
{
/**
* Class constructor
*/
public function __construct()
{
parent::__construct();
$this->setTemplate('webtoprint/catalog/product/edit/options/option.phtml');
}
/**
* Retrieve html templates for different types of product custom options
*
* @return string
*/
public function getTemplatesHtml()
{
$canEditPrice = $this->getCanEditPrice();
$canReadPrice = $this->getCanReadPrice();
$this->getChild('webtoprint_option_type')
->setCanReadPrice($canReadPrice)
->setCanEditPrice($canEditPrice);
$templates = parent::getTemplatesHtml() . "\n" .
$this->getChildHtml('webtoprint_option_type');
return $templates;
}
}
Вот мой конфигурационный файл.
<?xml version="1.0"?>
<config>
<modules>
<Nettantradevelopment_Webtoprint>
<version>0.0.1</version>
</Nettantradevelopment_Webtoprint>
</modules>
<global>
<catalog>
<product>
<options>
<custom>
<groups>
<webtoprint translate="label" module="webtoprint">
<label>Web to Print</label>
<render>
webtoprint_adminhtml_catalog_product_edit_tab_options_type_webtoprint
</render>
<types>
<webtoprint_type translate="label" module="webtoprint">
<label>Text</label>
</webtoprint_type>
</types>
</webtoprint>
</groups>
</custom>
</options>
</product>
</catalog>
<blocks>
<adminhtml>
<rewrite>
<catalog_product_edit_tab_options_option>Nettantradevelopment_Webtoprint_Block_Adminhtml_Catalog_Product_Edit_Tab_Options_Option</catalog_product_edit_tab_options_option>
</rewrite>
</adminhtml>
</blocks>
<models>
<catalog>
<rewrite>
<product_option>Nettantradevelopment_Webtoprint_Model_Catalog_Product_Option</product_option>
</rewrite>
</catalog>
</models>
<catalog_product_view>
<reference name="product.info.options">
<action method="addOptionRenderer">
<type>webtoprint</type>
<block>webtoprint/catalog_product_view_options_type_webtoprint</block>
<template>webtoprint/catalog/product/view/options/type/webtoprint.phtml</template>
</action>
</reference>
</catalog_product_view>
</global>
</config>
Является там что-то я сделал не так в файле конфигурации. В учебнике написано одно: "Осталось сделать так, чтобы тип ввода отображался на странице продукта. Добавьте визуализацию в файл макета нашего модуля: "и xml-код
<catalog_product_view>
<reference name="product.info.options">
<action method="addOptionRenderer">
<type>webtoprint</type>
<block>webtoprint/catalog_product_view_options_type_webtoprint</block>
<template>webtoprint/catalog/product/view/options/type/webtoprint.phtml</template>
</action>
</reference>
</catalog_product_view>
Я не знаю, куда я положил код? Пожалуйста, помогите мне.
1 answers
В своем коде вы вызываете $this->getChild('webtoprint_option_type')
. Это означает, что он пытается получить блок там, и если это удастся, он должен вернуть экземпляр класса или каким бы ни был класс блока Nettantradevelopment_Webtoprint_Block_Option_Type
.
Я не вижу, чтобы вы определяли блок где-либо в своем коде, и, как вы уже заявили, у вас нет xml-документа макета, в котором он определен с учетом того факта, что функция getChild
не возвращает объект правильно.
Убедитесь, что вы определили блок с именем webtoprint_option_type
внутри блока, в котором вы находитесь вызывая его из и устанавливая для него соответствующий класс блока. Как только вы это сделаете, ваш код сможет выполнять методы set
, которые вы вызываете в этом классе.