0

私は、研究に参加する人の同意を得る Cakephp 1.3 アプリを持っています。スタディの追加ページでスタディの包含基準と除外基準をリンクしようとしています。HABTM 関係が設定され、機能しています (それらを選択する方法が 1 つしかない場合) 私が今しようとしているのは、現在の包含基準を、研究を追加する人が選択できるチェックボックスのリストとして表示することですが、フィールドも必要ですここで、新しい基準をカンマ区切りのリストとして入力できます。今はチェックボックスを保存しますが、フィールドに入力されたテキストも追加したいです。現在の状態での Add study を示す画面を以下に示します。どうやってそれを行うのか、私にはよくわかりません。これを行う方法はありますか、それとも入力したデータを取得し、並べ替えてから $this-> に追加する必要がありますか? データ[包含フィールドデータ]? 例はいいでしょう。:) これまでのコードを画像の下に追加しました。勉強画面追加

コントローラ:

/**
   * Add a study.
   */
  function add() {
    if (!empty($this->data)) {

      //get the inclusions from the text data
      //Sort through the comma seperated list and add it to $this->data['Study']['Inclusions']???

      $this->Study->create();
      if ($this->Study->save($this->data)) {
        $this->Session->setFlash(__('The study has been saved', true));
        $this->redirect(array('action' => 'index'));
      } else {
        $this->Session->setFlash(__('The study could not be saved. Please, try again.', true));
      }
    }
    $this->set('inclusions', $this->Study->Inclusion->find('list', array(
      'fields' => array('id', 'name'), 
      'order' => 'Inclusion.name', 
      'recursive' => 0,
    )));
    $this->set('exclusions', $this->Study->Exclusion->find('list', array(
      'fields' => array('id', 'name'), 
      'order' => 'Exclusion.name', 
      'recursive' => 0,
    )));
    $this->set('forms', $this->Study->Form->find('list', array('order' => 'Form.name','recursive' => 0,)));
  }

意見:

<div class="studies form">
<?php echo $this->Form->create('Study', array('type' => 'file'));?>
  <fieldset>
    <legend><?php __('Add Study'); ?></legend>
  <?php
    echo $this->Form->input('studyname', array('label'=>'Study Name','required' => true));
    echo $this->Form->input('studynumber', array('label'=>'Study Number','required' => true));
    echo $this->Form->input('file', array('label'=>'Select Electronic Consent','type' => 'file'));
    echo $this->Form->input('consent_form_date');
  ?>
   <fieldset class="inclusion">
    <legend><?php __('Inclusions'); ?></legend>
   <div class="IncExc">
  <?php
    echo $this->Form->input('Inclusion',array(
        'label' => false,
        'type' => 'select',
        'multiple' => 'checkbox',
        'options' => $inclusions,
        'selected' => $html->value('Inclusion.Inclusion'),
    ));
  ?>
  </div>
  <?php
    echo $form->input('Inclusion.inclusions',array(
            'type' => 'text',
            'label' => __('Add New Inclusions',true),
            'after' => __('Seperate each new Inclusion with a comma.  Eg: family, sports, icecream',true)
    ));
  ?>
  </fieldset>
  <fieldset>
    <legend><?php __('Exclusions'); ?></legend>
   <div class="IncExc">
    <?php
    echo $this->Form->input('Exclusion',array(
        'label' => false,
        'type' => 'select',
        'multiple' => 'checkbox',
        'options' => $exclusions,
        'selected' => $html->value('Exclusion.Exclusion'),
    ));
 ?>
  </div>
  </fieldset>
  <fieldset style="width: 700px;">
    <legend><?php //__('Forms'); ?></legend>
    <?php /*
    echo $this->Form->input('Form',array(
        'label' => false,
        'type' => 'select',
        'multiple' => 'checkbox',
        'options' => $forms,
        'selected' => $html->value('Form.Form'),
    ));
*/ ?>
  </fieldset>
  </fieldset>
<?php echo $this->Form->end(__('Submit', true));?>
</div>
4

1 に答える 1

1

あなたは彼がやりたかったこととほとんど同じことをしようとしています: CakePHP でタグをデータベーステーブルに保存する

あなたがしなければならないことは次のとおりです。

  1. 手動挿入フィールドが空かどうかを確認してください。フィールドが空の場合は無視してステップ 5 に進みます
  2. フィールドが空でない場合は、コンマまたは区切り記号として使用する任意の記号で区切ります。必要に応じて検証できるようになりました。
  3. ステップ 3 のすべての包含を使用して、カスタムまたは実際の包含テーブルに保存します。これらのカスタム エントリを何らかの方法で追跡する必要があるため、提供したものと混同しないでください。配列内での保存中に生成されたすべての ID を保存します。
  4. ステップ 3 で収集した ID を、フォームから取得した ID とマージします。
  5. 収集および提供されたすべてのデータをデータベースに保存します

そこにあるコードを含む上記の投稿の回答は、それを行うために使用できます。投稿全体とコードのコメントを読めば、うまくいくはずです ;)

さらに質問がある場合は、質問してください ;)

こんにちは func0der

于 2012-11-15T21:19:41.880 に答える