2013-04-22 66 views
0

我有一個簡單的表格我TMPL /如default.php:與Joomla組件刷新頁面

<form id='AddForm' action="<?php echo JRoute::_('index.php?option=com_mycomponent&task=addcam'); ?>" > 
      <p> 
      <label for="CamName">Name: 
      </label> 
      <input type="text" id="CamName" name="cam_name" /> 
      </p> 
      <button type='submit' class='submit_cam' name='addcam' value='Add'>Add</button> 
      <button type='reset' class='cancel_changes' name='cancel_changes' value='Cancel'>Cancel</button> 
     </form> 

在我Controller.php這樣的文件我試圖處理值:

function addcam() 
{ 
    $add_name=JRequest::getString('cam_name'); 
    $model = &$this->getModel(); 
    $model->AddWebcam($add_name); //send to model to add to DB 
} 

在我的模型中,我只返回查詢的結果。通過這個實現,我只是被路由到一個空白頁面。我想讓它刷新當前頁面。通常你用action=""這樣做,但在我的情況下,我需要它路由到控制器中的名爲addcam的功能。還是有更好的方法來做到這一點?

+0

看起來不錯,而且我經常這樣做,所以它應該可以工作。注意幾個奇怪的項目。我會將構建動作的php換成引號('action =「<?php echo JRoute ...;?>」')。輸入框的名稱與您在控制器中請求的字符串('cam_name' v。'camname')不同。 – 2013-04-22 15:56:18

+0

@DavidFritsch謝謝!愚蠢的引號。我編輯了這個問題,因爲那是我的無恥之舉。所以,也許你知道下一個蹩腳問題的答案:) – Tom 2013-04-22 17:06:54

+0

它看起來像你這樣做。你可以在函數結尾處執行'var_dump($ add_name);'來查看你是否正在進入這個函數? – 2013-04-22 17:24:10

回答

1

Joomla指導任務時的一項常用技術是讓該函數在最後完成對視圖的完全重定向。這可以防止頁面刷新嘗試重新提交數據,並導致客戶端的更乾淨的URL。爲此,請嘗試以下操作:

function addcam() 
{ 
    $add_name=JRequest::getString('cam_name'); 
    $model = &$this->getModel(); 
    $model->AddWebcam($add_name); //send to model to add to DB 
    JFactory::getApplication()->redirect(JRoute::_(index.php?option=com_mycomponent&view=whatever)); 
} 

顯然,將JRoute位更新爲您實際需要的URL。如果您願意,還可以添加一條消息(如「已保存!」):http://docs.joomla.org/JApplication::redirect/1.6

+0

輝煌,像魅力一樣工作。謝謝。 – Tom 2013-04-22 18:01:27