Joomla模块可以“知道”它的位置吗? (2)

时间:2013-04-20 17:44:41

标签: php joomla module

这是我在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; ?>

但它仍然没有像我预期的那样在该位置显示“测试”。

4)我尝试了

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

并且测试“测试”显示为良好。所以我没有把IF语句编码错误。

现在我完全迷失了。由于print_r($ module)输出1,$ module必须为正,为什么PHP忽略3中的测试?这只是PHP学习的一个侧面问题。我还需要解决的是让模块确定自己所处的位置。 请帮忙。谢谢!

2 个答案:

答案 0 :(得分:1)

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

$module->position

在模块中(所以mod_something.php)所以尽量把它放在那里,如果它可用只是设置一个变量,它也将在视图中可用。

答案 1 :(得分:1)

如果$ module-&gt;位置不适合您。 $ module-&gt;位置可能仅适用于joomla 1.7,2.5和+,但我不确定。 $ module-&gt;位置适用于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
}
?>

制作不同的函数名称,以便在需要时设置不同的值。

函数名称将与您设置的syle匹配:

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

,因为

style="includeposition"

你的jdoc里面。