পণ্যের বিবরণে কাস্টম ট্যাব যুক্ত করার সেরা অনুশীলন (ব্যাকএন্ড)


9

আমি পণ্যের বিবরণে (ব্যাকএন্ড) একটি অতিরিক্ত ট্যাব যুক্ত করতে চাই এবং সম্ভব হলে আমি কোনও ওভাররাইড সম্পাদন করতে চাই না।

এটি সম্পাদন করার সর্বোত্তম উপায় কী?

উত্তর:


16

ব্যক্তিগতভাবে আমি addTab()সরবরাহিত ব্যবহার করে একটি বিন্যাস / ক্রিয়া পদ্ধতির জন্য যেতে চাইMage_Adminhtml_Block_Widget_Tabs

সুতরাং 2 প্রধান পদক্ষেপ এখানে জড়িত:

  1. এক্সএমএল লেআউট পরিবর্তন যুক্ত করুন
  2. ট্যাব ক্লাস তৈরি করুন
  3. (এগুলি এখানে সুযোগের বাইরে একটি নতুন মডিউল তৈরি করা সম্পন্ন করতে পারে)

- 1. লেআউট পরিবর্তন -

<?xml version="1.0"?>
<layout>
     <adminhtml_catalog_product_edit>
        <reference name="product_tabs">
            <block type="MODULENAME/adminhtml_catalog_product_edit_tab" name="custom_tab"/>
            <action method="addTab">
                <name>Custom Tab</name>
                <block>custom_tab</block>
            </action>
        </reference>
    </adminhtml_catalog_product_edit>
</layout>

- 2. ট্যাব শ্রেণি -

<?php
class NAMESPACE_MODULENAME_Block_Adminhtml_Catalog_Product_Edit_Tab extends Mage_Adminhtml_Block_Widget
    implements Mage_Adminhtml_Block_Widget_Tab_Interface
{
    public function canShowTab()
    {
        return true;
    }
    public function getTabLabel()
    {
        return $this->__('Custom Tab');
    }
    public function getTabTitle()
    {
        return $this->__('Custom Tab');
    }
    public function isHidden()
    {
        return false;
    }
    public function getTabUrl()
    {
        return $this->getUrl('*/*/customtab', array('_current' => true));
    }
    public function getTabClass()
    {
        return 'ajax';
    }
} 

দ্রষ্টব্য:
ব্যাকএন্ড ডেভলপমেন্ট সম্পর্কে খুব কম ডকুমেন্টেশন রয়েছে, আমার মনে হয় ম্যাজেন্টো ডেভসের মতো। এই অঞ্চলটি সম্পর্কে জ্ঞান ভাগ করে নিতে একরকম লজ্জাজনক (এবং উপরের প্রশ্নটি এই কারণেই))

উত্স:
এই কৌশলটি এখানে পাওয়া যাবে:
- http://www.webspeaks.in/2012/02/create-custom-tab-in-magento-product-addedit-page.html এবং এই ইঞ্চু নিবন্ধের মন্তব্যে :
- http://inchoo.net/ecommerce/magento/how-to-add-custom-product-references-in-magento/


4

আমি এখানে এটি কিভাবে।

ইভেন্টটির জন্য একটি পর্যবেক্ষক তৈরি করুন core_block_abstract_prepare_layout_after। যদিও এটি সেরা ইভেন্ট কিনা তা নিশ্চিত নন।

<adminhtml>
    ...
    <events>
       <core_block_abstract_prepare_layout_after>
            <observers>
                <[namespace]_[module]_product>
                    <type>singleton</type>
                    <class>[module]/adminhtml_observer</class>
                    <method>addProductTabBlock</method>
                </[namespace]_[module]_product>
            </observers>
       </core_block_abstract_prepare_layout_after>
    </events>
    ....
</adminhtml>

তারপরে পর্যবেক্ষক তৈরি করুন

class [Namespace]_[Module]_Model_Adminhtml_Observer {
    //this checks if the tab can be added. You don't want to add the tab when selecting the product type and attribute set or when selecting the configurable attributes.
    protected function _canAddTab($product){
        if ($product->getId()){
            return true;
        }
        if (!$product->getAttributeSetId()){
            return false;
        }
        $request = Mage::app()->getRequest();
        if ($request->getParam('type') == 'configurable'){
            if ($request->getParam('attributes')){
                return true;
            }
        }
        return false;
    }
    //the method that actually adds the tab
    public function addProductTabBlock($observer){
        $block = $observer->getEvent()->getBlock();
        $product = Mage::registry('product');
        //if on product tabs block and the tab can be added...
        if ($block instanceof Mage_Adminhtml_Block_Catalog_Product_Edit_Tabs && $this->_canAddTab($product)){
            //in case there is an ajax tab
            $block->addTab('some_identifier_here', array(
                'label' => Mage::helper('catalog')->__('Some Label here'),

                'url'   => Mage::helper('adminhtml')->getUrl('adminhtml/some_url/here', array('_current' => true)),
                'class' => 'ajax', 
            ));
            //in case it's a simple content tab
            $block->addTab('other_identifier_here', array(
                 'label'     => Mage::helper('catalog')->__('Label here'),
                'content'   => $this->getLayout()->createBlock('[module]/block_alias')->toHtml(),
            )); 
        }
        return $this;
    }
}

