Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

При переключении шаблона не сразу обновляется содержимое блоков #142

Closed
Yuribtr opened this issue Dec 9, 2018 · 6 comments · Fixed by #153

Comments

@Yuribtr
Copy link
Contributor

Yuribtr commented Dec 9, 2018

Здравствуйте,
постоянно наблюдаю такое странное поведение. На сайте используется несколько сквозных блоков BlockPro для вывода рекламы. Также вся главная страница строится на выводе двух блоков новостей (главные новости + лента) через BlockPro.
При переключении дизайна с первого раза не подключаются блоки с выбранного шаблона, в результате чего я вижу дизайн и оформление блоков с прежнего шаблона. А если в прежнем шаблоне отсуствуют таковые, то мне выдается ошибка типа:
"Template blockpro/mainpage_topnews.tpl not found"
Но что интересно, эта ошибка возникает только один раз при переключении. Если обновить страницу - все нормально отображается и больше не глючит.

@pafnuty
Copy link
Member

pafnuty commented Dec 10, 2018

@Yuribtr
напишите версию php, версию модуля, тип кеширования и строки подключения модуля, я попробую воспроизвести.

@Yuribtr
Copy link
Contributor Author

Yuribtr commented Dec 10, 2018

Большое спасибо за ответ!

PHP 7.2
DLE 13.0
тип кеширования "файловый кеш"

Строки подключения блоков, у которых наблюдаются глюки такие:
{include file="engine/modules/base/blockpro.php?template=blockpro/mainpage_item&nocache=y&limit=50&catId=11,12,13,17,18,19,20,21,22,23,24,25,26,27,29,33,34,41&sort=date&fixed=ignore"}

{include file="engine/modules/base/blockpro.php?template=blockpro/commercial_headers_item&nocache=y&limit=7&catId=17&sort=date&fixed=ignore"}

{include file="engine/modules/base/blockpro.php?template=blockpro/mainpage_topnews&nocache=y&xfSearch=v-krutilku|Да||v_krutilku|Да&catId=17,30&sort=randomLight"}

Причем у первых двух блоков при переключении на новый шаблон просто выдается дизайн со старого шаблона, поскольку файлы blockpro/mainpage_item и blockpro/commercial_headers_item присутствуют в обоих шаблонах.

А вот третий модуль при переключении на новый шаблон выдает "Template blockpro/mainpage_topnews.tpl not found", видимо потому что у старого шаблона с которого я переключаюсь отсутствует файл blockpro/mainpage_topnews. Я его добавил только в новой версии дизайна.

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

@Yuribtr
Copy link
Contributor Author

Yuribtr commented Dec 13, 2018

Я могу вам дать логин/пароль чтобы вы зашли от пользователя сайта, у которого есть доступ к смене шаблонов и сами увидите это в действии.

@Yuribtr
Copy link
Contributor Author

Yuribtr commented Dec 17, 2018

Святой Кондратий! Оказывается чтобы избавиться от глюков, надо в папках шаблонов иметь разные имена папок с блоками BlockPro! Иначе начинается смешение стилей при переключении и включенном кешировании блоков. Видимо в механизме кеширования не учитывается папка шаблона, откуда загружается блок. Ввиду этого шаблоны BlockPro с одинаковыми именами будут использовать общий кеш.

Но! При переключении первый раз Blockpro пишет "Template blockpro/......tpl not found" и так по всем шаблонам Blockpro. После этого видимо результат кешируется и некоторое время ошибки нет. Но стоит подождать некоторое время и она опять появляется на один раз.

@Yuribtr
Copy link
Contributor Author

Yuribtr commented Dec 20, 2018

Вобщем путем длительных изысканий удалось обойти этот глюк, в результате чего становится понятным механизм появления глюка. Итак, если у кого-то есть блоки на странице и вы меняете шаблон "на лету", выбирая шаблон из списка (тег DLE {$changeskin}), то вы получаете страницу по POST запросу, в котором отсуствует либо заменена на дефолтную переменная dle_skin.
Чтобы исправить это поведение надо переключаться вручную, отдельным AJAX запросом и сразу же обновляем страницу:

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

pafnuty added a commit that referenced this issue May 16, 2019
- implemented #151
- implemented #123
- fixed #142
- fixed #140
- fixed #145
@pafnuty pafnuty reopened this May 17, 2019
@pafnuty
Copy link
Member

pafnuty commented May 17, 2019

@Yuribtr Теперь можно использовать параметр cacheNameAddon=xxx
Просто укажите этот параметр разным для разных шаблонов сайта и они должны будут корректно переключаться.

@pafnuty pafnuty closed this as completed May 17, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants