Joomla: Как изменить шаблон для конкретной статьи - PullRequest
9 голосов
/ 17 июля 2010

Есть ли способ изменить шаблон только для конкретной статьи?Обратите внимание, что он должен работать без привязки статьи к какому-либо меню.

Ответы [ 4 ]

5 голосов
/ 18 июля 2010

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

Я делал что-то подобное на работе, но сейчас не помню, как именно это достигается. Я опубликую свой код здесь, как только найду его.

РЕДАКТИРОВАТЬ : Найдено код:)

Вам необходимо отредактировать файл /include/application.php, в частности, метод getTemplate (). В конце этого метода, непосредственно перед:

// Fallback template
if (!file_exists(JPATH_THEMES.DS.$template.DS.'index.php')) {
  $template = 'rhuk_milkyway';
}

Вы можете добавить свое условие для применения пользовательского шаблона, например так:

//CUSTOM TEMPLATE FOR THE ARTICLE 13
if (JRequest::getVar('id')=='13' && JRequest::getVar('option')=='com_content') {
  $template = $custom_template_name;
}

Это будет применять пользовательский шаблон, имя которого находится внутри $ custom_template_name, к статье с id = 13. Вы также можете использовать его, чтобы применить другой шаблон к компонентам, как я делал с simplecaddy:

//TEMPLATE FOR SIMPLECADDY
if (JRequest::getVar('option')=='com_caddy'){
  $template = 'shop';
}
1 голос
/ 03 февраля 2016

Хотя это старый пост, я решил поделиться своими мыслями: вы можете легко изменить шаблон для одной статьи, реализовав функцию onAfterInitialize () в системном плагине. Не нужно модифицировать ядро ​​Joomla.

Это работает для Joomla 1.5, но также должно работать в 2.5:

function onAfterInitialise(){
  if(true){ // f.ex. test for article ID or whatever
    JRequest::setVar('template', 'beez'); // change template
  }
}

В версиях joomla 3.x url-параметры обрабатываются по-разному. В Joomla 3.4.8 было проверено следующее:

public function onAfterInitialise()
{
  $app=JFactory::getApplication();
  if(true){ // f.ex. test for article ID or whatever
    $app->input->set('template', 'beez3');
  }
}

Подробнее о написании плагинов для Joomla здесь

1 голос
/ 28 октября 2011

Как сказал Брент, избегайте соблазна изменить основной код Joomla!Выполнение этого, скорее всего, остановит вас от обновления Joomla, потому что вы знаете, что оно нарушит внесенные вами основные изменения.

Помимо метода «скрытого пункта меню» (который полезен, но может сломать URL-адреса SEF вв некоторых ситуациях) полезным инструментом является Chameleon .Это позволяет вам выбирать конкретные статьи / категории / разделы (а также такие вещи, как тип браузера, группа пользователей, компонент и т. Д.) И использовать их для запуска определенного шаблона.

1 голос
/ 07 сентября 2010

Вы действительно должны избегать жесткого кодирования чего-либо в шаблоне, если этого можно избежать.Не уверен, почему вы бы указали, что статья не будет связана из меню.Самый простой способ сделать это без необходимости писать и кодировать - создать новое меню, а затем добавить пункт меню, который ссылается на статью, для которой вы хотите указать шаблон.Вам не нужно никуда помещать меню в модуле, чтобы оно никогда не отображалось на сайте, но оно будет отображаться в назначении меню в менеджере шаблонов.

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

...