我熟悉使用#attached属性将JavaScript和CSS附加到Drupal 7中的特定表单和表单项的过程。
我遇到了一个可以解决的问题,但不幸的是我正在进行D6安装。
基本上,drupal_get_form()是从主题图层(在自定义模板文件中)调用的。它打印的表单有执行drupal_add_js()(和css)的form_alter挂钩,但由于在主题层中调用了drupal_get_form,因此这些JS文件添加得太晚,因此没有被包含。
这个问题的最佳Drupal 6解决方案是什么?
答案 0 :(得分:2)
正如问题中所述,在drupal_get_form()
和drupal_add_js()
调用的页面构建过程中调用drupal_add_js()
为时已晚。在主题图层中调用drupal_get_form()
通常不是问题,但在这种情况下,我假设在这种情况下,它在page-<something>.tpl.php
中调用。在执行构建$script
,css
和$styles
变量的template_preprocess_page()
后,发生了CSS和JS的添加。
一个简单的解决方案是从主题的页面模板预处理器中调用drupal_get_form()
,然后重新构建$script
,css
和$styles
变量。
function THEME_preprocess_page(&$variables) {
$form = drupal_get_form('the_form_name');
$variables['my_form'] = $form;
$variables['styles'] = drupal_get_css();
$variables['css'] = drupal_add_css();
$variables['scripts'] = drupal_get_js();
}
更好的解决方案是提前从较低级别的模板(例如drupal_get_form()
ou node.tpl.php
)调用user.tpl.php
。但最好的方法是在页面,块等回调函数中检索主题图层之外的表单。