【问题标题】:Joomla : How can we assign a different layouts to different menu IDs?Joomla:我们如何为不同的菜单 ID 分配不同的布局?
【发布时间】:2010-12-22 20:22:38
【问题描述】:

我正在运行 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。

请帮助。

【问题讨论】:

    标签: php joomla


    【解决方案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 的组合来控制页面的布局。我将页面类后缀添加到模板的 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 来控制每个页面。您可以实现截然不同的布局,而无需返回并触摸代码。

    【讨论】:

    • 哇,太酷了。这正是我一直在寻找的。谢谢朋友。
    • @Brent Friar,我应用了你上面描述的代码。它完美地工作,谢谢。但是你能告诉我是否可以在同一个文档中多次使用&lt;body id="&lt;?php echo $pageclass ? $pageclass : 'default'; ?&gt;"&gt; 吗?我现在将它应用于 div 内容,但例如我想在“右列 div”上使用它;我可以粘贴代码还是会冲突?我对PHP一无所知,但作为CSS的一个例子,我不能在一页上使用两次相同的“id”。 (我是 Joomla 的新手,正在使用 beez 安装和我自己的模板。到目前为止效果很好。)
    • 只要遵循几个简单的规则,您就可以在页面上多次使用 $pageclass - 您只能在页面上将其用作 ID 一次,这是最好的地方因为这将是主体或最高级别的容器/包装器。之后,您可以根据需要多次使用它作为一个类。您还可以将它与其他选择器结合起来创建新的 ID 和类。
    【解决方案2】:

    我总是使用 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
    }
    

    【讨论】:

      【解决方案3】:

      根据您的菜单 ID (ItemID),您可以在主 index.php 中包含不同的 index&lt;x&gt;.php,如下所示:

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

      【讨论】:

      • 嗨 Sushil 感谢您的发帖。我正在寻找的是,默认情况下它将显示 index.php 文件,但如果在模板选项面板中选择了一个选项(因为这里我不知道将来我会分配多少个 itemID)它必须将该页面分配给该特定的 itemID。选项中的示例我创建了一个文本框,我可以在其中将每个参数输入一行,例如……。 57=索引 1 和 58=索引 2。然后它应该完成这项工作。所以它应该读起来像 IF $itemID 被定义然后改变布局否则常规布局。请帮忙。
      • 我认为您需要对 C:\xampp\htdocs\code\administrator\components\com_templates 中的代码进行一些调整。在那里您可以提供一个额外的字段来询问您的参数并在模板 index.php 文件中读取这些参数。并相应地应用模板。代码应该很简单。
      猜你喜欢
      • 2013-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多