Шаблоны для Datalife Engine

Купить платные адаптивные DLE шаблоны
по приятным ценам.

Тех. поддержка
Telegram: @vugluskr2023
Техническая поддержка
Корзина 0
Внимание: Обновление шаблонов до 15 и 17.1 версии. Решение проблем с большими краткими новостями, постерами, рейтингом.
Адаптивные dle шаблоны   Советы и новости   Переключатель "сменить цвет шаблона" на DLE пользователем

Переключатель "сменить цвет шаблона" на DLE пользователем

Как для пользователя сделать красивую кнопку смены цвета шаблона на лету на сайте? Как сменить "дневной" шаблон на "ночной", светлый на темный? Есть несколько способов. Результат будет такой, справа кнопка:

Код css подгоняйте для себя, иконки fal (популярный набор Font Awesome) меняйте на свои иконки, если требуется.

Первый способ


Этот способ используется в наших шаблонах, в которых есть такая функция. Суть способа: кнопкой переключается класс у body, в зависимости от класса меняется цвет. Легко и удобно менять, если цвета в шаблоне заданы через переменные. Плюс способа: это один шаблон, очень быстро и легко меняется цвет. Минус: требуется обладать минимальными знаниями работы с css, чтобы применять этот способ. Допустим, у нас светлая тема по умолчанию, хотим переключить на темную, за темную отвечает класс dt-is-active.

В main.tpl в нужное место вставить кнопку
<div class="change-color">
<span class="fal fa-sun"></span>
<span class="fal fa-moon"></span>
</div>

В main.tpl после
<body>

<script>
		function switchLight() {
			if (localStorage.getItem('theme') === 'dark') {
				document.querySelector('body').classList.add('dt-is-active');
			} else {
				document.querySelector('body').classList.remove('dt-is-active');
			};
		};
		switchLight();
	</script>
