2011-12-30 95 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