如何从Joomla模块参数中获取数据

3
我正在构建一个Joomla 2.5模块,想要访问从模块参数传递过来的数据,但是我遇到了以下错误:致命错误:调用非对象的get()成员函数 我的代码如下:

helper.php

class modFeedGrabber
{
    function feedurl( $params ){
        return $params->get('feedUrl');
    }
}

mod_feedGrabber.php

defined( '_JEXEC' ) or die( 'Restricted access' );
$sitebase = JPATH_BASE;
$doc =& JFactory::getDocument();

// Include the syndicate functions only once
require_once( dirname(__FILE__).DS.'/helper.php' );
$feed = new modFeedGrabber();
$url = $feed->feedurl();
require( JModuleHelper::getLayoutPath( 'mod_feedGrabber' ) );

mod_feedGrabber.xml

<?xml version="1.0" encoding="utf-8"?>
<extension type="module" version="2.5.0" client="site" method="install">
    <name>Scroll Feed</name>
    <author>Josiah Gerald</author>
    <version>1.0.0</version>
    <date>03-04-2013</date>
    <description>A simple feed scroller.</description>
    <files>
        <filename>mod_feedGrabber.xml</filename>
        <filename module="mod_feedGrabber">mod_feedGrabber.php</filename>
        <filename>index.html</filename>
        <filename>helper.php</filename>
        <filename>tmpl/default.php</filename>
        <filename>tmpl/index.html</filename>
        <folder>tmpl</folder>
    </files>
    <config>
        <fields name="params">
            <fieldset name="basic">
                <field
                    name="feedUrl"
                    type="url"
                    size="50"
                    label="Feed URL"
                    description="Enter the url of the feed" />


 </fieldset>
       </fields>
 </config>
</extension>  

default.php

    <?php 
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
?>
<div id='feed' class="<?php echo $module_sfx; ?>"><?php echo $url; ?>
</div>

我已经通过关闭</fieldset>和</fields>来对代码进行了更正。感谢您指出这一点@cppl。 - jking
你还需要我提到的第一个“修复”,即将$params传递给你的帮助文件。 - Craig
1个回答

1
我能看到提供的代码的主要问题是您没有将$params传递给您的辅助函数。它应该像这样读取:

defined( '_JEXEC' ) or die( 'Restricted access' );
$sitebase = JPATH_BASE;
$doc =& JFactory::getDocument();

// Include the syndicate functions only once
require_once( dirname(__FILE__).DS.'/helper.php' );
$feed = new modFeedGrabber();
$url = $feed->feedurl($params);
require( JModuleHelper::getLayoutPath( 'mod_feedGrabber' ) );

同时,您的XML无效,因为它缺少 fieldsetfields 标签的闭合标签。应该像这样:
<?xml version="1.0" encoding="utf-8"?>
<extension type="module" version="2.5.0" client="site" method="install">
    <name>Scroll Feed</name>
    <author>Josiah Gerald</author>
    <version>1.0.0</version>
    <date>03-04-2013</date>
    <description>A simple feed scroller.</description>
    <files>
        <filename>mod_feedGrabber.xml</filename>
        <filename module="mod_feedGrabber">mod_feedGrabber.php</filename>
        <filename>index.html</filename>
        <filename>helper.php</filename>
        <filename>tmpl/default.php</filename>
        <filename>tmpl/index.html</filename>
        <folder>tmpl</folder>
    </files>
    <config>
        <fields name="params">
            <fieldset name="basic">
                <field
                    name="feedUrl"
                    type="url"
                    size="50"
                    label="Feed URL"
                    description="Enter the url of the feed"
                />
            </fieldset>
        </fields>
    </config>
</extension>

作为提示,您可以通过将XML文件拖入浏览器窗口来快速检查其是否有效,例如,您上面发布的代码会产生以下结果:

Broken XML error in Chrome


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接