我正在运行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。
请帮助。
答案 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
}