<style>
.change-color, .change-color * {box-sizing: border-box;}
.change-color {display: inline-flex; justify-content: space-between; align-items: center; cursor: pointer;
	background-color: #444; height: 40px; border-radius: 20px; padding: 5px; gap: 5px;}
.change-color span {width: 30px; height: 30px; border-radius: 50%; color: #ccc; display: grid; place-items: center;} 
body:not(.dt-is-active) .change-color li:first-child, body.dt-is-active .change-color li:last-child {background-color:#fff; color: #444;}
</style>


В main.tpl перед
</body>

<script>
		document.querySelector('.theme-toggle').onclick = ()=> {
			if (localStorage.getItem('theme') === 'dark') {
				localStorage.removeItem('theme');
			} else {
				localStorage.setItem('theme','dark');
			};
			switchLight();
		};
	</script>


Таким образом, если у нас цвета шаблона заданы через переменные

:root {
	--bg: #fff; --bg-darker: #f6f6f8; 
	--tt: #212121; --tt-fade: #8e8e8e; 
	--bg-btn: #9b59b6; --tt-btn: #fff; --bg-btn-hover: #8e44ad;
	--accent-red: #9b59b6; --accent-red2: #eb4d4b; --accent-blue: #06c; --accent-green: #2ecc71;
	}

то мы просто переназначаем их, добавляем недостающие, меняем если нужно. То есть ниже основных переменных добавляем

.dt-is-active {
	--bg: #0f1014; --bg-darker: #090a0e; 
	--tt: #fff; --tt-fade: #9c9c9c; 
	--bg-btn: #ce2640; --tt-btn: #fff; --bg-btn-hover: #e73752;
}
.dt-is-active .descr {color: var(--tt-fade);}


Второй способ


Второй способ похож на первый, но вместо замены класса мы на лету добавляем на страницу css файл, где описаны настройки другого цвета. Будет позже.

Третий способ


Предлагаю вам простой вариант на ajax с помощью стандартной функции change color на DLE. Плюс способа: не нужно знаний, просто копировать и вставить. Минус: это не один шаблон, а два, значит при внесении правок нужно вносить правки в оба шаблона, а также соответственно иметь эти два шаблона разного цвета. Неудобно.

Как многие знают, сменить шаблон можно по ссылке
ВАШСАЙТ/index.php?action_skin_change=yes&skin_name=ИМЯШАБЛОНА

Эту функцию мы и используем, причем делать мы будем лишь в шаблоне, движок не затронем, а пользователь останется на той же странице.

Код в ваш tpl
<ul class="change-color" onclick="skinChange('dark-theme');" title="Сменить цвет дизайна">
<li class="is-active"><span class="fal fa-sun"></span></li>
<li><span class="fal fa-moon"></span></li>
</ul>

Где dark-theme название шаблона на который меняем, а класс is-active выделяет активный пункт. То есть, если код выше для светлого шаблона, то для темного dark-theme соответственно будет
<ul class="change-color" onclick="skinChange('light-theme');" title="Сменить цвет дизайна">
<li><span class="fal fa-sun"></span></li>
<li class="is-active"><span class="fal fa-moon"></span></li>
</ul>


В ваш css файл
.change-color, .change-color * {box-sizing: border-box;}
.change-color {display: inline-flex; justify-content: space-between; align-items: center; cursor: pointer;
   background-color: #444; height: 40px; border-radius: 20px; padding: 5px 0; margin-left: 20px;}
.change-color li {cursor: pointer; width: 30px; height: 30px; line-height: 30px;
   border-radius: 50%; text-align: center; color: #ccc; margin: 0 5px;}
.change-color li.is-active {background-color:#fff; color: #444;}


В ваш js файл
function skinChange(a) {
   $.ajax({
   type: "POST",
     url: "/index.php",
   data: {'action_skin_change': 'yes', 'skin_name': a},
   beforeSend: function() { ShowLoading(''); },
   success: function() { window.location = window.location.href.split("#")[0]; }
  });
};


Вот и все. В настройках - посетители должно быть включено "Разрешить посетителям смену скина на сайте".
Иногда по неизвестным мне причинам на сайте не срабатывает ajax запрос. При клике страница просто перезагружается, а шаблон не меняется. В таком случае замените код в вашем js файле на код ниже. Этот способ хуже тем что юзера перенаправит на главную страницу, но у меня нет других вариантов.
function skinChange(a) {
	window.location = '/index.php?action_skin_change=yes&skin_name='+a+'';
};
Написать отзыв
  • bowtiesmilelaughingblushsmileyrelaxedsmirk
    heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
    winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
    worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
    expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
    disappointedconfoundedfearfulcold_sweatperseverecrysob
    joyastonishedscreamtired_faceangryragetriumph
    sleepyyummasksunglassesdizzy_faceimpsmiling_imp
    neutral_faceno_mouthinnocent
У меня было пять яблок, два яблока я съел. Сколько у меня осталось яблок? Напиши буквой например десять
Отзывов (13)
Александр
Александр Гости 22 марта 2021 20:05
Спасибо давно искал такой код sunglasses wink
Андрей
Андрей Гости 30 марта 2021 20:00
А можно сделать примеру так ? что-бы в одном шаблоне лежали все стили
/templates/название шаблона/css/styles1.css основной белый
/templates/название шаблона/css/styles2.css второй черный
webrambo
webrambo Администраторы 30 марта 2021 20:33
Андрей, можно примерно так и другим способом https://teramoune.info/free/31-change-theme-mode.html
proger86
proger86 Гости 17 сентября 2021 20:54
Почему может не работать этот метод? Нажимаю на кнопку, идет загрузка и ничего не меняется. Стандартным {changeskin} работает нормально.

Название шаблонов указано правильно
webrambo
webrambo Администраторы 18 сентября 2021 09:36
proger86, открываете в меню браузера инструменты разработчика, там вкладка консоль, смотрите там ошибки без клика и с кликом по переключателю.
proger86
proger86 Гости 18 сентября 2021 11:50
webrambo,
Вообще нет никаких ошибок, страница перегружается как будто там выбран этот же шаблон
Evghenii
Evghenii Гости 13 октября 2021 08:32
Подскажите пожалуйста, как иконки подключить? Буду очень благодарен за ответ!)
geroin47
geroin47 Гости 26 мая 2022 10:46
Тут https://teramoune.info/free/31-change-theme-mode.html сайт закрылся - есть еще способ или описание того метода, что когда-то был приведён в ссылке.
webrambo
webrambo Администраторы 27 мая 2022 11:56
geroin47, нет
TeraMoune
TeraMoune Посетители 17 июня 2022 05:35
Плагин на который ссылался, webrambo, что размещался на старом домене перенесён на Github - Theme-change-lite.
Пётр
Пётр Гости 18 октября 2023 11:18
Вау, классная идея! Вы сами придумали использовать эту функцию со сменой скинов для переключения на тёмную тему?)
webrambo
webrambo Администраторы 18 октября 2023 12:38
Пётр, да! Гениально, не правда ли? Я понял сарказм. Но вы не учитываете, что не все обладают навыком верстки для других способов, а вот обе темы могут быть готовы в наличии. Я решил описать эти способы (переключение класса и замена css файла), описал, но при сохранении что-то пошло не так и пол статьи обрезало. Добавлю позже.
Александр
Александр Гости 11 декабря 2023 18:47
вот рабочий код заменой css ссылки. может кому поможет

Данный скрипт позволяет пользователю переключать тему на веб-сайте с помощью кнопки переключения, сохраняя выбор темы при помощи localStorage. При нажатии на кнопку переключения темы скрипт изменяет ссылку на CSS-файл, который определяет стили для светлой и темной тем. Помимо этого, скрипт также сохраняет выбор темы в localStorage, чтобы при загрузке страницы применять сохраненную тему.


1) HTML: В вашем HTML-документе укажите ссылку на основной CSS-файл для темы по умолчанию, добавьте кнопку для переключения темы и подключите jаvascript-файл.

<link rel="stylesheet" type="text/css" href="light-theme.css" id="theme-style">


кнопка
<button onclick="toggleTheme()">Переключить тему</button>



2)
jаvascript (theme-switcher.js): Создайте jаvascript-файл для обработки переключения темы. В этом файле вы можете изменить ссылку на CSS-файл в зависимости от выбранной темы.


function toggleTheme() {
    var themeStyle = document.getElementById('theme-style');
    if (themeStyle.getAttribute('href') === 'light-theme.css') {
        themeStyle.setAttribute('href', 'dark-theme.css');
        localStorage.setItem('theme', 'dark');
    } else {
        themeStyle.setAttribute('href', 'light-theme.css');
        localStorage.setItem('theme', 'light');
    }
}

// Применение сохраненной темы при загрузке страницы
document.addEventListener('DOMContentLoaded', function() {
    var savedTheme = localStorage.getItem('theme');
    if (savedTheme === 'dark') {
        document.getElementById('theme-style').setAttribute('href', 'dark-theme.css');
    } else {
        document.getElementById('theme-style').setAttribute('href', 'light-theme.css');
    }
});