欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

drupal form 表单 page arguments 参数 chatgpt 有大用 有大大用

shiping1 的头像

1)druapl创建的表单是安全的
  封装了表单的创建和存取
  它表单首先存储于数据库
  对表单进行缓存
  第二个用户 就不用生存 直接从数据库取(我觉得是从缓存取吧)
  每个表单有id 通过id取表单
2)drupal_get_form($from_id)
http://api.drupal.org/api/function/drupal_get_form/5
看到说明
根据某个表单构造函数,生成相应的表单,
某个表单构造函数 自己随便定义的函数,是不受任何钩子函数的回调
$from_id为表单的名字(唯一)
drupal_get_form("hello_form")
多个表单以向导的方式提交时,此函数可保存表单状态

function my_form()//my_form 就是 $form_id
{
    // 文本框  name是文本框的名称
    $form['name'] =  array(
    '#type' =>'textfield',//drupal 规定文本框用textfield来表示
    '#title'=>t('Your name'),//标题 显示在文本框前面
    '#description'=>t('Please input your name');//文本框下面的描述
   }
   //提交按钮  //
  $form['submit'] = array('#type'=>'submit','#value'=>t('Save'));
  return $form;
}

function hello_drupal_form(){
  return drupal_get_form('my_form');
}
表单元素有哪些
http://api.drupal.org/api/file/developer/topics/forms_api_reference.html/5
fieldset 将表单元素分组
属性
'#collapsible' => TRUE,  //是否可折叠
'#collapsed' => FALSE,  //默认是(false)打开 还是(true)关闭
function my_form()//my_form 就是 $form_id
{
    $form['basic'] = array(
        '#type'=>'fieldset',
        '#title'=>t('Basic information'),
        '#collspsiable'=>true,
        '#collapsed'=>false
        );

    // 文本框  name是文本框的名称
    $form['basic']['name'] =  array(
    '#type' =>'textfield',//drupal 规定文本框用textfield来表示
    '#title'=>t('Your name'),//标题 显示在文本框前面
    '#default_value'=>'hello world',
    '#description'=>t('Please input your name')//文本框下面的描述
    );
    $form['basic']['age'] =  array(
    '#type'=>'textfield',
    '#title'=>'Your age'
    );
   //提交按钮  //
  $form['submit'] = array('#type'=>'submit','#value'=>t('Save'));
  return $form;
}
item 可读的元素 纯文字的描述

$form['notice'] = array(
        '#type' =>'item',
        '#value'=>'切记,这是一次性批量操作,容易出错',
        '#title' =>'bbbbbbbb',      
        );

