Мой любимый блог

Моя работа над WordPress, Joomla, LiveStreet, SEO. Мои разработки и многое другое о жизни …

Апр
05

Страница приветствия. Joomla 1.5

Рубрика: joomla, работа. Автор job

Давненько не писал... Работы валом, да и сложных задач не было, о которых хотелось бы поделиться. Но вот приплыла верстка под 1.5 со страницей приветствия. Начинаю яндексить...

Скажу честно, одно говно. Я даже удивился, что за все время развития Joomla никому не пришло в голову правильного решения. Нет, нашел один сайтик кто мыслил как я, но решения поставленной задачи так и не нашел. После чего он отговорил заказчика от идеи страницы приветствия. А задача проста — при первом входе вывести страницу приветствие. Много пишут про взаимодействие index.html и index.. Т.е. при заходе на http://сайт.ру/ мы попадаем на index.html, а там переходим на index.. Ну что ж, алгоритм прост, но разумность его вызывает сомнения. Во первых прощай ЧПУ. Что не есть гуд. И где гарантия что случайным образом опять не попаду на index.html. Сразу приходит в голову работа с сессиями.

Вот тут оказывается никто не копался, а если и копался то быстро сдался. Я уже и сам начал убеждать заказчика, что это лишнее телодвижение, а тот в никакую. Хацю. Мое желание для себя решить поставленную задачу пересилило. Начинаем PHP кодинг.

Нашел мануальчик Joomla класс JSession. Изучение изложенного ничего не дало. Ползем в БД. Судя по таблице _session данные сессии time, data перезаписываются при каждом обновлении страницы. Понимаю, что придется влазить в ядро и делать хак для добавление еще одного параметра (дата создания сессии) в таблицу. Подобное я когда то проделывал с Joomla 1.0 для вывода счетчика (сессий, посетителей, поисковиков) в админке. Кстати о чем также хотел написать, да времени не было. А сейчас уже и не помню что там делал ))). Ой как не люблю эти вещи, надо писать карту изменений и при каждом обновлении добавлять хаки. Ну что ж выбора нет лезем в ядро.

В процессе изучения библиотеки session.php нарыл что время жизни, т.е. время создания и последнего обновления сессии записывается в md5 параметра date. Это очень хорошо! Будет универсальный скрипт и без хаков. Оказалось все просто, странно, что этого не нашел мне яндекс
Поехали:

1
2
3
4
$session =& JFactory::getSession();
$time_start = $session->get('session.timer.start');
$time_now = $session->get('session.timer.now');
if ( $time_now == $time_start ) { $start = true; } else { $start = false; }

Проще говоря. Если создание и обновление сессии идентичны присваиваем переменной истину иначе ложь. Ну а дальше можно с этим параметром делать все что душе угодно.

Для реализации страницы приветствия, этот скрипт можно поместить в index.php шаблона сайта. Где нибудь после

1
2
...
defined( '_JEXEC' ) or die( 'Restricted access' );

и вызвать проверку условия

1
2
3
4
5
6
7
...
<body>
<?php if ( $start == false ) { ?>
... основной шаблон ...
 <?php } else { include_once('start.php'); } ?>
</body>
...

start.php вкладываем в корень шаблона и прописываем там страницу приветствия.

Ну и еще в заключении расскажу почему я применил несколько проверок условий. Во первых создание переменной $start дает нам возможность использовать его в нескольких местах. Плюс ко всему к этому условию можно добавить еще одно в виде проверки посетителя. Т.е. Если пришел поисковой робот, то ему вообще не стоит показывать страницу приветствия. Или же если вход на сайт осуществляется с поисковой системы. Что то-же по сути логично. В итоге я сделал страницу приветствия только для прямых заходов.

Пользуйтесь на здоровье...

Popularity: 58% [?]

