Динамическое создание ссылки в навигации по учетной записи клиента


Я хочу создать ссылку динамически в customer_block_account_navigation (ссылка должна отображаться на боковой панели)

Статическая ссылка не является проблемой, вы можете добиться этого с помощью обновления макета xml:

<customer_account>
    <reference name="customer_account_navigation">
        <action method="addLink" translate="label" module="customer">
            <name>mymodulename</name>
            <path>mypath</path>
            <label>Label of the link</label>
        </action>
    </reference>
</customer_account>

Ссылка ведет на пользовательскую форму, которая должна отображаться только для определенного клиента. Поэтому мне нужно управлять ссылкой (или обновлением макета) с помощью PHP в моем собственном модуле. Но я не мог найти никакого решения, как это сделать.

Может ли кто-нибудь помочь я?

Большое вам спасибо.

Author: Stefan, 2014-05-01

3 answers

Вы можете добавить блок внутри customer_account_navigation и в этом блоке добавить ссылку на родительский блок, если ваши условия выполнены.

Итак, в вашем макете говорится следующее:

<customer_account>
    <reference name="customer_account_navigation">
        <block type="[module]/customer_link" as="[module]_customer_link" name="[module]_customer_link">
            <action method="addLinkToParentBlock" />
        </block>
    </reference>
</customer_account>

И ваш класс блоков должен выглядеть так:

class [Namespace]_[Module]_Block_Customer_Link extends Mage_Core_Block_Abstract 
{
    public function addLinkToParentBlock() 
    {
        $parent = $this->getParentBlock();
        if ($parent) {
            if (your condition goes here) {
                $parent->addLink(
                    'Label goes here',
                    'Url goes here',
                    'title goes here',
                );

            }
        } 
    }
}

Таким образом, ваш блок будет создан. У него не будет выходных данных, но будет вызван метод addLinkToParentBlock.

 11
Author: Marius, 2015-02-14 10:07:05

Это действительно зависит от того, что вы хотите с вашей динамической ссылкой. Вы могли бы сделать несколько вещей:

  1. Перепишите Mage_Customer_Block_Account_Navigation и измените функцию getLinks, чтобы добавить свою ссылку там, где вам нужно,
  2. Перепишите Mage_Customer_Block_Account_Navigation и измените функцию addLink, чтобы добавить вашу ссылку с информацией, созданной динамически,
  3. Вы даже можете прослушать событие core_block_abstract_to_html_before проверьте тип блока, а затем измените ссылки здесь,
 2
Author: David Manners, 2014-07-28 12:12:06

Попробуйте использовать этот код для навигации администратора

<customer_account translate="label">
    <reference name="left">
        <block type="customer/account_navigation" name="customer_account_navigation" before="-" template="customer/account/navigation.phtml">
        <action method="addLink" translate="label" module="customer"> <name>my_customadmin</name><path>mypath/mycustomadmin/</path><label>My Custom Navigation</label></action>
        </block>
    </reference>
</customer_account>
 1
Author: Dharmen Gunawat, 2014-10-05 03:41:36