Добавление вкладок 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;
}
Author: kiamlaluno, 2011-04-11

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();
 2
Author: kiamlaluno, 2011-04-12 16:06:28

Я думаю, что конкретный вопрос касается добавления вкладок пользовательского интерфейса 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>
 1
Author: mikeDOTexe, 2014-07-24 20:53:54