2012-04-09 73 views
2

我想向我的组件添加一些表单,但我不知道命名约定必须应用于正确工作。Joomla 2.5 - 组件开发 - 使用表格

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

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

我怀疑这个问题是因为方法loadFormData,JModelAdmin类的getForm的命名约定。我不知道如何命名该表单。

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

子控制器用于显示的形式 - 控制器/ 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); 
} 

} 

的意见/ 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/tmp l/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> 

有人可以看看吗?

回答

2

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

+0

我忘了提及我已经有了这个控制器,它扩展了JControllerForm,这意味着它继承了保存方法。该方法应该做所有事情 - 它应该调用模型的save()方法然后重定向,但不是它,它只是返回false。 – user10099 2012-04-10 10:41:43

+0

是否在控制器中重载'$ view_list'?启用调试并检查日志。也许'checkEditId'失败...确保你有访问'allowSave'。 – Alex 2012-04-10 13:43:55

+0

不,我没有,没有理由。正如我从代码理解的那样,$ view_list变量只影响成功保存后的重定向位置。无论如何,它似乎现在工作。可能有些东西与会话混淆了,因为在apache重新启动和重新登录之后它就起作用了。谢谢 – user10099 2012-04-10 15:42:57