一个Joomla模块能否“知道”它所在的位置?(2)

4
这是我在StackOverflow上的第一个问题。 我试图在帖子Can a Joomla module "know" what position it's in?中发表评论,但找不到方法,所以我不得不在这里发布另一个问题。非常感谢您对如何正确操作的任何提示。 无论如何,以下是我的问题:
我尝试了上述帖子中提到的代码,但似乎没有起作用。我不仅对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学习过程中的一个副问题。我仍然需要解决的是让模块确定它自身所处的位置。

请帮忙。谢谢!


1
虽然我理解这更多是为了你的学习,但我想知道为什么你不直接从参数中获取模块的位置呢? - BodgeIT
我对PHP的了解很少,虽然在学校学过一些编程基础。我理解你建议我做什么,但我不知道如何“准确地提取参数”。我尝试阅读一些Joomla文档,但几乎每个句子都会引导我去了解其他未知的知识点。非常感谢您理解我的学习追求,当我从基础开始学习PHP时,这是我需要尽快解决的紧迫问题之一,我希望我也能从中学到东西。无论如何,请教我如何提取参数,提前致谢。 - shenkwen
2个回答

1

我不确定在模板中使用它是否合适(虽然整体上看起来并没有错),但我的模块经常像这样访问位置:

$module->position

在模块中(即mod_something.php),尝试将其放在那里,如果可用,只需设置一个变量,它也将在视图中可用。

1
如果 $module->position 对您无效,可能只适用于 Joomla 1.7、2.5 及更高版本,但我不确定。$module->position 在 Joomla 2.5 中有效。
否则,您需要创建一个 module.php 函数。
请查看该文件。

/templates/you-template/html/modules.php

例如,在模板中(例如index.php),您可以将您的位置设置如下:
<jdoc:include type="modules" name="header" style="includeposition" />

/templates/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"

在你的jdoc内部。

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