বিভাগ মেনুতে লিঙ্ক যুক্ত করা হচ্ছে


20

আমি জানি এটি অনেক উত্তর সহ একটি পুরানো প্রশ্ন, তাদের বেশিরভাগই মেনু টেমপ্লেট সম্পাদনা করার পরামর্শ দেয় তবে এটি আমার পক্ষে কার্যকর হয় না। কেন তা বোঝানোর দরকার নেই, চলুন আমি বলি যে আমি "সঠিক" উপায়ে জিনিসগুলি সম্পর্কে কিছুটা ওসিডি করছি।
এই প্রশ্নটি অন্যের প্রয়োজনের জন্য উপাদান হিসাবে কাজ করতে পারে। এখানে যায়।
Magento 1.7 থেকে শুরু করে শীর্ষ মেনু একটি ইভেন্ট ব্যবহার করে নির্মিত হয়: page_block_html_topmenu_gethtml_beforeMage_Catalogবিভাগগুলি যুক্ত করতে এটি মডিউল দ্বারা ব্যবহৃত হয় । আমি এটি ব্যবহার করতে চাই। এর জন্য আমি এইভাবে আমার মডিউলে একটি পর্যবেক্ষক তৈরি করেছি:

<global>
    <events>
        <page_block_html_topmenu_gethtml_before>
            <observers>
                <my_observer>
                    <class>mymodule/observer</class>
                    <method>addItemsToTopmenuItems</method>
                </my_observer>
            </observers>
        </page_block_html_topmenu_gethtml_before>
    </events>
</global>

ইন Observer.phpবর্গ আমি

public function addItemsToTopmenuItems($observer){
    //get the menu object: //Type Varien_Data_Tree_Node
    $menu = $observer->getMenu();
    //get the tree object in the menu //type Varien_Data_Tree
    $tree = $menu->getTree();
    //get current page handler
    $action = Mage::app()->getFrontController()->getAction()->getFullActionName();
    $brandNodeId = 'category-node-brand';
    //set the node id, label and url
    $data = array(
        'name' => Mage::helper('catalog')->__('Brands'),
        'id' => $brandNodeId,
        'url' => Mage::getUrl('brands'),
        'is_active' => ($action == 'brands')
    );
    //create a node object
    $brandNode = new Varien_Data_Tree_Node($data, 'id', $tree, $menu);
    //add the node to the menu
    $menu->addChild($brandNode);
    return $this;
}

আমার পর্যবেক্ষকের কাছে অন্য কিছু কোড রয়েছে যা Brandsমেনুটির সাব-আইটেম হিসাবে সমস্ত ব্র্যান্ড যুক্ত করে তবে এখানে এটির কোনও প্রয়োজন নেই।
এটি নিখুঁতভাবে কাজ করে এবং মেনুতে Brandsএকটি শেষ আইটেম হিসাবে একটি মেনু যুক্ত করে।
বিষয়টি হ'ল আমি এটি প্রথম মেনু হিসাবে চাই এবং আমার পর্যবেক্ষককে পর্যবেক্ষকের পরে বলা হয় Mage_Catalogযে বিভাগগুলি যুক্ত করে। যেহেতু কোনও ইভেন্টে পর্যবেক্ষকদের ক্রম বাছাই করার কোনও উপায় নেই (এটি আমি জানি না) ... আমার একটি সমস্যা আছে
[সম্পাদনা]
@ বেনমার্কস পরামর্শ হিসাবে আমিMage_Catalogমডিউলটি আমার মডিউলটির উপর নির্ভর করে এবং এখন আমার মেনু আইটেম তালিকার প্রথম। তবে এখনও বিভাগগুলির মধ্যে এবং শেষে আমাকে মেনু যুক্ত করতে হবে। একটি নতুন মডিউল তৈরি করা সম্ভবত মেনুটির শেষে আইটেমগুলির সাথে সমস্যাটি সমাধান করবে, তবে বিভাগগুলির মধ্যে থাকা আমার সাথে এখনও একটি সমস্যা রয়েছে,
[/ এডিআইটি]
সুতরাং মূলত আমার প্রশ্নটি আবার শুরু হয় " (কীভাবে) আমি সন্তানের চারপাশে যেতে পারি? Varien_Data_Tree_Nodeএকটি Varien_Data_Treeবস্তুর একটি নোড ? " বিভাগ বিভাগে প্রথম বিভাগ হিসাবে
যোগ করার পরামর্শ দিবেন না Brands। এটি কোনও বিকল্প নয় (যেমন আমি বলেছি ... এই বিষয়গুলি সম্পর্কে আমার ওসিডি)।


