CTools Включить иногда не работает

Таким образом, использование функции включения drupal для раскрывающегося списка работает, но на некоторых страницах сценарии не включены, и нигде не выдается никакой ошибки. Это происходит внутри hook_block_view. На реальной странице Drupal.behaviors.CToolsDropdown отсутствует на страницах, на которых он не работает. Но нет указаний на то, почему.

ctools_include('dropdown.theme');
...
$block['content'] = array(
'#markup' => theme_ctools_dropdown($vars),
);

0

Решение

ctools_include() загрузил dropdown.theme.inc файл, и мы знаем, что в противном случае, вызывая theme_ctools_dropdown() приведет к фатальной ошибке из-за вызова неопределенной функции.

theme_ctools_dropdown() само по себе безоговорочно добавляет необходимое dropdown.js а также dropdown.css файлы.

Поэтому я считаю, что ваш код никогда не будет вызываться на этих страницах (то есть блок не будет отображаться). Чтобы доказать это, сожмите в drupal_set_message('Hello world'); где-то в вашем hook_block_view() и посмотрим что будет.

Если вы видите сообщение, ищите hook_js_alter() в вашем коде, может быть, есть где-то логика, которая удаляет dropdown.js на этих страницах.

Обновить: drupal_add_js() вызов в пределах блока не будет включен после очистки кэшей. Поэтому вам нужно включить файлы JS и CSS, используя свойство #attached:

ctools_include('dropdown.theme');
// ...
$block['content'] = array(
'#markup' => theme_ctools_dropdown($vars),
'#attached' => array(
'css' => array(
drupal_get_path('module', 'ctools') . '/css/dropdown.css',
),
'js' => array(
drupal_get_path('module', 'ctools') . '/js/dropdown.js',
),
),
);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]