使用 Drupal Form Hooks 进行表单自定义修改
发布:smiling 来源: PHP粉丝网 添加日期:2014-12-05 14:26:24 浏览: 评论:0
下面我们一起来看看使用 Drupal Form Hooks 进行表单自定义修改的具体过程,希望文章对大家会有所帮助.
Drupal使用或者开发过程中最常用到的Hooks(钩子)莫过于hook_form_alter,你所常见的Drupal网站中的内容创建,联系表单,Menu菜单,用户注册等等都会用到表单的钩子.
Drupal Form Hooks
hook_form_alter 中的hook直接替换为你的模块名称,代码如下:
- /**
- * Implements hook_form_alter().
- */
- function custom_form_alter(&$form, &$form_state, $form_id) {
- switch($form_id) {
- case ‘user_profile_form’:
- //doing something
- break;
- }
- }
hook_form_FORM_ID_alter 是 hook_form_alter的一个变种,直接对某一个具体的表单进行修改,代码如下:
- /**
- * Implements hook_form_FORM_ID_alter().
- */
- function custom_form_user_profile_form_alter(&$form, &$form_state) {
- if ($form['#user_category'] == ‘settings’) {
- if (variable_get(‘configurable_timezones’, 1)) {
- system_user_timezone($form, $form_state);
- }
- return $form;
- }
- }
通过以上2个Hooks就可以轻松给Drupal 添加自定义的表单元素,每一个form都可以自定义theme前段元素,render的elements 都会通过variables传递给主题,代码如下:
- /**
- * Implements hook_theme().
- */
- function custom_theme() {
- return array(
- ‘user_profile_form’ => array(
- ‘render element’ => ‘form’,
- ),
- );
- }
自定义form的element样式,代码如下:
- function theme_user_profile_form($variables) {
- $form = $variables['form'];
- $output = drupal_render($form['info']);
- $header = array(t(‘Factor’), t(‘Weight’));
- foreach (element_children($form['factors']) as $key) {
- $row = array();
- $row[] = $form['factors'][$key]['#title'];
- $form['factors'][$key]['#title_display'] = ‘invisible’;
- $row[] = drupal_render($form['factors'][$key]);
- $rows[] = $row;
- } //开源软件:phpfensi.com
- $output .= theme(‘table’, array(‘header’ => $header, ‘rows’ => $rows));
- $output .= drupal_render_children($form);
- return $output;
- }
通过 hook_preprocess_FORM_ID 在theme form element之前修改$variables,代码如下:
- function custom_preprocess_user_profile_form(&$variables) {
- if ($variables['form’][‘actions]) {
- //change the button name
- }
- // add new variable to theme form
- }
自定义form的html元素,可以将form的theme定义一个template,注意这样会降低drupal的性能,但是换来的好处是可以自定义html,代码如下:
- /**
- * Implements hook_theme().
- */
- function lixiphp_theme($existing, $type, $theme, $path){
- return array(
- ‘user_profile_form’ => array(
- ‘render element’=>’form’,
- ‘template’ =>’templates/form/user-profile’,
- ),
- );
- }
创建user-profile.tpl.php文件在templates/form目录下,代码如下:
- <?php
- print drupal_render($form['form_id']);
- print drupal_render($form['form_build_id']);
- print drupal_render($form['form_token']);
- ?>
- <li class=“rows”>
- <?php print drupal_render($form['actions']); ?>
- </li>
本文讲究的form自定义方法实用于Drupal6,Drupal7和Drupal8.
Tags: Drupal Hooks 表单自定义
相关文章
- ·Drupal中l()函数使用方法详解(2014-11-27)
- ·Drupal核心与模块版本及版本号选择技巧(2014-12-05)
- ·Drupal Schema 模块从现有数据库到hook_schema(2014-12-05)
- ·Drupal Overlay 应用到指定页面2种方法(2014-12-05)
- ·解决Drupal Overlay中margin-top无效问题(2014-12-05)
- ·Drupal 实现多语言站点的方法(2014-12-05)
- ·Drupal 7操作数据库常用sql(更新,删除,查询)(2014-12-05)
- ·Drupal 7自定义表单开发要点与例子(2014-12-05)
- ·Drupal Hooks Alter的先后顺序(2014-12-05)
- ·Drupal 7 实现上一篇下一篇的简单方法(2015-02-16)
- ·Drupal 7多站点共用同一个数据库如何配置(2015-04-04)
- ·Drupal如何正确的方式渲染Field(字段)实例(2015-04-04)
- ·总结Drupal电商平台 Commerce Ubercart 比较(2015-04-04)
- ·简单方法修改drupal运行时的php内存(2015-04-04)
- ·Drupal中如何使用JQuery和Ajax(2015-04-04)
- ·简单办法解决Drupal无法正确获取到ip地址的问题(2015-04-04)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)