根据下拉列表中的选项在Drupal中创建内容

时间:2012-07-11 16:40:04

标签: drupal drupal-7 drupal-views content-type

我正在开发一个需要“职业”页面的Drupal网站。我有一份包含20个左右工作的清单,以及30个左右可以获得这些工作的地点。

我要做的就是这样做,当一份工作变得可用时,所有需要做的就是用户选择工作头衔及其可用的位置,它将创建带有工作描述的帖子以及我在该位置信息的其他信息。

我遇到的另一个问题就是这样做我可以有多个实例... ex。如果在两个或更多地点提供相同的工作。

我一直试图把我的想法包括在内,我将如何做这项工作,并且空白。如果有人有想法指出我正确的方向,我们将不胜感激。

1 个答案:

答案 0 :(得分:3)

听起来像一个非常常见的用例;如果是我,我会像这样接近它:

  • 创建“作业”内容类型
  • 添加新的“位置”词汇
  • 将“作业”内容类型上的术语引用字段添加到“位置”词汇表中,具有无限值(或每个作业允许的最大位置数)。
  • 为您的管理员创建自定义表单,例如:

    function MYMODULE_add_job_form($form, &$form_state) {
      $form['title'] = array(
        '#type' => 'textfield',
        '#title' => t('Title'),
        '#maxlength' => 255,
        '#required' => TRUE
      );
    
      // Load the vocabulary (the machine name might be different).
      $vocabulary = taxonomy_vocabulary_machine_name_load('location');
    
      // Get the terms
      $terms = taxonomy_get_tree($vocabulary->vid);
    
      // Extract the top level terms for the select options
      $options = array();
      foreach ($terms as $term) {
        $options[$term->tid] = $term->name;
      }
    
      $form['locations'] = array(
        '#type' => 'select',
        '#title' => t('Locations'),
        '#options' => $options,
        '#multiple' => TRUE,
        '#required' => TRUE
      );
    
      $form['submit'] = array(
        '#type' => 'submit',
        '#value' => t('Add job')
      );
    
      return $form;
    }
    
  • 为表单创建自定义提交处理程序,以便以编程方式添加新节点:

    function MYMODULE_add_job_form_submit($form, &$form_state) {
      $location_tids = array_filter($form_state['values']['locations']);
    
      $node = new stdClass;
      $node->type = 'job';
      $node->language = LANGUAGE_NONE;
      node_object_prepare($node);
    
      $node->title = $form_state['values']['title'];
      $node->field_location_term_ref[LANGUAGE_NONE] = array();
    
      foreach ($location_tids as $tid) {
        $node->field_location_term_ref[LANGUAGE_NONE][] = array(
          'tid' => $tid
        );
      }
    
      node_save($node);
    
      $form_state['redirect'] = "node/$node->nid";
    }
    

您显然需要为该表单添加页面回调,并且您可能需要进行一些小的更改(字段名称等),但它应该为您提供一个良好的起点。您还需要在某个时刻加载位置分类术语以提取您提到的描述信息...您可以使用taxonomy_term_load()来执行此操作。