খালি বিভাগগুলি তৈরি না করে কেবল একটি সিএমএস ব্লক না দেখানোর কোনও কারণ আছে? - আমি "হ্যাঁ" একটি উত্তর হিসাবে গ্রহণ করেছি, কেবলমাত্র নিশ্চিত হওয়ার জন্য, আপনি এই সম্পর্কে ভেবেছিলেন :)
ফ্যাবিয়ান ব্ল্যাচসমিডট

1
@FabianBlechschmidt। "হ্যাঁ"। বিশদটি লাভ করার কোনও অর্থ নেই, তবে এর কারণগুলি রয়েছে (এর মধ্যে কয়েকটি বেশ বোকা হতে পারে)। আমি এটিতে "বিধি" তৈরি করি না। সুতরাং এটি এইভাবে করা হয়েছে।
মারিউস

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

আগ্রহী, আমারও একই সমস্যা রয়েছে, আমার সমাধানটি হল ভারিয়ান_ডাটা_ট্রি_নোড_কলেকশনকে ওভাররাইড করা এবং নোডগুলি আমার পছন্দ অনুসারে বাছাই করার পদ্ধতিটি এখানে যুক্ত করা, তবে আমি একটি পরিষ্কার উপায় খুঁজছি।
ফ্যাব

উত্তর:


10

এখানে কিছুটা লড়াই করার পরে আমি সমাধানটি পেয়েছি। আমি আমার পর্যবেক্ষককে এর পরে একটিকে কার্যকর করতে দিয়েছি Mage_Catalogএবং মেনুটিকে পুরোপুরি পুনরায় তৈরি করার সিদ্ধান্ত নিয়েছি।
মূল ধারণাটি হ'ল সমস্ত বিদ্যমান মেনু আইটেমগুলিকে একটি অস্থায়ী বিন্যাসে রাখা, মেনু থেকে এগুলি সরিয়ে তারপর বিদ্যমান আইটেমগুলির মধ্যে আমার লিঙ্কগুলি যুক্ত করুন এবং শেষ পর্যন্ত সমস্ত আইটেমগুলি আবার মেনুতে যুক্ত করুন। এটার মতো কিছু:

public function addItemsToTopmenuItems($observer){
    //get the menu object -Type Varien_Data_Tree_Node
    $menu = $observer->getMenu();
    //get the tree object in the menu -type Varien_Data_Tree
    $tree = $menu->getTree();
    //get current page handler
    $action = Mage::app()->getFrontController()->getAction()->getFullActionName();
    $brandNodeId = 'category-node-brand';
    //set the node id, label and url
    $data = array(
        'name' => Mage::helper('catalog')->__('Brands'),
        'id' => $brandNodeId,
        'url' => Mage::getUrl('brands'),
        'is_active' => ($action == 'brands')
    );
    //create a node object
    $brandNode = new Varien_Data_Tree_Node($data, 'id', $tree, $menu);
    //temporary array with nodes
    $menuItems = array();
    //my first menu item
    $menuItems[] = $brandNode;
    //loop through existing menu items, add them to the array and remove them from the    menu
    foreach ($menu->getChildren() as $child){
        //add the item to the temp array
        $menuItems[] = $child;
        //remove item from the menu
        $menu->removeChild($child);
        //I need to add a new menu item after the category with id 6
        //don't worry the id is not hard coded. it comes from a config setting
        //I just added 6 here to make it easier to read
        if ($child->getId() == 'category-node-6'){
            //create a new node as $brandNode called $newNode
            ...
            //add the node to my temp array
            $menuItems[] = $newNode;
        }
    }
    //add other nodes at the end of my temp array
    ...
    //recreate the menu in the order I need
    foreach ($menuItems as $child){
        $menu->addChild($child);
    }
}

আমার সমস্যা সমাধানের জন্য এই টিউনগুলি, তবে আমি এটি করার আরও মার্জিত পদ্ধতির প্রত্যাশা করছি।


