Возможность задания шаблона только для главной страницы (полная версия)

+32
2.14K
Часто бывает так, что на сайтах есть шаблон для главной страницы и отдельно для всех внутренних.
Я реализовал возможность задавания шаблона для главной страницы отдельно.

Иллюстрация

Т.е. теперь для главной страницы используется шаблон frontpage, а для всех внутренних — _default_

Это очень удобно я считаю.

В файле admin/applets/config.php ищем строчку
  1. <tr>
  2. <td>
  3. <strong>Компонент на главной странице:</strong>
  4. </td>
  5. <td width="350" valign="top">
  6. <select name="homecom" style="width:358px">
  7. <option value="" <?php if(!$_CFG['homecom']){ ?>selected="selected"<?php } ?>>-- Без компонента, только модули --</option>
  8. <?php echo $inCore->getListItems('cms_components', $_CFG['homecom'], 'title', 'ASC', 'internal=0', 'link'); ?>
  9. </select>
  10. </td>
  11. </tr>

сразу после нее вставляем:
  1. <tr>
  2. <td>
  3. <strong>Шаблон главной страницы:</strong> <br />
  4. <span class="hinttext">Можно выбрать шаблон для отображения главной страницы</span> </td>
  5. <td valign="top">
  6. <select name="front_template" id="template" style="width:100%">
  7. <option value="0" <?php if (@$_CFG['front_template']==0 || !$_CFG['front_template']) { echo 'selected'; } ?>>По-умолчанию</option>
  8. <?php
  9. if (isset($_CFG['front_template'])){
  10. $inCore->templatesList($_CFG['front_template']);
  11. } else {
  12. $inCore->templatesList(-1);
  13. }
  14. ?>
  15. </select>
  16. </tr>
  17.  
  18.  
в этом же файле после строки $newCFG['template'] = $inCore->request('template', 'str');
сразу вставляем: $newCFG['front_template'] = $inCore->request('front_template', 'str');

В файле cms.php функцию переписываем след. образом:
  1.  
  2. private function __construct($install_mode=false) {
  3. global $_CFG;
  4.  
  5. if ($install_mode){ return; }
  6.  
  7. //подключим базу и конфиг
  8. $this->loadClass('db');
  9. $this->loadClass('config');
  10.  
  11. $inConf = cmsConfig::getInstance();
  12.  
  13. //загрузим структуру меню в память
  14. $this->loadMenuStruct();
  15.  
  16.  
  17. //получим URI
  18. $this->uri = $this->detectURI();
  19.  
  20. //определим компонент
  21. $this->component = $this->detectComponent();
  22.  
  23.  
  24. //проверяем был ли переопределен шаблон через сессию
  25. //например, из модуля "выбор шаблона"
  26. if (isset($_SESSION['template'])) { $inConf->template = $_SESSION['template']; }
  27.  
  28. //проверяем шаблон для главной страницы
  29. if ($this->menuId() == 1 && $_CFG['front_template']) {
  30. $inConf->template = $_CFG['front_template'];
  31. }
  32.  
  33. define('TEMPLATE', $inConf->template);
  34. define('TEMPLATE_DIR', PATH.'/templates/'.$inConf->template.'/');
  35. define('DEFAULT_TEMPLATE_DIR', PATH.'/templates/_default_/');
  36.  
  37.  
  38. }
  39.  
  40.  
0
reload reload 13 лет назад #
Огромнейший плюс, спасибо за доработку!
0
Alexneva Alexneva 13 лет назад #
Плюсик Вам! ))) Спасибо. Думаю, многим будет интересна смена шаблона в зависимости от раздела - статьи - шаблон1, каталог - шаблон2, блоги - шаблон3...Не было таких мыслей?
0
vicoder vicoder 13 лет назад #
А это делается же через меню
+1
RooKee RooKee 13 лет назад #
о! Надо так же мобильную версию реализовать ) ещё одно условие добавить и всё.
+1
venom_ venom_ 13 лет назад #
Зачем столько строк кода и гемора, если можно все решить изменением нескольких строк в файле index.php :
Код PHP:
    //Проверяем нужно ли показать входную страницу (splash)
	if($inCore->isSplash()){
        //Показываем входную страницу
		if (!$inPage->showSplash()){
            //Если шаблон входной страницы не был найден,
            //показываем обычный шаблон сайта
            $inPage->includeTemplateFile('/template1.php');//showTemplate();
        }
	} else {
        //показываем шаблон сайта
        if( $_SERVER['REQUEST_URI'] == '/' ){
		$inPage->showTemplate();}
		else { $inPage->includeTemplateFile('/template1.php'); }
	}
0
venom_ venom_ 13 лет назад #
Соответственно создается еще один файл шаблона template1.php.
Но данная тема применима лишь к одному и тому же шаблону. Например если главная страница должна иметь другую структуру, чем внутряки.
Я применил это тут
0
13 лет назад #
Попробовал сделать на своем сайте smile
Получилось всё с первого раза :)
Спасибо огромное!!!
0
Sam Sam 13 лет назад #
Давно искал это, СПАСИБО!
0
vicoder vicoder 13 лет назад #
Гут)
0
Роман Роман 13 лет назад #
Не бейте сильно. Но, кажется у вас <td> не закрыто:
Код PHP:
<tr>
	<td>
		<strong>Шаблон главной страницы:</strong> <br />
		<span class="hinttext">Можно выбрать шаблон для отображения главной страницы</span>					</td>
<td valign="top">
                        <select name="front_template" id="template" style="width:100%">
                            <option value="0" <?php if (@$_CFG['front_template']==0 || !$_CFG['front_template']) { echo 'selected'; } ?>>По-умолчанию</option>
                            <?php
                                if (isset($_CFG['front_template'])){
                                    $inCore->templatesList($_CFG['front_template']);
                                } else {
                                    $inCore->templatesList(-1);
                                }
                            ?>
                        </select>
                        </td>
</tr>
0
xeqtr xeqtr 12 лет назад #
Попробовал в 1.9 не работает, или что то делаю не так?
0
xeqtr xeqtr 12 лет назад #
Хотя нет в 1.9 работает, толкьо началась пробелма после устанкои хака, теперь все материалы сайта отдают 404 ошибку в чём может быть дело?
0
nikitka nikitka 12 лет назад #
На 1.9 работает..спасибо! Кто выявил баги..пожалуйста отпишитесь в этой теме!

Еще от автора

связка ishop и программа Покупка на Яндекс-маркете (2)
продолжение http://instantcms.ru/blogs/uluchshenija/svjazka-ishop-i-programa-pokupka-na-jandeks-markete.htmlпервой части
связка ishop и программа Покупка на Яндекс-маркете
Яндекс маркет позволяет заказывать товары непосредственно с яндекса - удобная штука.
Сортировка дополнительных картинок в шопе drag'n'drop
Сделал возможность перемещения дополнительных картинок в шопе: т.е. можно мышкой взять и перетащить картинку вверх-вниз, как требуется
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.