it-swarm.asia

hook_preprocess_page (): كيف تتحقق من صفحة المشاهدات؟

أنا أكتب وحدة مخصصة تحتاج إلى إدراج بعض ملفات جافا سكريبت و css فقط في صفحة طرق العرض.

أنا أستخدم صفحة hook_preprocess_page ، ولكن لا يمكنني معرفة ما إذا كانت الصفحة الحالية من طريقة عرض:

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

أعلم أنه يمكنني استخدام ملف قالب (page-my_view_page_path.tpl.php) ، ولكن يجب تضمين js و css الإضافي فقط إذا تم تمكين الوحدة النمطية الخاصة بي ؛ لذا أحب الاحتفاظ بهذه الأشياء مباشرة داخل رمز الوحدة النمطية الخاص بي.

أفكار؟

10
Strae

views_get_page_view() لاكتشاف طريقة عرض الصفحة ، إن وجدت ، المستخدمة حاليًا. إذا قامت بإرجاع NULL ، فإن الصفحة الحالية ليست صفحة طرق العرض.

لكن استخدام drupal_add_js() و drupal_add_css() في hook_preprocess_page() لن يعمل كما هو متوقع لأن المتغيرين $script و $style لهما متغيرات تم تعيينها بالفعل من قبل template_preprocess_page() . من المحتمل أن تكون المعالجة المسبقة لنموذج Views (انظر إجابة Jeremy French) مكانًا أفضل لإضافة CSS وجافا سكريبت.

12
Pierre Buyle

هناك خيط طويل على معالجات مسبقة لوجهات النظر هنا. هذا التعليق يبدو لي بسيطًا جدًا.

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

إذا كنت في hook_preprocess_page () ، فبالتأكيد ، فإن طريقة العرض الخاصة بك تحتوي على عرض الصفحة ومسار القائمة ، والتي يجب أن تكون فريدة - لذا يمكنك القيام بذلك:

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

إذا كانت لديك حجج يتم تمريرها إلى هذه الصفحة ، فأنت بحاجة إلى أجزاء من $_GET['q'] ثم قم بعمل ذلك بدلاً من ذلك باستخدام وظيفة arg() لدروبال:

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

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

8
Greg

بالنسبة لي هذا يعمل:

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

إذا كنت تضيف JS أو CSS إلى رد اتصال معين ، فمن الأفضل استخدام hook_page_build() :

2
Simon Poulston