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


10

Im sadece bir Views sayfasına 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?


Modülünüzdeki şablon dosyalarını kullanabilirsiniz.
— Jeremy French

@Jeremy: insanların nasıl oy kullanabileceğini ve tartışabileceğini açıklayan cevabınızı ekleyin.
— Strae

Yanıtla doğrudan ilgili değildi, sadece bir tpl dosyasının bir modüle dahil edilebileceğine işaret etti. bir DANieL bunu yapamayacağını gösteriyor gibi görünüyordu.
— Jeremy French

şey .. ben tema page.tpl içerebilir, ama benim amacım bu modül tema tamamen bağımsız tutmak ..
— Strae

Jeremy Fransızca'nın yanıtında önerildiği gibi, modülünüzün ön işlemlerini gerçekleştirirken Views şablonlarını uygulayabilirsiniz.
— Pierre Buyle

Yanıtlar:


12

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

Ama kullanarak drupal_add_js()ve drupal_add_css()bir de hook_preprocess_page()değişken çünkü beklendiği gibi çalışmaz $scriptve $styledeğişkenler zaten tarafından seti olmuştur template_preprocess_page(). Views'ın şablon önişlemesi (bkz. Jeremy French'in cevabı) muhtemelen CSS ve JavaScript'inizi eklemek için daha iyi bir yerdir.


Sana ikinci paragraf için cevabımı güncelledim - biliyorum tema (theme_preprocess_ *) css veya js eklemek için iyi bir uygulama, ama benim ihtiyaç modül dependandt.
— Strae

Mükemmel, views_get_page_view zaten yüklü olan görünümü önbellekten alır, bu nedenle performans etkisi olmamalıdır. IMHO bu kabul edilen cevap olmalı.
— marcvangend

@Strae Benim önerim HOOK_preprocess_views_view(&$variables)veya başka bir Views 'şablon önişleme kancası kullanmak yerine HOOK_preprocess_page(&$variables). Bu şekilde görüşlerini alabilirsiniz $variablesve kullanım drupal_add_js()ve drupal_add_css()güvenli bir şekilde.
— Pierre Buyle

11

Buradaki görünümler için önişlemcilerde uzun bir iplik 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
}

Görünümün tüm sayfa yerine çıktısını önceden işlemenin muhtemelen daha doğru bir yaklaşım olduğunu kabul ediyorum.
— Garrett Albright

8

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, bunun kısımlarına ihtiyacınız varsa $_GET['q'], bunun yerine Drupal'ın arg()işleviyle bunu yapın:

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

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


$ _GET ['q'] incelemenizi önermem. Kullan menu_get_item () veya menu_get_object () yerine. Geçerli sayfayı inceliyorsanız ikisi de bağımsız değişken gerektirmez ve her ikisi de sonuçlarını önbelleğe alır.
— Mikey P

Hook_preprocess_page () içinde drupal_add_js () ve drupal_add_css () kullanılması, $ script ve $ stil değişkenleri zaten template_preprocess_page () tarafından ayarlandığı için beklendiği gibi çalışmaz. Geçerli sayfanın (varsa) görünümünü almak için views_get_page_view () öğesini kullanın.
— Pierre Buyle

3

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

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.