Доброго дня всем.
Получил ПМ по поводу реализации на моем сайте переключения размера шрифта в шаблоне, рассказываю, как это реализовано.
1. Создается файл, например font-switcher.php
$fontstyle = "f-" . $default_font;
$cookie_prefix = "vx-";
//load font style
if (isset($_SESSION[$cookie_prefix. 'fontstyle'])) {
$fontstyle = $_SESSION[$cookie_prefix. 'fontstyle'];
} elseif (isset($_COOKIE[$cookie_prefix. 'fontstyle'])) {
$fontstyle = $_COOKIE[$cookie_prefix. 'fontstyle'];
}
$thisurl = $_SERVER['PHP_SELF'] . rebuildQueryString();
function rebuildQueryString() {
$ignores = array("fontstyle","widthstyle");
if (!empty($_SERVER['QUERY_STRING'])) {
$parts = explode("&", $_SERVER['QUERY_STRING']);
$newParts = array();
foreach ($parts as $val) {
$val_parts = explode("=", $val);
if (!in_array($val_parts[0], $ignores)) {
array_push($newParts, $val);
}
}
if (count($newParts) != 0) {
$qs = implode("&", $newParts);
} else {
return "?";
}
return "?" . $qs . "&"; // this is your new created query string
} else {
return "?";
}
}
?>
2. В шаблоне страницы page.tpl.php прописываем в части HEAD
$default_font = "default"; // smaller | default | larger
require($directory . "/font-switcher.php");
?>
в части BODY пишем
....
<!-- в нужном месте -->
<div id="font-switch-buttons">
<a href="<?php echo $thisurl; ?>fontstyle=f-larger" title="Increase size" class="large"><span class="button"> </span></a>
<a href="<?php echo $thisurl; ?>fontstyle=f-default" title="Default size" class="default"><span class="button"> </span></a>
<a href="<?php echo $thisurl; ?>fontstyle=f-smaller" title="Decrease size" class="small"><span class="button"> </span></a>
</div>
....
и наконец 3-е
в css файле определяем классы для шрифтов
font-size: 11px;
}
body.f-default {
font-size: 13px;
}
body.f-larger {
font-size: 15px;
}
понятно, что все остальные определения размеров шрифтов должны быть относительные.
По аналогии можно также определять ширину шаблона, да и сам шаблон.
Комментарии
Спасибо за мастер-класс!
Два предложения: 1) нельзя ли сделать неактивным текущий выбор размера. Если выбран, например, размер "большой", его пункт неактивен. Чтобы у юзера не было возможности повторных бессмысленных нажатий. С т.зр. "юзабилити" это правильнее.
2) сделать эту фичу модулем, а? Модуль предоставляет такой блок с переключателями.
Думаю, что дальнейшее развитие могут продолжить энтузиасты. Я к сожалению сейчас очень занят, и практически отошел от php. Но готов предоставить полностью весь код.
по поводу неактивной ссылки для текущего шрифта - решение на поверхности...
надо обрамить блок прорисовки этих ссылок логикой
if $defaultfont = "default" then
<span class="default button"> </span>
<?php else ?>
<a href="<?php echo $thisurl; ?>fontstyle=f-default" title="Default size" class="default"><span class="button"> </span></a>
<?php endif ?>
где-то так....
кстати, Админам сайта...
некоторые странности при работе.
Я зарегистрирован и залогинен.
жму на "ответить" - мне выдается ошибка - де я прикидываюсь другим (зарегистрированным) пользователем.
Также странности при работе каптча при тестировании _омпа_тный и вводе "кк" - говорит ошибка!!!, как впрочем и на другие подобные тесты
спасибо, действительно интересный материал...
А на счет ширины шаблона, и замены шаблона(ну там всего-лишь фоно хеадера меняется), реализовано в теме meta
Тема старая, но технологии очень интересные используются, например png фикс для IE
Хотя чем-то и плохо, что тема перегружена JS
Однако я бы хотел чтобы появился модуль, с возможностями описанными здесь и расширенный новыми возможностями...
(Лично мое мнение-использование JS - залог успеха модуля, т.к. изменения происходят без перезагрузки страницы)
Вот немцы какой-то подобный модуль написали - http://drupal.org/project/textsize
А я нашёл AJAX-модуль: [http://drupal.org/project/jquery_fontsizer jQuery FontSizer]. Не проверял модуль...
>А я нашёл AJAX-модуль: jQuery FontSizer. Не проверял модуль...
я проверил.... модуль действительно изменяет размер шрифта (больше-меньше), только зависит от jquery_cookie
Пробовал я этот модуль http://drupal.org/project/textsize, не понравился, покрайне мере в резиновых темах использовать его не стоит. Пока приходиться обходиться тегами , не удобно, но решения пока не нашел.
спасибо, полезно
Спасибо!