Вызов функции-члена 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>

Я не знаю, куда я положил код? Пожалуйста, помогите мне.

Author: ranjitpradhan, 2013-10-16

1 answers

В своем коде вы вызываете $this->getChild('webtoprint_option_type'). Это означает, что он пытается получить блок там, и если это удастся, он должен вернуть экземпляр класса или каким бы ни был класс блока Nettantradevelopment_Webtoprint_Block_Option_Type.

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

Убедитесь, что вы определили блок с именем webtoprint_option_type внутри блока, в котором вы находитесь вызывая его из и устанавливая для него соответствующий класс блока. Как только вы это сделаете, ваш код сможет выполнять методы set, которые вы вызываете в этом классе.

 1
Author: Sander Mangel, 2013-10-17 11:06:46