За последние 24 часа нас посетили 17326 программистов и 1672 робота. Сейчас ищет 1661 программист ...

Переключатель тем на php

Тема в разделе "Сделайте за меня", создана пользователем Peet, 21 сен 2023.

  1. Peet

    Peet Гость

    С нами с:
    21 сен 2023
    Сообщения:
    1
    Симпатии:
    0
    Добрый день!

    Прошу помощи, необходимо написать переключатель тем с изменением ссылок на таблицы стилей c
    Код (Text):
    1. <link  href="/css/light.css" rel="stylesheet">
    на
    Код (Text):
    1. <link  href="/css/dark.css" rel="stylesheet">
    и
    Код (Text):
    1. <body data-theme="default">
    с default на dark, чтобы браузер запоминал выбор пользователя.

    В сети находил примеры кода, но в php почти ничего не соображаю. Помогите пожалуйста)
     
  2. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    922
    Симпатии:
    143
    В куку выбор сохраняй, оттуда танцуй.
     
  3. solo27

    solo27 Новичок

    С нами с:
    3 окт 2023
    Сообщения:
    3
    Симпатии:
    0
    Код (Text):
    1. <?php
    2.  
    3. if ($_COOKIE['style'] == den){
    4. #подключаем css
    5. }
    6. elseif ($_COOKIE['style'] == noch){
    7. #подключаем css
    8. }
    9. else {
    10. setcookie('style', 'den', time()+60*60*24);
    11. header('Location: ?');
    12. }
    13.  
    14. if (isset($_GET['den']))
    15. {
    16. setcookie('style', 'den', time()+60*60*24);
    17. header('Location: ?');
    18. } elseif (isset($_GET['noch'])){
    19. setcookie('style', 'noch', time()+60*60*24);
    20. header('Location: ?');
    21. }
     
  4. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    439
    Симпатии:
    84
    Адрес:
    Бавария, Германия
    Добрый день!
    У Вашем в коде фотальные ошибки (не определены константы den и noch) д.б.
    PHP:
    1. if ($_COOKIE['style'] == "den"){
    2. #подключаем css
    3. }
    4. elseif ($_COOKIE['style'] == "noch"){
    5. #подключаем css
    6. }
    Откуда появятся $_GET['noch'] и $_GET['den'] если во всех случаях header('Location: ?') ?
    А где сам переключатель - по чему кликнуть чтоб перекличилась тема?
     
    #4 Vladimir Kheifets, 11 окт 2023
    Последнее редактирование: 11 окт 2023
  5. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    439
    Симпатии:
    84
    Адрес:
    Бавария, Германия
    Добрый день!
    Чтобы сделать переключатель тем в html-коде должна быть кнопка и должно отрабатываться событие click в JS.
    Поэтому это задача может быть решена так:
    HTML:
    1.     <meta charset="utf-8">  
    2.     <link id="my_css" rel="stylesheet" href="">
    3. </head>
    4. <input type="button" id="switch" value="">
    5. </body>
    6. relLinkObj = document.getElementById("my_css");
    7. switchObj = document.getElementById("switch");
    8. temaL = "Tema light";
    9. temaD = "Tema dark";
    10. relLinkObj.setAttribute("href","css/dark.css");
    11. tema = temaD;
    12. relLinkObj.setAttribute("href","css/dark.css");
    13. switchObj.value = temaL;
    14. switchObj.addEventListener("click", () => {
    15.   if(tema == temaD)
    16.   {
    17.     relLinkObj.setAttribute("href","css/light.css");
    18.     tema = temaL;
    19.     text = temaD;
    20.   }
    21.   else
    22.   {
    23.     relLinkObj.setAttribute("href","css/dark.css");
    24.     tema = temaD;
    25.     text = temaL;
    26.   }
    27.   switchObj.value = text;
    28. });
    29. </html>
    css/dark.css
    Код (CSS):
    1. body{background-color: black }
    css/light.css
    Код (CSS):
    1. body{background-color: white }
    Удачи!
     
  6. Visman

    Visman Новичок

    С нами с:
    22 апр 2023
    Сообщения:
    12
    Симпатии:
    2
    Адрес:
    Сибирь
  7. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    439
    Симпатии:
    84
    Адрес:
    Бавария, Германия
    Могут то, они могут, но для этого пользователь должен менять настройки в браузерах.
    По-опыту общения с пользователями, понял, что многие не знают, то что необходимо делать,
    например, как почистить кэш и куки.
     
  8. Visman

    Visman Новичок

    С нами с:
    22 апр 2023
    Сообщения:
    12
    Симпатии:
    2
    Адрес:
    Сибирь
    >но для этого пользователь должен менять настройки в браузерах.
    Не должен. По умолчанию браузер повторяет настройки системы в которой он стоит.
     
  9. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    439
    Симпатии:
    84
    Адрес:
    Бавария, Германия
    Простите, а от куда возьмутся эти настройки?
    Если пользователь не настроит систему, то и браузер будет стоять без них.

    Между прочим, тут предлагось использовать куки.
    Однако пользователь, по закону, может отказаться от них.

    Стоит ли учитывать то, что могут быть не установлены настройки системы и отключены куки?
     
  10. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    439
    Симпатии:
    84
    Адрес:
    Бавария, Германия
    (дополнение)

    Дороботал код. Добавил в JS метод для определения prefers-color-scheme.
    Если пользователь не изменял установки в системе или установил prefers-color-scheme: light,
    метод возвращает значение light, иначе значение dark.
    Страница запускается с color-scheme, которая была так определена.
    Для этой схемы динамически загружается css и определяется текст на кнопке переключателя тем.
    HTML
    HTML:
    1.     <meta charset="utf-8">  
    2.     <link id="my_css" rel="stylesheet" href="">
    3.     <script type="text/javascript" src="temesSwitch.js"></script>
    4. </head>
    5. <input type="button" id="switch" value="">
    6. </body>
    7. </html>
    JavaScript temesSwitch.js
    Код (Javascript):
    1. class themesSwitch{
    2.  
    3.     constructor(idLink, idSwitch, cssPath){
    4.       this.relLinkObj = document.getElementById(idLink);
    5.       this.switchObj = document.getElementById(idSwitch);
    6.       this.themeL = "light";
    7.       this.themeD = "dark";
    8.       this.cssPath = cssPath;
    9.     }
    10.  
    11.     setLinkHref = function(theme){
    12.       this.relLinkObj.setAttribute("href", this.cssPath + "/" + theme + ".css");
    13.     }
    14.  
    15.     setSwitchValue = function(theme){
    16.       this.switchObj.value = "Theme " + this.getAnotherTheme(theme);
    17.     }
    18.  
    19.     getAnotherTheme = function(theme){
    20.       return theme == this.themeD?this.themeL:this.themeD;
    21.     }
    22.  
    23.     getPrefersColorScheme = function(){
    24.       var prefersColorLight = window.matchMedia('(prefers-color-scheme: light)').matches;
    25.       return  prefersColorLight?this.themeL:this.themeD;
    26.     }
    27. }
    28.  
    29. window.addEventListener("load", () => {
    30.   var ts = new themesSwitch("my_css", "switch", "css");
    31.   var theme = ts.getPrefersColorScheme();
    32.   ts.setLinkHref(theme);
    33.   ts.setSwitchValue(theme);
    34.   ts.switchObj.addEventListener("click", () => {
    35.     theme = ts.getAnotherTheme(theme);
    36.     ts.setSwitchValue(theme);
    37.     ts.setLinkHref(theme);
    38.   });
    39. });
    light.css
    Код (CSS):
    1. body{background-color: white }
    dark.css
    Код (CSS):
    1. body{background-color: black }