7

カスタム商品タイプのみの画像「価格-サイズ」のような新しいカスタムタブを追加したい

このリンク1リンク2のコードを試しましたが、すべての製品タイプの追加/編集にタブが表示されます

私の質問はこれと同じですが、コーディングを使用してこれを行いたい

ここに画像の説明を入力してください

mysql4-install-0.1.0.php

$installer = $this;
$installer->startSetup();
$installer->addAttribute('catalog_product', 'limits', array(
    'group'             => 'Price - Size',
    'type'              => 'varchar',
    'frontend'          => '',
            'backend'           => 'custproduct/entity_attribute_backend_limit',
    'label'             => 'Limit',
    'input'             => 'text',
    'class'             => '',
    'source'            => '',
    'global'            => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
    'visible'           => true,
    'required'          => false,
    'user_defined'      => true,
    'default'           => '1',
    'searchable'        => false,
    'filterable'        => false,
    'comparable'        => false,
    'visible_on_front'  => true,
    'unique'            => false,
    'apply_to'          => My_Custproduct_Model_Product_Type::TYPE_CustomProduct_PRODUCT, //also try 'custproduct'
    'is_configurable'   => false
));
$installer->addAttributeGroup('catalog_product', 'Default','Price - Size', 40);
$installer->addAttributeToSet('catalog_product','Default', 'Price - Size', 'limits');

$fieldList = array('price','special_price','special_from_date','special_to_date',
    'minimal_price','cost','tier_price','weight','tax_class_id');

 foreach ($fieldList as $field) {
    $applyTo = explode(',', $installer->getAttribute('catalog_product', $field, 'apply_to'));
    if (!in_array('custproduct', $applyTo)) {
        $applyTo[] = 'custproduct';
        $installer->updateAttribute('catalog_product', $field, 'apply_to', join(',', $applyTo));
    }
}
$installer->endSetup();

属性「limits」が追加されましたが、すべての製品タイプに表示されます。カスタム製品タイプ(custproduct)でのみ必要です。

返信ありがとうございます私の問題は今解決しました

$fieldList配列に「制限」を追加しました

$fieldList = array('price','special_price','special_from_date','special_to_date',
    'minimal_price','cost','tier_price','weight','tax_class_id', 'limits');

ありがとう!!!

4

4 に答える 4

10

Magentoは非常に柔軟性があるため、目的の結果を達成する方法は多数あります。唯一の問題は、それを行うための最良の方法を決定することです。つまり、最も信頼性が高く効果的な方法を見つけることです。

ここでは、2つのアプローチを提案できます。選択は、最初の質問に記載されていない、必要な機能の技術的な詳細によって異なります。

  1. カスタムタブには、製品のデータを入力するために使用される基本的なフィールドのみが含まれます
  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つを選択することをお勧めします。

あなたの店で頑張ってください:)

于 2013-01-08T11:16:30.853 に答える
2

パラメータを使用する必要がありますapply_to

$productTypes = array(
    Mage_Catalog_Model_Product_Type::TYPE_SIMPLE,
    Mage_Catalog_Model_Product_Type::TYPE_BUNDLE,
    Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE,
    Mage_Catalog_Model_Product_Type::TYPE_VIRTUAL
);

$productTypes = join(',', $productTypes);
$globalScope = Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL;
$installer->addAttribute(
Mage_Catalog_Model_Product::ENTITY, 'artist_id',
array(
     'global'                  => $globalScope,
     'visible'                 => false,
     'required'                => false,
     'user_defined'            => true,
     'default'                 => '',
     'apply_to'                => $productTypes, // <-- apply_to
     'visible_on_front'        => false,
     'used_in_product_listing' => false,
     'type'                    => 'int', //backend_type

)
);

..そして属性を属性セットに追加します

$setup->addAttributeToSet(
    'product_catalog',
    %ATTRIBUTE_SET%,
    %ATTRIBUTE_GROUP%,
    'testing_attribute'
);

製品のデフォルトの属性セットを取得するには、次のコードを使用します。

$productDefaultAttributeSet = $installer->getDefaultAttributeSetId(Mage_Catalog_Model_Product::ENTITY);
于 2012-12-31T08:10:37.773 に答える
0

バックエンドの新しいグループ

バックエンドに新しい「グループ」タブを作成するコードは次のとおりです。

$installer = $this;
$productAttributesSetup = new Mage_Eav_Model_Entity_Setup('core_setup');
$installer->startSetup();

// this is the line you need 
$productAttributesSetup->addAttributeGroup('catalog_product', 'Attribute Set', 'Name of Group');
$installer->endSetup();

特別な製品のみ

特定の製品でのみ表示されるようにするには、次の手順に従います。

  1. 新しい属性セットを作成します(すでに使用しているものに基づいて)
  2. この新しい属性セットにカスタムタブ/グループを追加します
  3. すべての特別な製品(このタブを配置する必要がある)は、この新しい属性セットを使用する必要があります

カスタム製品をカートで機能させる

Inchooは「カスタム製品」モジュールを作成しました。コードを彼らのコードと比較することをお勧めします。

モジュール(および記事)へのリンクは次のとおりです。

http://inchoo.net/ecommerce/magento/how-to-create-a-new-product-type-in​​-magento/

于 2013-01-02T20:00:27.243 に答える
0

希望する動作を得るには、クラスMage_Adminhtml_Block_Catalog_Product_Edit_Tabsを書き直す必要があると思います。

そこで、メソッド_prepareLayout()は、すべてのタブを作成します。

    foreach ($groupCollection as $group) {
    ...
    $this->addTab('group_'.$group->getId(), array(
        'label' => Mage::helper('catalog')->__($group->getAttributeGroupName()),
        'content'   => $this->_translateHtml(
                          $this->getLayout()
                               ->createBlock($this->getAttributeTabBlock(),
                                   'adminhtml.catalog.product.edit.tab.attributes')
                               ->setGroup($group)
                               ->setGroupAttributes($attributes)
                               ->toHtml()),
            ));
    }

メソッド内には、製品タイプをチェックするために使用できる変数$productがあります。したがって、属性の特定のグループ名と製品タイプを確認し、必要な方法に一致する場合は、対応するタブのみを追加してください。

于 2013-01-03T09:41:26.290 に答える