Añadir nueva opción a la navegación del cliente en Magento

En esta entrada comentaré como podemos incluir un nuevo link en el apartado de “mi cuenta” del cliente. Imaginemos que hemos desarrollado una extensión y abarca temas relacionados con el cliente, con lo cual sería necesario añadir una nueva sección en la navegación del cliente. Por ejemplo, si creamos un módulo para referenciar amigos, si queremos darle la posibilidad de subscribirse semanalmente a un newsletter, si queremos darle la posibilidad de dar de baja la cuenta, etc.

Bueno, pues comenzaremos creando un módulo para tal efecto, yo siempre que procedo a desarrollar un módulo parto de la base de este enlace; esta aplicación te genera la estructura mínima de carpetas de un módulo y lo tienes preparado para comenzar a desarrollar,  sí que es verdad que puede que te falte alguna carpeta para desarrollos avanzados pero tan sólo tienes que crearla y a trabajar.

Una vez creado este módulo lo primero que tienes que hacer es coger el comprimido y proceder como si fuera una instalación de un módulo.

Comencemos a desarrollar:

Lo primero que podemos apreciar es que en el archivo /etc/config.xml de nuestro módulo podremos ver las siguientes líneas:

  1. <frontend>
  2.  
  3. <layout>
  4.  
  5. <updates>
  6.  
  7. <nombremodulo>
  8.  
  9. <file>nombremodulo.xml</file>
  10.  
  11. </nombremodulo>
  12.  
  13. </updates>
  14.  
  15. </layout>
  16.  
  17. </frontend>

Con estas líneas lo que queremos es decirle es que actualice el layout si fuera necesario. Dichas actualizaciones estarán alojadas en el archivo nombremodulo.xml que por defecto siempre tendrá el mismo nombre que le hemos dado al módulo. Creando el módulo como se indicó anteriormente viene escrito por defecto lo arriba descrito.

Pues ahora vamos al archivo xml que estará en la carpeta layout de nuestro skin instalado (¡muy importante esto!) , y en su interior añadimos lo siguiente:

nombremodulo.xml:

  1. <customer_account>
  2.  
  3. <reference name="customer_account_navigation">
  4.  
  5. <block type="nombremodulo/carpeta/chequeador" name="compañia.nombremodulo.carpeta.chequeador" as="vc_desactivarcuenta_desactivar_checker">
  6.  
  7. <action method="checkDisabledNavigation"></action>
  8.  
  9. </block>
  10.  
  11. </reference>
  12.  
  13.  
  14.  
  15. </customer_account>

Bueno explicaremos un poco esto:

customer_account hace referencia al handle del layout que vamos a modificar

block type=”nombremodulo…. es el bloque que procederá a agregar el enlace en la navegación del cliente

action method… es el método que llamará del bloque definido.

 

Ahora vamos a crear un nuevo bloque, éste lo vamos a almacenar en la carpeta  Block/Navegacion/chequeador.php y el contenido de este archivo es el siguiente:

Chequeador.php

  1. class Compañia_modulo_Block_Navegacion_Chequeador extends Mage_Core_Block_Abstract
  2.  
  3. {
  4.  
  5. public function checkDisabledNavigation()
  6.  
  7. {
  8.  
  9. if (!Mage::helper('desactivacuenta')->getExtDisabled()){
  10.  
  11. $parent = $this->getParentBlock();
  12.  
  13. if ($parent instanceof Mage_Customer_Block_Account_Navigation){
  14.  
  15. $parent->addLink('otro', 'desactivacuenta/index/desactivar', $this->__('desactivar cuenta'));
  16.  
  17. }
  18.  
  19. }
  20.  
  21. }
  22.  
  23. }

Conviene saber qué son los Helper: son clases que nos ayudarán con el tratamiento de datos. De este punto no puedo hablar mucho porque personalmente no lo he tocado casi.

