Лучший способ отредактировать топ-ссылки Magento

22

Допустим, мы хотим добавить значок корзины прямо перед ссылкой «Моя корзина» в верхних ссылках Magento (см. Верхние ссылки ниже).

введите описание изображения здесь

Каков наилучший способ сделать это?

  1. Делать что-то с toplinks.php?
  2. Что-то сделать с links.phtml?
  3. XML-файл?
  4. Есть еще варианты?

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

Рафаэль Рафатпана
источник

Ответы:

12

Ни в коем случае не редактируйте файл шаблона ( links.phtml). Это служит общим шаблоном для всех списков ссылок. Например, он также используется для ссылок в нижнем колонтитуле.
С ним toplinks.phpвы можете делать все, что захотите, потому что устарела начиная с CE v1.4.0.1.
Я рекомендую использовать XML-файлы, которые добавляют ссылки в верхний контейнер для достижения того, что вам нужно. Метод , который вызывается при добавлении новой ссылки поддерживает некоторые параметры , которые позволяют добавлять классы и другие атрибуты и теги в ссылках и некоторый текст до ссылки и после ссылки.
addLinklia

public function addLink($label, $url='', $title='', $prepare=false, $urlParams=array(),
        $position=null, $liParams=null, $aParams=null, $beforeText='', $afterText='')
    { ... }

Если вы хотите добавить иконку в моем меню счетов вы можете установить , $beforeTextчтобы <span class="icon"></span>добавить некоторые стили на классе значка.
Для ссылок «Корзина» и «Оформить заказ» это немного сложнее, поскольку они добавляются через объект блока, а не непосредственно из файла макета.
Если вам нужно что-то другое для корзины или кассы, все, что вам нужно сделать, это переопределить методы Mage_Checkout_Block_Links::addCartLink()или Mage_Checkout_Block_Links::addCheckoutLink(). Эти два вызова одинаковы, addLink()и вы можете передать различные параметры ему.

Мариус
источник
1
Это именно то объяснение, которое я искал. Я определенно много учусь передо мной, но теперь у меня есть идея, с чего начать. Я попытаюсь добавить свой значок (из начальной загрузки) следующим текстом: $ beforeText = '<i class = "icon-shopping-cart"> </ i>' - Спасибо!
Рафаэль Рафатпана
Какой XML-файл я бы использовал для этого?
Рафаэль Рафатпана
Я объяснил, что для корзины и ссылок оформления заказа вы не можете сделать это из файла макета. Вы должны переопределить методMage_Checkout_Block_Links::addCartLink()
Мариус
1
Хорошо. Я предполагаю переопределить метод, который мне нужен, чтобы добавить файл в мои файлы пользовательских тем и вызвать там метод, который переопределит его предыдущий экземпляр. Не могли бы вы указать мне, например, в правильном направлении, какой файл будет содержать метод Mage_Checkout_Block_Links. Это links.php?
Рафаэль Рафатпана
Если вы идете по XML-маршруту (что вам определенно следует), обратите внимание, что для использования <span class="icon"></span>в качестве текстового элемента перед вы должны заключить его следующим образом <![CDATA[<span class="icon"></span>]]>. Синтаксический анализатор XML также получает новые строки, поэтому вы должны поместить его сразу после открывающего тега:<beforeText><![CDATA[<span class="icon"></span>]]></beforeText>
jmk
9

Если вам нужно применить пользовательский шаблон только для Top Links, вы можете сделать это следующим образом в local.xml вашей темы:

<default>
    <reference name="top.links">

        <action method="setTemplate">
            <template>page/template/my_links.phtml</template>
        </action>

    </reference>
<default>

Затем скопируйте страницу / template / links.phtml и переименуйте ее в page / template / my_links.phtml и сделайте все, что вам нужно внутри этого нового файла шаблона.

Чтобы добавить пользовательскую ссылку в Top Links через local.xml:

<reference name="top.links">
    <action method="addLink" translate="label title">
        <label>My Link</label>
        <url>path/to/page</url>
        <title>My link tooltip</title>
        <prepare>true</prepare>
        <urlParams/>
        <position>150</position>
        <liParams>id="my-custom-id"</liParams>
    </action>
</reference>

Также см. Эту страницу: http://www.classyllama.com/development/magento-development/editing-magentos-top-links-the-better-way

zitix
источник
Используя этот метод, смогу ли я добавить HTML между каждой ссылкой?
Рафаэль Рафатпана
@RaphaelRafatpanah Да, в links.phtml есть цикл <?php foreach($_links as $_link): ?>. Вы можете добавить любой HTML внутри этого цикла.
zitix
Но тогда это будет добавлено к каждой ссылке, да? Я ищу, чтобы добавить индивидуальный HTML между каждой ссылкой. Кроме того, я считаю, что цикл foreach используется для ссылок нижнего колонтитула, а также для ссылок заголовка, поэтому, если я добавлю html между ссылками, они также будут применены к ссылкам нижнего колонтитула.
Рафаэль Рафатпана
1
Это хитрость: после создания страницы / template / my_links.phtml (которая является копией оригинального links.phtml ) и после того, как вы добавите код, который я разместил в вашем local.xml , этот шаблон будет использоваться только для рендеринга Top Links. Не нижние ссылки или любые другие ссылки.
zitix
1
magento.stackexchange.com/questions/3037/…
Рафаэль Рафатпана
0

Пожалуйста, найдите этот путь, чтобы изменить верхние ссылки:

/app/design/frontend/base/default/layout/customer.xml  

и искать: Войти (в моем случае).

Теперь измените заголовок и метку с нужным вам текстом.

Джаянк Чопра
источник
Вы не должны редактировать файлы ядра!
черный
-1

Вам необходимо отредактировать следующие 2 файла.

app/design/frontend/default/default/layout/checkout.xml

app/design/frontend/default/default/layout/customer.xml

В этих файлах ссылки добавляются в name="top.links". Просто закомментируйте их.

Генри Роджер
источник
2
Добро пожаловать в Magento SE. Хотя этот ответ работает, вопрос был явно о передовых практиках, и редактирование основных файлов совсем не похоже на передовой опыт в Magento.
Фабиан Шменглер