CTools Include 有时不起作用
CTools Include sometimes doesn't work
因此,使用 drupal 包含下拉菜单的功能是可行的,但在某些页面上,脚本未包含在内,并且不会在任何地方抛出错误。这发生在 hook_block_view 内。在实际页面上,Drupal.behaviors.CToolsDropdown 在它不起作用的页面上丢失。但没有说明原因。
ctools_include('dropdown.theme');
...
$block['content'] = array(
'#markup' => theme_ctools_dropdown($vars),
);
ctools_include()
加载了 dropdown.theme.inc
文件,我们知道,否则调用 theme_ctools_dropdown()
会由于调用未定义的函数而导致致命错误。
theme_ctools_dropdown()
本身无条件添加需要的dropdown.js
和dropdown.css
文件。
所以我相信您的代码永远不会在这些页面上被调用(即该块不会被显示)。为了证明这一点,请在 hook_block_view()
中的某处挤入一个 drupal_set_message('Hello world');
,看看会发生什么。
如果您看到该消息,请在您的代码中搜索 hook_js_alter()
,也许某处存在删除这些页面上的 dropdown.js
的逻辑。
Update: drupal_add_js()
在清除缓存后将不会包含在块内调用的更新。所以你需要使用#attached 属性:
包含 JS 和 CSS 文件
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',
),
),
);
因此,使用 drupal 包含下拉菜单的功能是可行的,但在某些页面上,脚本未包含在内,并且不会在任何地方抛出错误。这发生在 hook_block_view 内。在实际页面上,Drupal.behaviors.CToolsDropdown 在它不起作用的页面上丢失。但没有说明原因。
ctools_include('dropdown.theme');
...
$block['content'] = array(
'#markup' => theme_ctools_dropdown($vars),
);
ctools_include()
加载了 dropdown.theme.inc
文件,我们知道,否则调用 theme_ctools_dropdown()
会由于调用未定义的函数而导致致命错误。
theme_ctools_dropdown()
本身无条件添加需要的dropdown.js
和dropdown.css
文件。
所以我相信您的代码永远不会在这些页面上被调用(即该块不会被显示)。为了证明这一点,请在 hook_block_view()
中的某处挤入一个 drupal_set_message('Hello world');
,看看会发生什么。
如果您看到该消息,请在您的代码中搜索 hook_js_alter()
,也许某处存在删除这些页面上的 dropdown.js
的逻辑。
Update: drupal_add_js()
在清除缓存后将不会包含在块内调用的更新。所以你需要使用#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',
),
),
);