Как определить текущий URL в hook_init

Аватар пользователя DrupalNewbie

Есть задача, чтобы JS из кастомного модуля подключался только на определенных URL, в частности blog и blog/*

Сейчаc я это сделал так

function MYMODULE_init() {
  if (strpos(request_uri(), 'blog') != false) {
    drupal_add_js( drupal_get_path('module', 'MYMODULE') . '/MYMODULE.js' );
  }
}

Но сдается мне, что есть какой-то быстрый и простой друпаловский способ.

Тип материала:
Версия Drupal:
0 Спасибо

Лучший ответ

Аватар пользователя DrupalNewbie
DrupalNewbie 3 недели назад

Спасибо на наводку! Сделал немного по другому. Т.к. js должен быть только на страницах, где есть блок, созданный во views, то я и воспользовался соответствующим хуком:

function MYMODULE_preprocess_views_view(&$vars) {
  $view = &$vars['view'];
  if ($view->name == 'VIEWNAME') {
    drupal_add_js( drupal_get_path('module', 'MYMODULE') . '/MYMODULE.js' );
  }
}

Т.е. если на странице нет блока, то и js не подключается.

0 Спасибо

Комментарии

Аватар пользователя zvse
zvse 3 недели назад 3

зачем в ините?

<?php
function MYMODULE_page_build(&$page) {
  
$node menu_get_object();
  if(
$node && $node->type == 'blog_post')  {
    
$page['#attached']['js'][] = drupal_get_path('module''MYMODULE') . '/MYMODULE.js';
  }
?>

к примеру

hook_init создан для другого.

Аватар пользователя DrupalNewbie
DrupalNewbie 3 недели назад

Спасибо на наводку! Сделал немного по другому. Т.к. js должен быть только на страницах, где есть блок, созданный во views, то я и воспользовался соответствующим хуком:

function MYMODULE_preprocess_views_view(&$vars) {
  $view = &$vars['view'];
  if ($view->name == 'VIEWNAME') {
    drupal_add_js( drupal_get_path('module', 'MYMODULE') . '/MYMODULE.js' );
  }
}

Т.е. если на странице нет блока, то и js не подключается.

0 Спасибо
Аватар пользователя fairrandir
fairrandir 3 недели назад

Почти всё правильно сделали. Но правильнее всё-таки через '#attached' скрипты подцеплять.

0 Спасибо
Аватар пользователя itcrowd72
itcrowd72 3 недели назад

А чем плох drupal_add_js ?

0 Спасибо
Аватар пользователя zvse
zvse 3 недели назад 3

Тем, что в случае #attached вы в явном виде указываете что этот JS нужен именно для этого блока/ этой ноды /этой страницы / чего-бы-там-ни-было

Обычно drupal_add_js или файлы которые аттачатся к теме через info файлы тоже вызывается явно, но бывает так, что непонятно что это за JS/CSS/либа и что будет (сломается) если её убить.

Вроде, я слышал как-то ещё и другое объяснение, однако же это объяснение вылезло из моего опыта
Кстати, в D8 убили drupal_add_js . И правильно сделали.