Manera de mejores prácticas para editar los enlaces principales de Magento

22

Digamos que queremos agregar un ícono de carrito de compras justo antes del enlace "Mi carrito" en los enlaces principales de Magento (ver enlaces superiores a continuación).

ingrese la descripción de la imagen aquí

¿Cuál es la mejor manera de hacer esto?

  1. ¿Hacer algo para toplinks.php?
  2. ¿Hacer algo a links.phtml?
  3. Un archivo xml?
  4. ¿Alguna otra opción?

Entiendo que esto se puede hacer con CSS, pero a medida que crecen mis necesidades de personalización, quiero saber cómo se puede hacer sin CSS para poder personalizar cosas más difíciles.

Raphael Rafatpanah
fuente

Respuestas:

12

En cualquier caso, no edite el archivo de plantilla ( links.phtml). Esto sirve como una plantilla general para todas las listas de enlaces. Por ejemplo, también se usa para los enlaces en el pie de página.
Con toplinks.phpusted puede hacer lo que quiera porque está en desuso desde CE v1.4.0.1.
Recomiendo usar los archivos xml que agregan los enlaces al contenedor superior para lograr lo que necesita.
El addLinkmétodo que se llama al agregar un nuevo enlace admite algunos parámetros que le permiten agregar clases y otros atributos en liy aetiquetas en los enlaces y algo de texto antes del enlace y después del enlace.

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

Si desea añadir un icono a mi menú de la cuenta se puede establecer la $beforeTexta <span class="icon"></span>y añadir algunos estilos de la clase de icono.
Para el carrito y los enlaces de pago es un poco más complicado porque se agregan a través de un objeto de bloque no directamente desde el archivo de diseño.
Si necesita algo diferente para el carrito o las líneas de pago, todo lo que tiene que hacer es anular los métodos Mage_Checkout_Block_Links::addCartLink()o Mage_Checkout_Block_Links::addCheckoutLink(). Estos 2 llaman igual addLink()y puedes pasarle diferentes parámetros.

Marius
fuente
1
Este es exactamente el tipo de explicación que estaba buscando. Definitivamente tengo mucho aprendizaje por delante, pero ahora tengo una idea de por dónde empezar. Voy a intentar agregar mi ícono (desde bootstrap) con el siguiente texto $ beforeText = '<i class = "icon-shopping-cart"> </i>' - ¡Gracias!
Raphael Rafatpanah
¿Qué archivo XML usaría para esto?
Raphael Rafatpanah
Le expliqué que para el carrito y los enlaces de pago no puede hacer esto desde el archivo de diseño. Debe anular el métodoMage_Checkout_Block_Links::addCartLink()
Marius
1
Okay. Supongo que anular el método que necesito para agregar un archivo a mis archivos de tema personalizados y llamar al método allí, que anulará su instancia anterior. ¿Le importaría señalarme en la dirección correcta, por ejemplo, qué archivo contendría el método Mage_Checkout_Block_Links? ¿Es links.php?
Raphael Rafatpanah
Si va por la ruta XML (que definitivamente debería), tenga en cuenta que, para usarla <span class="icon"></span>como beforeText, debe encerrarla así <![CDATA[<span class="icon"></span>]]>. El analizador XML también recoge nuevas líneas, por lo que debe colocarlo justo después de la etiqueta de apertura:<beforeText><![CDATA[<span class="icon"></span>]]></beforeText>
jmk
9

En caso de que necesite aplicar una plantilla personalizada solo para Top Links, puede hacerlo así en el local.xml de su tema:

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

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

    </reference>
<default>

Luego copie page / template / links.phtml y cámbiele el nombre a page / template / my_links.phtml y haga lo que necesite dentro de ese nuevo archivo de plantilla.

Para agregar un enlace personalizado a Top Links a través de 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 también esta página: http://www.classyllama.com/development/magento-development/editing-magentos-top-links-the-better-way

zitix
fuente
Con este método, ¿podría agregar html entre cada enlace?
Raphael Rafatpanah
@RaphaelRafatpanah Sí, en links.phtml hay un bucle <?php foreach($_links as $_link): ?>. Puede agregar cualquier HTML dentro de ese ciclo.
zitix
Pero luego se agregaría a cada enlace, ¿sí? Estoy buscando agregar html personalizado entre cada enlace. Además, creo que el bucle foreach se utiliza para los enlaces de pie de página, así como los enlaces de encabezado, por lo que si agrego html entre enlaces, también se aplicarán a los enlaces de pie de página.
Raphael Rafatpanah
1
Ese es el truco: después de crear page / template / my_links.phtml (que es una copia de links.phtml original ) y después de agregar el código que publiqué en su local.xml , esa plantilla se usará solo para representar Top Links. No enlaces de pie de página o cualquier otro enlace.
zitix
0

Encuentre esta ruta para cambiar los enlaces principales:

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

y busque: Iniciar sesión (en mi caso).

Ahora cambie el título y la etiqueta con el texto deseado.

Jayank Chopra
fuente
¡No deberías editar archivos principales!
Negro
-1

Necesita editar los siguientes 2 archivos.

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

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

En estos archivos, se agregan los enlaces name="top.links". Solo comentarlos.

Henry Roger
fuente
2
Bienvenido a Magento SE. Si bien esta respuesta funciona, la pregunta era explícitamente sobre las mejores prácticas y la edición de archivos principales es cualquier cosa menos la mejor práctica en Magento.
Fabian Schmengler