Pregunta

Tengo varios archivos tpl.php para los nodos, campos CCK y Vistas theming. Estos archivos de plantilla tienen una gran cantidad de lógica en ellos para mover las cosas, conexiones de banda, crear nuevos enlaces, etc. entiendo que esto es malo desarrollo y no "El Camino de Drupal".

Si he entendido bien, "La Drupal Way" es el uso de las funciones de preprocesador en su archivo template.php para manipular las variables y añadir nuevas variables. Algunas preguntas acerca de lo siguiente:

  • ¿Hay una convención de nomenclatura para la creación de una función 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 voy a nombrar la función preprocesador?
  • ¿Puedo funciones plantilla de uso del preprocesador para las plantillas, plantillas de nodos de campo CCK y plantillas de puntos de vista? ¿Tienen diferentes métodos de modificación de variables de plantilla o añadiendo otros nuevos?
¿Fue útil?

Solución

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


En cuanto a la convención de nomenclatura, esto es, normalmente, tan sencillo, pero hay una trampa para su ejemplo actual (véase más adelante):

necesidades funciones de procesamiento previo de la firma A que se va

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

por eso implementar uno para la plantilla de página dentro del archivo template.php unos temas resultaría en

themeName_preprocess_page(&$variables)

La mayoría de las veces el nombre de la función tema será el nombre de archivo del * tpl.php, sin la tpl.php y terminando con guiones en lugar de los guiones. Pero hay una trampa si el archivo de plantilla se selecciona sobre la base del sugerencias plantilla , como la función de preproceso sólo se puede aplicar para el nombre de la base, no por las sugerencias! (Se añaden las sugerencias de los archivos de plantillas alternas en sí mismas funciones de preproceso.)

Su ejemplo actual es uno de esos casos, como content-field-field_transmission_make_model.tpl.php es tal una sugerencia, con el nombre de la base de ser content-field.tpl.php, y siendo la función tema correspondiente content_field. Por lo que tendría que poner en práctica una función llamada yourThemeName_preprocess_content_field(&$variables) preproceso, y dentro de ese inspeccionar las entradas disponibles en la matriz de variables $ para comprobar si en realidad se pidió la '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: el código no probado, tenga cuidado con los errores tipográficos)

Después de esto, no debe ser estar disponibles en el archivo de plantilla de un nuevo $new_entry variable y el contenido de la variable $label debería haber cambiado (todas las entradas de nivel superior dentro de la matriz de las variables $ se convertirán en las variables independientes para el archivo de plantilla , el nombre del índice de matriz).


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

  • preproceso funciones sólo están disponibles para las llamadas temáticos que uso * tpl.php archivos, no para funciones de temas
  • El contenido de la matriz de las variables $ varía en gran medida, dependiendo de lo que se interpone temática
  • Otros módulos podrían llevar a cabo las funciones de procesamiento previo, así, y ellos serán llamados uno tras otro, por lo que si quieres cambiar algo que se agrega por otro módulo, sólo puede hacerlo si su aplicación se llama después de eso (que no será ningún problema en su caso, como implementaciones dentro de un tema se llaman después de que todas las implementaciones dentro de los módulos - solo quería mencionar que no puede haber muchas implementaciones a la vez)

Otros consejos

Con el fin de averiguar lo que nuestra función de pre-procesamiento debe ser nombrado, necesitamos saber qué archivo de plantilla o función tema de parte de la producción proviene de, y una gran manera de hacer esto es mediante el uso de la desarrollador de temas módulo .

Aquí hay un video que explica en detalle - http://buildamodule.com/video/drupal-theming-essentials-template-files-theme-function-overrides-and-preprocessing-functions- cómo-a-uso-simple de pre-procesamiento-funciones

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top