Добрый день. Делаю версию для слаболвидящих. Не работает модуль switchtheme.
Переключение идет нормально, но при переходе по любой ссылке - обратно выбрасывает на стандартную тему. Кто нибудь с таким сталкивался? Помогите!
Нашел решение и немного его доработал. Собственно решение - написать свой модуль. Но там вылетала ошибка - немного поправил.
Перед установкой модуля отключаем кеширование для анонимных пользователей.
Итак, 3 файла всего. Создаем папку mymodule
mymodule.info
name = mymodule
description = For working cache switchtheme.
core = 7.x version = 7.x-1.x-dev
mymodule.module
<?php function mymodule_custom_theme($return_single = TRUE) { drupal_add_js(drupal_get_path('module', 'mymodule').'/mymodule.js', 'file'); global $user;
$custom_theme = ""; if (isset($_GET['theme'])) { $custom_theme['get'] = $_GET['theme'];
} return
$custom_theme; } ?>
mymodule.js
function getCookie(c_name) { var i,x,y,ARRcookies=document.cookie.split(";"); for(i=0;i<ARRcookies.length;i++) {
x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
x=x.replace(/^\s+|\s+$/g,""); if(x==c_name) { return unescape(y); } } }
function setCookie(c_name,value,exdays) { var exdate=newDate();
exdate.setDate(exdate.getDate()+ exdays); var c_value=escape(value)+((exdays==null)?"":"; expires="+exdate.toUTCString());
document.cookie=c_name +"="+ c_value +";path=/"; }
function getUrlVars() { var vars =[], hash; var hashes = window.location.href.slice(window.location.href.indexOf('?')+1).split('&'); for(var i =0; i < hashes.length; i++) {
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]]= hash[1]; } return vars; }
var theme = getUrlVars()["theme"]; var k = getCookie('theme'); var hash = getUrlVars()["render"]; if(hash !='overlay'){ if(k ===undefined){setCookie('theme','minjust',365); theme ='minjust';} if(theme ===undefined){document.location.href=document.location+'?theme='+k;}else{setCookie('theme',theme,365);} }
И вуаля. Всё работает.
А чтобы сделать вместо выпадающего списка ссылку, создаем блок, выбираем PHP code или Full HTML и пишем:
<ahref="http://mysite.ru/?theme=garland">Версия для слабовидящих</a>
Одно только не разобрался. Как сделать, чтобы перебрасывало на ту же страницу при переключении версий, а не на главную.
Маленькая поправка. Если в каком-то блоке используется AJAX (в частности у меня была проблема с IMCE) то он начинает бесконечно добавлять название темы в адрес. Чтобы этого избежать и модуль отключался под админкой - переписал код модуля
<?php function mymodule_custom_theme($return_single = TRUE) { global $user; $count = "1"; if ($user->uid != $count) { drupal_add_js(drupal_get_path('module', 'mymodule').'/mymodule.js', 'file'); } global $user;
$custom_theme = ""; if (isset($_GET['theme'])) { $custom_theme['get'] = $_GET['theme']; } return $custom_theme; } ?>
Комментарии
Да, под админкой все работает как надо.
Нашел решение и немного его доработал. Собственно решение - написать свой модуль. Но там вылетала ошибка - немного поправил.
Перед установкой модуля отключаем кеширование для анонимных пользователей.
Итак, 3 файла всего. Создаем папку mymodule
mymodule.info
description = For working cache switchtheme.
core = 7.x
version = 7.x-1.x-dev
mymodule.module
<?php
function mymodule_custom_theme($return_single = TRUE) {
drupal_add_js(drupal_get_path('module', 'mymodule').'/mymodule.js', 'file');
global $user; $custom_theme = "";
if (isset($_GET['theme'])) {
$custom_theme['get'] = $_GET['theme'];
}
$custom_theme;return
}
?>
mymodule.js
{
var i,x,y,ARRcookies=document.cookie.split(";");
for (i=0;i<ARRcookies.length;i++)
{
x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
x=x.replace(/^\s+|\s+$/g,"");
if (x==c_name)
{
return unescape(y);
}
}
}
function setCookie(c_name,value,exdays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
document.cookie=c_name + "=" + c_value + ";path=/";
}
function getUrlVars()
{
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++)
{
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
return vars;
}
var theme = getUrlVars()["theme"];
var k = getCookie('theme');
var hash = getUrlVars()["render"];
if (hash != 'overlay') {
if (k === undefined) {setCookie('theme','minjust',365); theme = 'minjust';}
if (theme === undefined) {document.location.href=document.location+'?theme='+k;} else {setCookie('theme',theme,365);}
}
И вуаля. Всё работает.
А чтобы сделать вместо выпадающего списка ссылку, создаем блок, выбираем PHP code или Full HTML и пишем:
<a href="http://mysite.ru/?theme=garland">Версия для слабовидящих</a>
Одно только не разобрался. Как сделать, чтобы перебрасывало на ту же страницу при переключении версий, а не на главную.
Маленькая поправка. Если в каком-то блоке используется AJAX (в частности у меня была проблема с IMCE) то он начинает бесконечно добавлять название темы в адрес. Чтобы этого избежать и модуль отключался под админкой - переписал код модуля
<?php
function mymodule_custom_theme($return_single = TRUE) {
global $user;
$count = "1";
if ($user->uid != $count) {
drupal_add_js(drupal_get_path('module', 'mymodule').'/mymodule.js', 'file');
}
global $user; $custom_theme = "";
if (isset($_GET['theme'])) {
$custom_theme['get'] = $_GET['theme'];
}
return $custom_theme;
}
?>