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

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



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

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

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

сразу после нее вставляем:
Код 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>
				</tr>

в этом же файле после строки $newCFG['template'] = $inCore->request('template', 'str');
сразу вставляем: $newCFG['front_template'] = $inCore->request('front_template', 'str');

В файле cms.php функцию переписываем след. образом:
Код PHP:
    private function __construct($install_mode=false) {
        global $_CFG;

        if ($install_mode){ return; }

        //подключим базу и конфиг
        $this->loadClass('db');
        $this->loadClass('config');

        $inConf = cmsConfig::getInstance();

        //загрузим структуру меню в память
        $this->loadMenuStruct();


        //получим URI
        $this->uri = $this->detectURI();

        //определим компонент
        $this->component = $this->detectComponent();


        //проверяем был ли переопределен шаблон через сессию
        //например, из модуля "выбор шаблона"
        if (isset($_SESSION['template'])) { $inConf->template = $_SESSION['template']; }

        //проверяем шаблон для главной страницы
        if ($this->menuId() == 1 && $_CFG['front_template']) {
           $inConf->template = $_CFG['front_template'];
        }

        define('TEMPLATE', $inConf->template);
        define('TEMPLATE_DIR', PATH.'/templates/'.$inConf->template.'/');
        define('DEFAULT_TEMPLATE_DIR', PATH.'/templates/_default_/');


    }

Возможность задания шаблона только для главной страницы | Быстрое удаление рубрик и товаров в InstantShop
Комментарии (13)
reload 12 мая 2011 в 10:53 0
Огромнейший плюс, спасибо за доработку!
Alexneva 12 мая 2011 в 13:23 0
Плюсик Вам! ))) Спасибо. Думаю, многим будет интересна смена шаблона в зависимости от раздела - статьи - шаблон1, каталог - шаблон2, блоги - шаблон3...Не было таких мыслей?
vicoder 12 мая 2011 в 13:30 0
А это делается же через меню
RooKee 12 мая 2011 в 15:20 +1
о! Надо так же мобильную версию реализовать )  ещё одно условие добавить и всё.
venom_ 15 мая 2011 в 12:54 +1
Зачем столько строк кода и гемора, если можно все решить изменением нескольких строк в файле 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'); }
	}
venom_ 15 мая 2011 в 12:57 0
Соответственно создается еще один файл шаблона template1.php.
Но данная тема применима лишь к одному и тому же шаблону. Например если главная страница должна иметь другую структуру, чем внутряки.
Я применил это тут
0 20 мая 2011 в 10:28 0
Попробовал сделать на своем сайте smile
Получилось всё с первого раза :)
Спасибо огромное!!!
Sam 27 июня 2011 в 15:55 0
Давно искал это, СПАСИБО!
vicoder 28 июня 2011 в 09:02 0
Гут)
Роман 15 августа 2011 в 18:30 0
Не бейте сильно. Но, кажется у вас <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>
xeqtr 9 марта 2012 в 14:12 0
Попробовал в 1.9 не работает, или что то делаю не так?
xeqtr 9 марта 2012 в 14:17 0
Хотя нет в 1.9 работает, толкьо началась пробелма после устанкои хака, теперь все материалы сайта отдают 404 ошибку в чём может быть дело?
͡﴾͡๏̯͡๏﴿ 2 июля 2012 в 00:19 0
На 1.9 работает..спасибо! Кто выявил баги..пожалуйста отпишитесь в этой теме!