Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Смена файла CSS нажатием кнопки в Joomla 3.4.1 (https://javascript.ru/forum/dom-window/56692-smena-fajjla-css-nazhatiem-knopki-v-joomla-3-4-1-a.html)

mixagame 29.06.2015 15:05

Смена файла CSS нажатием кнопки в Joomla 3.4.1
 
Всем добрый день! Делаю сайт на Joomla 3.4.1. Хочу сделать переключатель дизайна сайта, т.е., чтобы при нажатии на ссылку, дизайн поменялся, еще раз - обратно. И так, чтобы при переходе на другую страницу дизайн сохранился тот, который был выбран в последний раз. В природе существуют такие плагины? Извиняюсь заранее, если эта тема уже была, просто пальцем ткните.

ruslan_mart 29.06.2015 15:23

Примерно так.

change_theme.php:

<?php
$style = $_GET['style'];
setcookie('style', $style, time() + 60 * 60 * 24 * 365, '/');
header('Location: /');
?>


В head на всех страницах:
<link href="/temp/css/<?=$_COOKIE['style'] ?: 'stand'?>.css" rel="stylesheet" type="text/css">


Для применения:
<a href="/.../change_theme.php?style=stand">Стандартная тема</a>
<a href="/.../change_theme.php?style=red">Красная тема</a>
<a href="/.../change_theme.php?style=gold">Золотая тема</a>


Ну и конечно же, сами файлы хранить в таком виде: stand.css, red.css.

mixagame 29.06.2015 15:59

Хм, на взгляд довольно просто, но все таки пара вопросов есть.
1. По сути всё это помещаешь в index.php?
2. 'style' - подходящее слово? Обычно все шаблоны располагаются в папке templates.

Vlasenko Fedor 29.06.2015 16:05

Ruslan_xDD,
$_GET['style']; а если не определено? а где фильтрация входящих параметров?
Приведу пример не только подключения стилей, а и использования другого шаблона
пишем простенький системный плагин и на событие onAfterInitialise вешаем такой код:
Код
$input = JFactory::getApplication()->input;
$template = $input->getCmd( 'template', '' );
if ( $template !== '' ) {
	$input->set( 'template', $template );
	$conf = JFactory::getConfig();
	setcookie( 'templateChanged', $template, time() + 8640000, $conf->get( 'cookie_path', '/' ), $conf->get( 'cookie_domain', '' ) );
}
if ( !empty( $_COOKIE['templateChanged'] ) ) {
	$input->set( 'template', $_COOKIE['templateChanged'] );
}

Делаем два шаблона один ваш второй для слабо видящих..
переключение просто добавить например для переключения шаблонов с protostar на beez3 и обратно
в protostar:
<a href="<?php echo JRoute::_('&template=beez3'); ?>">Шаблон для слабовидящих</a>

в beez3:
<a href="<?php echo JRoute::_('&template=protostar'); ?>">Обычный шаблон</a>

Если не знаете как написать плагин, зайдите к Саше на сайт он для Вас написал конструктор http://inet-reklama.com/sozdanie-plagina.html

mixagame 29.06.2015 16:26

А не легче будет в модуле всё это прописать?

Vlasenko Fedor 29.06.2015 16:40

mixagame,
Если знаешь как легче, чего спрашиваешь?
Css можно спокойно подгружать динамически
function loadCss(href) {
	var link = document.createElement("link");
	link.rel = "stylesheet";
	link.href = href;
	document.head.appendChild(link);
}
loadCss('http://mypath/custom.css');

хранить состояние в куках, в storage, сессии на выбор

mixagame 29.06.2015 17:08

Всем спасибо, кто ответил. Завтра отпишусь о результатах :)

ruslan_mart 29.06.2015 17:42

Poznakomlus, это я как простой пример показал, для наводки. Естественно, нужна фильтрация и т.д., наводка есть, а за идеальным модулем - в раздел "Работа". :)


Часовой пояс GMT +3, время: 03:25.