2012-05-03 20 views
6

tengo el siguiente código en mi archivo de Drupal 7 template.php:Drupal 7 preprocess_views no trabajar

function mytheme_preprocess_views_view__videos__videos(&$vars) { 
     drupal_add_css(drupal_get_path('theme', 'mytheme') . "/css/qwembed-jquery-1.0.css"); 
     drupal_add_js(drupal_get_path('theme', 'mytheme').'/js/jquery.swfobject.1-1-1.min.js', array('type' => 'file', 'scope' => 'footer')); 
     drupal_add_js(drupal_get_path('theme', 'mytheme').'/js/qwembed-jquery-1.0.js', array('type' => 'file', 'scope' => 'footer')); 
    } 

Es necesario cargar estos css y js presentar sólo cuando se visualiza este punto de vista.

el nombre de visualización de la vista es: Videos la vista Nombre de la máquina es: videos

y los archivos de sobrescritura son:

views-view--videos--videos.tpl.php 

views-view-unformatted--videos--videos.tpl.php 

views-view-fields--videos--videos.tpl.php 

cualquier idea por qué esto no está funcionando?

+0

¿Es el doble '__videos__videos' solo un error tipográfico? Si el nombre de las vistas es 'videos', esperaría '[yourThemeName] _preprocess_views_view__videos (& $ vars)'. –

+0

Supuse que era porque el nombre de disply era videos y en este caso el nombre de la máquina era videos. Los archivos de plantilla enumerados anteriormente funcionan perfectamente y son videos, videos. Trataré de eliminar uno de todos modos por las dudas. Gracias – Cybercampbell

+1

Espera, creo que algo me confundió, así que supongo que * no * funcionará con solo un '__videos' también. Volverá a verificar y agregar una respuesta. –

Respuesta

21

Es probable que intente implementar una función de preproceso basada en el mismo patrón de nomenclatura utilizado para las anulaciones de plantilla. Pero las funciones de preproceso son un poco diferentes porque, de forma predeterminada, solo se pueden implementar en función del nombre de la plantilla 'base' y no tienen el mismo mecanismo para versiones 'específicas' basadas en sugerencias de plantilla. Ver mi answer to a more generic question para más detalles.

Así que había necesidad de recurrir a la aplicación de la función de preproceso 'base', y comprobar si se llama a la vista deseada (y opcionalmente pantalla) dentro de esa función, más o menos, así:

function [yourThemeName]_preprocess_views_view(&$vars) { 
    $view = $vars['view']; 
    if ('videos' == $view->name) { 
    // Add desired manipulations for all 'videos' views 
    if ('videos' == $view->current_display) { 
     // Add desired manipulations for the 'videos' display only 
    } 
    } 
} 

Usted podría también agregar el comportamiento esperado al implementar una función de preproceso genérico que intenta llamar a versiones específicas comprobando las funciones con el nombre propio - vea el final de this article para un ejemplo - pero esto introduce bastante sobrecarga de procesamiento y solo tiene sentido, si necesita funciones de preproceso específicas para muchas vistas.

Hay más funciones de preproceso 'base' por tipo de vista que puede implementar directamente; consulte la lista de template_preprocess_views_view_* en 'views/theme/theme.inc' para conocer las opciones disponibles.

Como regla base, siempre que haya una función template_preprocess_* para una plantilla, puede implementar también la función yourThemeOrModuleName_preprocess_* correspondiente. Si necesita manipular plantillas basadas en sugerencias de nombre de plantilla, debe encontrar el nombre de la función de preproceso "base", implementarlo y verificar su caso específico en esa función (como para la vista específica como en el ejemplo anterior).

+2

¡Guau! muchas gracias por una respuesta tan clara y detallada. No puedo expresar cuánto aprecio el esfuerzo que ha hecho para ayudar a alguien que ni siquiera conoce. ¡¡Y puedo confirmar que tu respuesta es 100% correcta !! probado y funcionando !! Gracias de nuevo @Henrik Opel – Cybercampbell

+0

Para futuros lectores de su fantástica respuesta, quería señalar que esto solo es necesario en primer lugar debido a un error importante en Drupal 7 core. Consulte este problema para obtener más información: http://drupal.org/node/939462 – CoreDumpError

Cuestiones relacionadas