Magentoは非常に柔軟性があるため、目的の結果を達成する方法は多数あります。唯一の問題は、それを行うための最良の方法を決定することです。つまり、最も信頼性が高く効果的な方法を見つけることです。
ここでは、2つのアプローチを提案できます。選択は、最初の質問に記載されていない、必要な機能の技術的な詳細によって異なります。
- カスタムタブには、製品のデータを入力するために使用される基本的なフィールドのみが含まれます
- カスタムタブには、詳細フィールド、JavaScript、その他のカスタムHTMLマークアップが含まれます。
両方の場合の解決策を見てみましょう。
#1。タブには、製品のデータを入力するために使用される基本的なフィールドのみが含まれます
このような場合、Magentoの属性メカニズムを使用するだけで十分です。製品の属性(フィールド)を作成し、それらを特定の製品タイプにのみ適用し、フィールドをグループ(タブ)に分割することができます。
これは、スクリプトがどのように見えるかを示しています。
<module_dir> /sql/install-1.0.0.0.php
<?php
/* @var $installer Mage_Catalog_Model_Resource_Setup */
$installer = $this;
// Add attribute
$allowedProductTypes = array(
Mage_Catalog_Model_Product_Type_Grouped::TYPE_CODE,
Mage_Downloadable_Model_Product_Type::TYPE_DOWNLOADABLE,
);
$installer->addAttribute(Mage_Catalog_Model_Product::ENTITY, 'attribute_for_tab', array(
'label' => 'Attribute For Tab',
'apply_to' => implode(',', $allowedProductTypes),
'type' => 'varchar',
'input' => 'text',
'default' => '',
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
'user_defined' => true,
'visible' => true,
'required' => false,
'searchable' => false,
'filterable' => false,
'comparable' => false,
'visible_on_front' => false,
'unique' => false,
'is_configurable' => false
));
// Add group
$installer->addAttributeGroup(Mage_Catalog_Model_Product::ENTITY, 'Default', 'My Attribute Tab');
// Add attribute to set and group
$installer->addAttributeToSet(Mage_Catalog_Model_Product::ENTITY, 'Default', 'My Attribute Tab', 'attribute_for_tab');
このアプローチの簡単なモジュール例をダウンロードしてください: "attribute_tab.zip"
#2。カスタムタブには、詳細フィールド、JavaScript、その他のカスタムHTMLマークアップが含まれます。
このような場合、タブは通常のMagentoブロックとして作成する必要があります。そして、レイアウトを介してタブレンダラーに注入されます。
カスタムタブブロック<module_dir>/Block/Adminhtml/Catalog/Product/Edit/Tab/Custom.php
<?php
class Zerkella_CustomTab_Block_Adminhtml_Catalog_Product_Edit_Tab_Custom
extends Mage_Adminhtml_Block_Widget implements Mage_Adminhtml_Block_Widget_Tab_Interface
{
/**
* Class constructor
*
*/
public function __construct()
{
parent::__construct();
$this->setTemplate('zerkella_customtab/catalog/product/edit/tab/custom.phtml');
}
/**
* Get tab label
*
* @return string
*/
public function getTabLabel()
{
return Mage::helper('zerkella_customtab')->__('My Custom Tab');
}
/**
* Get tab title
*
* @return string
*/
public function getTabTitle()
{
return Mage::helper('zerkella_customtab')->__('My Custom Tab');
}
/**
* Check if tab can be displayed
*
* @return boolean
*/
public function canShowTab()
{
$allowedProductTypes = array(
Mage_Catalog_Model_Product_Type_Grouped::TYPE_CODE,
Mage_Downloadable_Model_Product_Type::TYPE_DOWNLOADABLE,
);
$productType = $this->_getProduct()->getTypeId();
return in_array($productType, $allowedProductTypes);
}
/**
* Retrieve product
*
* @return Mage_Catalog_Model_Product
*/
protected function _getProduct()
{
return Mage::registry('current_product');
}
/**
* Check if tab is hidden
*
* @return boolean
*/
public function isHidden()
{
return false;
}
}
レイアウトファイルapp/design / adminhtml / default / default / layout / zerkella_customtab.xml:
<?xml version="1.0"?>
<layout>
<adminhtml_catalog_product_new>
<reference name="product_tabs">
<action method="addTab">
<name>my_custom_tab</name>
<block>zerkella_customtab/adminhtml_catalog_product_edit_tab_custom</block>
</action>
</reference>
</adminhtml_catalog_product_new>
<adminhtml_catalog_product_edit>
<reference name="product_tabs">
<action method="addTab">
<name>my_custom_tab</name>
<block>zerkella_customtab/adminhtml_catalog_product_edit_tab_custom</block>
</action>
</reference>
</adminhtml_catalog_product_edit>
</layout>
注:canShowTab()
カスタムタブを持つ製品タイプが固定されている場合は、ブロックのメソッドで動的にチェックするのではなく、静的にレイアウトファイルに配置できます。
カスタムタブのある製品タイプが修正され、ダウンロード可能のみが含まれている場合の、このようなサンプルケースのレイアウトファイルは次のとおりです。app/ design / adminhtml / default / default / layout /zerkella_customtab.xml:
<?xml version="1.0"?>
<layout>
<adminhtml_catalog_product_downloadable>
<reference name="product_tabs">
<action method="addTab">
<name>my_custom_tab</name>
<block>zerkella_customtab/adminhtml_catalog_product_edit_tab_custom</block>
</action>
</reference>
</adminhtml_catalog_product_downloadable>
</layout>
残りは簡単です-入力したものはすべてzerkella_customtab/catalog/product/edit/tab/custom.phtml
タブに表示されます。
このアプローチの簡単なモジュール例をダウンロードできます:「custom_tab.zip」
また、タスクを実装するためにクラスの書き換えを使用することはお勧めしません。上記のアプローチは、開発者のすべてのニーズをカバーします。書き換えを利用する意味はありません。リライトは強力な機能であり、Magentoで何でも実行できますが、次の2つの制限があります。
- クラスは1つのモジュールでのみ書き換えることができます
- システムに書き換えられたクラスがある場合、Magentoを新しいバージョンにアップグレードするには、さらに作業が必要になります
提案されたアプローチは、Magentoで製品タブをカスタマイズする自然な方法に従うため、そのうちの1つを選択することをお勧めします。
あなたの店で頑張ってください:)