Joomla 1.5模块输出退货声明

时间:2011-12-30 19:40:04

标签: php joomla module joomla1.5

我正在构建一个Joomla模块,它最终会从外部数据源中提取数据。现在我学习的时候,我把它设置为只是将字符串“这个位正常工作”打印到模块位置。但是,我一直遇到问题,让它正常工作。这是我的代码:

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设置为helper类的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语句,字符串仍然会回显一次,表明return语句本身正在回显。

我改编了“Hello World!”的代码。示例位于in the Joomla documentation。任何想法?

2 个答案:

答案 0 :(得分:2)

这是用于显示模块的核心joomla代码

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

它使用$ content变量本身。而你的模块正在改变$ content的价值。一个输出来自您的模块,另一个输出来自此joomla代码。它将模块的内容附加到$ content变量(已在模块中更改)。

所以不要在代码中使用$ content变量。

答案 1 :(得分:0)

return语句没有回应。

一个想法是为您的功能添加更多信息。 尝试将ID添加到输出中,如此

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

并查看是否会触发任何想法。也许你加了两次模块?