Как скрыть верхние ссылки из групп клиентов


Можно ли скрыть определенные верхние ссылки в зависимости от группы клиентов? Поскольку у нас есть новая функция, на которую мы добавили ссылку в верхней ссылке, но она доступна только определенным клиентам.

Мы объявили ссылку xml-файлом, и она отлично отображается. Мне просто нужно знать, можно ли скрыть ссылку, если клиент не вошел в систему или вошел в систему, но не входит в определенную группу

<reference name="top.links">
                <block type="advancedquickorder/index" name="add.advancedquickorder.link">
                    <action method="addAdvancedquickorderLink" ifconfig="advancedquickorder/general/active"><param>top</param></action>              
                </block>
            </reference> 
Author: Adam Allen, 2015-06-04

2 answers

Добавьте приведенные ниже коды В config.xml

   <frontend>     
      <events>
        <controller_action_layout_generate_xml_before>
           <observers>
              <Mymodule>
                 <class>Namespace_Mymodule_Model_Observer</class>
                 <method>addmyblock</method>
              </Mymodule>
           </observers>
         </controller_action_layout_generate_xml_before>
       </events>
    </frontend> 

В observer.php

class Namespace_Mymodule_Model_Observer
{

    public function addmyblock(Varien_Event_Observer $observer){

        $loggedIn = Mage::getSingleton('customer/session')->isLoggedIn();
        // add Handler when customer is loggedin
        if($loggedIn){
            $groupId = Mage::getSingleton('customer/session')->getCustomerGroupId(); 
            $groupname = Mage::getModel('customer/group')->load($groupId)->getCustomerGroupCode();
            if($groupname == "group name"){
                $layout = $observer->getLayout();
                $layout->getUpdate()->addUpdate('<reference name="top.links">
                                <remove name="add.advancedquickorder.link"/></reference>');              
                $layout->generateXml(); 
            }
        }
    } 
}

Вы можете удалить любую из верхних ссылок с помощью приведенного выше кода

 2
Author: saravanavelu, 2015-06-06 05:48:49

Вы можете сделать это, создав обработчик в соответствии с группой клиентов с помощью magento/наблюдателя событий.

При controller_action_layout_load_before событии запускает наблюдателя, который will insert a new handler on current layout.

Это имя макета должно быть dynamic basic of Customer group name.

Если general group клиент входит в систему, то его обработчик anme customer_group_general

Логика, подобная customer_group_CustomerGROUPCODE.

Config.xml код: `

       <frontend>
        <events>
            <controller_action_layout_load_before>
                <observers>
                    <customer_group_wise_handler>
                        <class>stackexchange70064/observer</class>
                        <method>addCustomerLoadLayout</method>
                    </customer_group_wise_handler>
                </observers>
            </controller_action_layout_load_before>
       </events>
 </frontend>

`

Код наблюдателя:

<?php
class Magento_Stackexchange70064_Model_Observer{

    public function addCustomerLoadLayout($observer)
    {
        $loggedIn = Mage::getSingleton('customer/session')->isLoggedIn();
        // add Handler when customer is loggedin
        if($loggedIn):

        $groupId = Mage::getSingleton('customer/session')->getCustomerGroupId();
        //Get customer Group name

        $group = Mage::getModel('customer/group')->load($groupId);

        // add handler to current layout
        $observer->getEvent()->getLayout()->getUpdate()
        ->addHandle('customer_group_'.strtolower($group->getData('customer_group_code')));
        //Mage::log('customer_group_'.strtolower($group->getData('customer_group_code')), null, 'logfile.log');
        endif;

    }
}

Вы можете заполнить модули по адресу Гитхаб

Затем эти обработчики и с помощью атрибута удаления тега макета удаляют верхнюю ссылку для конкретного клиента

Например:

Предположим, что вы хотите удалить add.advancedquickorder.link блок для general Customer group.

Тогда попробуйте это

<customer_group_general>
   <reference name="top.links"><remove name="add.advancedquickorder.link"/></reference>
</customer_group_gerenal>
 1
Author: Amit Bera, 2015-06-06 08:55:01