1

因此,使用 drupal 包含函数进行下拉是可行的,但在某些页面上,脚本不包含在内,并且在任何地方都没有抛出错误。这发生在 hook_block_view 中。在实际页面上,Drupal.behaviors.CToolsDropdown 在它不起作用的页面上丢失。但没有说明原因。

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

1 回答 1

2

ctools_include()加载了dropdown.theme.inc文件,我们知道,否则,theme_ctools_dropdown()由于调用未定义的函数,调用会导致致命错误。

theme_ctools_dropdown()本身无条件添加需要的dropdown.jsdropdown.css文件。

因此,我相信您的代码永远不会在这些页面上被调用(即不会显示该块)。为了证明这一点,挤进drupal_set_message('Hello world');你的某个地方,hook_block_view()看看会发生什么。

如果您看到该消息,请hook_js_alter()在您的代码中进行搜索,也许某处的某个逻辑会dropdown.js在这些页面上删除。

更新: 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',
    ),
  ),
);
于 2017-05-14T13:05:20.393 回答