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 ...
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 stardrupal module five stardrupal module five stardrupal module five stardrupal module five star
"drupal module-quote" 模块是 Drupal 生态系统中的一个重要组成部分,主要用于在网站上添加引言或者引用的功能。这个模块可以方便地插入、管理和展示各种引言,为网站增添知识性和启发性的内容。 该模块的核心功能...
Drupal 7 模块开发是 Drupal 内容管理系统(CMS)中的一个重要环节,它允许开发者扩展 Drupal 的功能,以满足特定网站或应用的需求。Drupal 7 是 Drupal 的一个主要版本,发布于2011年,它引入了大量改进和新特性,...
Drupal 模块 NiceMenu 是一个用于 Drupal 内容管理系统(CMS)的扩展,它提供了创建美观、可定制的导航菜单的功能。在 Drupal 中,模块是添加特定功能或增强网站现有功能的基本单元。NiceMenu 模块就是这样一个工具...
由于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 ...
"drupal 在线客服 module" 是 Drupal 生态系统中的一个重要组件,它为网站提供了集成在线客服功能的能力。这个模块使得访客可以方便地与客服代表进行实时交流,通常包括像 QQ 和旺旺这样的即时通讯工具。 QQ 和旺旺...
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
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 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 ,Drupal Create 是 Drupal 的 iOS 客户端。你可用它来访问使用 Drupal ...
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 ...