¿Cómo uso las funciones de preprocesador de temas para mis propias plantillas?


Tengo varios .tpl.archivos php para nodos, campos CCK y tematización de vistas. Estos archivos de plantilla tienen mucha lógica para mover cosas, eliminar enlaces, crear nuevos enlaces, etc. Entiendo que esto es un mal desarrollo y no "La Manera Drupal".

Si entiendo correctamente, "La Forma Drupal" es usar funciones de preprocesador en su archivo template.php para manipular variables y agregar nuevas variables. Algunas preguntas sobre eso:

  • hay una convención de nomenclatura para crear una función de preprocesador para un tema específico? Por ejemplo, si tengo una plantilla de campo CCK llamada content-field-field_transmission_make_model.tpl, ¿cómo nombraría la función de preprocesador?
  • ¿Puedo usar funciones de preprocesador de plantillas para plantillas de nodos, plantillas de campos CCK y plantillas de vistas? ¿Tienen diferentes métodos para modificar variables de plantilla o agregar otras nuevas?
Author: Steffen Opel, 2010-03-05

2 answers

Para una visión general, debe leer sobre la manipulación de variables dentro de funciones de preprocesamiento.


En cuanto a la convención de nomenclatura, esto es normalmente bastante simple, pero hay un problema para su ejemplo actual (ver más abajo):

Una firma de funciones de preproceso debe ser

[yourModuleName|yourThemeName]_preprocess_[themeFunctionName](&$variables)

Implementando así uno para la plantilla de página dentro de una plantilla de temas.el archivo php resultaría en

themeName_preprocess_page(&$variables)

La mayoría de las veces el nombre de la función theme será el nombre del *.tpl.archivo php, sin el .tpl.terminación php y con guiones bajos en lugar de guiones. Pero hay una captura si el archivo de plantilla se selecciona en la base de sugerencias de plantilla, ya que la función preproceso solo se puede implementar para el nombre base, no para las sugerencias adicionales! (Las sugerencias para archivos de plantilla alternativos se agregan en las propias funciones de preproceso.)

Su ejemplo actual es uno de esos casos, como content-field-field_transmission_make_model.tpl.php es tal sugerencia, con el nombre base siendo content-field.tpl.php, y la función temática correspondiente siendo content_field. Así que tendría que implementar una función de preproceso llamada yourThemeName_preprocess_content_field(&$variables), y dentro de eso inspeccionar las entradas disponibles en el array variables variables para comprobar si realmente se le llama para el 'field_transmission_make_model', y no para un campo CCK completamente diferente, por ejemplo:

function yourThemeName_preprocess_content_field(&$variables) {
  // Are we called for the right field?
  if ('field_transmission_make_model' == $variables['field_name']) {
    // Yes, add/manipulate entries within the variables array
    $variables['new_entry'] = 'A useless new variable';
    $variables['label'] = 'A useless change of the existing label variable';
  }
}

(Nota: Código no probado, cuidado con los errores tipográficos)

Después de esto, debería haber una nueva variable $new_entry está disponible en su archivo de plantilla, y el contenido de la variable $label debería haber cambiado (todas las entradas de nivel superior dentro de la matriz variables variables se convertirán en variables separadas para el archivo de plantilla, llamadas así por el índice de la matriz).


En cuanto a su segunda pregunta, el uso básico de las funciones de preproceso es el mismo para todos los archivos de plantilla, pero tenga en cuenta:

  • Las funciones de preprocesamiento solo están disponibles para llamadas a temas que usan *.tpl.archivos php, no para funciones temáticas
  • El contenido de la matriz variables variables varía mucho, dependiendo de lo que se temática
  • Otros módulos también pueden implementar las funciones de preproceso, y se llamarán una tras otra, por lo que si desea cambiar algo que se agrega por otro módulo, solo puede hacerlo si su implementación se llama después de eso (lo que no será un problema en su caso, ya que las implementaciones dentro de un tema se llaman después de todas las implementaciones dentro de los módulos-solo quería mencionar que puede haber muchas implementaciones a la vez)
 55
Author: Henrik Opel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-05 15:23:15

Para averiguar de qué se debe nombrar nuestra función de preprocesamiento, necesitamos saber de qué archivo de plantilla o función de tema proviene alguna salida, y una gran manera de hacerlo es usando el módulo desarrollador de temas .

Aquí hay un video que lo explica en detalle - http://buildamodule.com/video/drupal-theming-essentials-template-files-theme-function-overrides-and-preprocessing-functions-how-to-use-simple-preprocessing-functions

 2
Author: amitgoyal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-21 09:42:57