Cambiando la ayuda del backend de Magento

En el día de ayer, como de costumbre, estuve dando vuelta por los foros oficiales de Magento leyendo un poco y tratando de colaborar con la comunidad.

Una de las preguntas que me tocó responder fue referente a cómo cambiar el comportamiento del link de ayuda que tenemos en junto a la cabecera, a la derecha.

Acceso a la Ayuda de Magento

Por defecto, éste link nos lleva a los diferentes artículos de la Ayuda online, mostrándonos las explicaciones de cada módulo. La parte interesante de ésta funcionalidad, es que dependiendo del módulo en el que estemos parados, el link nos va a llevar a la documentación que corresponda.

Volviendo un poco a la consulta que da origen a éste post, la intención es ver como puede uno modificar ésta funcionalidad; ya sea que busquemos deshabilitar la funcionalidad o que necesitemos apuntar las ayudas a documentación propia.

Vamos a revisar el primer caso, quizás el más sencillo pero de resolución más brusca y que posiblemente perdamos si nos distraemos en la siguiente actualización de la plataforma.

Para remover el acceso a la ayuda, basta con revisar el archivo:

/app/design/adminhtml/default/default/template/page/menu.phtml

En las línas 45 y 46 del archivo, vamos a ver el siguiente código:

<a id="page-help-link" href="<?php echo Mage::helper('adminhtml')->getPageHelpUrl() ?>"><?php echo $this->__('Get help for this page') ?></a>
<script type="text/javascript">$('page-help-link').target = 'magento_page_help'</script>

Si borramos esas líneas, el efecto que conseguimos es como lo que vemos en la captura.

Backend de Magento sin acceso a la Ayuda

Con ésta sencilla modificación, uno de los casos queda resuelto.

Vamos ahora con la segunda posibilidad. Queremos que la ayuda siga apareciendo, pero en lugar de ir a los artículos oficiales, vamos a dirigir los clicks a una ayuda propia. En este caso, puede ser a una url externa o podríamos crear un módulo dentro del backend que contenga la ayuda (ya vamos a ver más adelante cómo crear módulos).

A nivel template, la ayuda se muestra en:

/app/design/adminhtml/default/default/template/page/menu.phtml

La línea de código donde se setea el link es:

<a id="page-help-link" href="<?php echo Mage::helper('adminhtml')->getPageHelpUrl() ?>"><?php echo $this->__('Get help for this page') ?></a>

Como se ve, se utiliza un método llamado getPageHelpUrl.

Ese método se encuentran en:

/app/code/core/Mage/Adminhtml/Helper/Data.php

Ahi vamos a ver el método setPageHelpUrl (en la línea 47) que contiene lo siguiente:

public function setPageHelpUrl($url=null)
{
    if (is_null($url)) {
        $request = Mage::app()->getRequest();
 
        $frontName = $request->getModuleName();
        $router = Mage::app()->getFrontController()->getRouterByFrontName($frontName);
        $url = 'http://www.magentocommerce.com/gethelp/';
        $url.= Mage::app()->getLocale()->getLocaleCode().'/';
        $url.= $router->getModuleByFrontName($frontName).'/';
        $url.= $request->getControllerName().'/';
        $url.= $request->getActionName().'/';
 
        $this->_pageHelpUrl = $url;
    }
    $this->_pageHelpUrl = $url;
 
    return $this;
}

Podríamos modificar ahi mismo (cosa NO recomendable) (me refiero a modificar el core). La solución más prolija sería escribir un método que sobreescriba a ese y agregue la llamada que se desee (ya sea llamando a un sitio externo a un módulo que pueda desarrollar uno mismo).

Volviendo al código del método, lo que hace es capturar el nombre del Módulo, el Controlador y la Acción en la que se encuentra el usuario en ese momento.

Esos parámetros son enviados a la url http://www.magentocommerce.com/gethelp/.

Ese valor, que se encuentra en la línea 54 de la clase (en la declaración de la variable $url), es la que podríamos modificar.

Dado que hablé de modificaciones al Core, me pongo insistente con el hecho de no hacerlo de esa forma. Lo más sano es reescribir la clase para evitar tener problemas de compatibilidad a futuro.