2

我正在开发一个需要“职业”页面的 Drupal 站点。我有一个包含 20 多个工作的列表,以及 30 个左右的可以提供这些工作的位置。

我要做的就是做到这一点,当有工作可用时,需要做的就是用户选择职位名称和可用位置,它将使用职位描述和其他信息创建发布我有那个位置的信息。

我遇到的另一个问题是制作它,所以我可以有多个实例......例如。如果相同的工作在两个或多个位置可用。

我一直在努力思考我将如何完成这项工作,但我却一无所获。如果有人有想法指出我正确的方向,将不胜感激。

4

1 回答 1

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()来执行此操作。

于 2012-07-11T17:00:43.980 回答