Как удалить ссылки на Панель мониторинга учетной записи клиента


Я хочу удалить следующие ссылки в левой панели панели управления учетной записью клиента?

  • Мои приложения
  • Реестр подарков
  • Призовые баллы
  • Ссылка на Подарочную карту

Я работаю в версии сообщества Magento 1.7. Любая помощь будет оценена по достоинству.

Author: Purushotam Sharma, 2013-11-04

11 answers

Шаг 1: Перейдите в (Ваш пакет/Ваша табличка/клиент/учетная запись/навигация.phtml)

Шаг 2: Замените нижеприведенную строку

<?php $count = count($links); ?>
        **With**
<?php $_count = count($_links); /* Add or Remove Account Left Navigation Links Here -*/
      unset($_links['account']); /* Account Info */     
      unset($_links['account_edit']); /* Account Info */            
      unset($_links['tags']); /* My Tags */
      unset($_links['invitations']); /* My Invitations */
      unset($_links['reviews']);  /* Reviews */
      unset($_links['wishlist']); /* Wishlist */
      unset($_links['newsletter']); /* Newsletter */
      unset($_links['orders']); /* My Orders */
      unset($_links['address_book']); /* Address */
      unset($_links['enterprise_customerbalance']); /* Store Credit */
      unset($_links['OAuth Customer Tokens']); /* My Applications */
      unset($_links['enterprise_reward']); /* Reward Points */
      unset($_links['giftregistry']); /* Gift Registry */
      unset($_links['downloadable_products']); /* My Downloadable Products */
      unset($_links['recurring_profiles']); /* Recurring Profiles */
      unset($_links['billing_agreements']); /* Billing Agreements */
      unset($_links['enterprise_giftcardaccount']); /* Gift Card Link */
?>

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

Ссылка на ссылку: https://github.com/Aproducktion/Magento-Remove-Dashboard-Links

 54
Author: Oshan, 2013-11-04 03:23:40

Я вижу здесь 2 варианта.

Первый и самый простой: Просто найдите файлы макета, которые добавляют эти пункты меню, и прокомментируйте код для них.
Например, My applications добавляется app/design/frontend/{interface}/{theme}/layout/oauth.xml через этот фрагмент XML

<customer_account>
    <reference name="customer_account_navigation">
        <action method="addLink" translate="label" module="oauth">
            <name>OAuth Customer Tokens</name>
            <path>oauth/customer_token</path>
            <label>My Applications</label>
        </action>
    </reference>
</customer_account>

Второй способ, в котором я не уверен на 100%, что он сработает, - это добавить этот xml-файл в файл макета local.xml вашей темы:

<customer_account>
    <reference name="customer_account_navigation">
        <action method="removeLinkByUrl"><url>oauth/customer_token</url></action>
    </reference>
</customer_account>

Вам нужно добавить один тег <action> для каждой ссылки, которую вы хотите удалить.

Существует также 3-й вариант, если вы не используете модули вообще, просто отключите их. Это также может повысить производительность.
Для этого создайте этот файл: app/etc/modules/Zzzz.xml с таким содержимым:

<config>
    <modules>
        <Mage_Oauth>
             <active>false</active>
        </Mage_Oauth>
    </modules>
</config>

У вас могут возникнуть некоторые проблемы, вот некоторые другие модули, которые вы хотите использовать, в зависимости от тех, которые вы хотите отключить.

 28
Author: Marius, 2013-11-04 08:14:39

Существует расширение FOSS, которое добавляет опцию серверной части к ссылкам на удаленные учетные записи.

Существует второй модуль (также FOSS), который добавляет метод removeLink, чтобы вы могли использовать следующее в своем local.xml

Отказ от ответственности: Я являюсь разработчиком второго расширения.

<customer_account>
        <reference name="customer_account_navigation">
            <action method="removeLink"><name>OAuth Customer Tokens</name></action>
            <action method="removeLink"><name>billing_agreements</name></action>
            <action method="removeLink"><name>recurring_profiles</name></action>
        </reference>
 </customer_account>
 26
Author: Alex, 2017-04-09 14:38:26

Самое простое решение (реализация и использование) Я обнаружил, что нужно заменить Mage_Customer_Block_Account_Navigation в app/code/local и добавить метод removeLinkByName, который делает то же самое, что и ответ Ошана, но может использоваться из файлов макета. Более традиционная перезапись класса также будет работать, но потенциально может вызвать конфликты с плагином.

