Я хочу видалити наступні посилання на лівій панелі приладової панелі облікового запису клієнта?
- Мої програми
- Реєстр подарунків
- Бонусні бали
- Посилання подарункової картки
Я працюю в 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
через цей peice 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, яке додає опцію "backback" до віддалених посилань облікового запису.
Є другий модуль (також 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 з програми / дизайн / frontend / за замовчуванням / YOURTHEME / layout / desirelist.xml (якщо немає, скопіюйте це з програми / design / frontend / rwd / default / layout / desirelist.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 з програми / дизайн / frontend / за замовчуванням / 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;
}
Щоб уникнути видалення посилань, я рекомендую призначити значення ID на основі змінної $ _index, щоб ви могли приховати посилання за допомогою CSS.
Ось що я зробив:
З вашого пакета / YourTemplate / клієнта / акаунта / навігації.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);
}
}
}
Масив isključie_links може витягнути з налаштування конфігурації, якщо ви не хочете жорстко кодувати виключені посилання.
це те, що я гугла з цього приводу: http://magebase.com/magento-tutorials/5-useful-tricks-for-your-magento-local-xml/
Ми можемо змінити майже всі аспекти компонування у стандартному макеті Magento, проте є деякі ситуації, коли такий підхід не вдається. Зокрема, це проявляється в ту хвилину, коли ви хочете змінити блок top.links. Елементи в цьому блоці додаються за допомогою методу дії addLink, тому якщо вам цікаво, як видалити деякі посилання з набору за замовчуванням, відповідь - ви не можете! На жаль, клас блоку сторінка / 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