2011-12-30 99 views
1

我正在構建一個Joomla模塊,它最終將從外部數據源中提取數據。現在,當我學習時,我將其設置爲僅將字符串「This bit working works」打印到模塊位置。不過,我一直有問題讓它正常工作。這裏是我的代碼:Joomla 1.5模塊輸出返回語句

mod_ucr.php:

<?php 
/** 
* UniversalContentRepository Module Entry Point 
* 
* @package UniversalContentRepository 
* @subpackage Modules 
*/ 

// no direct access 
defined('_JEXEC') or die('Restricted access'); 

// Include the syndicate functions only once 
require_once(dirname(__FILE__).DS.'helper.php'); 
$helper = new modUCRHelper(); 
$content = $helper->getSnippetContent(); 
require(JModuleHelper::getLayoutPath('mod_ucr')); 
?> 

mod_ucr.xml

<?xml version="1.0" encoding="utf-8"?> 
<install type="module" version="1.5.0"> 
    <name>Universal Content Repository</name> 
    <author>Brendon Dugan</author> 
    <version>1.5.0</version> 
    <description>A module to allow the insertion of UCR Snippets into a Joomla site.</description> 
    <files> 
     <filename>mod_ucr.xml</filename> 
     <filename module="mod_ucr">mod_ucr.php</filename> 
     <filename>index.html</filename> 
     <filename>helper.php</filename> 
     <filename>tmpl/default.php</filename> 
     <filename>tmpl/index.html</filename> 
    </files> 
    <params> 
    </params> 
</install> 

helper.php:

<?php 
class modUCRHelper 
{ 
    function __construct(){ 

    } 


    public function getSnippetContent($id = 0){ 
     $content = "This bit works correctly, ID = $id"; 
     return $content; 
    } 
} 
?> 

TMPL /如default.php:

<?php // no direct access 
defined('_JEXEC') or die('Restricted access'); 
echo $content; 
?> 

這裏我們將變量$ content設置爲助手類的getSnippetContent()方法的輸出。此方法當前是:

function getSnippetContent($id = 0){ 
    $output = "This bit works correctly"; 
    return $output; 
} 

它只是輸出我想要打印的字符串。在我的模板,我應該能夠呼應了這樣的內容:

<?php // no direct access 
defined('_JEXEC') or die('Restricted access'); 
echo $content; 
?> 

但是模塊輸出的反而是

"This bit works correctlyThis bit works correctly" 

如果我註釋掉echo語句,字符串依然迴盪一次,這表明回報聲明本身就是回聲。

我修改了「Hello World!」中的代碼。例子位於in the Joomla documentation。有任何想法嗎?

+0

你可以發佈模塊的所有(我相信4)文件嗎? – 2012-01-03 19:47:23

回答

2

這是核心的Joomla代碼顯示模塊

$content = ''; 
ob_start(); 
require $path; 
$module->content = ob_get_contents().$content; 
ob_end_clean(); 

它使用$內容變量本身。而你的模塊正在改變$ content的價值。一個輸出來自你的模塊,另一個是由於這個joomla代碼。它將模塊的內容附加到$ content變量(在模塊中已更改)。

所以不要在你的代碼中使用$ content變量。

+0

修好了!我沒有在Joomla的文檔中看到任何有關這方面的信息......您是否還有其他未記錄的缺陷可以預先警告我? – 2012-01-04 13:45:10

+1

我之前也不知道,剛剛纔知道我什麼時候在找你的問題的解決方案。 – Gaurav 2012-01-04 15:33:42

0

return聲明不回顯。

一個想法是添加更多的信息到你的函數。 嘗試添加該ID的輸出,像這樣

function getSnippetContent($id = 0){ 
    $output = "This bit works correctly. ID=" .$id ."<br>"; 
    return $output; 
} 

,看看是否會觸發任何想法。也許你增加了模塊兩次?

+0

將ID添加到輸出會將id輸出到屏幕上,但不能解決問題。但是,註釋掉echo語句會改變輸出以僅打印一次。沒有echo語句加上輸出的存在表明返回語句是回聲。 – 2012-01-03 17:42:54

+0

在您的代碼中搜索'getSnippetContent'。你有什麼發現? – 2012-01-03 18:40:19

+0

整個項目由總共不到10行的實際代碼組成。搜索getSnippetContent將返回函數定義,並調用它的單次調用以將其輸出分配給$ content變量。 – 2012-01-03 19:07:02