Помощь Вопросы по DLE (ВНИМАТЕЛЬНО читаем первый пост!!!)

Горбушка

Ищу её...
Регистрация
2 Май 2008
Сообщения
3.444
Реакции
2.523
Для просмотра ссылки Войди или Зарегистрируйся | Для просмотра ссылки Войди или Зарегистрируйся | Для просмотра ссылки Войди или Зарегистрируйся | Для просмотра ссылки Войди или Зарегистрируйся | Для просмотра ссылки Войди или Зарегистрируйся

Если у Вас недостаточно постов/уровня для создания новой темы, пишите свои вопросы здесь.

Если постов хватает - в новую тему.

Спасибо на этом форуме говорят кнопкой "Мне нравится"...
 
Последнее редактирование:

dimavalik

Писатель
Регистрация
13 Июл 2011
Сообщения
1
Реакции
0
DLE 14. Подскажите, какие правки нужно внести, чтобы изменить ответ сервера с 404-го на 200-й при просмотре пустых категорий (без новостей)? Правки, которые работали в ранних версиях движка, утратили актуальность. Я так понимаю, нужно внести изменения в этот кусок кода из main.php:

Код:
    @header( "HTTP/1.0 404 Not Found" );
    $need_404 = false;
   
    if( $config['own_404'] AND file_exists(ROOT_DIR . '/404.html') ) {
        @header("Content-type: text/html; charset=".$config['charset']);
        echo file_get_contents( ROOT_DIR . '/404.html' );
        die();
       
    } else msgbox( $lang['all_err_1'], $lang['news_err_27'] );

}

if($need_404) {
    @header( "HTTP/1.0 404 Not Found" );
}
 

Башмак

Писатель
Регистрация
19 Фев 2017
Сообщения
6
Реакции
0
Как сделать сохранение выбора темы тёмная/светлая на любой странице?

Нашел в сети статью Для просмотра ссылки Войди или Зарегистрируйся

Сделал всё по инструкции. Всё работает, кроме одного. Почему-то сохранение происходит только на главной странице сайта. Если менять тему на другой странице, то выбор темы не сохраняется. Подскажите, что сделал не так?

В main.tpl в head добавил это

PHP:
<?php session_start();if(!isset($_SESSION["theme"])){$_SESSION["theme"] = "light";} ?>

И это

Код:
<link href="{THEME}/style/<?php echo $_SESSION['theme']; ?>.css" type="text/css" rel="stylesheet" id="theme-link">

В низ перед </body> добавил js

Код:
var btn = document.getElementById("theme-button");
var link = document.getElementById("theme-link");
btn.addEventListener("click", function () { ChangeTheme(); });
function ChangeTheme()
{
    let lightTheme = "/templates/kinowalk-utf8/style/light.css";
    let darkTheme = "/templates/kinowalk-utf8/style/dark.css";
    var currTheme = link.getAttribute("href");
    var theme = "";

    if(currTheme == lightTheme)
    {
        currTheme = darkTheme;
        theme = "dark";
    }
    else
    {
        currTheme = lightTheme;
        theme = "light";
    }
    link.setAttribute("href", currTheme);
    Save(theme);
    function Save(theme)
{
    var Request = new XMLHttpRequest();
    Request.open("GET", "./themes.php?theme=" + theme, true); // путь к php файлу отвечающий за сохранение
    Request.send();
}
};

И создал php файл themes.php с содержимым

PHP:
<?php
session_start();

if(isset($_GET["theme"]))
{
    $theme = $_GET["theme"];

    if($theme == "light" || $theme == "dark")
    {
        $_SESSION["theme"] = $theme;
    }
}
?>

Что сделал не так? Почему только на главной происходит сохранение?
Версия DLE 14.0
 

killoff

CD тихо, и не DVD меня ;)
Команда форума
Модератор
Регистрация
13 Май 2008
Сообщения
2.592
Реакции
1.104
В main.tpl в head добавил это

PHP:
<?php session_start();if(!isset($_SESSION["theme"])){$_SESSION["theme"] = "light";} ?>
вообще в файлах шаблона нельзя использовать PHP. Чем стандартная смена шаблона не устраивает? Там просто настроить нужно шаблоны, и потом смену на выбор шаблона выводить через {changeskin}.
 

LyonSH

Создатель
Регистрация
29 Апр 2012
Сообщения
13
Реакции
2
У меня тут возникла дилемма, с которой не могу спать спокойно...
Причёсываю код и стандартизирую кое что "по мелочи".
В DLE шаблонизаторе в 90% случаев используется strpos для поиска тегов, но в некоторых на мой взгляд абсурдных местах используется stripos.
strpos - работает с учётом регистра
stripos - без учёта регистра

Так вот использование stripos в некоторых редких случаях тянется со времён царя гороха, вроде как с самых первых версий DLE.
Вот к примеру stripos в DLE 14 :
Код:
/engine/modules/show.short.php

