Joomla:我们如何为不同的菜单ID分配不同的布局?

时间:2010-12-22 20:22:38

标签: php joomla

我正在运行Joomla,并为以下问题寻求帮助。

假设我的模板中有3个布局,布局文件命名为...

index.php
index2.php
index3.php

我有5个菜单链接说....

Link 1
Link 2
Link 3
Link 4
Link 5

我正在寻找的是......

对于Link 1, Link 4 and Link 5,我希望Joomla加载常规index.php,但对于Link 2,我希望Joomla加载index2.php,同样Link 3我想要它加载index3.php

我的意思是......我们如何为不同的菜单ID分配不同的布局?

我知道有一个内置选项可以根据菜单ID选择不同的模板,但我不想仅为这一个功能复制模板文件。我的模板中的所有内容都与布局中的更改相同,具体取决于菜单ID。

请帮助。

3 个答案:

答案 0 :(得分:1)

您使用的是商业模板还是自定义的?您应该能够编写index.php代码,以便布局由页面上加载的模块确定。然后,您可以通过模块参数中的菜单分配来控制显示的模块。您可以通过CSS,Page Class Suffix和index.php上的代码来控制显示的布局。

模板中的每个模块位置都应该是可折叠的 - 这意味着如果没有模块加载到该位置,则不会将其添加到HTML中。使用这样的东西:

<?php if ($this->countModules('left')) : ?>
    <jdoc:include type="modules" name="left" style="xhtml" />
<?php endif; ?>

您还可以使用可以在菜单项的系统参数和CSS上设置的Page Class Suffix的组合来控制页面的布局。我将Page Class Suffix添加到模板的BODY标记中,这样我就可以单独控制每个页面。

首先,您需要找出您所在的菜单项:

<?php
$menu = &JSite::getMenu();
$active = $menu->getActive();
if (is_object( $active )) :
$params = new JParameter( $active->params );
$pageclass = $params->get( 'pageclass_sfx' );
endif;
?>

然后您需要将其作为ID添加到BODY标记:

<body id="<?php echo $pageclass ? $pageclass : 'default'; ?>">

现在您可以使用模块位置和CSS来控制每个页面。您可以实现截然不同的布局,而无需返回并触摸代码。

答案 1 :(得分:1)

我总是使用include_once或出于安全目的require_once,从我的角度来看,它是在模板过程中编程的更好方法。 - 你怎么看 ? - 示例我会这样做:

(isset($_GET['Itemid']))?$itemID=$_GET['Itemid']:"";
OU POUR LES PURISTES DE JOOMLA :
$itemID=JRequest::getInt('Itemid',0);

if($itemID == '57')
{
    require_once ("index1.php");
}
if($itemID == '58')
{
    require_once ("index2.php");
}
else
{
    // template code of index.php
}

答案 2 :(得分:0)

根据您的菜单ID(ItemID),您可以在主index<x>.php中添加不同的index.php,如下所示:

$itemID = $_GET['ItemID'];

if($itemID == '57')
{
    include index1.php
}
if($itemID == '58')
{
    include index2.php
}
else
{
    // template code of index.php
}