it-swarm-id.com

hook_preprocess_page (): bagaimana cara memberitahu halaman tampilan?

Saya sedang menulis modul khusus yang perlu memasukkan beberapa file javascript dan css hanya di halaman Views.

Saya menggunakan hook_preprocess_page, tapi saya tidak tahu apakah halaman saat ini dari tampilan:

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
    }
}

Saya tahu saya bisa menggunakan file templat (halaman-my_view_page_path.tpl.php), tetapi js dan css tambahan harus disertakan hanya jika modul saya diaktifkan; jadi saya suka menyimpannya langsung di dalam kode modul saya.

Ide ide?

10
Strae

views_get_page_view() mencari tahu apa, jika ada, tampilan halaman saat ini sedang digunakan. Jika mengembalikan NULL, maka halaman saat ini bukan halaman tampilan.

Tetapi menggunakan drupal_add_js() dan drupal_add_css() dalam hook_preprocess_page() tidak akan berfungsi seperti yang diharapkan karena variabel $script Dan $style Variabel memiliki sudah diatur oleh template_preprocess_page() . Pembuatan pratinjau templat Views (lihat jawaban Jeremy French) mungkin merupakan tempat yang lebih baik untuk menambahkan CSS dan JavaScript Anda.

12
Pierre Buyle

Ada utas panjang di preprosesor untuk tampilan di sini. Komentar ini terlihat sangat sederhana bagi saya.

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

Jika Anda berada di hook_preprocess_page () maka, menurut definisi, tampilan Anda memiliki tampilan halaman dan jalur menu, yang harus unik - sehingga Anda dapat melakukan ini:

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([...]);
    }
}

Jika Anda memiliki argumen yang diteruskan ke halaman ini, maka Anda perlu bagian dari $_GET['q'], maka lakukan ini sebagai gantinya dengan fungsi Drupal arg():

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

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

8
Greg

Bagi saya yang ini berfungsi:

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

Jika Anda menambahkan JS atau CSS ke callback tertentu maka lebih baik menggunakan hook_page_build() :

2
Simon Poulston