Вы не зашли.
Q: Можно ли для какой-то конкретной категории (или для нескольких) задать свой собственный шаблон?
A: Да, можно.
Для этого необходимо:
1. Создать в каталоге вашего шаблона (предположим, что вы используете шаблон default) создать каталог ncustom - в нём будут храниться "персональные" шаблоны категорий:
/templates/default/ncustom/
2. Внутри только что созданного каталога - создаём каталоги для персональных шаблонов, например - custom1 и custom2.
/templates/default/ncustom/custom1/
/templates/default/ncustom/custom2/
3. В каталоге персонального шаблона необходимо создать следующие файлы:
news.short.tpl - отвечает за вывод короткой новости
news.full.tpl - отвечает за вывод полной новости
comments.form.tpl - отвечает за вывод формы добавления комментария
comments.show.tpl - отвечаеи за вывод комментариев
Все эти файлы обязательно необходимо создавать. Проще всего для начала скопировать их из каталога шаблона.
4. Зайти в настройки нужных категорий (панель управления => настройка => управление категориями => редактировать) и в поле "шаблон для новостей категории" выбрать необходимый вам шаблон.
Внимание!
Если вы используете плагин switcher или просто переключаетесь между шаблонами, то помните, что собственные шаблоны категорий необходимо создавать во всех используемых шаблонах!
[hr]
Q: А я очень сильно хочу для главной страницы использовать один шаблон (main.tpl), а для остальных страниц - другой. Так можно?
A: Нельзя. Но если ОЧЕНЬ хочется, то можно
===< Для версии 0.9.0 >===
Штатно такой функции в движке нет.
Но вы можете немного пропатчить код движка и получить нужную вам возможность.
1. Открываете файл index.php, находите блок:
// ===================================================================
// Make page output
// ===================================================================
$tpl -> template('main', tpl_site);
$tpl -> vars('main', $template);
if (!$SUPRESS_TEMPLATE_SHOW) {
echo $tpl -> show('main');
} else if (!$SUPRESS_MAINBLOCK_SHOW) {
echo $template['vars']['mainblock'];
}
2. Заменяете этот блок на:
// ===================================================================
// Make page output
// ===================================================================
$masterTemplateName = 'main';
// BEGIN: ** AREA FOR HANDY CORRECTIONS **
// END: ** AREA FOR HANDY CORRECTIONS **
$tpl -> template($masterTemplateName, tpl_site);
$tpl -> vars($masterTemplateName, $template);
if (!$SUPRESS_TEMPLATE_SHOW) {
echo $tpl -> show($masterTemplateName);
} else if (!$SUPRESS_MAINBLOCK_SHOW) {
echo $template['vars']['mainblock'];
}
Всё, теперь движок готов к внесению безопасных изменений.
3. Между строками:
// BEGIN: ** AREA FOR HANDY CORRECTIONS **
// END: ** AREA FOR HANDY CORRECTIONS **
вставляете код (в нашем случае шаблоном для главной страницы будет шаблон mainroot.tpl):
if ((!$action)&&(!$category)&&(!$cstart)&&(!$year)&&(!$month)&&(!$id)) {
$masterTemplateName = 'mainroot';
}
===< Для версии 0.9.1 >===
Открываем index.php, находим строки (202-203):
$mainTemplateName = isset($SYSTEM_FLAGS['template.main.name']) ? $SYSTEM_FLAGS['template.main.name'] : 'main';
$mainTemplatePath = isset($SYSTEM_FLAGS['template.main.path']) ? $SYSTEM_FLAGS['template.main.path'] : tpl_site;
После них пишем:
if (($CurrentHandler['pluginName'] == 'news') && ($CurrentHandler['handlerName'] == 'main')) {
$mainTemplateName = 'имя_вашего_шаблона';
}
Вуаля, всё готово
Не в сети
d7p4x, уже столкнулся с задачей где это нужно.
Буду делать.
А заодно - возможно "повесить" на головную страницу любую новость/статическую страницу или просто заданный пользователем шаблончик.
Не в сети
Если я правильно понял, то я не могу сейчас поставить на главную один main.tpl, а на внутренние страницы другой?
Или я не прав?
Не в сети
Господа кодеры, а вот такая чудасия, описаная тут ---> http://2z-project.ru/forum/viewtopic.php?id=1664
работать будить? (index.php конец файла)
// ===================================================================
// Make page output
// ===================================================================
if (category==novosti) {
$tpl -> template('main_novosti', tpl_site);
$tpl -> vars('main_novosti', $template);
echo $tpl -> show('main_novosti');
}
else if (category==novosti2) {
$tpl -> template('main_novosti2', tpl_site);
$tpl -> vars('main_novosti2', $template);
echo $tpl -> show('main_novosti2');
}
else {
$tpl -> template('main', tpl_site);
$tpl -> vars('main', $template);
echo $tpl -> show('main');
}
Изменено coreldraw (2008-11-24 12:31:20)
Не в сети
coreldraw, я бы очень не советовал использовать такой механизм - возможно из-за него перестанут работать некоторые плагины (к примеру, rss_export). Но если есть желание поиграться и потестить - почему бы и нет
А чем тебе не подходит озвученный выше вариант?
Он делает тоже самое, только без необходимости вмешиваться в код двига, что, в свою очередь, позволяет безболезненно ставить новые версии.
Не в сети
Виталий, с выше описаным вариантом, как я понял, можно только поменять news_short, news_full, а main нельзя (по крайней мере у меня почему-то не получилось)...
Да и с моими познаниями в PHP (точнее с их отсутствием) я и поправить индекс.пхп не смог...
ПС. Может кто подскажет (пример напишет) что бы я по аналогии перекалбасил...
под такую конструкцию: категория: pervaya шаб: main2.tpl, vtoraya - main3.tpl...
Не в сети
coreldraw, я тормоз. действительно - ты же main.tpl меняешь.
Действительно попробуй указанное тобой решение, в ближайшее время добавлю также возможность подмены и main.tpl
Не в сети
Виталя ну ты на себя наговариваешь! Ты даже очень газ!
За то что проникся моей проблемкой спасибо!
А если б кто написал за меня эти строчки это было бы даже отдельная благодарность! Думаю не только от меня...
---------апдейтед-----------
сам разобрался. всё работает только пришлось закоментировать (или удалить) блок
// ===================================================================
// Make page output
// ===================================================================
$tpl -> template('main', tpl_site);
$tpl -> vars('main', $template);
if (!$SUPRESS_TEMPLATE_SHOW) {
echo $tpl -> show('main');
} else if (!$SUPRESS_MAINBLOCK_SHOW) {
echo $template['vars']['mainblock'];
}
Только мучат собмнения... Я какую-то фичу обрубил этим?
Изменено coreldraw (2008-11-24 16:21:57)
Не в сети
ну я млин маньяк-убивца...
ждём решений проблемса
Не в сети
vitaly, нужна помощь. Как грамотно в индексе написать?
Задача такая.
Нужны mainы.tpl для каждой категории
-Главная (main.tpl)
-Информация (main_info.tpl)
-Блоги (main_blog.tpl)
-Контакты (main_contact.tpl)
-Для всяких там регистраций, профайлов и проч. (main2.tpl)
Раньше делал как coreldraw в посте№7. Работало. Но насторожило
я бы очень не советовал использовать такой механизм - возможно из-за него перестанут работать некоторые плагины (к примеру, rss_export)
Интересно, если пострадает только rss, он мне на Х не нужен. Или, что то еще?
Изменено RocketBoy (2008-12-08 16:30:27)
Не в сети
не корректно работают обе функции вместе. сделал дизайн главной странички mainroot.tpl, в также 3 разных шаблона для новостей в категориях.
хотел изменить шаблон короткой новости на главной сайта, но столкнулся с тем, что шаблон news.short.tpl в корне папки с шаблоном, не отвечает за вывод
т.е. за вывод новостей на главной отвечает шаблоны с папки ncustom. или так и задумано?
Изменено graf (2009-01-17 21:25:12)
Не в сети
graf, так и задумано.
Шаблоны из папки ncustom отвечают за вывод конкретный новостей, относящихся к данным категориям. Т.е. этот шаб - свойство самой новости, а не отображаемой страницы.
Не в сети
можно увидеть пример вставки кода в index.php при нескольких шаблонах main.tpl?
для примера такое:
-Главная (main.tpl)
-Информация (main_info.tpl)
-Блоги (main_blog.tpl)
-Контакты (main_contact.tpl)
-Для всяких там регистраций, профайлов и проч. (main2.tpl)
-Статические страницы (main_static.tpl)
ато непонял логики формирования
Не в сети
У меня вот так сделано (все работает!)
// ===================================================================
// Make page output
// ===================================================================
if ( ($action == 'static') || ($action == 'profile') || ($year) || ($action == 'users') || ($action == 'activation') || ($action == 'lostpassword') || ($action == 'search') || ($action == 'registration') || ($action == 'plugin') || ($plugin == 'sitemap') || ($action == 'addnews')) {
$tpl -> template('main2', tpl_site);
$tpl -> vars('main2', $template);
echo $tpl -> show('main2');
}
else if (category=="info") {
$tpl -> template('main_info', tpl_site);
$tpl -> vars('main_info.tpl', $template);
echo $tpl -> show('main_info.tpl');
}
else if (category=="blogs") {
$tpl -> template('main_blog', tpl_site);
$tpl -> vars('main_blog', $template);
echo $tpl -> show('main_blog');
}
else if (category=="contact") {
$tpl -> template('main_contact', tpl_site);
$tpl -> vars('main_contact', $template);
echo $tpl -> show('main_contact');
}
else {
$tpl -> template('main', tpl_site);
$tpl -> vars('main', $template);
echo $tpl -> show('main');
}
Тут main2.tpl используется и Для всяких там регистраций, профайлов и проч
Не в сети
пока я так и сделал, но это временно. вот что виталий выше писал
coreldraw, я бы очень не советовал использовать такой механизм - возможно из-за него перестанут работать некоторые плагины (к примеру, rss_export). Но если есть желание поиграться и потестить - почему бы и нет
А чем тебе не подходит озвученный выше вариант?
Он делает тоже самое, только без необходимости вмешиваться в код двига, что, в свою очередь, позволяет безболезненно ставить новые версии.
Не в сети
RocketBoy, проблема в том, что при таком способе есть риск что-то сломать.
Если у тебя всё работает - значит ты просто правильно вставил блок.
Но вообще - это действительно временный костыль..
Не в сети
Ну я тоже надеюсь, что это костыль временный:)
Очень хочется, что бы в новом костыле, была та же гибкость, как и в способе который, временный (см. выше). Т.е. можно было поставить шаблон и к категориям (к любой) и к статической стр. (любой - при желании). А в админке это будет или правкой индекса, лично мне все равно.
Ждем костыль
пока я так и сделал
И у тебя все работает?
Не в сети
За помощ спасибо ROZARDу.
Если нужно задать для какой либо категории свой main.tpl, используем такой код:
между строками
// BEGIN: ** AREA FOR HANDY CORRECTIONS **
// END: ** AREA FOR HANDY CORRECTIONS **
вставляем
if (category==news)
{
$masterTemplateName = 'main_news';
}
else if (category==blog)
{
$masterTemplateName = 'main_blog';
}
else if (category==foto)
{
$masterTemplateName = 'main_foto';
}
else (category==video)
{
$masterTemplateName = 'main_video';
}
news, blog, foto, video - это альтнейм категорий, и каждой категории присваевается свой main.tpl
Изменено graf (2009-03-18 20:26:28)
Не в сети