Google Bookmarks Linkstore Myscoop Ru-marks Webmarks Ruspace Kli.kz Web-zakladka Reddit delicious Ma.gnolia Technorati Yahoo My Web News2.ru БобрДобр.ru Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong
  1. bilk Пишет:

    Напиши пожалуйста как делал проверку посетителя.

  2. job Пишет:

    что значит проверку посетителя? Описано же, что сессия.

  3. bilk Пишет:

    Еще одно условие в виде проверки поситителя, запретить показ страницы приветствия поисковому роботу и когда на сайт заходят по ссылке из поисковика.

  4. Павел Пишет:

    Выложи пожалуйста исходник, что то у меня ни чего не получается.

  5. job Пишет:

    А в чем проблема идентифицировать бота и сделать еще одну проверку false?

    1
    
    $_SERVER['HTTP_USER_AGENT']

    ну и в паутине нарыть как представляются боты

    а дальше дело техники. Вот Яшин хелп

    Исходников нету, все делалось на хостинге заказчика. Что не получается, говорите.

  6. job Пишет:

    Кстати когда то на Joomla 1.0 в админку встраивал инфу по ботам.

    кусок кода идентификации:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    if (stristr($_SERVER['HTTP_USER_AGENT'], 'Yandex')){ $slibot='Yandex';}
    elseif (stristr($_SERVER['HTTP_USER_AGENT'], 'StackRambler')){$slibot='Rambler';}
    elseif (stristr($_SERVER['HTTP_USER_AGENT'], 'msnbot')){$slibot='msnbot/1.0';}
    elseif (stristr($_SERVER['HTTP_USER_AGENT'], 'stack') ) {$slibot='Rambler';}
    elseif (stristr($_SERVER['HTTP_USER_AGENT'], 'rambler') ) {$slibot='Rambler 2';}
    elseif (stristr($_SERVER['HTTP_USER_AGENT'], 'ia_archiver')){$slibot='Alexa search engine';}
    elseif (stristr($_SERVER['HTTP_USER_AGENT'], 'Googlebot')){$slibot='Google';}
    elseif (stristr($_SERVER['HTTP_USER_AGENT'], 'google') ) {$slibot='Google 2';}
    elseif (stristr($_SERVER['HTTP_USER_AGENT'], 'scooter')){$slibot='AltaVista';}
    elseif (stristr($_SERVER['HTTP_USER_AGENT'], 'lycos')){$slibot='Lycos';}
    elseif (stristr($_SERVER['HTTP_USER_AGENT'], 'WebAlta')){$slibot='WebAlta';}
    elseif (stristr($_SERVER['HTTP_USER_AGENT'], 'yahoo')){$slibot='Yahoo';}
    elseif (stristr($_SERVER['HTTP_USER_AGENT'], 'aport') ) {$slibot='Aport';}
    else
    {
    $slibot=null;
    }
  7. job Пишет:

    И извиняюсь за несвоевременные ответы. Давно вышел из разряда заработка на блогинге и фрилансе. Все вижу, но не хватает времени оперативно отвечать.

  8. Andrey Пишет:

    Пожалуйста покажите файлы с исходниками, я столкнулся с такой проблемой, весь инет перелопатил ничего подобного не нашел, ваша статься на вес золота в данный момент!

  9. job Пишет:

    Нету времени собирать исходники.

    Попробую разжевать резину.

    1. Открываем файл шаблона index.php

    после проверки прямого доступа

    1
    
    defined( '_JEXEC' ) or die( 'Restricted access' );

    вставляем скрипт идентификации

    1
    2
    3
    4
    
    $session =& JFactory::getSession();
    $time_start = $session->get('session.timer.start');
    $time_now = $session->get('session.timer.now');
    if ( $time_now == $time_start ) { $start = true; } else { $start = false; }

    2. после тега body вставляем условие проверки

    1
    
    <?php if ( $start == false ) { ?>

    ....... тут идет основной шаблон

    3. перед закрывающим тегом /body вставляем окончание условия

    1
    
    <?php } else { include_once('start.php'); } ?>

    4. В корне шаблона там где лежит файл index.php создает файл start.php в котором рисуем страничку приветствия.

    Ну как то так. Вроде бы и действий не много, не понимаю в чем проблема.

    А ну да. не путаем Index.php в корне сайта с индексом шаблона

    index.php шаблона находится /templates/......./index.php

    Туда же если что ложить и start.php

    Если что кричите. Постараюсь собрать архив, если не поленюсь. ))))

Оставить комментарий