`
haohappy2
  • 浏览: 330690 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

how to create a drupal module

阅读更多
step1  how to write a module using drupal
first you should go to the  folder
  sites/all/modules
and  create the folder employee
               
employee.info

:$id$
name=Employee
description= Allows users to manage theirs info
Core=6.x
Package= package name

if you want to use another moduls which  is denpended

denpendencies[]= forum
php=5.2


then create the  employee.module
<?php
//$id$
/**
*@files
 
  then create the code which you will write

  step2 how to write a hook for a menu. this should be add the module content
*/
function employee_menu(){
   $item['admin/setting/employee']= array(
     'title'           => "employee setting",
     'description'     => "change how user to manage the info",
     'page call back'  => "drupal_get_form",
     'page arguments'  => array('employee_admin_settings'),
     'access_arguments'=> array('administrator site configuration'),
     'type'        => MENU_NORMAL_ITEM,
     'file'            => 'employee.admin.inc'
    );
    return $items;
}
/**
when user via http://example.com/?q=admin/settings/employee,load the function drupal_get_form(),
then get the form ID  employee_admin_settings,to use this to go to the  employee.admin.inc to find the form function。
  therefore,we can only trough the administer site configuration to get the right to visit the menu.

  drupal have many node type. such as story and page. so we should create page management.
  we only read and analyse those code when we want to use it
  so we need to create a file employee.admin.inc
*/
<?php
//$Id$
/** file
*/
function employee_admin_settings(){
    $options=node_get_types('names');
    $form['employ_node_types']=array(
       "#type" =>"checkboxs",
       "#title"=>t("users may manage their content"),
       "#options"=>$options,
       "#default_value"=>variable_get("employee_node_types",array('page')),
       "#description"=>t("?"),
    );
    $form['employee_deletion'] = array(
'#type' => 'radios',
'#title' => t('Employee will be deleted'),
'#description' => t('Select a method for deleting employees.'),
'#options' => array(
t('Never'),
t('Randomly'),
t('After 30 days')
      ),
'#default_value' => variable_get('employee_deletion', 0)
// Default to Never
    );

    $form['employee_limit_per_node'] = array(
'#type' => 'textfield',
'#title' => t('employee per node'),
'#description' => t('Enter the maximum number of employees allowed per node (0 for no limit).'),
'#default_value' => variable_get('employee_limit_per_node', 1),
'#size' => 3
    );
    return system_settings_form($form);
}
/**
  how to validate it
*/
function  employee_admin_settings_validate($form,$form_state){
     $limit=$form_state['values']['employee_limit_per_node'];
     if(!is_numberic($limit){
        form_set_error("employee_limit_per_node",t("please enter a number"));
     }
}
/** node_get_types("names")(if we have more nodes this array will have more items) 
  'page'=>"Page",'story'=>"Story"'
  we can use the "variable_get/variable_set"  in drupal to get and set any value on the page.
   at this time we can see the module in the "administrator/site building/modules"
   if we can see. so you can via  aministrator/settings/employee to see your the page which you just create
   And now we can store the data in the page. so we should put the below funtion to the employee.module
   db_result get the find  first find array list.
  
*/
function employee_nodeapi(&$node,$op,$teaser,$page){//employee hook
   global $user;
   switch($op){
      case "view":
         if($user->uid==0||!page){
              break;
         }
         $type_to_employee=variable_get("employee_node_types".array('page'));
         if(!in_array($node-type,$types_to_employee)){
            break;
         }
         //get the current employee for the node from the database and store it in the node object
         $result=db_query("select note from {employees} where nid=%d and uid=%d",$node->nid,#user->uid);
         $node->employee=db_result($result);
         // add our form as a content item
         $node->content['employee_form']=array(
           '#value'=>drupal_get_form('employee_entry_form',$node),
           '#weight'=>10
         );
         break;
      case "delete":
         db_query("delete from  {employees} where nid=%d and uid=%d,$nid,$user->uid");
         break;
        
   }

/**
  define the form for entering an annotation
  form_state get the form function trans it automaticlly
  node use the hook drupal_get_form
*/
function employee_entry_form($form_state,$node){
   $form['employee']=array(
       '#type'=>'fieldset',
       '#title'=>t('Employee'),
   );
   $form['employee']['node']=array(
       '#type'=>'textarea',
       '#title'=>'t('Notes')',
       '#default_value'=>isset($node->employee)?$node->employee:''.
       '#description'=>t("?")
   );
   $form['employee'][nid]=>array(
       '#type'=>'value',
       'default_value'=>$node->nid,
   );
   $form['employee']['submit']=>array(
      '#type'=>'submit',
      '#value=>t('update')
   );
   return $form;
}

/**we need to make some DB to store those data*/
employee.install

<?php
//$id$
function employee_install(){
  drupal_install_schema("employee");
}
funciton employee_uninstall(){
  drupal_uninstall_shema('employee');
  variable_delete("employee_node_types");
}
function employee_schema(){
   $schema['employees']=array(
    'description'=>t("store the employee info"),
    'fields' => array(
        'nid' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
'description' => t('The {node}.nid to which the annotation applies.'),
),
'uid' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
'description' => t('The {user}.uid of the user who created the annotation.')
),
'note' => array(
'description' => t('The text of the annotation.'),
'type' => 'text',
'not null' => TRUE,
'size' => 'big'
),
'created' => array(
'description' => t('A Unix timestamp indicating when the annotation was created.'),
'type' => 'int',
'not null' => TRUE,
'default' => 0
),
    ),
   'primary key' => array(
'nid', 'uid'
    ),
   );
  return $schema;

}
/**
  if a module is running. when you want to install those DB.
  you should first  close this module. then uninstall those module.
  then restart this module.if you can't uninstall those module.
  you should  go to the table system to delete it by hand.
  we have create the employees table. so we need to make some change the module to make sure that
  it can validate it and store it  
*/
function employee_entry_form_submit($form,$form_state){
  global $user;
  $node=$form_state['values']['note'];
  $nid= $form_state['values']['nid'];
  db_query("delete from  {employees} where nid=%d and uid=%d,$nid,$user->uid");
  db_query("insert into {employees}(nid,uid,note,created) values(%d,%d,'%s',%d)",$nid,$user->uid,$note,time());
  drupal_set_messsage(t('your annotation has been saved'));

}

?>
/**
as above, we have finished our first module. and how to create a menu as your will. 
so we should know how to put our menu to the backend. if you want your menu to have its category
and we can change our emoployee_menu above like this
weight mean the position
*/
function employee_menu(){
   $item['admin/employee']= array(
     'title'           => "node employee",
     'description'     => "adjust node employee options",
     'position'        =>'right',
     'weight'          =>-5,
     'page call back'  => "system_admin_menu_block_age",
     'page arguments'  => array('administrtor site configuration'),
     'access_arguments'=> array('administrator site configuration'),
     'file'            => 'employee.admin.inc',
     'file path'       =>drupal_get_path("module","system"),
    );

   $item['admin/employee/setting']= array(
     'title'           => "employee setting",
     'description'     => "change how user to manage the info",
     'page call back'  => "drupal_get_form",
     'page arguments'  => array('employee_admin_settings'),
     'access_arguments'=> array('administrator site configuration'),
     'type'        => MENU_NORMAL_ITEM,
     'file'            => 'employee.admin.inc'
    );
    return $items;
}
/**
  if you want to see the menu immediately. you can do as follow; clear cache_menu table or
   administrator/site configuration/ perfance or
   go to the development
 
   now. we can  say we have finished this module. but we want to validate it
   variable_set()// set
   variable_get()// get the value from the DB
   at last we need to create README.txt. this contain the who and how  to develop it

*/

分享到:
评论

相关推荐

    Drupal.8.for.Absolute.Beginners.1430264667

    You will first learn how to set up and customize a basic blog using Drupal, one of the most powerful and popular content management systems available today. From there you will learn the basics of ...

    Drupal.8.Development.Beginners.Guide.2nd.Edition.epub

    If you are a developer who wants to use Drupal to enhance your website project and web application to manage content, this book is for you. Whether you are new to Drupal or an experienced web ...

    Drupal.8.Configuration.Management.1783985208

    Drupal 8 Configuration Management is intended for people who use Drupal 8 to build websites, whether you are a hobbyist using Drupal for the first time, a long-time Drupal site builder, or a ...

    drupal 6.12

    For detailed information on how to configure a test server environment using a variety of operating systems and web servers, see "Local server setup" (http://drupal.org/node/157602) in the Drupal ...

Global site tag (gtag.js) - Google Analytics