wangkangluo1

模块文件结构:

  1. annotate.info
  2. annotate.module
  3. annotate.admin.inc
  4. annotate.install

 

1. 在drupal目录 sites/all/modules/custom 下新建文件夹annotate.(如果custom不存在,请自行建立)

2.新建文件annotate.info(模块描述文件):

name = Annotate
description = "Allows users to annotate nodes."
package = Pro Drupal Development
core = 7.x
files[] = annotate.module
files[] = annotate.install
files[] = annotate.admin.inc
configure=admin/config/content/annotate/settings

 

 

3.新建文件annotate.module。(模块主文件):

 1 <?php
 2 /**
 3  * @file
 4  * Lets users add private annotations to nodes.
 5  *
 6  * Adds a text field when a node is displayed
 7  * so that authenticated users may make notes.
 8  */
 9 
10 /**
11  * Implementation of hook_menu().
12  */
13 function annotate_menu()
14 {
15     $items[\'admin/config/annotate\']          = array(
16         \'title\' => \'Node annotation\',
17         \'description\' => \'Adjust node annotation options.\',
18         \'position\' => \'right\',
19         \'weight\' => -5,
20         \'page callback\' => \'system_admin_menu_block_page\',
21         \'access arguments\' => array(
22             \'administer site configuration\'
23         ),
24         \'file\' => \'system.admin.inc\',
25         \'file path\' => drupal_get_path(\'module\', \'system\')
26     );
27     $items[\'admin/config/annotate/settings\'] = array(
28         \'title\' => \'Annotation settings\',
29         \'description\' => \'Change how annotations behave.\',
30         \'page callback\' => \'drupal_get_form\',
31         \'page arguments\' => array(
32             \'annotate_admin_settings\'
33         ),
34         \'access arguments\' => array(
35             \'administer site configuration\'
36         ),
37         \'type\' => MENU_NORMAL_ITEM,
38         \'file\' => \'annotate.admin.inc\'
39     );
40     return $items;
41 }
42 
43 /**
44  * Implements hook_node_load()
45  */
46 function annotate_node_load($nodes, $types)
47 {
48     global $user;
49     // Check to see if the person viewing the node is the author. If not then
50     // hide the annotation.
51     foreach ($nodes as $node) {
52         if ($user->uid != $node->uid) {
53             unset($node->annotation);
54         }
55     }
56 }

 

   

4.新建文件annotate.admin.inc.(annotate.module中定义的file的文件):

 1 <?php
 2 /**
 3  * @file
 4  * Administration page callbacks for the annotate module.
 5  */
 6 /**
 7  * Form builder. Configure annotations.
 8  *
 9  * @ingroup forms
10  * @see system_settings_form().
11  */
12 function annotate_admin_settings()
13 {
14     // Get an array of node types with internal names as keys and
15     // "friendly names" as values. E.g.,
16     // array(\'page\' => ’Basic Page, \'article\' => \'Articles\')
17     $types = node_type_get_types();
18     foreach ($types as $node_type) {
19         $options[$node_type->type] = $node_type->name;
20     }
21     $form[\'annotate_node_types\'] = array(
22         \'#type\' => \'checkboxes\',
23         \'#title\' => t(\'Users may annotate these content types\'),
24         \'#options\' => $options,
25         \'#default_value\' => variable_get(\'annotate_node_types\', array(
26             \'page\'
27         )),
28         \'#description\' => t(\'A text field will be available on these content types to
29 make user-specific notes.\')
30     );
31     $form[\'#submit\'][]           = \'annotate_admin_settings_submit\';
32     return system_settings_form($form);
33 }
34 
35 /**
36  * Process annotation settings submission.
37  */
38 function annotate_admin_settings_submit($form, $form_state)
39 {
40     dd("wangkangluo1");
41     // Loop through each of the content type checkboxes shown on the form.
42     foreach ($form_state[\'values\'][\'annotate_node_types\'] as $key => $value) {
43         // If the check box for a content type is unchecked, look to see whether
44         // this content type has the annotation field attached to it using the
45         // field_info_instance function. If it does then we need to remove the
46         // annotation field as the administrator has unchecked the box.
47         if (!$value) {
48             $instance = field_info_instance(\'node\', \'annotation\', $key);
49             if (!empty($instance)) {
50                 field_delete_instance($instance);
51                 watchdog("Annotation", \'Deleted annotation field from content type:
52 %key\', array(
53                     \'%key\' => $key
54                 ));
55             }
56         } else {
57             // If the check box for a content type is checked, look to see whether
58             // the field is associated with that content type. If not then add the
59             // annotation field to the content type.
60             $instance = field_info_instance(\'node\', \'annotation\', $key);
61             if (empty($instance)) {
62                 $instance = array(
63                     \'field_name\' => \'annotation\',
64                     \'entity_type\' => \'node\',
65                     \'bundle\' => $key,
66                     \'label\' => t(\'Annotation\'),
67                     \'widget_type\' => \'text_textarea_with_summary\',
68                     \'settings\' => array(
69                         \'display_summary\' => TRUE
70                     ),
71                     \'display\' => array(
72                         \'default\' => array(
73                             \'type\' => \'text_default\'
74                         ),
75                         \'teaser\' => array(
76                             \'type\' => \'text_summary_or_trimmed\'
77                         )
78                     )
79                 );
80                 $instance = field_create_instance($instance);
81                 watchdog(\'Annotation\', \'Added annotation field to content type: %key\', array(
82                     \'%key\' => $key
83                 ));
84             }
85         }
86     } // End foreach loop.
87 }

 

 

 5.新建文件annotate.install(数据相关文件)

 1 <?php
 2 /**
 3  * Implements hook_install()
 4  */
 5 function annotate_install()
 6 {
 7     // Check to see if annotation field exists.
 8     $field = field_info_field(\'annotation\');
 9     // if the annotation field does not exist then create it
10     if (empty($field)) {
11         $field = array(
12             \'field_name\' => \'annotation\',
13             \'type\' => \'text_with_summary\',
14             \'entity_types\' => array(
15                 \'node\'
16             ),
17             \'translatable\' => TRUE
18         );
19         $field = field_create_field($field);
20     }
21 }
22 
23 /**
24  * Implements hook_uninstall()
25  */
26 function annotate_uninstall()
27 {
28     watchdog("Annotate Module", "Uninstalling module and deleting fields");
29     $types = node_type_get_types();
30     foreach ($types as $type) {
31         annotate_delete_annotation($type);
32     }
33     $field = field_info_field(\'annotation\');
34     if ($field) {
35         field_delete_field(\'annotation\');
36     }
37 }
38 function annotate_delete_annotation($type)
39 {
40     $instance = field_info_instance(\'node\', \'annotation\', $type->type);
41     if ($instance) {
42         field_delete_instance($instance);
43     }
44 }
45   

 


  完

分类:

技术点:

相关文章: