it-swarm.asia

أضف جافا سكريبت إلى نوع محتوى معين

أود أن أعرف ما هي أفضل طريقة لإضافة ملف JavaScript إلى صفحة معينة استنادًا إلى نوع المحتوى. على سبيل المثال ، أريد أن أضيف هذا:

<script type='text/javascript' src='http://maps.google.com/maps/api/js?sensor=false'></script>

حتى الآن ، ما فعلته هو استخدام هذه الطريقة للإضافة إلى نوع المحتوى الخاص بي. بالنسبة إلى نوع محتوى map_page ، أضفت سطري الشفرة أدناه في الصفحة - map_page.tpl.php.

drupal_add_js("http://maps.google.com/maps/api/js?sensor=false", 'external');
$scripts = drupal_get_js();

هل هناك طريقة أخرى أفضل؟ إذا كان ذلك ممكناً يمكن أن يعطي مثالاً ، في الوقت الحالي لا يفهم جيداً ...

9
arkchong

لا يمكنني التعليق على ما يكافئ Drupal 7 ، ولكن في Drupal 6 مواقع أقوم بذلك في template_preprocess_page .

سيكون لدي بعض المنطق لاتخاذ القرار (إما بناءً على arg() أو page_manager_get_current_page() من اللوحات) ، ثم بعد ذلك $vars["scripts"] مع البرنامج النصي الخارجي. أنا أتكامل حتى لا أواجه مشاكل التبعية مع أي نصوص محلية.

أقوم أحيانًا أيضًا بإعداد منطقة جديدة تسمى $global_scripts لأفكار مثل Google API و SWFObject التي أريد تحميلها من CDN ، ويتم طباعتها قبل $scripts في قالب الصفحة.

لنكون صادقين ، على الرغم من أن لدي عادةً كل JS في جميع الصفحات حتى يتم تخزين الملفات في ذاكرة التخزين المؤقت.

6
mpdonadio

نظرًا لأن Drupal بإعادة تعريف template_preprocess_node (لأنها محددة بالفعل في node.module) ، أضفت وظيفة معالج مسبق في الوحدة النمطية المخصصة الخاصة بي:

function mymodule_preprocess_node(&$vars) {
  if ($vars['type'] == 'my-node-type') {
    drupal_add_js(drupal_get_path('module', 'mymodule') . '/myjs.js');
  }
}

انا إستعملت preprocess_node عوضا عن preprocess_page لأنه من الأسهل الوصول إلى نوع العقدة. إذا كنت تشير بالفعل إلى ملف جافا سكريبت ، فسيتم تخزينه مؤقتًا تلقائيًا ( انظر قسم المعلمات ).

6
Jukebox

يمكنك أيضًا استخدام فحص hook_node_view لنوع المحتوى ثم إضافة js بالطريقة التي تقوم بها بالفعل.

OR

إذا كان لديك حقل يخرج المعلومات التي ستستخدم JS ، استخدم معالج مسبق هناك لإضافة js ، لذا فإن js include يعتمد على الحقل الذي يعرض الخريطة بدلاً من نوع المحتوى.

2
Jeremy French

الحل البسيط هو وضع add_js:

  drupal_add_js('drupal_get_path('module', 'mymodule') . '/myjs.js');

في template.php/العقدة.

0
Nevos