Включайте файл CSS или JavaScript для определенного узла в Drupal 6

23
задан googletorp 10 March 2010 в 16:36
поделиться

6 ответов

Лучшее решение, которое я предложил до сих пор, состоит в том, чтобы включить режим ввода PHP, и затем звонить drupal_add_css и drupal_add_js как соответствующий в блоке PHP в запуске тела Вашего узла.

3
ответ дан Evan 29 November 2019 в 02:42
поделиться

Я отговорил бы от использования hook_nodeapi для этого. Добавление CSS и JavaScript связано с расположением, таким образом hook_nodeapi не место для него: используйте themeing. Таким образом, Вы можете переопределение те файлы, когда Вы собираетесь разработать новую тему. Выполнение этого с подходом nodeapi было бы немного более трудным (необходимо будет искать список js/css файлы, удалить их и заменить их собственным).

Так или иначе: то, что необходимо сделать, добавляют, что узел предварительно обрабатывает функцию, которая добавляет те файлы для Вас. Можно сделать это или в модуле или в пользовательской теме. Для модуля это было бы:

function mymodule_preprocess_node(&$variables) {
  $node = $variables['node'];
  if (!empty($node) && $node->nid == $the_specific_node_id) {
    drupal_add_js(drupal_get_path('module', 'mymodule') . "/file.js", "module");
    drupal_add_css(drupal_get_path('module', 'mymodule') . "/file.css", "module");
  }
}

или для темы:

function mytheme_preprocess_node(&$variables) {
  $node = $variables['node'];
  if (!empty($node) && $node->nid == $the_specific_node_id) {
    drupal_add_js(path_to_theme() . "/file.js", "theme");
    drupal_add_css(path_to_theme(). "/file.css", "theme");
  }
}

не забывают очищать кэш, сначала.

Эти функции вызваны, прежде чем узел тематический. Specifing js/css там допускает каскадный подход: Вы можете иметь универсальный/основной материал в модуле и обеспечить улучшенную или определенную функциональность в теме.

14
ответ дан Inferis 29 November 2019 в 02:42
поделиться

Я использую предварительно обрабатывать функции, но это имеет некоторые проблемы. $variables['styles'] обычно устанавливается прежде , узел предварительно обрабатывает функцию, назван. Другими словами drupal_get_css уже назван, который делает Вас звонящий drupal_add_css бесполезными. То же идет для drupal_add_js. Я работаю вокруг этого путем сброса эти $variables['styles'] значение.

function mytheme_preprocess_node(&$variables) {
  $node = $variables['node'];
  if (!empty($node) && $node->nid == $the_specific_node_id) {
    drupal_add_js(path_to_theme() . "/file.js", "theme");
    drupal_add_css(path_to_theme(). "/file.css", "theme");
    $variables['styles'] = drupal_get_css();
    $variables['script'] = drupal_get_js();
  }
}

Это, кажется, работает на большинство случаев.

P.S. Существует едва, любой когда-либо должен создавать модуль для решения theming проблемы.

Аплодисменты.

5
ответ дан canen 29 November 2019 в 02:42
поделиться

Это должно добиться цели - беглый модуль, который использует hook_nodeapi для вставки JS/CSS, когда узел просматривается.

function mymodule_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
  // the node ID of the node you want to modify
  $node_to_modify = 6;

  // do it!
  if($op == 'view' && $node->nid == $node_to_modify) {
    drupal_add_js(drupal_get_path('module', 'mymodule') . '/mymodule.js');
    drupal_add_css(drupal_get_path('module', 'mymodule') . '/mymodule.css');
  }
}

Это избегает проблем безопасности с включением входного фильтра PHP и не требует отдельного шаблонного файла узла, который мог стать устаревшим, если бы Вы обновили основной шаблон узла и забыли о Вашем пользовательском.

2
ответ дан ceejayoz 29 November 2019 в 02:42
поделиться

У Вас может быть пользовательский шаблон для того узла (узел-needsjs.tpl.php), который называет JavaScript. Это немного более чисто, чем использование PHP прямо в теле узла и вносит изменения для удовлетворения легче в будущем.

РЕДАКТИРОВАНИЕ: я не думаю, что был очень ясен выше. Вы хотите назвать шаблонный узел файла - (идентификатор узла) .tpl.php. Таким образом, если это был Узел 1, назовите узел-1.tpl.php файла

0
ответ дан MattBelanger 29 November 2019 в 02:42
поделиться

Это кажется хорошим решением:

http://drupal.org/project/js_injector а также http://drupal.org/project/css_injector

Это работает, когда вы хотите вставить встроенный код в нечто иное, чем технически узел, поэтому нет идентификатора узла и недоступны параметры ввода PHP. Как будто я использовал его для внедрения небольших настроек jQuery на пару страниц администрирования. Он работает по пути, а не по идентификатору узла.

4
ответ дан 29 November 2019 в 02:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: