أود أن أعرف ما هي أفضل طريقة لإضافة ملف 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();
هل هناك طريقة أخرى أفضل؟ إذا كان ذلك ممكناً يمكن أن يعطي مثالاً ، في الوقت الحالي لا يفهم جيداً ...
لا يمكنني التعليق على ما يكافئ Drupal 7 ، ولكن في Drupal 6 مواقع أقوم بذلك في template_preprocess_page .
سيكون لدي بعض المنطق لاتخاذ القرار (إما بناءً على arg()
أو page_manager_get_current_page()
من اللوحات) ، ثم بعد ذلك $vars["scripts"]
مع البرنامج النصي الخارجي. أنا أتكامل حتى لا أواجه مشاكل التبعية مع أي نصوص محلية.
أقوم أحيانًا أيضًا بإعداد منطقة جديدة تسمى $global_scripts
لأفكار مثل Google API و SWFObject التي أريد تحميلها من CDN ، ويتم طباعتها قبل $scripts
في قالب الصفحة.
لنكون صادقين ، على الرغم من أن لدي عادةً كل JS في جميع الصفحات حتى يتم تخزين الملفات في ذاكرة التخزين المؤقت.
نظرًا لأن 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
لأنه من الأسهل الوصول إلى نوع العقدة. إذا كنت تشير بالفعل إلى ملف جافا سكريبت ، فسيتم تخزينه مؤقتًا تلقائيًا ( انظر قسم المعلمات ).
يمكنك أيضًا استخدام فحص hook_node_view لنوع المحتوى ثم إضافة js بالطريقة التي تقوم بها بالفعل.
OR
إذا كان لديك حقل يخرج المعلومات التي ستستخدم JS ، استخدم معالج مسبق هناك لإضافة js ، لذا فإن js include يعتمد على الحقل الذي يعرض الخريطة بدلاً من نوع المحتوى.
الحل البسيط هو وضع add_js:
drupal_add_js('drupal_get_path('module', 'mymodule') . '/myjs.js');
في template.php/العقدة.