166: if (stripos ( $tpl->copy_template, "[category=" ) !== false) {
170: if (stripos ( $tpl->copy_template, "[not-category=" ) !== false) {

При этом буквально через несколько строк ниже уже используется strpos :
Код:
/engine/modules/show.short.php

176: if( strpos( $tpl->copy_template, "[catlist=" ) !== false ) {
180: if( strpos( $tpl->copy_template, "[not-catlist=" ) !== false ) {

Все мы знаем что strpos работает быстрее stripos, так зачем же тогда искать именно тег "[category=" без учёта регистра, например - [catEGory=
Может я что-то не знаю и в одной из древних версий DLE часть тегов в шаблоне были в верхнем регистре [CATEGORY= и т.д. ? Иначе у меня нет никаких догадок зачем...
Буду признателен великим гуру, кто сможет мне объяснить это ))
 

Горбушка

Ищу её...
Регистрация
2 Май 2008
Сообщения
3.444
Реакции
2.523
Скорее всего либо опечатка, либо об этом просто не задумывались.
Не думаю, что разница между этими функциями и количество из вызовов настолько большое, что стоит на такие мелочи обращать внимение.
Хотя подобных кусков я находил прилично, где в одном месте одна конструкция, а на 10 строк ниже уже другая.

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

А что касается самих тегов - да, одно время, вроде, их писали капсом, потом забили. Когда пишешь теги капсом - они выделяются из общего HTML
 

LyonSH

Создатель
Регистрация
29 Апр 2012
Сообщения
13
Реакции
2
А что касается самих тегов - да, одно время, вроде, их писали капсом, потом забили. Когда пишешь теги капсом - они выделяются из общего HTML
Спасибо за ответ, я в принципе так и догадывался, что старое наследие DLE + разные люди писали код.
Это в принципе видно на этом куске по стилю написания пробелов между операторами и функциями - "if (stripos ( $tpl->copy_template"
И ниже кусок уже без такого безумного кол-ва пробелов и расставлены по другому - "if( strpos( $tpl->copy_template"

Учитывая что я за всю свою историю работы с DLE не разу не видел в шаблонах тегов в верхнем регистре + сами разрабы в своих Default шаблонах все теги в нижнем регистре пишут - и вовсе отказался бы от оставшихся stripos в пользу быстрого strpos.

Ато получается одному разрабу нравится strpos, второму stripos+пробелы.
Я просто класс шаблонизатора templates.class.php допилил чуток, добавил в него функцию на проверку тегов.
И все сотни конструкций вида
Код:
if( strpos( $tpl->copy_template, "[catlist=" ) !== false ) {
Плавно превращаются в -
Код:
if ($tpl->if("[catlist=")) {

Код уменьшается в разы, визуально читать его приятно и если какие-то изменения в новых версиях php произойдут, то не придётся по всему движку прыгать и исправлять эти конструкции, достаточно будет в одном месте подправить и всё... Но это всё моя дотошность :eek:
 

Горбушка

Ищу её...
Регистрация
2 Май 2008
Сообщения
3.444
Реакции
2.523
Я просто класс шаблонизатора templates.class.php допилил чуток, добавил в него функцию на проверку тегов.
А через пару месяцев выходит новая версия DLE и пилите по новой.
Если вы меняете исходники - делайте хотя бы через плагины.
 

LyonSH

Создатель
Регистрация
29 Апр 2012
Сообщения
13
Реакции
2
А через пару месяцев выходит новая версия DLE и пилите по новой.
Если вы меняете исходники - делайте хотя бы через плагины.
Это всё понятно, для клиента с этим вообще не нужно заморачиваться, оставляем всё как в оригинале и все довольны.
А для себя для души совсем другие задачи, новые версии DLE представляют интерес исключительно из любопытства с точки зрения исправлений/оптимизаций/новых-функций, ибо то что у меня - уже нельзя назвать DLE в привычном понимании. Я через KDiff3 закидываю 2 версии, старую DLE и новую DLE, все изменения между ними как на ладони, что нравится оставляю и адаптирую под себя, что не нравится вырезаю.
P.S. Про "через пару месяцев" это вы конечно комплимент целсофту сделали :D как по мне 1 раз в пол года обнова выходит.
 

t918

Создатель
Регистрация
24 Ноя 2012
Сообщения
11
Реакции
0
Не могу разобраться, только начал изучать dle и столкнулся с проблемой:
dle 14 nulled на OpenServer, шаблон Default
Установил Yandex Maps согласно инструкции все вставляю, но ничего не выходит, не пойму что не так делаю:
Открыть /templates/Default/addnews.tpl и в самое начало прописать: {include file="engine/modules/ymaps/addnews.php"}

самое не понятное в файл addnews.tpl что не пропиши туда ничего не происходит, даже удалял его, все работает без него, никаких ошибок.
На элементарной херне встрял, понимаю, а куда копать не знаю. Помогите пожалуйста.
 
Сверху