forms - Joomla 2.5 - 组件开发 - 使用表单

标签 forms joomla components save

我正在尝试向我的组件添加某种形式,但我不确定必须应用什么命名约定才能正确工作。

目前我有一个工作表单 - 它显示存储在 XML 文件中的字段并将数据从数据库加载到其中。但是,当我尝试提交此表单(编辑或添加新记录)时,它不起作用。按提交(save()方法)后,它只是重定向我并显示记录已成功编辑,但事实并非如此。当我尝试编辑现有记录时,按提交后没有任何反应,当我尝试添加新记录时,它只是添加空/空白记录。

所以我做了一些调试,发现问题出在 JController::checkEditId() 方法中。它总是返回 false,这意味着 JControllerForm::save() 也返回 false,这就是它不能正确保存的原因。表单的 HTML 代码是正确的,我可以使用全局数组 $_POST 访问数据。

我怀疑这个问题是由于 JModelAdmin 类的方法 loadFormData、getForm 中的命名约定造成的。我不知道如何命名该表单。

这是我与此问题相关的代码:

用于显示表单的子 Controller -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);
}

}

views/slideshowform/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();
}

}

views/slideshowform/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>

有人可以看一下吗?

最佳答案

您必须添加 Controller SlideshowControllerSlideshowForm和代码save方法。在那里,您必须验证表单数据并调用 SlideshowModelSlideshowForm->save 事件,然后使用成功/失败消息进行重定向。

关于forms - Joomla 2.5 - 组件开发 - 使用表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10079006/

相关文章:

php - 在输入元素上使用 text-transform 实际上会转换文本?

php - 根据用户表单输入 PHP 提交转到 url 的按钮

ruby-on-rails - rails : Submit button outside form_tag

Angular 2 至 4/5/6 : What are some things to know/do/check before upgrading?

angular - 如何在订阅运行时绘制不完整的组件?

javascript - Ajax jQuery 表单无法正常工作,导航到 PHP 文件

javascript - 在 joomla 3 中使用 window.location

php - 自 Joomla 3.4.2 起,保存、保存并关闭和关闭在 Jumi 模块上不起作用

joomla - 如何从我的 joomla 3.2.3 类别创建 rss 提要?

javascript - 在react js中切换组件