2013-01-02 132 views
2

是否有可能從外部腳本渲染Joomla內容?例如,我有一些html字符串,我想將它傳遞給com_content組件,以使所有內容插件和模塊功能可用。我認爲我應該使用JDocumentRendererComponent類。代碼在我的外部文件:Joomla 2.5渲染com_content組件輸出

<?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...

林做錯了什麼?有任何想法嗎?

+0

這就是你做?你沒有實例化一個應用程序? – Elin

+0

@Elin,我確實實例化了應用程序。它在這裏:require_once('framework.php')。我不提供這個文件內容,但初始化工作得很好。 – Bounce

回答

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

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 Class位於位於/libraries/joomla/document/html/renderer/component.php如果你正確的負載框架應當一切正常。

+0

Im在這裏加載Joomla環境:require_once('framework.php')。我沒有提供這個文件內容,但無論如何,Joomla框架加載完美。 – Bounce

+0

檢查更新的答案 – Techie

+0

我的應用程序初始化與您的應用程序幾乎相同。在相同的腳本(沒有粘貼在這個例子中的代碼)Im加載Joomla數據庫方法,如:JFactory :: getDbo()等。它的工作原理。所以我假設框架加載正確。 – Bounce