hook_form_alter - 在模块中或在template.php中

时间:2012-08-08 22:06:21

标签: drupal drupal-6 drupal-themes

我想快速更改ubercart表单数据(我想删除购物车中产品节点的链接)。我找到了一个解决方案,涉及通过创建一个新模块(下面的链接和代码)来实现hook_form_alter()。

我的问题是,我是否必须制作新模块,或者我可以将此功能添加到我的主题的template.php文件中?我尝试了后来,但我无法让它工作(我将该函数重命名为theNameOfMyTheme_form_alter)。

(这里更大的问题是我试图让所有这些drupal 6覆盖的东西。例如,如果我遇到一些我想改变的代码,你如何判断你是否应该创建一个模块或更改你的主题?)。

http://www.ubercart.org/forum/support/2298/remove_product_links_shopping_cart

function your_module_form_alter(&$form, &$form_state, $form_id) {
  if($form_id == 'uc_cart_view_form') {
    foreach($form['items'] as $key => $item) {
      if(!empty($item['desc']['#value'])) {
        $form['items'][$key]['desc']['#value'] = strip_tags($item['desc']['#value']);
      }
    }
  }
}

2 个答案:

答案 0 :(得分:4)

添加到Clive's solution,只是为了确认是否有其他人在寻找这个:hook_form_alter不会在Drupal 6中调用主题。

答案 1 :(得分:3)

hook_form_alter()是为主题和模块调用的一个钩子,所以把它放在你的template.php文件中就可以了。

实际上已经记录了对Drupal 7函数版本的影响,但我猜他们在Drupal 6版本上错过了它。

一旦你添加了钩子,请记住清除Drupal的缓存,以便它被拾取。