Как скрыть верхние ссылки из групп клиентов
Можно ли скрыть определенные верхние ссылки в зависимости от группы клиентов? Поскольку у нас есть новая функция, на которую мы добавили ссылку в верхней ссылке, но она доступна только определенным клиентам.
Мы объявили ссылку 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>
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();
}
}
}
}
Вы можете удалить любую из верхних ссылок с помощью приведенного выше кода
Вы можете сделать это, создав обработчик в соответствии с группой клиентов с помощью 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>