我想向我的組件添加一些表單,但我不知道命名約定必須應用於正確工作。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>
有人可以看看嗎?
我忘了提及我已經有了這個控制器,它擴展了JControllerForm,這意味着它繼承了保存方法。該方法應該做所有事情 - 它應該調用模型的save()方法然後重定向,但不是它,它只是返回false。 – user10099 2012-04-10 10:41:43
是否在控制器中重載'$ view_list'?啓用調試並檢查日誌。也許'checkEditId'失敗...確保你有訪問'allowSave'。 – Alex 2012-04-10 13:43:55
不,我沒有,沒有理由。正如我從代碼理解的那樣,$ view_list變量隻影響成功保存後的重定向位置。無論如何,它似乎現在工作。可能有些東西與會話混淆了,因爲在apache重新啓動和重新登錄之後它就起作用了。謝謝 – user10099 2012-04-10 15:42:57