2

我如何在 joomla 2.5 中强制原始输出而不在 url 中传递 &format=raw ?

我试过这个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()从控制器,但我想看看是否有更好的方法?

4

5 回答 5

1

要更改文档类型并加载您需要的新渲染器(将“raw”更改为“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');
于 2013-10-22T17:35:03.560 回答
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 我做任何我想做的事,然后我关闭它以获得结果如果你想要 JSON,我会回显我想要的任何东西,这很简单

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

        echo json_encode($matches);
于 2014-01-26T21:22:39.183 回答
0

您必须使用setTypeforJDocument而不是获取新实例。您还需要view.raw.phpview 而不是view.html.php.

将下面的代码添加到您的控制器应该可以解决您的问题。

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

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

您还可以创建自己的输出模板(例如tmpl=max4ever,代替tmpl=component)...并以您喜欢的方式自定义输出。请参阅此线程中的答案

于 2012-04-26T18:02:46.957 回答
0

有点晚了,但是当我需要这个的时候,我花了太多时间去打猎,所以听你说。

我使用这段代码来加载 Joomla 平台,它使“一切都可用”,然后根据我的需要编写自己的输出。就我而言,我希望“api”调用与我们拥有的另一个系统进行交互,所以把它放在我的根目录中(以及一些其他的安全检查),瞧——使用 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>";
于 2012-12-06T17:38:40.013 回答
0

在您的查询字符串中,放置以下变量:

format=custom
view=viewName

如果您有一个视图,例如名为json,您将在名为的视图父文件夹中创建视图文件夹:json

在其中放置视图文件并在文件名中使用格式类型。

view.json.php

在您输入的 url 字符串中(例如):

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

这将调用 json 视图并加载view.json.php视图文件。类名将是customcomponentViewJson

如果您实际使用的是 json 输出,则需要在文档上设置适当的 mime 标头。

$doc = JFactory::getDocument();
$doc->setMimeEncoding('application/json');

这是一篇关于在 Joomla 中使用 json 的好文章:http: //docs.joomla.org/Generating_JSON_output

这适用于 Joomla 2.5,我认为是 1.5。如果格式设置为 html 或 xml 以外的任何内容,我认为 Joomla 假定原始输出类型并在没有站点模板的情况下发回组件响应。即您想要的原始响应,例如 json 消息。

这似乎没有很好的记录并且难以理解。我在这个问题上花了几个令人沮丧的时间,所以希望这对某人有所帮助。

于 2013-07-17T16:31:33.240 回答