2

「キャリア」ページが必要な Drupal サイトに取り組んでいます。私は 20 ほどの仕事のリストを持っており、これらの仕事が利用できる場所は 30 ほどあります。

私がやろうとしているのは、仕事が利用可能になったときに、ユーザーが仕事のタイトルと利用可能な場所を選択するだけで、仕事の説明やその他の情報を含む投稿を作成することです。私はその場所の情報を持っています。

私が実行している別のハードルは、複数のインスタンスを持つことができるようにすることです...例。同じ仕事が 2 つ以上の場所で利用可能な場合。

私はこれをどのように機能させるかについて頭を悩ませようとしてきましたが、空白になっています。誰かが私を正しい方向に向けるアイデアを持っているなら、それはありがたいです.

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 に答える