Добавление вкладок jQuery с помощью template.php
Как добавить вкладки jQuery в "template.php "файл?
Я пытаюсь добавить его с помощью drupal_add_library('system', 'jQuery.tabs')
или drupal_add_js('/misc/ui/jquery.ui.tabs.min.js')
, но мне не везет.
Вот мой полный фрагмент:
function custom_theme(&$existing, $type, $theme, $path) {
$hooks = array();
drupal_add_library('system', 'ui.tabs');
// custom.js will call jQuery.tabs!
drupal_add_js( path_to_theme() .'/js/custom.js', array('weight' => 9));
return $hooks;
}
2 answers
Hook_theme() - это хук, который должен возвращать список функций темы, реализованных модулем или темой.
Вызов drupal_add_library()
или drupal_add_js()
внутри hook_theme()
не является способом добавления файла JavaScript на страницу.
Как сообщается в Структуре файла .info, тема может использовать директиву scripts
для объявления файлов JavaScript, которые она использует.
scripts[] = js/custom.js
В качестве альтернативы, тема может использовать drupal_add_js()
внутри функции темы или использовать следующие вырезанные внутри page.tpl.php, или любой альтернативный шаблон страницы, который будет использовать Drupal.
drupal_add_js($path_to_script);
$scripts = drupal_get_js();
Я думаю, что конкретный вопрос касается добавления вкладок пользовательского интерфейса jQuery. Другой ответ касается добавления пользовательских файлов javascript.
Когда у меня много вкладок на многих страницах, я выполняю это в пользовательском модуле с помощью hook_init()
function mymodule_init(){
drupal_add_library('system','ui.tabs');
}
В комментариях этот вопрос задает вопрос о том, как это сделать для определенной страницы (или узла).
Вы можете сделать это в своей теме в template.php с помощью template_preprocess_page():
function mytheme_preprocess_page(&$variables) {
echo "<pre>"; print_r($variables['node']); echo "</pre>"; // great for debugging
if ($variables['node']->nid == 3) drupal_add_library('system', 'ui.tabs');
}
В приведенный выше код предполагает, что узел 3 является целевой страницей с вкладками пользовательского интерфейса jQuery.
Не забудьте очистить кэши после их добавления.
Итак, теперь мы загрузили библиотеку. Следующий шаг - добавить файл javascript в ваш модуль/тему. Это делается в файле mytheme/mymodule.info. Добавить
scripts[] = js/script.js
Создайте папку "js", создайте script.js, и следуйте практикам Drupal, следуя этому шаблону:
(function($, Drupal, window, document, undefined) {
Drupal.behaviors.my_custom_behavior = {
attach : function(context, settings) {
// assuming your div is "tabs"
jQuery("#tabs").tabs();
}
};
})(jQuery, Drupal, this, this.document);
Итак, для простоты вы можете иметь свой узел 3 содержимое, настроенное на полный HTML (или PHP в этом примере), и тело, подобное этому, которое будет отображать два представления на разных вкладках:
<div id="tabs">
<ul>
<li><a href="#tabs-1">Stack Overflow</a></li>
<li><a href="#tabs-2">Drupal StackExchange</a></li>
</ul>
<div id="tabs-1">
Let's show our View for Stack Overflow
<?php echo views_embed_view('stackoverflow', 'machine_name_foo'); ?>
</div>
<div id="tabs-2">
And for Drupal
<?php echo views_embed_view('drupal_se', 'machine_name_bar'); ?>
</div>
</div>