`
haohappy2
  • 浏览: 326250 次
  • 性别: 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.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 module five star

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

    drupal module-quote

    "drupal module-quote" 模块是 Drupal 生态系统中的一个重要组成部分,主要用于在网站上添加引言或者引用的功能。这个模块可以方便地插入、管理和展示各种引言,为网站增添知识性和启发性的内容。 该模块的核心功能...

    drupal 7 module development

    Drupal 7 模块开发是 Drupal 内容管理系统(CMS)中的一个重要环节,它允许开发者扩展 Drupal 的功能,以满足特定网站或应用的需求。Drupal 7 是 Drupal 的一个主要版本,发布于2011年,它引入了大量改进和新特性,...

    drupal module-nicemenu

    Drupal 模块 NiceMenu 是一个用于 Drupal 内容管理系统(CMS)的扩展,它提供了创建美观、可定制的导航菜单的功能。在 Drupal 中,模块是添加特定功能或增强网站现有功能的基本单元。NiceMenu 模块就是这样一个工具...

    自己写的 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 ...

    drupal 在线客服 module

    "drupal 在线客服 module" 是 Drupal 生态系统中的一个重要组件,它为网站提供了集成在线客服功能的能力。这个模块使得访客可以方便地与客服代表进行实时交流,通常包括像 QQ 和旺旺这样的即时通讯工具。 QQ 和旺旺...

    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 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.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 的 iOS 客户端 Drupal Create.zip

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

    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