Joomla: Как мы можем назначить разные макеты для разных идентификаторов меню? - PullRequest
1 голос
/ 22 декабря 2010

Я использую 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.

Что я имею в виду ... Как мы можем назначить разные макетык другим идентификаторам меню?

Я знаю, что есть встроенная опция для выбора другого шаблона на основе идентификатора меню, но я не хочу дублировать файлы шаблона только для этой одной функции.Все в моих шаблонах одинаковое, только изменение макета зависит от идентификатора меню.

Пожалуйста, помогите.

Ответы [ 3 ]

1 голос
/ 24 декабря 2010

Вы используете коммерческий шаблон или что-то нестандартное?Вы должны иметь возможность кодировать свой index.php так, чтобы макет определялся модулями, загруженными на страницу.Затем вы управляете тем, какие модули отображаются с помощью назначений меню в параметрах модуля.Вы можете управлять отображением макета с помощью CSS, суффикса класса страницы и кода на 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;
?>

Затем вам нужно добавить это к тегу BODY в качестве идентификатора:

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

Теперь вы можете использовать позиции модуля и CSS для управления каждой страницей.Вы можете создавать совершенно разные макеты, не возвращаясь назад и не нажимая код.

1 голос
/ 30 октября 2012

Я всегда использую 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
}
0 голосов
/ 23 декабря 2010

На основе вашего идентификатора меню (ItemID) вы можете включить в свой основной index.php другой index<x>.php, например:

$itemID = $_GET['ItemID'];

if($itemID == '57')
{
    include index1.php
}
if($itemID == '58')
{
    include index2.php
}
else
{
    // template code of index.php
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...