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
*/
分享到:
相关推荐
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 ...
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
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 ...
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-nicemenudrupal module-nicemenudrupal module-nicemenu
drupal module five stardrupal module five stardrupal module five stardrupal module five stardrupal module five star
drupal 7 module development, drupal 7 模块开发,http://t.cn/zOAdUM4
由于drupal form 用的很不顺手,所以偶尔自定义form,这样用第3方的drupal验证码不太方便了,所以就写了这个module,验证码的实现方法来自网络。(注意,这个不是用drupal form做的,但是可以嵌入到drupal里)
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 ...
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 ...
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...
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...
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 ...
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
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. ...
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...
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 ,Drupal Create 是 Drupal 的 iOS 客户端。你可用它来访问使用 Drupal ...