Sobreescribir menu links del core de Drupal 6

Esto es más un apunte para que no se me olvide la próxima vez. Si además le viene bien a alguien, pues mejor ;)

Cuando creamos un módulo podemos hacer que atienda él mismo las peticiones que se harían al core si no estuviese. Dicho de otra manera: Nuestro módulo va a interceptar ciertas llamadas que se harían al core de Drupal para proporcionar un comportamiento diferente al de por defecto y no romper el sistema de enlaces propuesto por Drupal.

Por ejemplo, he desarrollado un modulo que muestra los elementos de una taxonomía de manera distinta a como lo hace Drupal. Para ello hemos redigido la llamada de menú: taxonomy/term/% (atendida por el core en el modulo Taxomony) a una función de nuestro módulo.

Al motor de enlaces le va a llegar dos entradas de menu que tienen la misma url, pero que apuntan a dos funciones distintas. Cómo hace Drupal para escoger la que va a atender? Pues muy sencillo, por el peso del módulo que atiende a las peticiones.

Todos los módulos se instalan con un peso por defecto, si a nuestro módulo le ponemos un peso mayor que el del módulo Taxonomy del core (la lista de llamadas se hace sobreescribiendo las anteriores y Drupal recorre los modulos, al generar el menú, de menor a mayor peso) la sobreescribirá con la entrada de menu de nuestro módulo.

Para cambiar el peso de un módulo, basta con actualizar el valor del campo weight de la table {system} de la base de datos de nuestro sitio. Para más información: How to update a module’s weight.

Por último recordar que el menú del sitio se encuentra cacheado en la base de datos. No basta con actualizar nuestro código para que queden disponibles los enlaces implementados en nuestro módulo. Hay que recargar la tabla {menu_links}. Esto es facil de hacer guardando la lista de módulos del sitio, sin tocar nada.

Todavía no hay comentarios

Enviar un comentario nuevo

El contenido de este campo se mantiene privado y no se mostrará públicamente.
  • Etiquetas HTML permitidas: <a> <blockquote> <br> <cite> <code> <dd> <div> <dl> <dt> <em> <h1> <h2> <h3> <h4> <h5> <h6> <hr> <img> <li> <ol> <p> <pre> <span> <strong> <swf> <table> <tbody> <td> <th> <tr> <ul>
    Allowed Style properties: background-color, background-image, border, border-bottom, border-bottom-color, border-bottom-style, border-bottom-width, border-color, border-left, border-left-color, border-left-style, border-left-width, border-right, border-right-color, border-right-style, border-right-width, border-spacing, border-style, border-top, border-top-color, border-top-style, border-top-width, border-width, color, direction, font, font-family, font-size, font-style, font-variant, font-weight, height, left, line-height, list-style-type, margin, margin-bottom, margin-left, margin-right, margin-top, padding, padding-bottom, padding-left, padding-right, padding-top, right, text-align, text-decoration, top, width
  • Syntax highlight code surrounded by the {syntaxhighlighter OPTIONS}...{/syntaxhighlighter} tags.
  • E-Mail addresses are hidden with reCAPTCHA Mailhide.

Más información sobre opciones de formato

CAPTCHA
Esta pregunta es para comprobar si eres un ser humano y evitar el envío automático desde sistemas de spam