drupal7 新建模块annotate

时间:2022-01-08 22:16:50

模块文件结构:

  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   

 


  完