3) t('Your name') 开发中文网站的时候 可以直接写
4) 验证类似于钩子函数 表单函数名_validate
//两个参数 必写
//$form_id表单id
//$form_values表单的相当于post,
但是作用比post大,它本质上是从db中取的
//此函数其实是可选的,可以不验证
//drupal 5
function test_form_validate($form_id,$form_values)
{
 form_set_error('',t(You must input your name'));
}
//drupal 6
/ * 表单验证
 * @param (array) &$form
 *  表单字段
 * @param (array) &$form_state
 *  表单值,用做判断表单的各种参数,包括用户提交的所有数据
 */
function myform_page_form_validate(&$form, &$form_state) {
 
  /**
   * 用户提交的所有数据在 $form_state['values'] 之中,相当于 $_POST
   * 根据需求,验证昵称是否少于 2 个字符,中英文均算一个字符
   * 可使用封装好的计算字符串长度函数:drupal_strlen
   */
  if (drupal_strlen($form_state['values']['name']) < 2) {
    /**
     * 如果少于 2 个字符,调用  form_set_error() 写入错误信息,系统将显示错误信息,同时阻止表单提交
     * form_set_error() 的格式,第一个参数:字段名称,第二个参数:用户将看到的错误信息
     */
    form_set_error('name', '昵称不能少于 2 个字符');
  } else if (drupal_strlen($form_state['values']['title']) > 255) {
    form_set_error('title', '标题长度不能大于 255 个字符');
  }
 
  // 如验证通过,将进入表单提交环节
}


5)submit 类似于钩子函数的回调函数
表单函数名_submit
表单提交处理函数
//drupal 5
function test_form_submit($form_id,$form_values)
{
 drupal_set_message(t('Your name is ').$form_values['name'].'    '.
 t('Your age is ').$form_values['age'];
}

//drupal 6
/**
 * 表单提交
 * @param (array) &$form
 * @param (array) &$form_state
 */
function myform_page_form_submit(&$form, &$form_state) {
  /**
   * 写入数据库
   */
  db_query("INSERT INTO {myform} (id, title, name, mail, timestamp, body)
  VALUES (null, '%s', '%s', '%s', %d, '%s')", $form_state['values']['title'],
  $form_state['values']['name'], $form_state['values']['mail'],
  $_SERVER['REQUEST_TIME'], $form_state['values']['body']);
 
  // 获取上一条 insert sql 返回的主键,以此判断是否执行成功
  if (db_last_insert_id('myform', 'id')) {
    
    /**
     * 执行成功了,到数据库去看看,是不是有这条记录了
     * 显示一条信息给用户
     */
    drupal_set_message('感谢您,反馈已经提交,我们将尽快和您取得联系');
    
    // 如果想将用户重定向到一个页面,可修改 $form['#redirect'] 值,如:
    
    $form['#redirect'] = 'test/abcde';
    
    /**
     * 这里也可以使用 drupal_goto 来重定向,但这并不是个好方法
     * 因为可能还有其它提交函数在 后面排队,被这儿一重定向,后面就没机会执行了
     */
    
  } else {
    
    // 数据写入失败了
    drupal_set_message('抱歉,遇到问题,提交失败了', 'error');
    
  }
 
}
















<?php

//帮助
function hellodrupal_help($path) {
            $output = ''; //declare your output variable
            switch ($path) {
            case "admin/help#hellodrupal":
            $output = '<p>'. t("第一个Drupal模块") .'</p>';
             break;
            }
             return $output;
}//function on this display help

function hellodrupal_block($op='list',$delta=0){
    
    switch ($op)
    {
        case 'list' :
        $block[0]['info'] = t('我的第一个drupal模块');
        $block[1]['info'] = t('我的第二个drupal模块');
        return $block;
        
        case 'view' :
          switch ($delta)
          {
             case 0 :
               $block['subject'] = '我的第一个block';
             $block['content'] = '欢迎访问我的站点';
             break;
             case 1 :
               //$block['subject'] = '我的第二个block';
             //$block['content'] = '欢迎再次访问我的站点';
             $query = "select nid,title,created from {node}";
             $queryResult = db_query_range($query, 0 ,10);
             $links = array();
             while ($node = db_fetch_object($queryResult))
             {
                 $links[] = l($node->title,'node/'.$node->nid);
             }
             $block['content'] = theme('item_list', $links);
             $block['subject'] = '我的第二个block';
             break;
          }
        return $block;
        break;
    }
}
function hellodrupal_menu() {
    $items = array();
    $items['hello'] = array(
    'title'=>t('hello drupal page'),
    'page callback'=>'hello_druapl_page',
    'page arguments' => array('hello','helloDrupal'),
    //'page arguments' => array(1,2),
    //它的优先级 大于 url传来的参数 也就是此时url如果放参数,参数不起作用
    //如果要默认值 就放在回调函数的形参上   (默认的时候要注意,第几个有默认值, page arguments=>array(......)) 中第几个元素就必须没有,假如有的话 虽不在url中赋值,但是是有值的 值为两个单或双引号括起来 
    //array(1,2)表示只取url前两个参数 array(1)表示只取url第一个参数
    'access arguments'=> array('access hellodrupal blocks')  
    );
    $items['helloform'] = array(
    'title'=>t('hello drupal page form'),
    'page callback'=>'hello_drupal_form',
    'page arguments' => array('page callback arguments'),
    'access arguments'=> array('access hellodrupal blocks')  
    );
    
    return $items;    

}


/*function hello_druapl_page()
{
  $output = 'hello drupal page';
  return $output;
}*/
function hello_druapl_page($name = null, $nickname = null)
{
      $output = '';
    if(empty($name)){
      $output = "hello andbody";
    }
    else {
      $output = "hello ".$name;
    }
    if(!empty($nickname)){
      $output .= ' your nick name is '.$nickname;
    }
    return $output;
}
//定义权限 仅仅指明什么权限对这个模块可用
function hellodrupal_perm(){
      return array('access hellodrupal blocks');
}

function hello_drupal_form(){
  return drupal_get_form('my_form');
}
/*function my_form()//my_form 就是 $form_id
{

    // 文本框  name是文本框的名称
    $form['name'] =  array(
    '#type' =>'textfield',//drupal 规定文本框用textfield来表示
    '#title'=>t('Your name'),//标题 显示在文本框前面
    '#description'=>t('Please input your name')//文本框下面的描述
   );
   //提交按钮  //
  $form['submit'] = array('#type'=>'submit','#value'=>t('Save'));
  return $form;
}*/
function my_form()//my_form 就是 $form_id
{
    $form['basic'] = array(
        '#type'=>'fieldset',
        '#title'=>t('Basic information'),
        '#collapsible'=>true,
        '#collapsed'=>false
        );

    // 文本框  name是文本框的名称
    $form['basic']['name'] =  array(
        '#type' =>'textfield',//drupal 规定文本框用textfield来表示
        '#title'=>t('Your name'),//标题 显示在文本框前面
        '#default_value'=>'hello world',
        '#description'=>t('Please input your name')//文本框下面的描述
    );
    $form['basic']['age'] =  array(
    '#type'=>'textfield',
    '#title'=>'Your age'
    );
   //提交按钮  //
  $form['submit'] = array('#type'=>'submit','#value'=>t('Save'));
  return $form;
}

//表单函数_validate 验证类似于钩子函数的回调函数
function my_form_validate(&$form, &$form_state)
{
    /**
   * 用户提交的所有数据在 $form_state['values'] 之中,相当于 $_POST
   */
    // form_set_error('',$form_values['name']);
  if($form_state['values']['name'] == '')
  {
    form_set_error('',t('You must input your name'));
  }
}
//表单函数_submit 提交函数
function my_form_submit(&$form, &$form_state)
{
     /**
       * 用户提交的所有数据在 $form_state['values'] 之中,相当于 $_POST
       */
     drupal_set_message(t('Your name is ').$form_state['values']['name'].'    '.
     t('Your age is ').$form_state['values']['age']);
}









 

普通分类: