CTools包括有时不起作用

时间:2017-05-13 20:38:02

标签: php drupal drupal-7 drupal-ctools

因此使用drupal include函数进行下拉列表工作,但在某些页面上不包含脚本,并且不会在任何地方抛出错误。这发生在hook_block_view中。在实际页面上,Drupal.behaviors.CToolsDropdown在它无法处理的页面上缺失。但没有迹象表明原因。

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

1 个答案:

答案 0 :(得分:1)

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',
    ),
  ),
);