El primer if comprueba si la extensión está activa para posteriormente añadir un link a la navegación. El método que se llama en dicho if se ha decidido colocarlo en el archivo Data.php dentro de la carpeta Helper (directorio para colocar archivos de tratamiento de datos). Para utilizar los Helpers tenemos que añadir las siguientes líneas al archivo config.xml

  1. <helpers>
  2.  
  3. <nombremodulo>
  4.  
  5. <class>compañia_nombremodulo_Helper</class>
  6.  
  7. </nombremodulo>
  8.  
  9. </helpers>

El segundo If lo que comprueba es que el objeto $parent sea del tipo navegación del cliente, y si todo ha funcionado correctamente añade el link que llevará a un controlador que será lanzado al pulsar sobre dicho link. Este controlador hemos decidido situarlo en el apartado genérico Controllers/IndexController.php del directorio de nuestra extensión que podrá contener lo siguiente:

  1. Public function pruebaAction(){
  2.  
  3. $this->loadLayout();
  4.  
  5. $this->renderLayout();
  6.  
  7. }

Ahora tenemos que indicar qué template va a tomar una vez pulses en el enlace para así darle el aspecto visual que necesitemos. Para ello volvemos otra vez a la actualización del layout que tendrá por defecto el nombre de la extensión, nombremodulo.xml y introducimos las siguientes líneas:

  1. <nombremodulo_index_prueba>
  2.  
  3. <update handle="customer_account"/>
  4.  
  5. <reference name="content">
  6.  
  7. <block type="page/html" name="nombremodulo.template" template="nombremodulo/nombremodulo.phtml"></block>
  8.  
  9. </reference>
  10.  
  11. </ nombremodulo_index_prueba>

Pues en el contenido del phtml ya tenemos una combinación de código HTMP con PHP y desde este archivo podemos tener acceso a cualquier variable de Magento para utilizarla en el desarrollo.

Ahora creamos la carpeta Helper dentro del directorio de nuestra extensión, ya que ésta es una de las carpetas que por defecto no trae el creador de módulos.

Y en el archivo Helper/Data.php tendremos lo siguiente:

  1. <strong>class </strong>compañia_nombremodulo_Helper_Data <strong>extends </strong><span style="text-decoration: underline;">Mage_Core_Helper_Abstract</span>
  2.  
  3. {
  4.  
  5. &nbsp;
  6.  
  7. /**
  8.  
  9. * Retrives Advanced Reviews Disabled Flag
  10.  
  11. * <strong>@return</strong> boolean
  12.  
  13. */
  14.  
  15. <strong>public function </strong>getExtDisabled()
  16.  
  17. {
  18.  
  19. <strong>return </strong>Mage::<em>getStoreConfig</em>('advanced/modules_disable_output/VC_Desactivacuenta');
  20.  
  21. }
  22.  
  23. }

Bueno este método es al que se llama desde el archivo Chequeador.php y comprueba si el módulo está activado.

Ahora, un pequeño repaso de todo lo explicado:

Necesitamos modificar el layout de nuestro magento, más concretamente el de  <customer _account> y hacer referencia al handle de <customer_account_navigation>, este es modificado desde el archivo /layout/nombremodulo.xml de nuestro skin instalado. En esta modificación le decimos al layout que en la navegación del cliente cargue un bloque que será el que nos añadirá el enlace. Este nuevo enlace tiene que llamar a un controlador, y ya en este controlador podremos realizar los desarrollos necesarios. Una vez añadido el enlace volvemos a modificar el layout para asignar una plantilla phtml en la cual daremos el aspecto visual al apartado de mi cuenta.

Esta entrada ya trata un tema algo más complejo que lo que se ha estado comentando hasta ahora en el blog, ya que hay que tocar diversos aspectos técnicos, así que para cualquier duda estoy disponible y también podréis poneros en contacto conmigo para haceros llegar el pequeño desarrollo ya que no es lo mismo pelearte con algo que ver la solución e intentar entenderla.

Un Saludo

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *