Joomla 2.5 render com_content component output

你说的曾经没有我的故事 提交于 2019-12-11 04:08:19

问题


is it possible to render Joomla content from external script? For example I have some html string, which I want to pass to com_content component, to make all content plugin and module features available. I think I should use JDocumentRendererComponent class. Code in my external file:

<?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);

?>

What I get is error on the last line:

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

What Im doing wrong? Any ideas?


回答1:


It's because you haven't included the Joomla framework to the external script. Use the below code. This will ensure that the Joomla! environment is loaded correctly

/* 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 Class is located in located in /libraries/joomla/document/html/renderer/component.php if you correct load the framework everything should work fine.




回答2:


I found other solution for my question. The job can be also done by content plugin events (triggers). The piece of code from 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));

So we can actually make an object from our string and pass it to these triggers. As a result we are getting content rendered like an article, with its major functionality.

Some more info about it:

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



来源:https://stackoverflow.com/questions/14119573/joomla-2-5-render-com-content-component-output

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!