web-gelistirme-sc.com

hook_preprocess_page (): görünümler sayfası nasıl söylenir?

Im sadece bir Views sayfasında bazı javascript ve css dosyaları eklemek gerekir özel bir modül yazma.

Im hook_preprocess_page kullanarak, ancak geçerli sayfanın bir görünümden olup olmadığını söyleyemem:

function mymodule_preprocess_page(&vars)
{
    var_dump($vars); //output: nothings that reference the views!
    if([view page])
    {
        drupal_add_js([...]);
        drupal_add_css([...]);
        // Rebuild scripts 
        $scripts = drupal_get_js();
        $vars['scripts'] = $scripts;
        // Same for css
    }
}

Bir şablon dosyası (page-my_view_page_path.tpl.php) kullanabileceğimi biliyorum, ancak js ve extra css yalnızca modülüm etkinse dahil edilmelidir; bu yüzden bunu doğrudan modül kodumda tutmak istiyorum.

Fikirler?

10
Strae

views_get_page_view() varsa, sayfa görünümünün şu anda kullanımda olduğunu öğrenir. NULL döndürürse, geçerli sayfa bir görünümler sayfası değildir.

Ancak drupal_add_js() içinde drupal_add_css() ve hook_preprocess_page() kullanılması, $script Ve $style Değişkenleri olduğu için beklendiği gibi çalışmaz zaten template_preprocess_page() tarafından ayarlanmış. Views'ın şablon önişlemesi (bkz. Jeremy French'in cevabı) muhtemelen CSS ve JavaScript'inizi eklemek için daha iyi bir yerdir.

12
Pierre Buyle

görünümler için ön işlemciler burada uzun bir iş parçacığı var. Bu yorum benim için çok basit görünüyor.

function mymodule_theme_registry_alter(&$theme_registry) {
  //dpm($theme_registry);
  $theme_registry['views_view__YOUR_VIEW_NAME_HERE']['preprocess functions'][] = 'mymodule_preprocess_func';
}

// now go on and play with your new preprocess function
function mymodule_preprocess_func(&$vars) {
  // etc
}
11
Jeremy French

Eğer bir hook_preprocess_page () içindeyseniz, tanım gereği, görünümünüzün bir sayfa görüntüsü ve benzersiz olması gereken bir menü yolu vardır - böylece bunu yapabilirsiniz:

function mymodule_preprocess_page(&vars)
{
    var_dump($vars); //output: nothings that reference the views!
    if($_GET['q'] == 'my/view/path')
    {
        drupal_add_js([...]);
        drupal_add_css([...]);
    }
}

Bu sayfaya iletilen bağımsız değişkenleriniz varsa, $_GET['q'] Bölümlerine ihtiyacınız varsa, bunu Drupal'ın arg() işleviyle yapın:

if(arg(0) == 'my' && arg(1) == 'view' && arg(2) == 'path')

http://api.drupal.org/api/drupal/includes--bootstrap.inc/function/arg

8
Greg

Benim için bu işe yarıyor:

function MYMODULE_preprocess_page(&$vars) {
  $view = (array)views_get_page_view();
  if (!empty($view)) {
    // do stuff
  }
}
3
leymannx

Belirli bir geri aramaya JS veya CSS ekliyorsanız, kullanmak daha iyidir hook_page_build() :

2
Simon Poulston