Я хочу удалить следующие ссылки в панели управления учетной записи клиента на левой панели?
- Мои Приложения
- Реестр подарков
- Бонусные очки
- Ссылка на подарочную карту
Я работаю в Magento 1.7 Community Edition. Любая помощь будет оценена.
Я хочу удалить следующие ссылки в панели управления учетной записи клиента на левой панели?
Я работаю в Magento 1.7 Community Edition. Любая помощь будет оценена.
Ответы:
Шаг 1. Перейдите на (yourPackage / YourTemplate / customer / account / navigation.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
If you can't
??
Я вижу 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>
У вас могут быть некоторые проблемы, вот некоторые другие модули, которые вы хотите использовать, зависит от тех, которые вы хотите отключить.
Mage_Customer_Block_Account_Navigation
что не наследуется от Mage_Page_Block_Template_Links
.
Существует расширение FOSS, которое добавляет опцию backend к ссылкам удаленной учетной записи.
Есть второй модуль (также 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>
Самое простое решение (внедрение и использование) я нашел , чтобы заменить Mage_Customer_Block_Account_Navigation
в app/code/local
и добавить removeLinkByName
метод, который делает то же самое, что ответ Oshan в делает, но может использоваться из файлов макет. Более традиционное переписывание классов также будет работать, но потенциально может вызвать конфликты с плагином.
Предупреждение! Непроверенные!
Более сложное решение было бы написать свой собственный модуль с Block
которой распространяется Mage_Customer_Block_Account_Navigation
и включает в себя removeLinkByName
метод. Чтобы это работало, вы должны будете удалить / снять customer_account_navigation
блокировку и заменить ее на новую для вашего модуля. С этого момента, когда бы вы ни customer_account_navigation
ссылались в макете, вы получите экземпляр с removeLinkByName
.
Быстрое решение для удаления всех элементов списка «Моя учетная запись» ниже «Мои заказы», включая соглашения о выставлении счетов, периодические профили, Мои приложения и Мои загружаемые продукты. Также будут удалены ссылки «Мой список желаний» и «Моя рассылка» на сайте, протестированные на 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)
рассылка </ name> рассылка / управление / </ path> подписка на рассылку </ label> </ action> </ reference> </ customer_account ->
<!--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;
}
Чтобы избежать удаления ссылок, я бы рекомендовал назначать значения идентификаторов на основе переменной $ _index, чтобы вы могли скрыть ссылки с помощью CSS.
Вот что я сделал:
Из вашего пакета / YourTemplate / customer / account / navigation.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;
}
Нет единого способа снять шкуру с кошки, но это быстрый и простой вариант, который не ставит под угрозу функциональность.
Я думал, что лучшим решением было бы переписать блок. Это было упомянуто выше, но не было никакого примера:
Добавьте переписать в ваш config.xml в глобальном разделе:
<blocks>
<customer>
<rewrite>
<account_navigation>Your_Module_Block_Customer_Account_Navigation</account_navigation>
</rewrite>
</customer>
</blocks>
Переопределить addLink в 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 может извлечь из настроек конфигурации, если вы не хотите жестко кодировать исключенные ссылки.
это то, что я гуглил по этому поводу: http://magebase.com/magento-tutorials/5-useful-tricks-for-your-magento-local-xml/
Мы можем изменить почти все аспекты макета стандартного макета Magento, однако в некоторых случаях такой подход не работает. Примечательно, что это проявляется в ту минуту, когда вы хотите изменить блок top.links. Элементы в этом блоке добавляются с помощью метода действия addLink, поэтому, если вам интересно, как удалить некоторые ссылки из набора по умолчанию, ответ - вы не можете! К сожалению, класс блока page / template_links не реализует метод действия 'removeLink', поэтому прибегните к удалению всего блока, используя подход unsetChild, и добавьте блок ссылок обратно с нашими собственными ссылками, добавленными к нему в local.xml.
Сначала я хотел бы, чтобы вы сказали, что есть разные способы решения ваших проблем.
Это самый простой способ найти код в 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>
Но вы знаете, что мы не должны изменять базовый файл, поэтому можно выполнить еще один простой метод
Отключение ссылки в файле шаблона. Для этого скопируйте navigation.phtml
файл в тему (Примечание: структура папок должна быть такой же) из base\default\template\customer\account\navigation.phtml
. что показано в ответе выше.
Еще одна утомительная задача - переписать ваш основной модуль и создать метод «RemoveLinkByName».
Полное решение по удалению функций панели учетных записей включает в себя модификации как на стороне клиента, так и на стороне сервера. Если только клиентская часть удалена и / или скрыта, то ничто не мешает технически подкованным пользователям по-прежнему получать доступ к функциям, создавая маршруты в своем браузере вручную или используя более сложную «атаку» CURL (которая может включать в себя Токен CSRF и промах прямо).
Клиентская сторона легко достигается с помощью обновлений XML, о чем свидетельствует множество уже предоставленных ответов.
Серверная часть немного сложнее и требует понимания функциональности, которая удаляется.
Лично я бы пошел путем использования наблюдателей для условного возврата запрещенных кодов состояния HTTP на каждом из маршрутов удаляемой функции. Чтобы выяснить, какие маршруты следует соблюдать, откройте соответствующий файл контроллера и найдите каждое из интерфейсных действий, которые больше не должны быть доступны. Затем создайте модуль, который определяет поля конфигурации системы для мягкого отключения указанной функции. Используя эти поля конфигурации системы, условно обновите XML макета внешнего интерфейса и аналогично условно верните правильные коды ответов HTTP для каждого наблюдаемого маршрута.
Примеры кода для каждого из вышеперечисленных шагов можно найти через ваш любимый поисковик.
Добавьте в файл 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