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

Posted

技术标签:

【中文标题】Joomla 2.5 - 组件开发 - 使用表单【英文标题】:Joomla 2.5 - component development - using form 【发布时间】:2012-04-22 04:02:18 【问题描述】:

我正在尝试向我的组件添加一些表单,但我不确定必须应用哪些命名约定才能使其正常工作。

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

所以我做了一点调试,发现问题出在 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);



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>

有人可以看看吗?

【问题讨论】:

【参考方案1】:

您必须添加控制器SlideshowControllerSlideshowForm 和代码save 方法。在那里你必须验证表单数据并调用SlideshowModelSlideshowForm-&gt;save 事件,然后重定向成功/失败消息。

【讨论】:

我忘了提到我已经有了那个控制器并且它扩展了 JControllerForm,这意味着它继承了保存方法。该方法应该做所有事情 - 它应该调用模型的方法 save() 然后重定向,但不是它,它只是返回 false。 您是否在控制器中超载了$view_list?启用调试和检查日志。也许checkEditId 失败...确保您可以访问allowSave 不,我没有,没有理由这样做。正如我从代码中了解到的,$view_list 变量仅在成功保存后影响重定向位置。无论如何,它现在似乎正在工作。可能是会话搞砸了,因为在 apache 重新启动并重新登录后它可以工作。谢谢

以上是关于Joomla 2.5 - 组件开发 - 使用表单的主要内容,如果未能解决你的问题,请参考以下文章

试图找到在 Joomla 2.5 组件中提取数据库项目的最佳方法

文件输入在 joomla 2.5 组件中不起作用

需要Joomla 2.5 自定义组件Router.php 说明

Joomla 2.5:将参数传递给联系表格

joomla 2.5 JText在xml文件中不起作用

Joomla 2.5 组件