Cakephp 1.3从列表中选择字段选项或输入新的

时间:2012-11-15 15:16:21

标签: cakephp

我有一个cakephp 1.3应用程序获得了一个人同意参加一项研究。我正在尝试在添加研究页面上链接纳入标准和研究的排除标准。 HABTM关系是设置和工作的(如果只有一种方法可以选择它们)我现在要做的是将当前的入选标准显示为添加研究的人可以选择的复选框列表,但我还想要一个字段其中新标准可以作为逗号分隔列表输入。现在它将保存复选框,但我希望它也添加在字段中输入的文本。现在显示添加研究的屏幕如下所示。我真的不知道我会怎么做。有没有办法做到这一点,还是我必须输入数据,对其进行排序,然后将其添加到$ this-> data [包含字段数据]?一个例子很好。 :)我已添加到目前为止图像下方的代码。 Add Study Screen

控制器:

/**
   * 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>

1 个答案:

答案 0 :(得分:1)

你正在尝试做他想做的事情:Saving tags into a database table in CakePHP

你要做的是:

  1. 检查手动包含字段是否为空。如果该字段为空,请忽略它并转到步骤5
  2. 如果该字段不为空,请将其拆分为逗号或您要用作分隔符的任何符号。您现在可以根据需要进行验证。
  3. 使用步骤3中的所有内容并将其保存在自定义或实际包含表中。您应该以某种方式跟踪这些自定义条目,这样您就不会将它们与您提供的那些混在一起。保存在数组中保存时生成的所有ID。
  4. 将收集的第3步的ID与您从表单中获得的ID合并。
  5. 将所有收集和提供的数据保存到数据库
  6. 上面给出的帖子中的答案包括可以用来做的那些代码。如果你阅读整篇文章+代码评论,你应该相处得很好;)

    如果您还有其他问题,请询问;)

    问候 func0der