Опция пользовательского типа ввода в продукте magento


Я пытаюсь создать пользовательское расширение с помощью этого руководства:

Я скопировал весь код из учебника в соответствии с его описанием. При создании файла конфигурации и я могу получить пользовательский тип ввода в администраторе, но после этого я создал файл конфигурации

<global>
…
<catalog>
            <product>
                <options>
                    <custom>
                        <groups>
                            <instagramimage translate="label" module="webtoprint">
                                <label>Instagram image</label>
                                <render>webtoprint/adminhtml_catalog_product_edit_tab_options_type_instagramimage</render> 
            <types>
                                    <instagramimage_type translate="label" module="webtoprint">
                                        <label>Image</label>
                                    </instagramimage_type>
                                </types>
                            </instagramimage>
                        </groups>
                    </custom>
                </options>
            </product>
        </catalog>
…
</global>

После создания конфигурационного файла я создал класс

class Ikantam_Webtoprint_Block_Adminhtml_Catalog_Product_Edit_Tab_Options_Type_Instagramimage extends
    Mage_Adminhtml_Block_Catalog_Product_Edit_Tab_Options_Type_Abstract
{
    public function __construct()
    {
        parent::__construct();
        $this->setTemplate('webtoprint/catalog/product/edit/options/type/instagramimage.phtml');
    }
}

, А также создал страницу шаблона как

<script type="text/javascript">
    //<![CDATA[
    OptionTemplateInstagramimage = '<table class="border" cellpadding="0" cellspacing="0">'+
            '<tr class="headings">'+
    <?php if ($this->getCanReadPrice() !== false) : ?>
            '<th class="type-price"><?php echo Mage::helper('catalog')->__('Price') ?></th>' +
            '<th class="type-type"><?php echo Mage::helper('catalog')->__('Price Type') ?></th>' +
        <?php endif; ?>
            '<th class="type-sku"><?php echo Mage::helper('catalog')->__('SKU') ?></th>'+
            '</tr>'+
            '<tr>'+
    <?php if ($this->getCanReadPrice() !== false) : ?>
            '<td><input type="text" class="input-text validate-number product-option-price" id="product_option_{{option_id}}_price" name="product[options][{{option_id}}][price]" value="{{price}}"<?php if ($this->getCanEditPrice() === false) : ?> disabled="disabled"<?php endif; ?>></td>' +
            '<td><?php echo $this->getPriceTypeSelectHtml() ?>{{checkboxScopePrice}}</td>' +
        <?php else : ?>
            '<input type="hidden" name="product[options][{{option_id}}][price]">' +
            '<input type="hidden" name="product[options][{{option_id}}][price_type]" id="product_option_{{option_id}}_price_type">' +
        <?php endif; ?>
            '<td class="type-last last"><input type="text" class="input-text" name="product[options][{{option_id}}][sku]" value="{{sku}}"></td>'+
            '</tr>'+
            '</table>';
    if ($('option_panel_type_instagramimage')) {
        $('option_panel_type_instagramimage').remove();
    }
    //]]>
</script>

После создания части шаблона я переписываю опцию вкладки редактирования как в учебнике

<blocks>
            <adminhtml>
                <rewrite>
                    <catalog_product_edit_tab_options_option>Ikantam_Webtoprint_Block_Adminhtml_Catalog_Product_Edit_Tab_Options_Option</catalog_product_edit_tab_options_option>
                </rewrite>
            </adminhtml>
        </blocks>

Но после этого, когда я создал пользовательский блок, унаследовав его от переписанного как

class Ikantam_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('instagramimage_option_type')
            ->setCanReadPrice($canReadPrice)
            ->setCanEditPrice($canEditPrice);
        $templates = parent::getTemplatesHtml() . "\n" .
            $this->getChildHtml('instagramimage_option_type');
        return $templates;    } }

Здесь я получил ошибку

Fatal error: Call to a member function setCanReadPrice() on a non-object in /var/www/TantraProjects/MagentoPOS/Repo/WebApp/app/code/local/Ikantam/Webtoprint/Block/Adminhtml/Catalog/Product/Edit/Tab/Options/Option.php on line 23

Что случилось, пожалуйста, помогите мне.

Вся моя config.xml файл

<?xml version="1.0"?>
<config>
  <modules>  
    <Ikantam_Webtoprint>  
     <version>0.0.1</version>  
    </Ikantam_Webtoprint>  
  </modules>
  <global>
    <catalog>
      <product>
        <options>
          <custom>
            <groups>
              <instagramimage translate="label" module="webtoprint">
                <label>Instagram image</label>
                <render>webtoprint/adminhtml_catalog_product_edit_tab_options_type_instagramimage</render> 
                <types>
                  <instagramimage_type translate="label" module="webtoprint">
                    <label>Image</label>
                  </instagramimage_type>
                </types>
              </instagramimage>
            </groups>
          </custom>
        </options>
      </product>
    </catalog>
<!--    <blocks>
      <adminhtml>
        <rewrite>
          <catalog_product_edit_tab_options_option>Ikantam_Webtoprint_Block_Adminhtml_Catalog_Product_Edit_Tab_Options_Option</catalog_product_edit_tab_options_option>
        </rewrite>
      </adminhtml>
    </blocks>
    <models>
      <catalog>
        <rewrite>
          <product_option>Ikantam_Webtoprint_Model_Catalog_Product_Option</product_option>
        </rewrite>
      </catalog>
    </models>
    <model>
      <catalog>
        <rewrite>
          <product_option_type_Instagramimagetype>Ikantam_Webtoprint_Model_Catalog_Product_Option_Type_Instagramimagetype</product_option_type_Instagramimagetype>
        </rewrite>
      </catalog>
    </model>
-->  </global>
</config>
Author: ranjitpradhan, 2013-10-23

1 answers

Извините, я заметил это, когда вы опубликовали вопрос ранее, но проблема в том, что средство визуализации этой группы option_type имеет значение webtoprint/adminhtml_catalog_product_edit_tab_options_type_instagramimage, которое указывает на файл с классом Ikantam_Webtoprint_Block_Adminhtml_Catalog_Product_Edit_Tab_Options_Option. Но так как вы разместили свое расширение в пространстве имен Nettantradevelopment, класс должен быть Nettantradevelopment_Webtoprint_Block_Adminhtml_Catalog_Product_Edit_Tab_Options_Option.

Убедитесь, что все пространства имен и имена модулей правильно преобразованы, когда вы будете следовать учебнику. Или еще лучше, вообще ничего не меняйте и используйте их пространство имен и имя модуля, пока не будете уверены все работает, а затем начните переименовывать/перемещать расширение.

Также убедитесь, что вы не только перезаписали класс блоков, но и добавили свой класс блоков в config.xml

<blocks>
    <webtoprint>
        <class>Ikantam_Webtoprint_Block</class>
    </webtoprint>
    <adminhtml>
        <rewrite>
            <catalog_product_edit_tab_options_option>Ikantam_Webtoprint_Block_Adminhtml_Catalog_Product_Edit_Tab_Options_Option</catalog_product_edit_tab_options_option>
        </rewrite>
    </adminhtml>
</blocks>
 4
Author: Sander Mangel, 2013-10-23 11:13:49