Ну, вот вам пример макета сайта, который выводит на главной заставку или основное содержание, в зависимости от того, как пользователь попал на главную страницу.
Обратите внимание, заставка выводится только тогда когда пользователь на главной, и попал туда по ссылки с другого сайта.
А вот блок с контентом главной страницы выводится _всегда_, но в случае если пользователю надо показать заставку, этот блок выводится скрытым через стили. Это сделано для того, чтобы поисковые роботы могли проиндексировать настоящее содержимое главной, а не только заставку. В противом случае (в зависимости от содержания заставки) можно получить, в лучшем случае, проблемы с индексацией сайта, а в худшем - обвинение в клоакинге со стороны поисковика.
А теперь сам код. Он достаточно подробно комментирован, так что я надеюсь, вы разберетесь.
<?php
// запоминаем в переменную id узла структуры главной страницы
// сюда надо подставить тот id который у вас на сайте,
// цифра 1 тут просто для примера.
$root_structure_id = 1;
// если мы находимся на главной
if (CURRENT_STRUCTURE_ID == $root_structure_id)
{
// установим флаг отображения заставки
$show_splash = true;
// проверим, существует ли referrer (если его не существует, значит посетитель вбил адрес сайта руками, или зашел из закладки и значит заставку надо показывать)
if (isset($_SERVER['HTTP_REFERER']))
{
//сохраним referrer в переменную
$referrer_url = $_SERVER['HTTP_REFERER'];
// создадим экземпляр класса site
$site = &singleton('site');
// получим массив всех доменов для текущего сайта
$resource = $site->GetAllAlias(CURRENT_SITE);
// "пробежимся" по массиву
while ($row = mysql_fetch_assoc($resource))
{
// защитимся от звездочек в доменах (от записей вида *.site.ru в доменах сайта)
$domain = $site->ReplaceMask($row['alias_name']);
// проверим есть ли в строке referrer название рассматриваемого домена
if (stristr($referrer_url, $domain) !== false)
{
// если есть, то значит переход на главную был с внутренней страницы сайта,
// и значит заставку показывать не надо
$show_splash = false;
// если мы уже нашли наш домен в referrer то остальные домены перебирать смысла нет
break;
}
}
}
// для главной страницы, отдадим заголовок, запрещающий кеширование.
// иначе у пользователя в браузере закешируется либо версия с заставкой, либо версия без нее,
// и переключение происходить не будет
header('Expires: ' . date("r", time() - 600), true);
} else
// если мы не на главной странице сайта, то заставку выводить не надо.
$show_splash = false;
// настроим стиль для отображения блока основным контентом.
if ($show_splash)
{
// для случая когда надо отображать заставку
$content_display = 'none';
} else
{
// и для случая когда не надо отображать заставку
$content_display = 'block';
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
<head>
...
</head>
<body>
<? // если мы находимся на главной старанице, то нужно вывести блок заставки
if (CURRENT_STRUCTURE_ID == $root_structure_id && $show_splash) { ?>
<div id="splash">Это заставка. Сюда нужно скопировать код из раздела body документа с заставкой.</div>
<?}?>
<!-- блок с контентом выводим всегда! при отображении заставки он будет невидимым в браузере, за счет стиля display:none -->
<div id="content" style="display: <?=$content_display?>;">
<!-- а здесь будет обычный макет для сайта, который у вас и был для всех страниц. НАЧАЛО -->
<div id="header">Шапка сайта</div>
<div id="main">
Это основной контент
<?php
$kernel->show_current_template();
?>
</div>
<div id="footer">Подвал сайта</div>
<!-- КОНЕЦ. -->
</div>
</body>
</html>