Joomla模块能“知道”它在什么位置吗?(2).


Can a Joomla module “know” what position it's in? (2)

这是我在StackOverflow的第一个问题。我试图在这篇文章中发表评论:Joomla模块是否"知道"?它在什么位置?,但无法做到这一点,所以我不得不在这里发布另一个问题。任何关于如何正确地做到这一点的提示都是非常感谢的。总之,这是我的问题:

我尝试了上面提到的代码,但它似乎不起作用。我不仅对PHP很陌生,而且对编码也很陌生,所以我不确定是我还是代码的问题。以下是我对模块的default.php文件所做的操作:

1)为了确保在正确的位置插入代码,我插入

 <?php echo(print_r($module)); ?> 

,在正确位置输出1;

2)我需要确定的位置名称是"showcase-a",所以我插入代码

 <?php if ($module->position == 'showcase-a'):?>test<?php endif;?>

到上面的位置,但是这次它没有显示任何东西;

3)然后我试了这个代码:

 <?php if ($module):?><span>test</span><?php endif; ?>

但是它仍然没有在我期望的位置显示"test"。

4)我试着

 <?php if (1):?><span>test</span><?php endif; ?>

和测试"test"显示为良好。所以我没有把IF语句写错。

现在我完全迷路了。既然print_r($module)输出1,$module必须是正的,为什么PHP忽略测试3)?这只是一个关于PHP学习的附带问题。我还需要解决的是让模块确定自己在哪个位置。请帮助。谢谢你!

我不确定是否在模板中使用它(尽管它似乎并没有完全错误),但我的模块经常像这样访问位置:

$module->position
模块中的

(mod_something。php)所以试着把它放在那里,如果它可用就设置一个变量它也会在视图中可用

如果$module->position不适合您。$module->position可能只适用于joomla 1.7, 2.5和+,但我不确定。$module->position可以在joomla 2.5中使用

否则你需要创建一个module.php函数

查看文件

/模板/you-template/html/modules.php

例如,在模板中设置如下位置(例如index.php)

<jdoc:include type="modules" name="header" style="includeposition" />

内/模板/you-template/html/modules.php

创建如下函数:

<?php
function modChrome_includeposition($module, &$params, &$attribs){
    //Set a value to $module->position
    $module->position='WHATEVER YOUWANT';
    ?>
    <div class="moduletable <?php echo $params->get('moduleclass_sfx').' '.$module->name; ?>">
        <?php
        if($module->showtitle){
        ?>
        <div class="modtitle">
            <div class="fleche">
                <span>
                    <?php
                        echo $module->title;
                    ?>
                </span>
            </div>
        </div>
        <?php
        }
        ?>
        <div class="modcontent">
            <?php echo $module->content; ?>
            <div class="clear">
            </div>
        </div>
    </div>
    <?php
}
?>

设置不同的函数名,设置不同的值。

函数名将匹配您设置的样式:

modChrome_includeposition($module, &$params, &$attribs)

因为
style="includeposition"