মারিউস পেজ_ব্লক_এইচটিএমএল_টোপেনু_গ্যাথটিএমএল_এছাড়া বিভাগের মেনুতে লিঙ্ক যুক্ত করার জন্য অন্য কোনও পর্যবেক্ষক?
প্রদীপ শঙ্কু

কারণটি হ'ল আমি একই পর্যবেক্ষক ব্যবহার করেছি তবে আমার মেগামেনুর জন্য একটি এক্সটেনশন ছিল যা পেজ_ব্লক_এইচটিএমএল_টোপেনু_জেথটিএমএল_বরেফোর কল করছে না lease দয়া করে আমাকে জানান
প্রদীপ শঙ্কু

@PradeepSanku। আমি অন্য কোন ঘটনা জানি না। হতে পারে আপনি যে এক্সটেনশনটি ব্যবহার করছেন তা পুরো মেনুটিকে পুরোপুরি প্রতিস্থাপন করে। আপনার বিকাশকারীকে সমর্থন চাইতে হবে।
মারিয়াস

4

যেহেতু কোনও ইভেন্টে পর্যবেক্ষকদের ক্রম বাছাই করার কোনও উপায় নেই (এটি আমি জানি না) ... আমার একটি সমস্যা আছে।

আহ, তবে আছে! আপনার মডিউল ঘোষণা ফাইলের মধ্যে, আপনার মডিউলটির নির্ভরতা নির্ধারণ করুন Mage_Catalog, যেমন:

<modules>
    <Your_Module>
        <active>true</active>
        <codePool>local</codePool>
    </Your_Module>
    <Mage_Catalog>
        <depends>
            <Your_Module/>
        </depends>
    </Mage_Catalog>
</modules>

এছাড়াও, আপনি (আমার মনে হয়) ক্যাটালগ পর্যবেক্ষক কনফিগারেশনটি frontendইভেন্ট অঞ্চলে অনুলিপি করতে এবং এটি এলাকায় নিষ্ক্রিয় করতে পারেন global। আমার অনুমান যে globalইভেন্টগুলির আগে frontendইভেন্টগুলি প্রক্রিয়া করা হয় । (এই ইভেন্টটি কেন globalপ্রথম স্থানে কনফিগার করা হয়েছে তা আমার কোনও ধারণা নেই ))

এবং অবশ্যই অন্যান্য বিকল্প রয়েছে যা আপনি পুনর্লিখন এবং পিএইচপি এর মাধ্যমে প্রভাব ফেলতে পারেন।


ধন্যবাদ। আপনার আমার এখানে +1 আছে। আমি প্রকৃতপক্ষে আমার ইভেন্টটিকে <global>ট্যাগের অভ্যন্তরে স্থানান্তরিত করেছি , আমি Mage_Catalogআমার মডিউলটির উপর নির্ভর করার ঘোষণা দিয়েছি (এমনকি আমি এটি করতে কিছুটা 'নোংরা' বোধ করলেও) এটি কার্যকর হয় তবে আমি অন্য একটি সমস্যা নিয়ে শেষ করি। আমার কয়েকটি বিভাগের মধ্যে এবং মেনুটির শেষে কিছু অন্যান্য মেনু আইটেমগুলি প্রয়োজন যাতে আমার এখনও সেগুলি আকাশে সরানো সক্ষম হতে হবে। আমি প্রশ্ন আপডেট করব।
মারিয়াস

-1
  1. নতুন উপশ্রেণী তৈরি করুন
  2. জাভাস্ক্রিপ্টের সাথে লিঙ্কটি পরিবর্তন করুন, প্রাক্তন আপনার নতুন বিভাগটি "75"
jQuery(document).ready(function(){
    document.getElementById("menu75").getElementsByTagName("a")[0].href =

" https: // আপনার নিউলিঙ্কিং "; });


এবং যদি কোনও আইডি দিয়ে কাজ করার কথা হয় তবে আমি কীভাবে উপাদানটির আইডি জানব? এটি কোনও কার্যকর সমাধান নয়। আমি এটাকে একদম কাজেরও বলব না।
মারিয়াস

এটি আমার কোডে কাজ করে ... :)
zatanabee

আইডি শো @ ক্যাটালগ> বিভাগগুলি পরিচালনা করুন
zatanabee
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.