如何更改Joomla组件的视图默认格式?

时间:2015-06-16 13:09:57

标签: php model-view-controller joomla joomla3.0 joomla-extensions

我有一个自定义的Joomla 3.4.1组件,它有一个以JSON格式(来自views / myview / view.json.php文件)或HTML(来自views / myview / view.html.php文件)显示数据的视图)格式。有没有办法如何将默认视图的格式从HTML更改为JSON,以便

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;
}

即使URL包含?format=html,也显示JSON格式,因为在此路由器中$application->input为空(可能稍后在Joomla请求处理链中填充),因此$input->getString('format','json')返回{{1}一直都是。

2 个答案:

答案 0 :(得分:2)

在您的控制器中,手动设置默认格式(Joomla 3)

 DraggableViewBackground *draggableBackgroundforurl = [[DraggableViewBackground alloc]initWithFrame:self.view.frame];

希望这可以提供帮助。

答案 1 :(得分:0)

如果您的自定义组件有一个路由器(我假设您的示例网址),那么您将默认设置为JSON。

在PARSE功能中,您需要设置...

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

Joomla Docs上查看这个半流程教程。 然后/或做一些像......

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

请注意,我正在使用一个中间变量并根据默认值(第2行)进行检查,以便将其约束为两个特定选项(用户无法键入?format=blahblah并让路由器弄乱{ {1}}。