drupal drupal-6 preprocessor drupal-theming

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



drupal-6 preprocessor (2)

Para averiguar cuál debe ser el nombre de nuestra función de preprocesamiento, necesitamos saber de qué archivo de plantilla o función de tema proviene alguna salida, y una buena forma de hacerlo es mediante el uso del módulo de 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

Tengo varios archivos .tpl.php para nodos, campos CCK y temática de Vistas. Estos archivos de plantilla tienen mucha lógica para mover cosas, quitar enlaces, crear nuevos enlaces, etc. Entiendo que este es un mal desarrollo y no "The Drupal Way".

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

  • ¿Existe una convención de nombres 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 del preprocesador?
  • ¿Puedo usar funciones de preprocesador de plantilla para plantillas de nodo, plantillas de campo CCK y plantillas de Vistas? ¿Tienen diferentes métodos para modificar variables de plantilla o agregar nuevas?

Para una descripción general, debe leer sobre la manipulación de variables dentro de las funciones de preproceso .

Con respecto a la convención de nomenclatura, esto es normalmente bastante simple, pero hay un inconveniente para su ejemplo actual (ver a continuación):

Una firma de funciones de preproceso debe ser

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

así que implementar uno para la plantilla de página dentro de un archivo themes template.php resultaría en

themeName_preprocess_page(&$variables)

La mayoría de las veces, el nombre de la función de tema será el nombre del archivo * .tpl.php, sin la terminación .tpl.php y con guiones bajos en lugar de los guiones. Pero hay una trampa si el archivo de plantilla se selecciona sobre la base de sugerencias de plantilla , ya que la función de 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 funciones de preproceso).

Su ejemplo actual es uno de esos casos, como content-field-field_transmission_make_model.tpl.php es una sugerencia de este tipo, con el nombre base siendo content-field.tpl.php , y la función de tema correspondiente es 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 la matriz de $ variables para verificar si realmente se llama para el ''field_transmission_make_model'', y no para un campo CCK completamente diferente , p.ej:

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, ten cuidado con los errores tipográficos)

Después de esto, debe haber una nueva variable $new_entry 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 se convertirán en variables separadas para el archivo de plantilla, nombrado después del í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 preproceso solo están disponibles para llamadas de tema que utilizan archivos * .tpl.php, no para funciones de tema
  • El contenido de la matriz de $ variables varía mucho, dependiendo de lo que tenga el tema
  • Otros módulos también podrían implementar las funciones de preproceso, y se llamarán uno tras otro, de modo que si desea cambiar algo que otro módulo agrega, solo puede hacerlo si se llama a su implementación después de eso (que no será 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)