Кроссбраузерность или смена "шаблона" на
Posted: Fri May 23, 2008 10:49 am
Почему шаблон в кавычках? Потому что это не совсем смена шаблона, а скорее тела ХТМЛ...
Все наверное знают браузер Internet Exlporer (далее Осел) от горячо любимой всеми Майкрософт. Миллионы верстальщиков по всему миру заставляют икать Билли при верстке т.н. кроссбраузерного шаблона ибо для Осла приходится писать либо отдельный стиль-файл либо вштыривать его явой либо грамотно встраивать т.н. хаки.
Нам повезло, у нас есть супер КМС.
Итак проблемы кроссбраузерности или каждому браузеру по шаблону (заодно узнаем что такое ПОльзовательские теги и что из них можно вытянуть.
Создаем пользовательский тег (Расширения->Пользовательские теги) проверки браузера (но он уже по моему есть в пакете)
Грустное использование, т.к. строка очень большая (http://www.php.su/articles/?cat=vars&page=015) а согласно задаче мы должны выяснить более-менее точное название браузера.
Пошарив в Гуглях модифицируем:
Я намеренно не стал удалять "лишний код" т.к. включив мозг и Смарти из него можно вытащить еще кучу нужных вещей (операционка, клиенсткий АйПи, версии ОС и браузеров)
Вызов его соответственно будет {user_agent}, тогда мы можем сделать в шаблоне такую вещь
Кстати никто не запрещает выводить полностью разные блоки html те полностью от доктайпа и до конца.
Выводы:
Мы можем писать различные хтмл шаблоны валидные и без хаков и оптимальные для браузера пользователя. Например для Осла выводить табличный диз, а для Файрфокса дивовый, для Осла выводить скрипт "прозрачных png" а для файрфокса выводить скрипт Аккордион, выводить упрощенные и оптимальные по разрешению хтмлки для владельцев КПК и т.д. и т.п.
Важные замечания
1. У многих возникнет соблазн накачать поисковики выдачей контента не соответствующего тому что выдается пользователям. Крайне не рекомендуется этого делать. Забанят.
2. Возможно лучше будет выводить различные шаблоны на лету, но я чего то никак не могу найти как менять шаблон по умолчанию на лету.
Буду рад если кому то пригдится сей материал...
Если кто знает скажите как менять дефолтный шаблон на лету???
Все наверное знают браузер Internet Exlporer (далее Осел) от горячо любимой всеми Майкрософт. Миллионы верстальщиков по всему миру заставляют икать Билли при верстке т.н. кроссбраузерного шаблона ибо для Осла приходится писать либо отдельный стиль-файл либо вштыривать его явой либо грамотно встраивать т.н. хаки.
Нам повезло, у нас есть супер КМС.
Итак проблемы кроссбраузерности или каждому браузеру по шаблону (заодно узнаем что такое ПОльзовательские теги и что из них можно вытянуть.
Создаем пользовательский тег (Расширения->Пользовательские теги) проверки браузера (но он уже по моему есть в пакете)
Code: Select all
echo $_SERVER["HTTP_USER_AGENT"];
Пошарив в Гуглях модифицируем:
Code: Select all
////////////////////////////////////////////////////////////////
// Система учёта посещаемости сайта - PowerCounter //
// 2003-2004 (C) IT-студия SoftTime (http://www.softtime.ru) //
// Симдянов И.В. (simdyanov@softtime.ru) //
// Кузнецов М.В. (kuznetsov@softtime.ru) //
// Голышев С.В. (softtime@softtime.ru) //
////////////////////////////////////////////////////////////////
// Формируем строчку с ip
$obtip = 0;
if($obtip == 0) $ip = $_SERVER['REMOTE_ADDR']; // По умолчанию
if($obtip == 1) $ip = urldecode(getenv(HTTP_CLIENTIP)); // www.nodex.ru
// Если подсеть доступна, добавляем её через слеш
$forward = getenv(HTTP_X_FORWARDED_FOR);
if (!empty($forward) && ($forward != $_SERVER['REMOTE_ADDR'])) $ip = $ip."/".$forward;
// Это строчка с реферером - URL страницы, с которой посетитель пришёл на
// сайт
$reff = urldecode($_SERVER["HTTP_REFERER"]);
// Определяем строку USER_AGENT
$useragent = $_SERVER['HTTP_USER_AGENT'];
$browser = 'none';
// Выясняем браузер
if(strpos($useragent, "Mozilla") !== false) $browser = 'Mozilla'; //если нижнее не выполнится то останется это
if(strpos($useragent, "MSIE") !== false) $browser = 'msie';
if(strpos($useragent, "Opera") !== false) $browser = 'opera';
if(strpos($useragent, "Netscape")!== false) $browser = 'netscape';
if(strpos($useragent, "Firefox") !== false) $browser = 'firefox';
// Выясняем операционную систему
$os = 'none';
if(strpos($useragent, "Win") !== false) $os = 'windows';
if(strpos($useragent, "Linux") !== false
|| strpos($useragent, "Lynx") !== false
|| strpos($useragent, "Unix") !== false) $os = 'unix';
if(strpos($useragent, "Macintosh")!== false) $os = 'macintosh';
// Выясняем принадлежность к поисковым роботам
if(substr($useragent, 0, 12) == "StackRambler") $os = 'robot_rambler';
if(substr($useragent, 0, 9) == "Googlebot") $os = 'robot_google';
if(substr($useragent, 0, 6) == "Yandex") $os = 'robot_yandex';
if(substr($useragent, 0, 5) == "Aport") $os = 'robot_aport';
$search = 'none';
// Выясняем принадлежность к поисковым системам
if(strpos($reff,"yandex")) $search = 'yandex';
if(strpos($reff,"rambler")) $search = 'rambler';
if(strpos($reff,"google")) $search = 'google';
if(strpos($reff,"aport")) $search = 'aport';
if(strpos($reff,$_SERVER["SERVER_NAME"])) $search = 'own_site';
echo $browser;
Вызов его соответственно будет {user_agent}, тогда мы можем сделать в шаблоне такую вещь
Code: Select all
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<__html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
<head>
<title>{title}</title>
.....
</head>
{if $user_agent == 'msie'}
</__body>
Привет любителям Ослов!
<__body>
{elseif $user_agent == 'оpera'}
</__body>
Привет любителям Оперы!
<__body>
{else}
</__body>
Шифруете своего навигатора? Ну и получите таблички!
<__body>
{/if}
</__html>
Выводы:
Мы можем писать различные хтмл шаблоны валидные и без хаков и оптимальные для браузера пользователя. Например для Осла выводить табличный диз, а для Файрфокса дивовый, для Осла выводить скрипт "прозрачных png" а для файрфокса выводить скрипт Аккордион, выводить упрощенные и оптимальные по разрешению хтмлки для владельцев КПК и т.д. и т.п.
Важные замечания
1. У многих возникнет соблазн накачать поисковики выдачей контента не соответствующего тому что выдается пользователям. Крайне не рекомендуется этого делать. Забанят.
2. Возможно лучше будет выводить различные шаблоны на лету, но я чего то никак не могу найти как менять шаблон по умолчанию на лету.
Буду рад если кому то пригдится сей материал...
Если кто знает скажите как менять дефолтный шаблон на лету???