Рейтинг:-1

неопределенная функция drupal_add_js внутри themename_preprocess_page

флаг cn

Я хотел использовать javascript для удаления параметра из списка параметров в случае, если пользователь не является администратором, и я искал и нашел этот код внутри сообщения, и я использовал его в файле тем проекта-> mythemename-> mythemename.theme, но это не сработало, и у меня есть несколько проблем, которые я хочу знать, как решить, так как я много искал, я не нашел решения

функция mythemename_preprocess_page(&$variables, $hook) {
    if (!in_array("администратор", \Drupal::currentUser()->роли) {
        if (isset($variables['node']->type) && !empty($variables['node']->type) && (strpos($variables['node']->type, 'proxy_request') ! == ложь)) {
            drupal_add_js(drupal_get_path('theme', 'mythemename'). '/js/datcbaseauth.js');
        }
    }
}

Первая проблема заключается в том, что я не могу получить данные текущего пользователя, так как мне всегда сообщают, что второй параметр функции in_array равен нулю.

Вторая проблема заключается в том, что я говорю, что второй параметр функции strpos является объектом, а не просто строкой, хотя в примере в посте он рассматривается как просто строка.

Третья и последняя проблема заключается в том, что я говорю, что функция drupal_add_js и функция drupal_get_path не определены.

Я долго искал, но так и не нашел решения этих 3-х проблем, даже темы могут в нем упоминаться не полные, например не сообщают как пользоваться функцией drupal_add_js внутри файла .theme что есть предварительное условие или даже в самой документации Drupal нет данных о переменной, & $variables расскажет о ее содержимом, характере каждой части и т. д., за исключением того, что это ассоциативный массив

Рейтинг:1
флаг gb
  • Первая проблема, чтобы получить текущие роли пользователей, используйте это

    \Drupal::currentUser()->getRoles();

  • Вторая проблема: $переменные['узел']->тип это массив, поэтому используйте $variables['узел']->комплект() вместо этого получить тип:

  • Третий drupal_add_js больше не поддерживается в Drupal 8, используйте библиотеку и прикрепите ее, поэтому попробуйте что-то вроде следующего


/**
 * Реализует hook_preprocess_HOOK().
 */
функция THEME_preprocess_page(&$variables) {
  если (in_array("администратор", \Drupal::currentUser()->getRoles())) {
    if ($variables['node']->bundle() && (strpos($variables['node']->bundle(), 'proxy_request') !== FALSE)) {
      $variables['#attached']['library'][] = 'THEME/custom-library';
    }
  }
}

Amr.Mohammad87 avatar
флаг cn
Я получил эту ошибку после редактирования «Ошибка: вызов пакета функций-членов или null в gasfv1_preprocess_page()», зная, что имя gasfv1 является именем пользовательской темы. Теперь это мой новый код function -> function gasfv1_preprocess_page(&$variables, $hook) { if (!in_array("Администратор", \Drupal::currentUser()->getRoles()) { if ($variables['node']->bundle() && (strpos($variables['node']->bundle(), 'proxy_request') !== false)) { $variables['#attached']['library'][] = 'gasfv1/js/datcbaseauth.js'; } } }
Amr.Mohammad87 avatar
флаг cn
Мой вопрос такой сложный?
berramou avatar
флаг gb
если вы получите сообщение об ошибке, добавьте условие *isset($variables['node'])* в оператор if!
Amr.Mohammad87 avatar
флаг cn
Проблема не в состоянии. Проблема в том, что это означает, что внутри переменной $variables нет элемента, называемого узлом, и я хочу знать, содержит ли машинное имя отображаемого типа контента определенный шаблон, то есть proxy_request, чтобы я мог вставить свой javascript файл для тех страниц, которые имеют тип контента
berramou avatar
флаг gb
Обычно **$variables['node']** содержат информацию об узле, если вы находитесь на странице узла, например, у вас есть тип контента, называемый *proxy_request*, и ваша текущая страница является узлом типа *proxy_request, вы найдете информацию внутри ключ узла

Ответить или комментировать

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