2

コンポーネントに何らかのフォームを追加しようとしていますが、正しく機能させるためにどの命名規則を適用する必要があるかわかりません。

現在、私は作業フォームを持っています.XMLファイルに保存されたフィールドを表示し、データベースからデータをロードします. ただし、このフォームを送信 (編集または新しいレコードの追加) しようとすると、機能しません。送信(save()メソッド)を押すと、リダイレクトされ、レコードが正常に編集されたことが表示されますが、そうではありませんでした。既存のレコードを編集しようとすると、送信を押しても何も起こらず、新しいレコードを追加しようとすると、空/空白のレコードが追加されるだけです。

だから私は少しデバッグをしていて、その問題が JController::checkEditId() メソッドにあることを発見しました。これは常に false を返します。つまり、JControllerForm::save() も false を返すため、正しく保存されません。フォームの HTML コードは正しく、グローバル配列 $_POST を使用してデータにアクセスできます。

この問題は、JModelAdmin クラスのメソッド loadFormData、getForm の命名規則が原因であると思われます。そのフォームに名前を付ける方法がわかりません。

したがって、この問題に関連する私のコードは次のとおりです。

フォームを表示するためのサブコントローラー - controllers/slideshowform.php

class SlideshowModelSlideshowForm extends JModelAdmin{

public function getForm($data = array(), $loadData = true){
    return $this->loadForm('com_slideshow.slideshowform', 'editform', array('load_data' => $loadData, 'control' => 'jform'));
}

protected function loadFormData(){  
        $data = JFactory::getApplication()->getUserState('com_slideshow.edit.slideshowform.data', array());
        if (empty($data)) 
        {
            $data = $this->getItem();
        }
        return $data;
}

public function getTable($table = "biometricslideshow"){
    return parent::getTable($table);
}

}

ビュー/スライドショーフォーム/view.html.php

class SlideshowViewSlideshowForm extends JView{

public function display($tmpl = null){
        if (count($errors = $this->get('Errors'))) 
        {
            JError::raiseError(500, implode('<br />', $errors));
            return false;
        }
    $this->form = $this->get('form');
    $this->item = $this->get('item');
    JToolBarHelper::save('slideshowform.save');
    parent::display();
}

}

ビュー/スライドショーフォーム/tmpl/default.php

<?php
defined('_JEXEC') or die('Restricted access');
JHtml::_('behavior.tooltip');

?>

<form method="post" action="<?php echo JRoute::_("index.php?option=com_slideshow&id=".(int) $this->item->id)?>" name="adminForm" id="slideshow-form">
  <fieldset class="adminform">
    <legend>Edit slide</legend>
    <table>
      <input type="hidden" name="task" value="">
      <?php echo JHtml::_('form.token'); ?>

      <?php

      foreach($this->form->getFieldset() as $field){
      ?>
      <tr><td><?php echo $field->label ?></td><td><?php echo $field->input ?></td></tr>

      <?php
      }
      ?>

    </table>
  </fieldset>
</form>

誰か見てもらえませんか?

4

1 に答える 1

2

SlideshowControllerSlideshowFormコントローラーとコードsaveメソッドを追加する必要があります。そこでは、フォームデータを検証してSlideshowModelSlideshowForm->saveイベントを呼び出し、成功/失敗メッセージでリダイレクトする必要があります。

于 2012-04-10T05:48:51.993 に答える