Перейти к публикации

Альтернативная смена скинов


Рекомендованные сообщения

Не секрет, что существующая система смены скина на сайте страдает недостатками. Один из них это то, что смена происходит по запросу типа POST. И после загрузки страницы, ее просто обновить нельзя - например в FireFox появляется сообщение:

Цитата

"Чтобы отобразить эту страницу, Firefox должен отправить информацию для повторения ранее произведённого действия (например, запрос на поиск или онлайн-покупка)."

Также нельзя ограничить список выводимых шаблонов для переключения, дать им псевдонимы и сделать красивый переключатель. Вобщем я пытаюсь переделать систему изменения скинов под себя, и столкнулся с тем, что если просто изменить куку с именем dle_skin на другой шаблон, и запросить страницу по GET, то смены шаблона не произойдет (((

 

Получается, что необходимо обязательно отправлять POST запрос на сервер с именем нового скина. Мне не понятно, зачем это делать (сервер привязывает выбранный мной шаблон к моей сессии?), ведь нужное мне имя шаблона передается каждый раз в куке dle_skin. Почему бы серверу не брать значение dle_skin именно из куки?

 

P.S.

Сам написал, сам ответил:

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

2. Текущий подход хорош для оптимизации - накладные расходы в каждом запросе на проверку изменился ли скин в куке, превышают пользу от смены скина через куку.

 

Вопрос снимается, тему можно закрывать. Запрос на смену куки буду пробовать делать в отдельном AJAX POST запросе.

Изменено пользователем YuriBtr
Ссылка на сообщение
Поделиться на других сайтах
6 часов назад, YuriBtr сказал:

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

С чего это вдруг нельзя? Не пользуйтесь стандартными тегами DLE, а делайте свое оформление на чистом HTML таким каким нужно, главное это послать правильные параметры потом на сервер, и все будет работать.

 

6 часов назад, YuriBtr сказал:

и запросить страницу по GET, то смены шаблона не произойдет (((

Неверное утверждение. DLE принимает как POST так и GET, ему без разницы как вы послали данные в этом вопросе. И если у вас не работает, значит некорректные данные были посланы на сервер.

 

 

Ссылка на сообщение
Поделиться на других сайтах
7 часов назад, YuriBtr сказал:

и запросить страницу по GET, то смены шаблона не произойдет

/index.php?action_skin_change=yes&skin_name=NAME

 

Ссылка на сообщение
Поделиться на других сайтах
1 час назад, celsoft сказал:

Неверное утверждение. DLE принимает как POST так и GET, ему без разницы как вы послали данные в этом вопросе. И если у вас не работает, значит некорректные данные были посланы на сервер.

Вы не поняли. По GET запросу я просто получаю страницу. А вот насчет идеи по отправке GET запроса на смену скина, спасибо. Попробую.

Ссылка на сообщение
Поделиться на других сайтах
  • 1 год спустя...
В 09.12.2018 в 22:30, YuriBtr сказал:

буду пробовать делать в отдельном AJAX POST запросе.

Удалось сделать смену шаблона таким методом?

Ссылка на сообщение
Поделиться на других сайтах
  • 4 месяца спустя...
1 час назад, Drage сказал:

Можно поподробнее?)

Просто отправить запрос к файлу index.php

$.ajax({
  type: "POST",
  url: "https://ваш.сайт/index.php",
  data: {'action_skin_change': 'yes', 'skin_name': 'название шаблона', 'location' : 'адрес'},

});

location - это уже моя "надстройка" через плагин 

Имя файла: engine/init.php

Найти: set_cookie ( "dle_skin", $_REQUEST['skin_name'], 365 );

Добавить ниже: if(isset ( $_REQUEST['location'] )){ header( 'Location: '. $_REQUEST['location'], 302 );}

Кстати вопрос, так можно делать? Это не влияет на безопасность?

Ссылка на сообщение
Поделиться на других сайтах

Все нормально, так можно делать. У меня написана такая функция:

    function skinChange() {
        ShowLoading('Переключаемся на старый дизайн, подождите...');
        $.post(
            '/index.php',
            { action_skin_change: "yes", skin_name: "oldskin" }
        ).always(function() {
                window.location = window.location.href.split("#")[0];
            }
        );
    }

И на кнопке стоит обработчик:
 

<button onclick="skinChange();" class="btn btn-sm btn-primary" title="Переключиться на старый вид сайта">

 

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...