CTools 包含有时不起作用



因此,将 drupal include 函数用于下拉列表是有效的,但在某些页面上不包含脚本,并且任何地方都没有抛出错误。这发生在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.jsdropdown.css文件。

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

如果您看到消息,请在代码中搜索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',
    ),
  ),
);

相关内容

  • 没有找到相关文章

最新更新