Не работает switchtheme [РЕШЕНО]

Главные вкладки

Аватар пользователя Tibor_Ferenci Tibor_Ferenci 15 апреля 2016 в 14:02

Добрый день. Делаю версию для слаболвидящих. Не работает модуль switchtheme.
Переключение идет нормально, но при переходе по любой ссылке - обратно выбрасывает на стандартную тему. Кто нибудь с таким сталкивался? Помогите!

Комментарии

Аватар пользователя Tibor_Ferenci Tibor_Ferenci 15 апреля 2016 в 17:26

Нашел решение и немного его доработал. Собственно решение - написать свой модуль. Но там вылетала ошибка - немного поправил.

Перед установкой модуля отключаем кеширование для анонимных пользователей.

Итак, 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=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>

Одно только не разобрался. Как сделать, чтобы перебрасывало на ту же страницу при переключении версий, а не на главную.

Аватар пользователя Tibor_Ferenci Tibor_Ferenci 18 апреля 2016 в 15:20

Маленькая поправка. Если в каком-то блоке используется 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;
}
?>