it-swarm-vi.com

hook_pre process_page (): làm thế nào để biết một trang xem?

Tôi đang viết một mô-đun tùy chỉnh cần chèn một số tệp javascript và css chỉ trong trang Lượt xem.

Tôi đang sử dụng hook_pre process_page, nhưng tôi không thể biết trang hiện tại có ở chế độ xem hay không:

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

Tôi biết tôi có thể sử dụng tệp mẫu (page-my_view_page_path.tpl.php), nhưng chỉ bao gồm js và css bổ sung nếu mô-đun của tôi được bật; vì vậy tôi muốn giữ những thứ này trực tiếp bên trong mã mô-đun của mình.

Ý tưởng?

10
Strae

views_get_page_view() tìm hiểu xem, nếu có, chế độ xem trang hiện đang được sử dụng. Nếu nó trả về NULL, thì trang hiện tại không phải là trang của chế độ xem.

Nhưng sử dụng drupal_add_js()drupal_add_css() trong một hook_preprocess_page() sẽ không hoạt động như mong đợi vì các biến $script$style đã được đặt bởi template_preprocess_page() . Tiền xử lý mẫu của Lượt xem (xem câu trả lời của Jeremy Pháp) có lẽ là nơi tốt hơn để thêm CSS và JavaScript của bạn.

12
Pierre Buyle

Có một chuỗi dài trên tiền xử lý cho lượt xem tại đây. Nhận xét này có vẻ rất đơn giản với tôi.

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

Nếu bạn đang ở trong hook_pre process_page () thì theo định nghĩa, chế độ xem của bạn có hiển thị trang và đường dẫn menu, phải là duy nhất - vì vậy bạn có thể làm điều này:

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

Nếu bạn có các đối số được chuyển đến trang này, vì vậy bạn cần các phần của $_GET['q'], Thì hãy làm điều này thay vì với hàm arg() của Drupal:

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

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

8
Greg

Đối với tôi cái này hoạt động:

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

Nếu bạn đang thêm JS hoặc CSS vào một cuộc gọi lại cụ thể thì tốt hơn nên sử dụng hook_page_build() :

2
Simon Poulston