سؤال

أريد تحميل برنامج نصي خارجي في <head>. إنها وحدة محددة لذلك أريد أن تعتني الوحدة النمطية بالتحميل.

في دروبال 6 ، الوظيفة drupal_add_js() لا يسمح بإضافة برنامج نصي خارجي في <head>. سيكون متاحا في دروبال 7 تمرير "external" حجة إلى الوظيفة. في D6 ، يمكنني استخدام drupal_set_html_head() بدلاً من ذلك ، لكنه يدرج البيانات المحددة في بداية <head> الذي لا أريده. أود إلحاق البيانات فيه.

اتضح ذلك drupal_html_set_head() إلحاق البيانات.

$stored_head .= $data ."\n";

لذا فإن السلوك الذي جربته-تم إدخال data في بداية بيانات الرأس-يجب أن يأتي من ذلك الذي أتصل به drupal_html_set_head() في الوحدة النمطية الخاصة بي hook_init() وظيفة.

كيف يمكنني إلحاق البيانات إلى جدا و <head>?

هل كانت مفيدة؟

المحلول

الافتراضي page.tpl.php (يمكنك العثور عليه في /modules/system/page.tpl.php هذا هو:

<head>
  <title><?php print $head_title; ?></title>
  <?php print $head; ?>
  <?php print $styles; ?>
  <?php print $scripts; ?>
  <script type="text/javascript"><?php /* Needed to avoid Flash of Unstyled Content in IE */ ?> </script>
</head>

عند إجراء drupal_set_html_head() إنه ملحق بالأشياء للمتغير $head, ، ولكن لا يزال هناك المزيد من المتغيرات الملحقة كما ترى.

أحد الحلول الممكنة هو إلحاق الأشياء التي تريدها $scripts, ، بدلاً من $head.

كيف؟

مع وظيفة المعالجة المسبقة من الوحدة النمطية الخاصة بك:

function MYMODULE_preprocess_page(&$variables) {
    $variables['scripts'] .= $your_stuff;
}

لم أجرب هذا الحل ، ولكن إذا لم ينجح ربما يكون ترتيب التنفيذ. حاول ضبط وزن الوحدة النمطية أعلى ، لذلك سيتم تشغيله بعد، بعدما ال system_preprocess_page.

سبب آخر قد لا يعمل هو أن الموضوع يقوم بطباعة المتغيرات بترتيب مختلف في page.tpl.php. لكن لا يمكنك التحكم في هذا من رمز الوحدة النمطية.

نصائح أخرى

هناك حلول متعددة للعمل حول المشكلة.

  • استخدم hook_footer () لإضافة JS إلى تذييل التذييل
  • اصنع نصًا صغيرًا jQuery ، والذي يخلق <script> العنصر ويضيفه إلى <head>
  • افعل ذلك مع وظيفة المعالجة المسبقة قالب
  • اصنع page.tpl.php الخاص بك

يستخدم دروبال .= المشغل لإنشاء $head عامل. ال $js و $css يتم الاحتفاظ به في صفيف ، ويسمح لك بالترتيب.$head هي سلسلة ، ولا يمكن إعادة الطلب ، والآخر ثم عن طريق الاختراقات القبيحة المعرضة للخطأ. مثل انفجارات التعبير العادي ، إعادة الطلب والانهيار.

$heads = preg_explode("\n", $head);
ksort($heads);
$head = implode("\n", $heads);

في متغير المظهر الخاص بك قبل المعالج.

هل رأيت هذا تعليق?

احذر عند استخدام هذا لتعيين مكالمة ملف JS خارجية في D6 ، على سبيل المثال:

drupal_set_html_head ('') ؛

إذا لم تقم بتضمين علامة إغلاق البرنامج النصي الكاملة (IE) ، فستكون قد تنكسر في Firefox (وربما متصفحات أخرى ، تبدو المتصفحات المستندة إلى WebKit على ما يرام). ستفشل العلامة في الإغلاق ، وستمسح أي رؤوس أخرى حتى العلامة التالية المتاحة. يؤدي هذا عادةً إلى فشل تحميل جميع ملفات CSS الخاصة بك ، بالإضافة إلى ملف JS التالي الذي يبلغ حجمه بالكامل. لذا استخدم هذا النموذج بدلاً من ذلك:

drupal_set_html_head ('') ؛

هذا ينطبق حتى وين بما في ذلك دروبال 6.16. يمكنك التغلب عليه في D7 مع الخيار الخارجي الجديد في DRUPAL_ADD_JS.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top