Опция пользовательского типа ввода в продукте 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>
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>