Заказали сделать для сайта Landing page. До этого вообще не знал что это такое. В двух словах, когда пользователь заходит с чужого сайта необходимо, чтобы вместо главной, открывалась другая страница, а когда заходит напрямую по ссылке, то основная главная.
Есть, конечно, для этого дела модуль. Но он мне показался слишком уж навороченным для простой в моем случае задачи, да к тому же у меня с небольшими заморочками ситуация, поэтому решил сделать своими руками. Чувствую, что мой вариант решения идеалогически не совсем верный. Но раз работает, то имеет право на жизнь.
Создаем модуль, в котором у нас будет всего лишь одна функция. Точнее хук nodeapi.
function alex_landing_page_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) { switch ($op) { case 'view': if (!empty($_SESSION['alex_referrer'])) { $_SESSION['alex_referrer'] = ''; break; } if (!empty($_SERVER['HTTP_REFERER'])) { $referrer = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST); $_SESSION['alex_referrer'] = $referrer; if ($_SERVER['SERVER_NAME'] != $referrer) { //drupal_goto('landing_page1'); $node = node_prepare(node_load(50)); drupal_set_title($node->title); } } break; } }
Немного поясню код. Понятно, что мы проверяем есть ли внешний реферер. И если такой есть, то подменяем любую текущую ноду ($node) на нужную нам. В данном случае у меня страница, на которую надо перенаправить пользователя имеет nid=50. Сессии в данном примере в принципе не нужны. В сессию я запихнул переменную 'alex_referrer' для случая, если вместо подмены ноды просто делать редирект функцией drupal_goto. Вот тогда, чтобы не зациклилось, понадобятся строки кода с сессиями. Но мне необходимо было, чтобы в адресной строке браузера была главная страница.
Поэтому никакого drupal_goto. А сессии, нам могут понадобиться дальше.
В большинстве случаев Landing page будет иметь дизайн отличающийся от общего дизайна сайта. Во всяком случае так было в моем случае. Поэтому для этой страницы необходим свой шаблон страницы. Можно, конечно создать в своей теме файл с названием page-node-50.tpl.php и там сверстать страницу. И она будет срабатывать при открытии нашей ноды (напомню, что 50 - это nid нашей Landing page). Но вот только при том приеме, что я использовал выше (подмена ноды вместо drupal_goto) данный шаблон не будет задействован, т.к. друпал будет думать, что текущая страница - это та, КОТОРУЮ мы подменяем, а не которой подменяем. Поэтому придется еще дописать немного кода в файле темы template.php.
function phptemplate_preprocess_page(&$vars) { if (!empty($_SESSION['alex_referrer'])) { $vars['template_files'][] = 'page-node-50'; } }
Т.е., если мы установили в хуке nodeapi переменную сессии, то значит на сайт вошли с другого сайта и в этой функции задействуем шаблон для Landing page.
Повторюсь, что чувствую, что нагородил огород, наверняка можно проще сделать, но мне в голову другого варианта не пришло.
Отправить комментарий