Як видалити посилання на інформаційній панелі облікового запису клієнта


39

Я хочу видалити наступні посилання на лівій панелі приладової панелі облікового запису клієнта?

  • Мої програми
  • Реєстр подарунків
  • Бонусні бали
  • Посилання подарункової картки

Я працюю в Magento 1.7 Community Edition. Будь-яка допомога буде вдячна.


Ви також можете скористатись цим безкоштовним та простим розширенням "підключити та грати": magentocommerce.com/magento-connect/…
Жерар де Віссер,

Мадженто, де щось таке, здавалося б, легко, перетворюється на щось настільки зайве складне.
Джошуа34

Відповіді:


52

Крок 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


5
Якщо ви можете виправити щось за допомогою макета XML, я б радив використовувати жорстке кодування, як це. @Marius його відповідь набагато чистіше.
Sander Mangel

1
@SanderMangel, ти маєш на увазі If you can't??
Пратік

2
Ні, він означає «Я б порадив проти »
Fabian Schmengler

Ця відповідь не перешкоджає доступу до основної функціональності систем, які вона намагається видалити - до відповіді слід додати відмову від відповідальності. Відвідування правильних маршрутів або використання curl дозволить отримати повний безперешкодний доступ.
Люк А. Лебер

Ні, він означає "я б радив "
Xenocide8998

28

Тут я бачу 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>

У вас можуть виникнути неполадки, ось деякі інші модулі, які ви хочете використовувати, залежать від тих, які ви хочете відключити.


Дякую @Marius за відповідь. Добре, я спробував другий варіант (deleteLinkByUrl), який ви запропонували, перш ніж ставити питання. Але, схоже, це не спрацювало для мене.
Ошан

4
Другий варіант не може працювати, оскільки Mage_Customer_Block_Account_Navigationне успадковує Mage_Page_Block_Template_Links.
mpw

26

Існує розширення 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>

Обмінявшись кількома методами від локальних.xml переорієнтованих на PHP, ці рішення з відкритим кодом є моїм улюбленим.
Майкл Томпсон

5

Найпростіше рішення (впровадження та використання) я знайшов , щоб замінити 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 та розробником PHP / Linux. Якщо комусь потрібні деталі, поштовх мені.
siliconrockstar

найпростішим рішенням є перекриття класу Core, коли існує чимало акуратних рішень?
Ria Weyprecht

5

Швидке рішення, щоб видалити всі елементи списку "Мої облікові записи" під "Мої замовлення", включаючи договори про виставлення рахунків, періодичні профілі, мої програми та мої завантажувані продукти. Також буде видалено посилання "Мій список побажань" та "Моя розсилка" на сайті 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;
}

5

Щоб уникнути видалення посилань, я рекомендую призначити значення 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;
        }

Немає жодного способу зняти кішку, але це швидкий і простий варіант, не пошкоджуючи жодної функціональності.


1
Слід чітко зазначити, що це не заважатиме користувачам отримувати доступ до функцій, що стоять за цими функціями. Повний доступ - це редагування CSS або швидке редагування адресного рядка ... тому не покладайтеся на людей, які не використовують функції.
Люк А. Лебер

Це досить справедливо, і я повністю розумію, звідки ви родом. Я не хотів категорично видаляти цю функціональність, але хотів її приховати, оскільки клієнт спеціально вважав, що це може заплутати своїх клієнтів. Думаю, кожен по-своєму!
Thomas Harding

5

Я думав, що кращим рішенням буде переписати блок. Про це було сказано вище, але прикладу не було:

Додайте перезапис у 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 може витягнути з налаштування конфігурації, якщо ви не хочете жорстко кодувати виключені посилання.


3

це те, що я гугла з цього приводу: http://magebase.com/magento-tutorials/5-useful-tricks-for-your-magento-local-xml/

Ми можемо змінити майже всі аспекти компонування у стандартному макеті Magento, проте є деякі ситуації, коли такий підхід не вдається. Зокрема, це проявляється в ту хвилину, коли ви хочете змінити блок top.links. Елементи в цьому блоці додаються за допомогою методу дії addLink, тому якщо вам цікаво, як видалити деякі посилання з набору за замовчуванням, відповідь - ви не можете! На жаль, клас блоку сторінка / template_links не реалізує метод дії "RemoveLink", тому курорт полягає в тому, щоб видалити весь блок за допомогою підходу unsetChild та додати блок посилань назад з нашими власними посиланнями, доданими до нього у local.xml.


2

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

  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

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

Сторона клієнта легко досягається за допомогою оновлень XML, на що вказує безліч відповідей.

Сторона сервера трохи складніша і вимагає розуміння функцій, які видаляються.

Особисто я б пішов шляхом використання спостерігачів, щоб умовно повернути заборонені коди статусу HTTP на кожному з маршрутів, які вилучаються. Для того, щоб дізнатися, які маршрути слід спостерігати, відкрийте пов'язаний файл контролера та знайдіть кожне із передніх дій, які більше не мають бути доступними. Далі створіть модуль, який визначає поля конфігурації системи для м'якого відключення зазначеної функції. Використовуючи ці поля конфігурації системи, умовно оновіть XML макета інтерфейсу і аналогічно умовно поверніть правильні коди відповідей HTTP для кожного спостережуваного маршруту.

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


1

Додайте цей код у файл 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


У Magento 1.8.1.0 це призводить до попередження: відсутній аргумент 2 для Mage_Customer_Block_Account_Navigation :: addLink ()
Ентоні
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.