0

У меня есть пользовательский компонент Joomla 3.4.1, который имеет представление, которое отображает данные в формате JSON (из представлений/myview/view.json.php) или HTML (из представлений/myview/view.html.php) формат. Есть ли способ, как изменить формат представления по умолчанию от HTML в JSON, так чтоКак изменить формат представления компонентов Joomla по умолчанию?

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

возвращает JSON данных вместо HTML, а:

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

еще возвращает шаблон HTML в представлении?

EDIT:

Насколько я получаю этот маршрутизатор:

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 по умолчанию используется, как я могу проверить, что запрос был запрошен без формата д? В JFactory есть «html»: getApplication() -> input-> get ('format'). – 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-страницы страницы в ответ. Я попробовал google «joomla force raw output», но ничего подобного предложениям в http://w3facility.org/question/joomla-force-raw-output/ не работал, чтобы принудительно выводить исходный JSON-выход. – Blackhex

0

Если ваш пользовательский компонент имеет маршрутизатор (как я бы предположил из ваших примерных URL-адресов), в котором вы задали значение по умолчанию 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 и есть маршрутизатор получить перепутано с $vars['format'] = 'blahblah'.

+0

Благодарим за отзыв. К сожалению, это заставляет формат JSON без возможности вернуть его в HTML. Подробнее см. В разделе «Редактирование вопроса». – Blackhex

+0

Это заставляет по умолчанию быть JSON, но вы можете переопределить это, добавив '? Format = html' в url (1-я строка получает входной объект, вторая строка получает параметр переменной' format' для json, если нет, 3-й строка - это безопасность, обеспечивающая использование только значений json или html в маршрутизаторе). – Rodney

+0

Извините, но поскольку я уже написал переопределяющий формат с '?format = html' не работает в этом случае, потому что 'JFactory :: getApplication() -> input' по какой-либо причине пуст в функции маршрутизатора, даже если URL содержит этот параметр. – Blackhex