2011-09-28 11 views
5

estoy en Drupal 7 y tengo un archivo tpl.php específico para un contenido field_image: "field - field_image.tpl.php". Necesito crear una función de preproceso para este campo y para mi tema.¿cómo llamo a mi función de preproceso de tema para un campo específico?

Suponiendo que mi nombre es el tema "Mi tema"

que debe ser similar

function my_theme_preprocess_field(&$variables, $hook) { 
    $variables['classes_array'][] = 'aClassName'; 
} 

pero no funciona. Estoy equivocado. ¿Pero donde?

Gracias

Respuesta

13

Puede utilizar template_preprocess_field() (como se hace en el código anterior), pero sólo probar el campo en particular es el más adecuado para usted:

function my_theme_preprocess_field(&$variables, $hook) { 
    $element = $variables['element']; 
    if (isset($element['#field_name'])) { 
    if ($element['#field_name'] == 'field_image') { 
     $variables['classes_array'][] = 'aClassName'; 
    } 
    } 
} 

Una vez que haya implementado el gancho Don No te olvides de borrar tus cachés, las implementaciones de hook se almacenan en caché en Drupal 7, por lo que no se recogerán hasta que se elimine la caché.

+1

Gracias. Después de borrar todas las cachés, no puedo ver ningún cambio donde debería haber. No puedo encontrar ninguna clase 'aClassName' en field_image ... El problema es imprimir elementos con ? – sibest

+0

pon una llamada a 'drupal_set_message ('TEST');' en la parte superior de la función y actualiza la página un par de veces; si no ves el mensaje 'TEST', entonces no se está llamando al enganche. Si ese es el caso, lo mejor que puede hacer es deshabilitar el tema y volver a habilitarlo para ver si Drupal toma el anzuelo. Por interés, ¿tiene alguna otra función de preproceso/gancho junto con esta en su archivo 'template.php'? – Clive

+0

¡Finalmente! Después de desactivar y reactivar el tema, recibí el llamado. ¡Gracias! y por cierto sí, tengo un montón de funciones de preproceso. – sibest

-3

En drupal 7 puede reescribir la salida del campo en template_preprocess_node() alterando el valor "#markup" del campo.

También puede utilizar expresiones regulares para cambiar lo que quiera en contenido de la página :)

4

Usted podría declarar una mytheme_preprocess_field(&$variables, $hook) en template.php de su tema donde se puede comprobar su campo y hacer operaciones en su etiqueta o marcado, agregue clases, cualquier cosa. Entonces no necesitaría tpls específicos de campo. - p.ej.

function mytheme_preprocess_field(&$variables, $hook) { 
    if ($variables['element']['#field_name'] == 'field_machine_name') { 
     $variables['items'][0]['#markup'] = 'add custom markup'; 
    } 
} 

Espero que esto ayude a alguien.

+1

¿Cómo mejora esto la respuesta de Clive, publicada antes que la tuya, con más detalles? –

Cuestiones relacionadas