Внимание! Непроверенный!

Более сложным решением было бы написать свой собственный модуль с Block, который расширяет Mage_Customer_Block_Account_Navigation и включает removeLinkByName метод. Чтобы это сработало, вам придется удалить/отключить блок customer_account_navigation и заменить его блоком для вашего нового модуля. С этого момента в любое время, когда customer_account_navigation упоминается в макете, вы получите экземпляр с removeLinkByName.

 5
Author: mpw, 2017-04-13 12:54:58

Быстрое решение, позволяющее удалить все элементы списка Моих Учетных записей под Моими Заказами, включая Соглашения о выставлении счетов, Повторяющиеся Профили, Мои Приложения и Загружаемые Продукты. Также удалит Мой список пожеланий и ссылки на рассылку новостей по всему сайту, протестированные на Magento 1.9:

Закомментируйте строки 31 - 66 из app/design/frontend/default/YOURTHEME/layout/wishlist.xml (если его там нет, скопируйте его с app/design/frontend/rwd/default/layout/wishlist.xml)

<!--default>
    <reference name="top.links">
        <block type="wishlist/links" name="wishlist_link" />
        <action method="addLinkBlock"><blockName>wishlist_link</blockName></action>
    </reference>

    <!-- Mage_Wishlist -->
    <!--reference name="right">
        <block type="wishlist/customer_sidebar" name="wishlist_sidebar" as="wishlist" after="cart_sidebar" template="wishlist/sidebar.phtml" />
    </reference>
</default-->
<!--customer_account>
    <!-- Mage_Wishlist -->
    <!--reference name="customer_account_navigation">
        <action method="addLink" translate="label" module="wishlist" ifconfig="wishlist/general/active"><name>wishlist</name><path>wishlist/</path><label>My Wishlist</label></action>
    </reference-->
<!--/customer_account-->
<!--customer_account_index>
    <reference name="right">
        <action method="unsetChild"><name>wishlist</name></action>
    </reference>
</customer_account_index-->

Прокомментировать строки 47 - 65 из app/design/frontend/default/YOURTHEME/layout/newsletter.xml (если его там нет, скопируйте его с app/design/frontend/rwd/default/layout/newsletter.xml)

Информационный бюллетень название> информационный бюллетень/управление/путь> Подписки на информационный бюллетень метка>действие> ссылка> учетная запись пользователя-->

<!--newsletter_manage_index translate="label">
    <label>Customer My Account Newsletter Subscriptions</label>
    <update handle="customer_account"/>
    <reference name="my.account.wrapper">
        <block type="customer/newsletter" name="customer_newsletter">
            <block type="page/html_wrapper" name="customer.newsletter.form.before" as="form_before" translate="label">
                <label>Newsletter Subscription Form Before</label>
            </block>
        </block>
    </reference>
</newsletter_manage_index!-->

CSS (настраивается в соответствии с вашими требованиями)

.block-account .block-content ul li:nth-last-child(1),  .block-account .block-content ul li:nth-last-child(2),  .block-account .block-content ul li:nth-last-child(3),  .block-account .block-content ul li:nth-last-child(4) {
display: none;
}

.cart-table .cart-links > li:last-child {
display:none;
}
 5
Author: Joshua34, 2015-01-16 22:27:27

Чтобы избежать удаления ссылок, я бы рекомендовал присваивать значения идентификаторов на основе переменной $_index, чтобы вы могли скрыть ссылки с помощью CSS.

Вот что я сделал:

Из вашего пакета/вашей таблицы/клиент/учетная запись/навигация.phtml

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

Так что, очевидно, тогда вы можете идти

        #account-link-1 {
            display:none;
        }

Нет единого способа освежевать кошку, но это быстрый и простой вариант без реального ущерба для какой-либо функциональности.

 5
Author: Thomas Harding, 2015-09-11 15:46:05

Я подумал, что лучшим решением было бы переписать блок. Это было упомянуто выше, но примера не было:

Добавьте перезапись в свой config.xml в глобальном разделе:

<blocks>
    <customer>
        <rewrite>
            <account_navigation>Your_Module_Block_Customer_Account_Navigation</account_navigation>
        </rewrite>
    </customer>
</blocks>

Переопределить ссылку добавления в Mage_Customer_Block_Account_Navigation:

class Your_Module_Block_Customer_Account_Navigation extends Mage_Customer_Block_Account_Navigation
{
    private $exclude_links = null;

