【问题标题】:drupal_render doesn't render form elementdrupal_render 不渲染表单元素
【发布时间】:2010-10-23 14:04:49
【问题描述】:

我有这段代码实现了用于 durpal 搜索表单的 hook_form_alter 并在那里添加了几个新元素。我还在我的 template.php 中为所述表单添加了主题覆盖代码。除此之外,我还在那里传递表单元素。一切正常 - 添加新元素,使用主题;但是,这就是问题所在。当我尝试使用 drupal_render 渲染表单的每个元素时,它不会显示任何内容。我检查了 $form 数组的内容,它包含所有必要的表单数据。这是我的代码的例外 -

mymod.module

function mymod_form_alter(&$form, $form_state, $form_id) {
    switch ($form_id) {
        case 'search_theme_form':           
            $form['prop_type'] = array(
               '#type' => 'select',
               '#default_value' => 'Selection A',
               '#options' => array("Selection A","Selection B"),
               '#attributes' => array('class'=>'Bold'),     
        );
        break;
   }
}

template.php -

 function mytheme_theme() {
    return array(
        'search_theme_form' => array(
            'arguments' => array('form' => NULL),       
            'template' => 'search_myblock_form',        
        ),

    );

}

还有一个奇怪的问题,就是devel 的dsm 甚至无法显示$form 里面的内容。我必须先使用 print_r 获取字符串值并将其提供给 dsm 进行显示。值得一提的是,在我的主题模板中,有这个变量($search_form),其中呈现了我的所有表单元素。由于我想以不同的方式对单个元素进行主题化,所以我不能使用它;我喜欢自己渲染单个元素。

【问题讨论】:

  • dsm() 遵循权限。没有“访问开发信息”权限的人将看不到 dsm() 输出。
  • 我以管理员身份登录。所以访问权限不是问题。

标签: drupal search forms drupal-render


【解决方案1】:

hook_theme 应该在你的模块中,而不是 template.php。

但您似乎根本不需要 form_alter 之类的东西。 Template.php 是用来覆盖这些主题函数的:

function MYTHEMENAME_search_theme_form($form) {
  return "<h1>ceci nes't pas un form</h1>";
}

然后刷新您的主题注册表,您应该会看到您的 h1 行出现在表单的位置。

【讨论】:

  • hook_theme 在模板中没有问题,因为它已被使用,并且我的模板也接收 $form 数组。但是,当我尝试渲染每个元素 drupal_render 时,它没有显示任何内容。我已经检查并 $form 包含我需要的所有元素。现在,我别无选择,只能使用 $search ,它包含包含在搜索模块本身创建的标签中的渲染元素。
  • 没有。您确实对 template.php 中的 hook_theme 有问题,因为您的解决方案不起作用。根据你的问题:)
猜你喜欢
  • 2012-04-15
  • 1970-01-01
  • 2018-08-07
  • 1970-01-01
  • 1970-01-01
  • 2017-05-04
  • 1970-01-01
  • 2018-07-04
  • 2022-11-01
相关资源
最近更新 更多