আপনার মডিউলটির জন্য আপনার যে মান রয়েছে তা প্রতিস্থাপন [namespace]এবং তা নিশ্চিত করে নিন [module]


এটি সেরা অনুশীলন নয়
ফ্রে

2
@ ফ্রা আমি এটি বলিনি। উত্তরটি "এখানে আমি এটি কীভাবে করব" দিয়ে শুরু হয়েছিল। এবং এটি কাজ করে। এটিকে চ্যালেঞ্জ করতে, এটিকে পরিবর্তন করতে বা আরও ভাল বিকল্প নিয়ে আসা নির্দ্বিধায়।
মারিয়াস

এই পদ্ধতির থাকা ভাল তবে আমরা এই পৃষ্ঠায় সমস্ত সম্ভাব্য সমাধান সংগ্রহ করতে পারি। (আরও "ম্যাজেন্টো" উপায়ে আমার উত্তরটি দেখুন)
ফ্রে

@Fra। মজাদার. আমি এটা চেষ্টা করব.
মারিউস

@ মারিয়াস, আমি ক্যাটালগ-> পণ্য পরিচালনা করার মতো একটি নতুন মেনু তৈরি করতে চাই। সম্পাদন করার কোনও উপায় আছে catalog ক্যাটালগের সঠিক কপি-> পণ্যগুলি পরিচালনা করুন।
মুজাহিদ

2

আপনার config.xmlফাইলটিতে নিম্নলিখিত কোড যুক্ত করুন

<blocks>
...
    <modulename>
        <class>Company_ModuleName_Block</class>
    </modulename>
    <adminhtml>
        <rewrite>
             <catalog_product_edit_tabs>Company_ModuleName_Block_Adminhtml_Tabs</catalog_product_edit_tabs>
         </rewrite>
     </adminhtml>
...
</blocks>

এর পরে আপনার একটি নতুন ফাইল তৈরি করা উচিত: Company/ModuleName/Block/Adminhtml/Tabs.php

<?php

class Company_ModuleName_Block_Adminhtml_Tabs extends Mage_Adminhtml_Block_Catalog_Product_Edit_Tabs
{
    private $parent;

    protected function _prepareLayout()
    {
        //get all existing tabs
        $this->parent = parent::_prepareLayout();
        //add new tab
        $this->addTab('tabid', array(
                     'label'     => Mage::helper('catalog')->__('New Tab'),
                     'content'   => $this->getLayout()
             ->createBlock('modulename/adminhtml_tabs_tabid')->toHtml(),
        ));
        return $this->parent;
    }
}

এর পরে, একটি ফাইল তৈরি করুন: Company/ModuleName/Block/Adminhtml/Tabs/Tabid.php

<?php

class Company_ModuleName_Block_Adminhtml_Tabs_Tabid extends Mage_Adminhtml_Block_Widget
{
    public function __construct()
    {
        parent::__construct();
        $this->setTemplate('modulename/newtab.phtml');
    }
}

অ্যাপ্লিকেশন / কোড / স্থানীয় / পুরোনো যাদুকর / Adminhtml / ব্লক / ক্যাটালগ / পণ্য / সম্পাদনা / Tabs.php

) এবং ফাংশনে নিম্নলিখিত স্নিপেট যুক্ত করুন _prepareLayout()

$this->addTab('tabid', array(
              'label'     => Mage::helper('catalog')->__('New Tab'),
              'content'   => $this->_translateHtml($this->getLayout()
     ->createBlock('modulname/adminhtml_tabs_tabid')->toHtml()),
));

আপনি সর্বদা যে কোনও মূল ফাইলের স্থানীয় তৈরি করতে পারেন।


পুনর্লিখনটি স্বাগত ছিল না, যাইহোক এই পদ্ধতির সাথে থাকা ভাল তাই আমাদের এখানে সমস্ত সম্ভাব্য সমাধান রয়েছে
ফ্রে

আমরা যখনই আপনার ব্যক্তিগত পছন্দ থাকি না কেন, স্থানীয় তৈরি করে আমরা সবসময় পুনরায় লেখা এড়াতে পারি that শুভকামনা
টিবিআই ইনফোটেক

এই শেষ উত্তরটি সত্যিই ভাল নয় ... স্থানীয় শুধুমাত্র শেষ সমাধান হিসাবে ব্যবহার করা উচিত, এটি একটি পুনর্লিখনের চেয়ে সত্যই খারাপ
ফ্রে

দয়া করে পরামর্শ দিন কীভাবে স্থানীয়ভাবে পুনরায় লেখার আরও খারাপ তৈরি হচ্ছে?
টিবিআই ইনফোটেক 13

আপনি কি কখনও ম্যাজেন্টো আপগ্রেড করেছেন? স্থানীয় কখনও ব্যবহার করা উচিত নয়, এটি সর্বোত্তম অনুশীলন ... স্থানীয় প্রায় হ'ল মূল ফাইল সম্পাদনা করার মতো।
ফ্রেমে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.