Drupal 7 问题汇总

Drupal 7 问题汇总

  1. cron无法自动运行的问题

Cron无法自动运行,而可以点击cron链接手动运行。出现这个问题的原因很可能是drupal系统变量中的install_task没有被设置为完成。

解决办法:

drush vset install_task done

  1. 使用第三方libraries模块时,libraries目录下已存放第三方库文件,且后台libraries的日志显示第三方库(JS/CSS)文件已经正常安装,或是使用drush lls命令显示第三方库也显示正常,但是在renderable array中使用 $renderable_array[‘#attached’][‘libraries_load’][] = array(‘third_party_libs_name’) 却无法载入第三方库的情况
$renderable_array['#attached']['libraries_load'][] = array('third_party_libs_name')

使用这种方式有几个前提,而官网的document却没有完全说明这一点

1.该方法的应用对象为 renderable array, 即为元数据的数组
2.该 renderable_array 必须有 #theme 键指定一个 主题层的生成(render)函数
针对以上的情况, [‘#attached’][‘libraries_load’] 的适用情况为比较小的页面元素,如 block、form 或是 markup

具体的原因为当主题函数在解析 renderable array 为遇到libraries_load时,会调用 libraries_load()方法,并传入 ‘third_party_libs_name’ 作为参数,这样相关的第三方库文件 js/css 文件就会追加到页面的 header.

举个例子

假如需要某一个页面添加第三方前端库,可能需要使用 hook_page_build(&$page) 或是 hook_page_alter(&$page), 然而在 drupal 中 其实是没有 theme_page() 这个函数的,页面的渲染方式实际上通过预处理函数 preprocesser,然后将 $page 分割成小的变量,最终在tpl.php的前端模板中打印出来,所以hook_page_build(&$page) 或是 hook_page_alter(&$page) 是无法使用 #attched 这种方式。针对这种情况,比较方便的方法是直接调用 libraries_load() 方法来添加第三方前端库。

除此之外 可以针对 页面中小的的构成元素,如 block 或是 markup 的 renderable array 中追加 [‘#attached’][‘libraries_load’] 来加载第三方前端库。