• drupal7 新建模块annotate


    模块文件结构:

    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   


      完

  • 相关阅读:
    IIS使用十大原则,(IIS过期时间,IIS缓存设置) 【转载】
    微软中国的相关研发团队 交流平台
    Excel文件减肥和加速
    二进制与字符串之间的转换
    调度模式·WorkerChannelRequest
    引用Hibernate的Java桌面程序打包方法
    [收藏]Open CASCADE
    需要天天读月月读年年读的书
    geotools的dotnet版本
    FC4 下ns2.28的安装 (zz)
  • 原文地址:https://www.cnblogs.com/wangkangluo1/p/2832464.html
Copyright © 2020-2023  润新知