Удалить навигационные ссылки из моей учетной записи - PullRequest
15 голосов
/ 04 мая 2011

Я использую Mage 1.5.0.1 и пытаюсь удалить навигационные ссылки из раздела «Моя учетная запись».

В моем local.xml есть следующее, которое отлично работает:

 <customer_account>
    <reference name="root">
        <action method="setTemplate"><template>page/staticpage.phtml</template></action>
    </reference>
   <reference name="left">
        <remove name="cart_sidebar" /> 
        <remove name="catalog.compare.sidebar" />   
    </reference>
 </customer_account>

Когда я пытаюсь добавить следующий код, который выдает система и выдает ошибку:

   <reference name="customer_account_navigation">
    <action method="removeLinkByName"><name>recurring_profiles</name></action>
    <action method="removeLinkByName"><name>billing_agreements</name></action>
</reference>

Ошибка

Invalid method Mage_Customer_Block_Account_Navigation::removeLinkByName

Я видел эту функцию в 1.4, она больше не поддерживается или я делаючто-то не так?

Ответы [ 11 ]

42 голосов
/ 12 мая 2011

У меня была похожая проблема, и я не хотел закомментировать узел addLink, потому что мы хотим реализовать наши изменения только в local.xml. Закончилось писать небольшой модуль для этого:

приложение \ и т.д. \ модули \ Stackoverflow_Customerlinks.xml:

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <Stackoverflow_Customerlinks>
            <active>true</active>
            <codePool>local</codePool>
        </Stackoverflow_Customerlinks>
    </modules>
</config>

Приложение \ код \ Local \ Stackoverflow \ Customerlinks \ Block \ Account \ navigation.php:

<?php

class Stackoverflow_Customerlinks_Block_Account_Navigation extends Mage_Customer_Block_Account_Navigation {

    public function removeLinkByName($name) {
        unset($this->_links[$name]);
    }

}

Приложение \ код \ Local \ Stackoverflow \ Customerlinks \ и т.д. \ config.xml:

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <global>
        <blocks>
            <customer>
                <rewrite>
                    <account_navigation>Stackoverflow_Customerlinks_Block_Account_Navigation</account_navigation>
                </rewrite>
            </customer>
        </blocks>
    </global>
</config>

После этого вы можете просто внести изменения через local.xml:

<customer_account>
    <reference name="customer_account_navigation">
        <action method="removeLinkByName"><name>recurring_profiles</name></action>
        <action method="removeLinkByName"><name>billing_agreements</name></action>
    </reference>
</customer_account>

Веселитесь:)

16 голосов
/ 16 августа 2013

По умолчанию у нас нет такого метода как «removeLink».Таким образом, хитрость заключается в том, чтобы удалить весь блок с использованием подхода unsetChild и добавить необходимый блок ссылок обратно с нашими собственными ссылками, добавленными к нему в local.xml

<customer_account translate="label">
        <reference name="left">
            <!--Unset the whole block then add back later-->
            <action method="unsetChild"><name>customer_account_navigation</name></action>
            <block type="customer/account_navigation" name="customer_account_navigation" before="-" template="customer/account/navigation.phtml">
                <action method="addLink" translate="label" module="customer"><name>account</name><path>customer/account/</path><label>Account Dashboard</label></action>
                <action method="addLink" translate="label" module="customer"><name>account_edit</name><path>customer/account/edit/</path><label>Account Information</label></action>
                <action method="addLink" translate="label" module="customer"><name>address_book</name><path>customer/address/</path><label>Address Book</label></action>
                <action method="addLink" translate="label" module="sales"><name>orders</name><path>sales/order/history/</path><label>My Orders</label></action>
                <action method="addLink" translate="label" module="review"><name>reviews</name><path>review/customer</path><label>My Product Reviews</label></action>
                <action method="addLink" translate="label" module="wishlist" ifconfig="wishlist/general/active"><name>wishlist</name><path>wishlist/</path><label>My Favorite</label></action>
                <action method="addLink" translate="label" module="newsletter"><name>newsletter</name><path>newsletter/manage/</path><label>Newsletter Subscriptions</label></action>
            </block>
            <remove name="catalog.compare.sidebar"/>
        </reference>
    </customer_account>
8 голосов
/ 01 ноября 2012

Просто, чтобы сообщить вам, ребята, обо всех ссылках в меню навигации.Чтобы удалить все ссылки в local.xml:

