`
haohappy2
  • 浏览: 317338 次
  • 性别: 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 Module Development 2nd Edition

    In his spare time, he runs webomelette, a Drupal website where he writes technical articles, tips, and techniques related to Drupal development. Table of Contents Developing for Drupal 8 Creating ...

    Learning Drupal 6 Module Development

    This book will give you a clear, concise and, of course, practical guidance to take you from the basics of creating your first module to developing the skills to make you a Drupal developer to be ...

    drupal module-quote

    drupal module-quote drupal module-quote drupal module-quote

    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 for Absolute Beginners(Apress,2015)

    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 module-nicemenu

    drupal module-nicemenudrupal module-nicemenudrupal module-nicemenu

    drupal module five star

    drupal module five stardrupal module five stardrupal module five stardrupal module five stardrupal module five star

    drupal 7 module development

    drupal 7 module development, drupal 7 模块开发,http://t.cn/zOAdUM4

    自己写的 drupal module 验证码

    由于drupal form 用的很不顺手,所以偶尔自定义form,这样用第3方的drupal验证码不太方便了,所以就写了这个module,验证码的实现方法来自网络。(注意,这个不是用drupal form做的,但是可以嵌入到drupal里)

    Drupal 8 Explained: Your Step-by-Step Guide to Drupal 8

    Drupal 8 Explained is for people who want a fun and clear introduction to Drupal and requires absolutely no experience with Drupal, content management, site construction, programming, scripting, or ...

    Beginning.Drupal.8.B00UH97G24

    The book also builds practical examples of common Drupal sites, such as a company website, a community website, and a commerce website, that you can take and expand on to create your own Drupal 8 ...

    Beginning Drupal 7

    What you'll learn What Drupal is and why you should use it How to install a basic Drupal web site from scratch How to create content in your new Drupal web site How to manage users on your new Drupal...

    Enterprise Drupal 8 Development

    In addition to a thorough discussion of custom module development and how to develop modules as building blocks, you'll also review many common ways of integrating Drupal with other 3rd party systems...

    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 ...

    Beginning Drupal 8(Apress,2015)

    The book also builds practical examples of common Drupal sites, such as a company website, a community website, and a commerce website, that you can take and expand on to create your own Drupal 8 ...

    Drupal 7 Module Development

    电子书 Drupal 7 Module Development

    Drupal 6 Themes: Create new themes for your Drupal 6 site with clean layout and powerful CSS styling

    If you want to create a striking new look for your Drupal 6 website, this book is for you. This book is a revised, updated and expanded edition of Drupal 5 Themes, written specifically for Drupal 6. ...

    Drupal 6 JavaScript and JQuery

    With it's project-based approach, this book is carefully constructed to guide you from how JavaScript fits into the overall Drupal architecture through to making you a master of the jQuery library in...

    Drupal 6 Panels Cookbook

    The Drupal Panels module allows a site administrator to create customized layouts for multiple uses. At its core, it is a drag and drop content manager that lets you visually design a layout and place...

    Drupal 的 iOS 客户端 Drupal Create.zip

    Drupal 的 iOS 客户端 Drupal Create ,Drupal Create 是 Drupal 的 iOS 客户端。你可用它来访问使用 Drupal ...

Global site tag (gtag.js) - Google Analytics