2

是否可以从外部脚本呈现 Joomla 内容?例如,我有一些 html 字符串,我想将其传递给com_content组件,以使所有内容插件和模块功能都可用。我想我应该使用JDocumentRendererComponent类。我的外部文件中的代码:

<?php

require_once ('framework.php'); //loading joomla framework

jimport('joomla.document.html.renderer.component');

$contentHtml = '<p>Some content html</p>';

echo JDocumentRendererComponent::render('com_content',array(),$contentHtml);

?>

我得到的是最后一行的错误:

Fatal error: Class 'JDocumentRendererComponent' not found...

我做错了什么?有任何想法吗?

4

2 回答 2

0

这是因为您没有将 Joomla 框架包含到外部脚本中。使用下面的代码。这将确保 Joomla! 环境加载正确

/* Initialize Joomla framework */
define( '_JEXEC', 1 );
define('JPATH_BASE', dirname(__FILE__) );
define( 'DS', DIRECTORY_SEPARATOR );
/* Required Files */
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
/* To use Joomla's Database Class */
require_once ( JPATH_BASE .DS.'libraries'.DS.'joomla'.DS.'factory.php' );
/**************************************************/
// Your code starts here...
// Remember that the Site application isn't running, so you cannot access $mainframe or any of its methods.
/**************************************************/

JDocumentRendererComponent类位于 /libraries/joomla/document/html/renderer/component.php 如果您正确加载框架,一切都应该正常工作。

于 2013-01-03T06:41:36.350 回答
0

我为我的问题找到了其他解决方案。这项工作也可以通过内容插件事件(触发器)来完成。一段代码来自components/com_content/views/article/view.html.php

JPluginHelper::importPlugin('content');
$results = $dispatcher->trigger('onContentPrepare', array ('com_content.article', &$item, &$this->params, $offset));

$item->event = new stdClass();
$results = $dispatcher->trigger('onContentAfterTitle', array('com_content.article', &$item, &$this->params, $offset));
$item->event->afterDisplayTitle = trim(implode("\n", $results));

$results = $dispatcher->trigger('onContentBeforeDisplay', array('com_content.article', &$item, &$this->params, $offset));
$item->event->beforeDisplayContent = trim(implode("\n", $results));

$results = $dispatcher->trigger('onContentAfterDisplay', array('com_content.article', &$item, &$this->params, $offset));
$item->event->afterDisplayContent = trim(implode("\n", $results));

所以我们实际上可以从我们的字符串中创建一个对象并将其传递给这些触发器。结果,我们获得了像文章一样呈现的内容,并具有其主要功能。

关于它的更多信息:

http://www.inmotionhosting.com/support/edu/joomla-25/create-plugin/content-plugin-events https://groups.google.com/forum/#!msg/joomla-dev-cms/VZVurjiZWIs /9Vr45KS2LTMJ

于 2013-01-03T14:24:08.353 回答