• drupal7 新建node job_post


    模块文件结构:

    1. job_post.info
    2. job_post.install
    3. job_post.module
    4. sponsor.tpl.php

    1.job_post.info:

    1 name = Job Post
    2 description = A job posting content type
    3 package = Pro Drupal Development
    4 core = 7.x
    5 files[] = job_post.install
    6 files[] = job_post.module

    2.job_post.install:

      1 <?php
      2 /**
      3  * @file
      4  * Install file for Job Post module.
      5  */
      6 /**
      7  * Implements hook_install().
      8  * - Add the body field.
      9  * - Configure the body field.
     10  * - Create the company name field.
     11  */
     12 function job_post_install() {
     13   node_types_rebuild();
     14   $types = node_type_get_types();
     15   // add the body field to the node type
     16   node_add_body_field($types['job_post']);
     17   // Load the instance definition for our content type's body
     18   $body_instance = field_info_instance('node', 'body', 'job_post');
     19   // Configure the body field
     20   $body_instance['type'] = 'text_summary_or_trimmed';
     21   // Save our changes to the body field instance.
     22   field_update_instance($body_instance);
     23   // Create all the fields we are adding to our content type.
     24   foreach (_job_post_installed_fields() as $field) {
     25     field_create_field($field);
     26   }
     27   // Create all the instances for our fields.
     28   foreach (_job_post_installed_instances() as $instance) {
     29     $instance['entity_type'] = 'node';
     30     $instance['bundle'] = 'job_post';
     31     field_create_instance($instance);
     32   }
     33 }
     34 /**
     35  * Return a structured array defining the fields created by this content type.
     36  * For the job post module there is only one additional field – the company name
     37  * Other fields could be added by defining them in this function as additional elements
     38  * in the array below
     39  */
     40 function _job_post_installed_fields() {
     41   $t = get_t();
     42   return array(
     43       'job_post_company' => array(
     44         'field_name' => 'job_post_company',
     45         'label' => $t('Company posting the job listing'),
     46         'type' => 'text',
     47         ),
     48         );
     49 }
     50 /**
     51  * Return a structured array defining the field instances associated with this content type.
     52  */
     53 function _job_post_installed_instances() {
     54   $t = get_t();
     55   return array(
     56       'job_post_company' => array(
     57         'field_name' => 'job_post_company',
     58         'type' => 'text',
     59         'label' => $t('Company posting the job listing'),
     60         'widget' => array(
     61           'type' => 'text_textfield',
     62           ),
     63         'display' => array(
     64           'example_node_list' => array(
     65             'label' => $t('Company posting the job listing'),
     66             'type' => 'text',
     67             ),
     68           ),
     69         ),
     70         );
     71 }
     72 
     73 /**
     74  * Implements hook_uninstall().
     75  */
     76 function job_post_uninstall() {
     77   // Gather all the example content that might have been created while this
     78   // module was enabled.
     79   $sql = 'SELECT nid FROM {node} n WHERE n.type = :type';
     80   $result = db_query($sql, array(':type' => 'job_post'));
     81   $nids = array();
     82   foreach ($result as $row) {
     83     $nids[] = $row->nid;
     84   }
     85   // Delete all the nodes at once
     86   node_delete_multiple($nids);
     87   // Loop over each of the fields defined by this module and delete
     88   // all instances of the field, their data, and the field itself.
     89   foreach (array_keys(_job_post_installed_fields()) as $field) {
     90     field_delete_field($field);
     91   }
     92   // Loop over any remaining field instances attached to the job_post
     93   // content type (such as the body field) and delete them individually.
     94   $instances = field_info_instances('node', 'job_post');
     95   foreach ($instances as $instance_name => $instance) {
     96     field_delete_instance($instance);
     97   }
     98   // Delete our content type
     99   node_type_delete('job_post');
    100   // Purge all field infromation
    101   field_purge_batch(1000);
    102 }

    3.job_post.module:

      1 <?php
      2 /**
      3  * @file
      4  * This module provides a node type called job post
      5  */
      6 
      7 /**
      8  * Implements hook_node_info() to provide our job_post type.
      9  */
     10 function job_post_node_info() {
     11   return array(
     12       'job_post' => array(
     13         'name' => t('Job Post'),
     14         'base' => 'job_post',
     15         'description' => t('Use this content type to post a job.'),
     16         'has_title' => TRUE,
     17         'title_label' => t('Job Title'),
     18         'help' => t('Enter the job title,
     19           job description, and the name of the company that posted the job'),
     20         ),
     21         );
     22 }
     23 
     24 /**
     25  * Implements hook_menu_alter().
     26  */
     27 function job_post_menu_alter(&$callbacks) {
     28   // If the user does not have 'administer nodes' permission,
     29   // disable the job_post menu item by setting its access callback to FALSE.
     30   if (!user_access('administer nodes')) {
     31     $callbacks['node/add/job_post']['access callback'] = FALSE;
     32     // Must unset access arguments or Drupal will use user_access()
     33     // as a default access callback.
     34     unset($callbacks['node/add/job_post']['access arguments']);
     35   }
     36 }
     37 
     38 /**
     39  * Implements hook_permission().
     40  */
     41 function job_post_permission() {
     42   return array(
     43       'create job post' => array(
     44         'title' => t('Create a job post'),
     45         'description' => t('Create a job post'),
     46         ),
     47       'edit own job post' => array(
     48         'title' => t('Edit own job post'),
     49         'description' => t('Edit your own job posting'),
     50         ),
     51       'edit any job post' => array(
     52         'title' => t('Edit any job post'),
     53         'description' => t('Edit any job posting'),
     54         ),
     55       'delete own job post' => array(
     56         'title' => t('Delete own job post'),
     57         'description' => t('Delete own job posting'),
     58         ),
     59       'delete any job post' => array(
     60         'title' => t('Delete any job post'),
     61         'description' => t('Delete any job posting'),
     62         ),
     63       );
     64 }
     65 
     66 /**
     67  * Implements hook_node_access().
     68  */
     69 function job_node_access($op, $node, $account) {
     70   $is_author = $account->uid == $node->uid;
     71   switch ($op) {
     72     case 'create':
     73       // Allow if user's role has 'create joke' permission.
     74       if (user_access('create job', $account)) {
     75         return NODE_ACCESS_ALLOW;
     76       }
     77     case 'update':
     78       // Allow if user's role has 'edit own joke' permission and user is
     79       // the author; or if the user's role has 'edit any joke' permission.
     80       if (user_access('edit own job', $account) && $is_author ||
     81           user_access('edit any job', $account)) {
     82         return NODE_ACCESS_ALLOW;
     83       }
     84     case 'delete':
     85       // Allow if user's role has 'delete own joke' permission and user is
     86       // the author; or if the user's role has 'delete any joke' permission.
     87       if (user_access('delete own job', $account) && $is_author ||
     88           user_access('delete any job', $account)) {
     89         return NODE_ACCESS_ALLOW;
     90       }
     91   }
     92 }
     93 
     94 /**
     95  * Implement hook_form() with the standard default form.
     96  */
     97 function job_post_form($node, $form_state) {
     98   return node_content_form($node, $form_state);
     99 }
    100 
    101 /**
    102  * Implements hook_validate().
    103  */
    104  
    105 /* 
    106 function job_post_validate($node) {
    107   // Enforce a minimum character count of 2 on company names.
    108   if (isset($node->job_post_company) &&
    109       strlen($node->job_post_company['und'][0]['value']) < 2) {
    110     form_set_error('job_post_company',
    111         t('The company name is too short. It must be atleast 2
    112           characters.'),
    113         $limit_validation_errors = NULL);
    114   }
    115 }
    116 */
    117   
    118 /**
    119  * Implements hook_insert().
    120  */
    121 function job_post_insert($node) {
    122   // log details of the job posting to watchdog
    123   watchdog('job post', 'A new job post titled: '.$node->title.' for company: '.
    124       $node->job_post_company['und'][0]['value'].
    125       ' was added by UID: '.$node->uid, $variables = array(),
    126       WATCHDOG_NOTICE, $link = 'node/'.$node->nid);
    127 }
    128 
    129 /**
    130  * Implements hook_update().
    131  */
    132 function job_post_update($node) {
    133   // log details of the job posting to watchdog
    134   watchdog('job post', 'A job post titled: '.$node->title.' for company: '.
    135       $node->job_post_company['und'][0]['value'].
    136       ' was updated by UID: '.$node->uid, $variables = array(),
    137       WATCHDOG_NOTICE, $link = 'node/'.$node->nid);
    138 }
    139 
    140 /**
    141  * Implements hook_delete().
    142  */
    143 function job_post_delete($node) {
    144   // log details of the job posting to watchdog
    145   watchdog('job post', 'A job post titled: '.$node->title.' for company: '.
    146       $node->job_post_company['und'][0]['value'].
    147       ' was deleted by UID: '.$node->uid, $variables = array(),
    148       WATCHDOG_NOTICE, $link = 'node/'.$node->nid);
    149 }
    150 
    151 /**
    152  * Implements hook_load().
    153  */
    154 function job_post_load($nodes) {
    155   // Add a new element to the node at load time for storing the
    156   // job posting sponsor information
    157   foreach ($nodes as $node) {
    158     $node->sponsor = "ACME Career Services, Your Source for Drupal Jobs";
    159   }
    160   return $node;
    161 }
    162 
    163 /**
    164  * Implement hook_view().
    165  */
    166 function job_post_view($node, $view_mode) {
    167   // Add and theme the sponsor so it appears when the job post is displayed
    168   if ($view_mode == 'full') {
    169     $node->content['sponsor'] = array(
    170         '#markup' => theme('sponsor', array('sponsor' => $node->sponsor,
    171             ‘sponsor_id’ => $node_nid)),
    172         '#weight' => 100,
    173         );
    174   }
    175   return $node;
    176 }
    177 
    178 /**
    179  * Implements hook_theme().
    180  */
    181 function job_post_theme() {
    182   // define the variables and template associated with the sponsor field
    183   // The sponsor will contain the name of the sponsor and the sponsor_id
    184   // will be used to create a unique CSS ID
    185   return array(
    186       'sponsor' => array(
    187         'variables' => array('sponsor' => NULL, 'sponsor_id' => NULL),
    188         'template' => 'sponsor',
    189         ),
    190         );
    191 }
    192         
    193 /**
    194 * Implements hook_validate().
    195 */
    196 function job_post_validate($node) {
    197 // Enforce a minimum character count of 2 on company names.
    198 if (isset($node->job_post_company) &&
    199 strlen($node->job_post_company['und'][0]['value']) < 2) {
    200 form_set_error('job_post_company',
    201 t('The company name is too short. It must be atleast 2
    202 characters.'),
    203 $limit_validation_errors = NULL);
    204 }
    205 }         

    4.sponsor.tpl.php:

     1 <?php
     2 /**
     3 * @file
     4 * Default theme implementation for rendering job post sponsor information
     5 *
     6 * Available variables:
     7 * - $sponsor_id: the node ID asociated with the job posting
     8 * - $sponsor: the name of the job post sponsor
     9 */
    10 ?>
    11 <div id="sponsor-<?php print $sponsor_id ?>" class="sponsor">
    12 <div class="sponsor-title">
    13 <h2>Sponsored by</h2>
    14 </div>
    15 <div class="sponsored-by-message">
    16 This job posting was sponsored by: <?php print $sponsor; ?>
    17 </div>
    18 </div>

  • 相关阅读:
    JS数组方法汇总 array
    jQuery性能优化
    js禁止保存网页的一些代码
    XML LINQ简介
    一个滑动条的DIV+CSS+JS实例
    JS的正则表达式
    jQuery中$.ajax的实现
    MSSQL 2005删除所有表的语句[转]
    Jquery Toggle with Images
    SQLIte default date CURRENT_TIMESTAMP
  • 原文地址:https://www.cnblogs.com/wangkangluo1/p/2833565.html
Copyright © 2020-2023  润新知