2009-11-09 12 views
5

Quiero cambiar el contenido dentro de $block->content, ¿qué gancho de Drupal debo implementar?cambiar el contenido del bloque

+1

Para Drupal 7 (sé que su pregunta es relevante para 6, pero esto puede ayudar de todos modos) there _is_ a [hook_block_alter] (http://api.drupal.org/api/drupal/modules!block! block.api.php/function/hook_block_view_alter/7) que le permitiría hacer exactamente lo que necesita. Entonces, una opción que tienes es actualizar a D7 :) –

Respuesta

9

Dependiendo de cuáles son sus necesidades, puedo pensar en varias formas posibles:

  1. Usando template_preproces_block(): Este gancho esencialmente "intercepta" las variables en su camino hacia el bloque y le da la oportunidad de intervenir en aquellos. Esta es una forma bastante eficiente de hacerlo.
  2. Creating your own template file for the block: Esto le permite por unos cuantos trucos, pero en términos de la velocidad no es la mejor (tematización a través de archivos tpl.php es aproximadamente 5 veces más lento que el uso de funciones, leí)
  3. La creación de su propia marca nueva y bloque brillante implementando hook_block(). Según lo sugerido por Henrik, podría hacer frente fácilmente al código del módulo original como iniciador. Esta es una buena manera de hacerlo si su cambio debe afectar todos los temas posibles en uso en el sitio, no tanto si solo tiene que afectar un tema (aunque puede implementar alguna lógica en función del clima que un determinado tema esté en uso o no, pero esto me parece muy poco elegante).
  4. Si se forma la pantalla de bloque u otro contenido que tenga su propio conjunto de ganchos, entonces también podría cambiar el contenido de esa manera. Por ejemplo: si está intentando modificar el bloque de inicio de sesión (que muestra un formulario para autenticar) puede implementar hook_form_FORM_ID_alter() o hook_form_alter().
  5. Using jQuery: esta es una buena solución si el contenido del bloque necesita cambiar de forma asincrónica (o dependiente) del resto del contenido de la página. Tenga en cuenta que los navegadores heredados (o los motores de búsqueda) no activarán el código jQuery.

En una nota diferente, podría cambiar por completo el enfoque del problema cambiando la naturaleza misma del "bloque" en algo que sea más flexible. Tiendo a desalentar este enfoque a menos que realmente descubras que un simple bloque no hará lo que necesitas ... sin embargo, es una posibilidad que deberías conocer. Se puede cambiar la naturaleza de un bloque, entre otros, por:

  • Utilizando el nodeasblock module, lo que le permite obtener un nodo en un bloque (pudiendo así utilizar en la plantilla muchas más variables que la simple $title y . $content los
  • Utilizando el views module. esta es una herramienta imprescindible para cualquier usuario de conocimientos drupal/admin seria ... pero la aplicabilidad de puntos de vista a este caso específico varía mucho dependiendo de lo que es el contenido del bloque que está intentando para producir.
  • Usando el panels module, que le permite crear contenido similar a un bloque y jugar con él a través de un grap interfaz hical (sin tener en cuenta que se trata de un módulo enorme en términos de sobrecarga y tiene una curva de aprendizaje pronunciada).
4

AFAIK, no hay un gancho "real" para cambiar el contenido de un bloque. Podría implementar una función yourModule_preprocess_block(), verificando/manipulando el conjunto de variables pasadas en $. Alternativamente, como las implementaciones de bloques suelen ser bastante cortas, puede copiar la lógica de generación de bloques original en su propia implementación de hook_block(), proporcionando así su propia versión con las personalizaciones deseadas.

Cuestiones relacionadas