Melhores práticas para editar os links principais do Magento

22

Digamos que queremos adicionar um ícone de carrinho de compras logo antes do link "Meu carrinho" nos principais links do Magento (veja os principais links abaixo).

insira a descrição da imagem aqui

Qual é a melhor maneira de fazer isso?

  1. Faça algo para toplinks.php?
  2. Faça algo para links.phtml?
  3. Um arquivo xml?
  4. Alguma outra opção?

Entendo que isso pode ser feito com CSS, mas conforme minhas necessidades de personalização aumentam, quero saber como isso pode ser feito sem CSS, para que eu possa personalizar coisas mais difíceis.

Raphael Rafatpanah
fonte

Respostas:

12

De qualquer forma, não edite o arquivo de modelo ( links.phtml). Isso serve como um modelo geral para todas as listas de links. Por exemplo, é usado também para os links no rodapé.
Com toplinks.phpvocê, você pode fazer o que quiser, porque está obsoleto desde o CE v1.4.0.1.
Eu recomendo usar os arquivos xml que adicionam os links ao contêiner superior para alcançar o que você precisa.
O addLinkmétodo chamado ao adicionar um novo link suporta alguns parâmetros que permitem adicionar classes e outros atributos lie atags nos links e algum texto antes e depois do link.

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

Se você deseja adicionar um ícone para o meu menu conta, você pode definir o $beforeTextque <span class="icon"></span>e adicionar alguns estilos da classe ícone.
Para os links de carrinho e checkout, é um pouco mais complicado porque eles são adicionados por meio de um objeto de bloco e não diretamente do arquivo de layout.
Se você precisar de algo diferente para o carrinho ou check-out, tudo o que você precisa fazer é substituir os métodos Mage_Checkout_Block_Links::addCartLink()ou Mage_Checkout_Block_Links::addCheckoutLink(). Estes 2 chamam o mesmo addLink()e você pode passar parâmetros diferentes para ele.

Marius
fonte
1
Este é exatamente o tipo de explicação que eu estava procurando. Definitivamente, tenho muito aprendizado pela frente, mas agora tenho uma ideia de por onde começar. Vou tentar adicionar meu ícone (do bootstrap) com o seguinte texto $ beforeText = '<i class = "icon-shopping-cart"> </i>' - Obrigado!
Raphael Rafatpanah
Qual arquivo XML eu usaria para isso?
Raphael Rafatpanah
Expliquei que, para os links de carrinho e caixa, você não pode fazer isso no arquivo de layout. Você precisa substituir o métodoMage_Checkout_Block_Links::addCartLink()
Marius
1
Está bem. Estou supondo que substitua o método, preciso adicionar um arquivo aos meus arquivos de tema personalizado e chamar o método lá, que substituirá sua instância anterior. Você poderia me indicar a direção certa, por exemplo, qual arquivo conteria o método Mage_Checkout_Block_Links. É links.php?
Raphael Rafatpanah
Se você seguir a rota XML (que você definitivamente deveria), observe que, para usar <span class="icon"></span>como o beforeText, você deve incluí-la da seguinte forma <![CDATA[<span class="icon"></span>]]>. Os picaretas parser XML de novas linhas também, então você tem que colocá-lo logo após a tag de abertura:<beforeText><![CDATA[<span class="icon"></span>]]></beforeText>
jmk
9

Caso você precise aplicar um modelo personalizado apenas aos Links principais, faça-o assim no local.xml do seu tema:

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

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

    </reference>
<default>

Em seguida, copie page / template / links.phtml e renomeie-o para page / template / my_links.phtml e faça o que precisar dentro desse novo arquivo de modelo.

Para adicionar um link personalizado aos Links principais via 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>

Consulte também esta página: http://www.classyllama.com/development/magento-development/editing-magentos-top-links-the-better-way

zitix
fonte
Usando esse método, eu seria capaz de adicionar html entre cada link?
Raphael Rafatpanah
@RaphaelRafatpanah Sim, no links.phtml existe um loop <?php foreach($_links as $_link): ?>. Você pode adicionar qualquer HTML dentro desse loop.
Zitix 16/04
Mas então seria adicionado a cada link, sim? Eu estou olhando para adicionar html personalizado entre cada link. Além disso, acredito que o loop foreach é usado para os links de rodapé e para os links de cabeçalho. Se eu adicionar html entre os links, eles também serão aplicados aos links de rodapé.
Raphael Rafatpanah
1
Esse é o truque: depois de criar page / template / my_links.phtml (que é uma cópia do links.phtml original ) e depois de adicionar o código que eu publiquei no seu local.xml , esse modelo será usado apenas para renderizar os Links principais. Não links de rodapé ou outros links.
Zitix 16/04
0

Encontre este caminho para alterar os principais links:

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

e procure por: Entrar (no meu caso).

Agora mude o título e o rótulo com o texto desejado.

Jayank Chopra
fonte
Você não deve editar arquivos principais!
preto
-1

Você precisa editar os 2 arquivos a seguir.

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

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

Nesses arquivos, os links são adicionados name="top.links". Apenas comente-os.

Henry Roger
fonte
2
Bem-vindo ao Magento SE. Embora essa resposta funcione, a pergunta era explicitamente sobre práticas recomendadas e a edição de arquivos principais é tudo, menos uma prática recomendada no Magento.
Fabian Schmengler