Quiero cambiar el contenido dentro de $block->content
, ¿qué gancho de Drupal debo implementar?cambiar el contenido del bloque
Respuesta
Dependiendo de cuáles son sus necesidades, puedo pensar en varias formas posibles:
- 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.
- 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í)
- 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).
- 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().
- 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).
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.
- 1. ¿Cómo cambiar el contenido del Span utilizando jQuery?
- 2. ¿Cómo cambiar el estilo del contenido de iframe entre dominios?
- 3. Drupal 7 Cambiar el tipo de contenido del nodo existente
- 4. Cómo cambiar dinámicamente el tamaño del contenido de UIPopoverController?
- 5. Obtener ListBox para cambiar el tamaño con la ventana, pero no cambiar el tamaño del contenido
- 6. ¿Cambiar el contenido de UITableView sin cambiar su contentOffset?
- 7. jQuery cambiar el contenido de colorbox
- 8. cambiar el contenido de un puntero variables
- 9. HTML/Javascript cambiar el contenido div
- 10. Cambiar el contenido de div - jQuery
- 11. Cambiar la opacidad del fondo sin cambiar la opacidad del contenido
- 12. ¿Cómo cambiar la fuente del encabezado de TabItem sin cambiar la fuente del contenido?
- 13. Eclipse: Cambiar el bloque de comentario estilo de Ctrl + Shift +/
- 14. Establecer la altura del contenido del iframe para cambiar automáticamente el tamaño de forma automática
- 15. cómo cambiar el contenido de un FloatBuffer, manteniendo el rendimiento?
- 16. ¿Cómo puede Silverlight cambiar el tamaño del contenido de texto para que encaje?
- 17. Alinear el contenido del botón
- 18. Obtenga el contenido del módulo
- 19. Vim: cambiar/borrar hasta el final de un "bloque"
- 20. ¿Cuál es el punto del bloque finally?
- 21. bloque del depurador
- 22. Vim cambiar el cursor del bloque cuando está en modo insertar
- 23. cambiar el contenido del div cuando se hace clic en el enlace/botón
- 24. Detectar el cambio de altura del contenido del marco iframe
- 25. ¿Cómo cambiar la altura del iframe en función del contenido dinámico dentro del iframe?
- 26. Cambiar el tamaño jQuery colorbox para contenido iframe?
- 27. AfterInsertRow, setCell. cambiar programáticamente el contenido de la celda
- 28. Contenido pintado invisible al cambiar el tamaño en Java
- 29. tamaño de letra Afecta la altura del elemento del bloque?
- 30. Cómo configurar el contenido y el tamaño del contenido en un UIWebView
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 :) –