0

我有一個定製的Joomla 3.4.1組件,它具有以JSON格式(來自views/myview/view.json.php文件)或HTML(來自views/myview/view.html.php文件)顯示數據的視圖。格式。有沒有辦法如何從HTML更改默認視圖的格式JSON,這樣如何更改Joomla組件的視圖默認格式?

http://example.com/component/mycomponent/myview 

返回JSON數據,而不是HTML,而:

http://example.com/component/mycomponent/myview?format=html 

仍返回視圖的HTML模板?

編輯:

據我得到的是這樣的路由器:

function TouristGuideParseRoute($segments) { 
    $count = count($segments); 
    $parameters = array(); 
    if ($count > 0) { 
    $parameters['view'] = $segments[0]; 
    } 
    if ($count > 1) { 
    $parameters['task'] = $segments[1]; 
    } 
    if ($count > 2) { 
    $parameters['id'] = $segments[2]; 
    } 
    if ($count > 3) { 
    $parameters['format'] = $segments[3]; 
    } 

    if (($parameters['view'] == 'api') && empty($parameters['format'])) { 
    $application = JFactory::getApplication(); 
    $input = $application->input; 
    $parameters['format'] = $input->getString('format', 'json'); 
    } 
    return $parameters; 
} 

,顯示JSON格式即使URL中包含?format=html因爲在這個路由器的$application->input是空的(可能是填充以後的的Joomla請求處理鏈),因此$input->getString('format','json')一直返回json

+0

你可以直接回顯你的json數據到php文件的視圖模板 – Toretto

+0

我知道但是這並不能解決問題,當默認格式爲HTML時,Joomla頁面框架(在HTML中)自動附加到響應中。此外,由於HTML格式是默認的,我怎樣才能檢查視圖是否被請求而沒有格式指定d?在JFactory :: getApplication() - > input-> get('format')中有'html'。 – Blackhex

回答

1

在你的控制器,手動設置你的默認格式像這樣(的Joomla 3)

$input = JFactory::getDocument()->input; 
$format = $input->get('format','json','STR'); 
$view = $this->getView($view_name, $format); 
$view->display($tpl); 

希望這可以幫助。

+0

差不多!儘管這似乎是在某種意義上工作,即正確的視圖文件用於呈現模板,但Joomla仍然在響應周圍添加頁面HTML內容。我試圖谷歌「joomla強制原始輸出」,但沒有任何建議http://w3facility.org/question/joomla-force-raw-output/工作強制原始的JSON輸出。 – Blackhex

0

如果您的自定義組件具有路由器(就像我從您的示例url中假設的那樣),那麼您將默認設置爲JSON。

在你要設置解析函數...

$vars['format'] = 'json';

看看上Joomla Docs這半流教程。 然後/或做類似...

$jinput = JFactory::getApplication()->input; 
$outputFormat = $jinput->getString('format', 'json'); 
$vars['format'] = ($outputFormat == 'json') ? 'json' : 'html';` 

請注意,我使用一箇中間變量,並檢查它使用默認(2號線),因此它被限制在兩個特定選項(用戶斜面型?format=blahblah並且讓路由器搞砸了$vars['format'] = 'blahblah'

+0

謝謝你的迴應。不幸的是,這會強制JSON格式,而不能將其設置回HTML。詳情請看編輯問題。 – Blackhex

+0

這會強制默認爲JSON,但是您可以通過向url添加'?format = html'來覆蓋該值(第1行獲取輸入對象,第2行獲取格式請求變量設置爲json,如果不存在,3rd行是一種安全,確保只有JSON或HTML值應用在路由器中)。 – Rodney

+0

對不起,但因爲我已經用''寫過覆蓋格式?format = html'在這種情況下不起作用,因爲即使URL包含該參數,路由器功能中的JFactory :: getApplication() - > input'也是空的。 – Blackhex