zoukankan      html  css  js  c++  java
  • 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>

  • 相关阅读:
    POJ 2018 二分
    873. Length of Longest Fibonacci Subsequence
    847. Shortest Path Visiting All Nodes
    838. Push Dominoes
    813. Largest Sum of Averages
    801. Minimum Swaps To Make Sequences Increasing
    790. Domino and Tromino Tiling
    764. Largest Plus Sign
    Weekly Contest 128
    746. Min Cost Climbing Stairs
  • 原文地址:https://www.cnblogs.com/wangkangluo1/p/2833565.html
Copyright © 2011-2022 走看看