2012-04-26 3 views
2

Как я могу получить исходный результат FORCE в joomla 2.5 без прохождения & format = raw в URL-адресе?joomla force raw output

я попробовал это в controller.php

require_once (JPATH_BASE.DS.'libraries'.DS.'joomla'.DS.'document'.DS.'raw'.DS.'raw.php'); 
JFactory::$document = new JDocumentRaw(); 
//doesn't work, outputs only "Array" 

и

JRequest::setVar('tmpl', 'component');//doesn't disable view rendering 

и

$document = &JFactory::getDocument(); 
$doc = &JDocument::getInstance('raw'); 
$document = $doc; 
//gives me Strict Standards: Only variables should be assigned by reference in ... 
//and doesn't disable view rendering 

Поскольку я печать сырой вывод, я даже не строить Jview и прочее, просто die() от контроллера, но я хотел посмотреть, был ли хороший способ?

ответ

0

Для получения нового экземпляра вы должны использовать setType для JDocument. Вам также понадобится view.raw.php вместо view.html.php.

Добавление кода ниже в ваш контроллер должно решить вашу проблему.

public function __construct() 
{ 
    parent::__construct(); 

    $document = JFactory::getDocument(); 
    $document->setType('raw'); 
} 

Вы можете также обрешетка свой собственный шаблон вывода (например tmpl=max4ever вместо tmpl=component) ... и настраивать вывод так, как ваш, как. See answer in this thread.

+0

так что я должен построить зрителя в любом случае , я надеялся избежать этого – max4ever

+0

вам не обязательно. 1-й вариант установки типа документа должен работать нормально. Если у вас есть ваш логин в 'view.html.php', просто создайте новый файл' view.raw.php' и создайте этот класс вида или включите html-представление. – Alex

+0

Точка в том, что я не хочу создавать дополнительные папки и дополнительные файлы, так как я выводил raw, я просто эхо от контроллера, тогда я умираю() – max4ever

0

Немного поздно, но я потратил слишком много времени на охоту, когда мне это нужно, так что слушайте, как вы идете.

Я использовал этот код для загрузки платформы Joomla, которая сделала «все доступным», и приступила к написанию собственного вывода в соответствии с моими потребностями. В моем случае я хотел, чтобы «api» звонки взаимодействовали с другой системой, которую мы имеем, поэтому поместите это в мой корневой каталог (с некоторыми другими проверками на безопасность), а voila - с выходом JSON или XML, это и сделало трюк.

в моем корне как "index_api.php"

// We are a valid Joomla entry point. 
define('_JEXEC', 1); 

// Setup the base path related constant. 
define('JPATH_SITE', dirname(__FILE__)); 
define('JPATH_BASE', JPATH_SITE); 
define('JPATH_PLATFORM', JPATH_BASE . '/libraries'); 

// Import the platform 
require_once JPATH_PLATFORM.'/import.php'; 

define('DS', DIRECTORY_SEPARATOR); 

if (file_exists(JPATH_BASE . '/includes/defines.php')) 
    include_once JPATH_BASE . '/includes/defines.php'; 

if (!defined('_JDEFINES')) 
    require_once JPATH_BASE.'/includes/defines.php'; 

require_once JPATH_BASE.'/includes/framework.php'; 

// Instantiate the application. 
$app = JFactory::getApplication('site'); 

// Make sure that the Joomla Platform has been successfully loaded. 
if (!class_exists('JLoader')) 
    exit('Joomla Platform not loaded.'); 

/* Now try some standard Joomla stuff. None of the below is necessary, just showing that Joomla is loaded and running*/ 
$config = new JConfig(); 

$db = JFactory::getDbo(); 
$query = $db->getQuery(true); 
$query->select('version_id'); 
$query->from('#__schemas'); 
$query->where('extension_id=700'); 
$db->setQuery($query); 
$db->query(); 
if($db->getErrorNum()) { 
    die($db->getErrorMsg()); 
}else{ 
    echo "<pre>Joomla Version is ".$db->loadResult()."</pre>"; 

} 

echo "<pre>".print_r($config,true)."</pre>"; 
echo "<pre>".print_r($db,true)."</pre>"; 
echo "<pre>".print_r($app,true)."</pre>"; 
0

В вашей строке запроса поместить следующие переменные

формат = пользовательский вид = VIEWNAME

Если вы имели ввиду например, называется json

вы должны создать папку вида в родительской папке представлений cal привело

JSon

внутри этого вы кладете файл представления и использовать тип формата в имени файла

view.json.php

в вашей строке адреса вы поставите, например

index.php? Option = com_customcomponent & view = Json & format = json

Это вызовите json view и загрузите файл view.json.php.Имя класса будет customcomponentViewJson

Если вы действительно используете выход JSon вы должны установить соответствующие заголовки пантомимы на documenet $ док = JFactory :: GetDocument(); $ doc-> setMimeEncoding ('application/json');

хорошая статья здесь сверху используя json с Joomla.

http://docs.joomla.org/Generating_JSON_output

Это работает с Joomla 2.5, и я думаю, что 1.5. Если формат установлен на что-либо иное, кроме html или xml, я думаю, что Joomla предполагает тип необработанного вывода и отправляет ответ компонента без шаблона сайта ... i.e. необработанный ответ, который вы хотите для таких вещей, как json-сообщения.

Это, кажется, плохо документировано и трудно понять. Я потратил несколько разочаровывающих часов на эту проблему, поэтому надеюсь, что это поможет кому-то.

1

Чтобы изменить тип документа и загрузить новый визуализатор вам нужно (изменить 'сырой' до 'yourDocType'):

if (JRequest::getVar('format') != 'raw') { 
    $url = JURI::current() . '?' . $_SERVER['QUERY_STRING'] . '&format=raw'; 
    header('Location: ' . $url); 
    // or if you dont mind a text/html header ... 
    // redirect($url); 
} 

Или:

JRequest::setVar('format','raw'); 
    JFactory::$document = null; 
    JFactory::getDocument(); 

Или:

JFactory::$document = JDocument::getInstance('raw'); 
0

Ну, для меня я делаю это иначе, без сырых и идет нормально

$mainfraim = & JFactory::getApplication(); 
     $idContact = JRequest::getVar('id_contact'); 
     $modelContact = $this->getModel('clientcontact'); 
     if($modelContact->delete($idContact)) 
      print "1"; 
     else 
      print "0"; 
     $mainfraim->close(); 

Я открываю JFactory я делаю whatevere я хочу, и я закрыть его результата я повторить то, что когда-нибудь я хочу, если вы хотите, чтобы JSON это просто

$matches = array_slice($matches, 0, 15); 

     echo json_encode($matches);