<?xml version="1.0"?>
<layout version="0.1.0">
    <customer_account>
        <reference name="customer_account_navigation" >
                <!-- remove the link using your custom method -->
                <action method="removeLinkByName"><name>recurring_profiles</name></action>
                <action method="removeLinkByName"><name>billing_agreements</name></action>
                <action method="removeLinkByName"><name>reviews</name></action>
                <action method="removeLinkByName"><name>downloadable_products</name></action>
                <action method="removeLinkByName"><name>OAuth Customer Tokens</name></action>

                <action method="removeLinkByName"><name>account</name></action>
                <action method="removeLinkByName"><name>account_edit</name></action>
                <action method="removeLinkByName"><name>address_book</name></action>
                <action method="removeLinkByName"><name>orders</name></action>
                <action method="removeLinkByName"><name>tags</name></action>
                <action method="removeLinkByName"><name>wishlist</name></action>
                <action method="removeLinkByName"><name>newsletter</name></action>

        </reference>
    </customer_account>
</layout>

Спасибо за ваш ответ Daniel Sloof

7 голосов
/ 28 сентября 2011

Вы можете использовать это:

    <customer_account>
        <action method="unsetChild"><name>customer_account_navigation</name></action>
            <block type="customer/account_navigation" name="customer_account_navigation" before="-" template="customer/account/navigation.phtml">
                <action method="addLink" translate="label" module="customer"><name>account</name><path>customer/account/</path><label>Account Dashboard</label></action>
                <action method="addLink" translate="label" module="customer"><name>account_edit</name><path>customer/account/edit/</path><label>Account Information</label></action>
...
            </block>
     </customer_account>

Переписывание не является решением ...

2 голосов
/ 03 октября 2013

Я просто реорганизовал ссылки на панели учетной записи и удалил селекторы CSS nth-child, как и раньше, и вместо этого изменил app / design / frontend / default / your_theme / template / customer / account / navigation.phtml на этот

<div class="block block-account">
<div class="block-title">
    <strong><span><?php echo $this->__('My Account'); ?></span></strong>
</div>
<div class="block-content">
    <ul>
        <?php $_links = $this->getLinks(); ?>
        <?php $_index = 1; ?>


            <?php $_count = count($_links); 
                unset($_links['recurring_profiles']); 
                unset($_links['billing_agreements']); 
                unset($_links['reviews']);
                unset($_links['tags']);
                unset($_links['OAuth Customer Tokens']);
                unset($_links['downloadable_products']); 
            ?>


        <?php foreach ($_links as $_link): ?>
            <?php $_last = ($_index++ >= $_count); ?>
            <?php if ($this->isActive($_link)): ?>
                <li class="current<?php echo ($_last ? ' last' : '') ?>"><strong><?php echo $_link->getLabel() ?></strong></li>
            <?php else: ?>
                <li<?php echo ($_last ? ' class="last"' : '') ?>><a href="<?php echo $_link->getUrl() ?>"><?php echo $_link->getLabel() ?></a></li>
            <?php endif; ?>
        <?php endforeach; ?>
    </ul>
</div>

в основном удаляет любые нежелательные ссылки.

1 голос
/ 04 мая 2011

Существуют другие различные xml-файлы, относящиеся к <reference name="customer_account_navigation">, где вы можете скопировать xml-файл в свой каталог макета и закомментировать другой узел addLink. Я вижу removeLinkByUrl, который вы можете попробовать вместо этого.

0 голосов
/ 19 мая 2014

Этот модуль упорядочивает функциональность или показывает мои собственные ссылки, не создает макет, а phtml перезаписывает блок и выполняет всю логику там.

http://www.magentocommerce.com/magento-connect/customer-navigation.html

  • Самым чистым решением было бы сделать перезапись поля и добавить метод удаления ссылок из макета.
0 голосов
/ 04 марта 2014

Перейдите к app/design/frontend/YourPackageName/YourThemeName/layout/, создайте каталог sales/, если его нет, и создайте пустой файл или каталог с именами billing_agreement.xml и recurring_profile.xml.

Самый чистый метод из всех, без пользовательскихфункций, никакого CSS-взлома, никакой логики в файлах шаблонов.

Это полностью скрывает функции соглашений о выставлении счетов и повторяющихся профилей от пользователя.

0 голосов
/ 28 апреля 2013

Вы также можете переопределить объявление пустой ссылкой - без определения 'path' и 'label', непосредственно в local.xml:

<customer_account>
    <reference name="customer_account_navigation">
        <action method="addLink"><name>tags</name></action>
        <action method="addLink"><name>newsletter</name></action>
    </reference>
</customer_account>
0 голосов
/ 19 декабря 2012

Мой подход заключается в том, чтобы привнести мощь CSS и избежать хеви-модификаций кода.

EG

/* CUSTOMER ACCOUNT LEFT NAV DISABLER */
.block-content li:nth-child(4),
.block-content li:nth-child(5),
.block-content li:nth-child(6),
.block-content li:nth-child(8){display: none;}

Очевидно, смените селекторы на ваши темы с помощью пользовательской навигации li и используйте li: nth-child() sudo с номером в скобках, который вы хотите удалить.Также используйте комментарии в customer.xml на тот случай, если не забудете, что вы сделали за 6 месяцев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...