    public function addLink($name, $path, $label, $urlParams=array())
    {
        if (!$this->exclude_links) {
            $this->exclude_links = array(
                'OAuth Customer Tokens', /* My Applications */
                'downloadable_products', /* My Downloadable Products */
                'recurring_profiles', /* Recurring Profiles */
                'billing_agreements' /* Billing Agreements */
            );
        }

        if (!in_array($name, $this->exclude_links)) {
            return parent::addLink($name, $path, $label, $urlParams);
        }
    }
}

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

 5
Author: N Lewis, 2015-12-21 16:47:19

Вот что я погуглил об этом: http://magebase.com/magento-tutorials/5-useful-tricks-for-your-magento-local-xml/

Мы можем изменить почти все аспекты компоновки стандартного макета Magento, однако бывают ситуации, когда этот подход терпит неудачу. Примечательно, что это проявляется в ту минуту, когда вы хотите изменить блок top.links. Элементы в этом блоке добавляются с помощью метода действия addLink, поэтому, если вам интересно, как удалить некоторые ссылки из списка по умолчанию сет, ответ таков: ты не можешь! К сожалению, класс блока page/template_links не реализует метод действия "Удалить ссылку", поэтому рекомендуется удалить весь блок, используя подход unsetChild, и добавить блок ссылок обратно с нашими собственными ссылками, добавленными к нему в local.xml .

 3
Author: melaxon, 2016-04-26 18:37:50

Сначала я хотел бы, чтобы вы сказали, что существуют разные способы решения ваших проблем.

  1. Самый простой способ - найти код в файле layout.xml внутри базы, который вы хотите удалить, например: если я хочу удалить "Мои теги", просто прокомментируйте часть.

    <customer_account>
        <!-- Mage_Tag -->
        <reference name="customer_account_navigation">
            <action method="addLink" translate="label" module="tag"><name>tags</name><path>tag/customer/</path><label>My Tags</label></action>
        </reference>
    </customer_account>
    

    Но вы знаете, что мы не должны изменять базовый файл, поэтому следующий простой метод, который можно выполнить, - это

  2. Отмените установку ссылки в файле шаблона.Для этой копии ваш файл navigation.phtml в вашу тему (Примечание: структура папок должна быть такой же) из base\default\template\customer\account\navigation.phtml. который показан в приведенном выше ответе.

  3. Еще одна утомительная задача - переписать ваш основной модуль и создать метод "Removelinkbyname".

 2
Author: aton1004, 2014-04-11 10:19:43

Полное решение для удаления функций панели мониторинга учетной записи включает как модификацию на стороне клиента, так и на стороне сервера. Если удалена и/или скрыта только клиентская сторона, то ничто не мешает технически подкованным пользователям по-прежнему получать доступ к функциям, вручную создавая маршруты в своем браузере или используя более сложную "атаку" CURL (которая может включать соответствующий токен CSRF и проскальзывать прямо через).

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

Серверная часть немного сложнее и требует понимания удаляемой функциональности.

Лично я бы пошел по пути использования наблюдателей для условного возврата запрещенных кодов состояния HTTP на каждом из маршрутов удаляемой функции. Чтобы узнать, какие маршруты следует соблюдать, откройте соответствующий файл контроллера и найдите каждое из интерфейсных действий, которые больше не должны выполняться доступный. Затем создайте модуль, который определяет поля конфигурации системы для мягкого отключения указанной функции. Используя эти поля конфигурации системы, условно обновите XML-файл макета интерфейса и аналогичным образом условно верните правильные коды ответов HTTP для каждого наблюдаемого маршрута.

Примеры кода для каждого из вышеперечисленных шагов можно найти в вашей любимой поисковой системе.

 2
Author: Luke A. Leber, 2016-06-01 23:27:57

Добавить в local.xml запишите этот код

<customer_account>
    <reference name="customer_account_navigation">
           <action method="addLink"><name>tags</name></action>
           <action method="addLink"><name>recurring_profiles</name></action>
           <action method="addLink"><name>newsletter</name></action>
           <action method="addLink"><name>billing_agreements</name></action>
           <action method="addLink"><name>OAuth Customer Tokens</name></action>
           <action method="addLink"><name>downloadable_products</name></action>
   </reference>   
</customer_account>

Протестировано в Magento 1.7.0.2

 1
Author: lavb, 2014-04-24 17:44:42