Блог Михаила Крамера. PHP и JS

Альтернативные макеты и пункты меню в Joomla 2.5

Начиная с Joomla 1.6 появилась возможность для любого компонента делать альтернативные макеты. Это достаточно подробно рассматривается во многих источниках в Интернете, поэтому часть проблемы я рассмотрю обобщённо, и уделю больше внимание тому, что вызвало трудности у меня при работе с альтернативными макетами. Как обычно и делается, для примера мы возмём компонент com_content. К примеру, нам надо сделать альтернативный макет конкретной статьи. Для этого в каталоге своего шаблона создаются ряд вложенных каталогов, чтоб в итоге получилось html/com_content/article. Узнать имя папки просто. Для этого достаточно посмотреть каталог /components/com_content/views.

Далее мы начнём создавать свой макет. Его удобно делать на основе стандартного макета компонента. Он находится в папке /components/com_content/views/article/views. Скопируйте оттуда все файлы .php (не трогая пока xml) в свою папку html/com_content/article. Я сделаю это на примере шаблона Atomic. Для демонстрации я просто добавлю в стандартный макет дополнительную строчку "Добавлено Михаилом Крамером". Для того, чтобы не заместить стандартный макет компонента, а создать возможность выбора, default.php надо переименовать во что-то другое. К примеру, в mike.php ? Также файл default_links.php следует переименовать в mike_links.php. Итак, в файле mike.php я после строки


<div class="item-page<?php echo $this->pageclass_sfx?>">

добавлю свою глубокомысленную надпись:


<p style='font-size: 24px; color: red; text-transform: uppercase;'>Добавлено Михаилом Крамером</p>

Теперь при создании новой статьи появится возможность выбора альтернативного макета (во вкладке "Параметры отображения материала"):
joomla_alter

Выбрав наш новый макет и сохранив статью, мы увидим результат:
joomla_alter_cont

Теперь подходим к главному вопросу. Вопрос актуален только для Joomla 2.5, в Joomla 3 такой проблемы нету. Об этом, в принципе, сказано в документации, однако многие (и я в том числе) встречаются с этой трудностью. Создадим теперь пункт меню для этой статьи, и вместе с ним короткий путь /interest. И наблюдаем интересную ситуацию - если в урле мы указываем сомпонент и номер статьи, т.е. переходим по обычному меню, то видим, что наш макет сработал, а если переходим из меню или по краткому пути, то, как говорится, ни черта не работает:
joomla_alter_cont1

Вот эта и есть не самая приятная особенность Joomla 2.5. Альтернативные макеты, созданные в соответствии с предыдущей частью статьи, работают только если для данной страницы нету пункта меню. А что делать, если всё таки нужно вывести альтернативный макет? Тогда нужно создать то, что называется "альтернативный макет пункта меню". Для этого нам необходимо добавить xml-файл с именем mike.xml. Структура XML-файла достаточно сложна и громоздка, но к счастью мы можем поспользоваться файлом default.xml из /components/com_content/views/article/views. Скопируйте его в подкаталог html/com_content/article вашей темы, переименуйте в mike.xml и измените первые строки следующим образом:


<?xml version="1.0" encoding="utf-8"?>
<metadata>
	<layout title="Статья в стиле Mike" option="com_content_article_view_default_option">

Остальной файл оставьте неизменным.

Теперь вы сможете выбрать новый тип меню Joomla:
mike_style

Назначив именно такой тип меню нашей статье, мы получим желаемый результат - по ссылке /interest будет выводится наш макет:
joomla_alter_cont2

Ваш комментарий
Комментарии