Sander1
-
Публикации
109 -
Зарегистрирован
-
Посещение
-
Дней в лидерах
19
Сообщения, опубликованные пользователем Sander1
-
-
Когда категорий не много или занимаешься созданием развернутой структуры категорий - при каждом обновлении страницы приходится повторно нажимать кнопку "Развернуть все".
Данный хак запоминает состояние кнопки и при перезагрузке страницы нет необходимости повторно нажимать эту кнопку.
Плагин для DLE 13.0
<?xml version="1.0" encoding="utf-8"?> <dleplugin> <name>Запоминать состояние категорий в админке</name> <description>Запоминать состояние кнопок "Развернуть все" и "Свернуть все". by Sander</description> <icon></icon> <version></version> <dleversion></dleversion> <versioncompare>less</versioncompare> <mysqlinstall><![CDATA[]]></mysqlinstall> <mysqlupgrade><![CDATA[]]></mysqlupgrade> <mysqlenable><![CDATA[]]></mysqlenable> <mysqldisable><![CDATA[]]></mysqldisable> <mysqldelete><![CDATA[]]></mysqldelete> <file name="engine/inc/categories.php"> <operation action="before"> <searchcode><![CDATA[ $('.nestable-action').on('click', function(e)]]></searchcode> <replacecode><![CDATA[ if (localStorage.getItem('categoryExpand')) { $('.dd').nestable('expandAll'); }]]></replacecode> </operation> <operation action="after"> <searchcode><![CDATA[ if (action === 'expand-all') { ]]></searchcode> <replacecode><![CDATA[ localStorage.setItem('categoryExpand', true);]]></replacecode> </operation> <operation action="after"> <searchcode><![CDATA[ if (action === 'collapse-all') {]]></searchcode> <replacecode><![CDATA[ localStorage.removeItem('categoryExpand');]]></replacecode> </operation> </file> </dleplugin>
Для предыдущих версий (но с новой админкой) так же будет работать, но изменения нужно будет вносить вручную.
С уважением,
Олег Александрович a.k.a. Sander -
Данный хак будет полезен тем, кто часто добавляет новые подкатегории или просто вы
ленивая жопаустали каждый раз перебирать файлы шаблона в поисках всех custom-ов и [category для добавления нового ID.С помощью этого хака достаточно будет прописать:
[category={subcat=3}] {custom category="{subcat=7}"} [catlist={subcat=2}]
В момент загрузки файла шаблона хак выполнит обработку тега, в итоге обработчик получит привычный вид:
[category=3,21,22,25,29,33,34,35,39] {custom category="7,59,60,61,66,67,68,69,80"} [catlist=2,8,9,10]
Так же можно комбинировать теги:
[category={subcat=3},100,105-110] [category={subcat=3},{subcat=7},551]
Установка:
Для DLE 13.0 достаточно установить плагин:<?xml version="1.0" encoding="utf-8"?> <dleplugin> <name>Обработка тега {subcat=x}</name> <description>Автоматический вывод списка ID подкатегорий заданной "x" категории</description> <icon></icon> <version></version> <dleversion></dleversion> <versioncompare>less</versioncompare> <mysqlinstall><![CDATA[]]></mysqlinstall> <mysqlupgrade><![CDATA[]]></mysqlupgrade> <mysqlenable><![CDATA[]]></mysqlenable> <mysqldisable><![CDATA[]]></mysqldisable> <mysqldelete><![CDATA[]]></mysqldelete> <file name="engine/classes/templates.class.php"> <operation action="before"> <searchcode><![CDATA[function load_template($tpl_name) {]]></searchcode> <replacecode><![CDATA[////////////////////////////////////////////////////////////// private function getSubCatList($match) { global $cat_info; $id = is_array($match) ? $match[1] : $match; if (!$cat_info[$id]) { return $id; } $list = [$id]; foreach ($cat_info as $v) { if ($v['parentid'] == $id) { $list[] = $this->getSubCatList($v['id']); } } return join(',', $list); } //////////////////////////////////////////////////////////////]]></replacecode> </operation> <operation action="after"> <searchcode><![CDATA[$this->template = file_get_contents( $this->dir . "/" . $tpl_name );]]></searchcode> <replacecode><![CDATA[////////////////////////////////////////////////////////////////////////////////////////////// $this->template = preg_replace_callback("#\{subcat=(\d+)\}#i", [&$this, 'getSubCatList'], $this->template); //////////////////////////////////////////////////////////////////////////////////////////////]]></replacecode> </operation> <operation action="after"> <searchcode><![CDATA[$template = file_get_contents( $templatefile );]]></searchcode> <replacecode><![CDATA[////////////////////////////////////////////////////////////////////////////////////////////// $template = preg_replace_callback("#\{subcat=(\d+)\}#i", [&$this, 'getSubCatList'], $template); //////////////////////////////////////////////////////////////////////////////////////////////]]></replacecode> </operation> </file> </dleplugin>
Для предыдущих версий инструкция у меня на сайте, если кому будет интересно конечно.
С уважением,
Олег Александрович a.k.a. Sander- 1
- 1
-
Есть предложения по управлению плагинами.
1. При внесении изменений в php файл в кеше файла в шапке записывать какой именно плагин внес изменения.
<?php // Название плагина // И еще название другого плагина /* ===================================================== DataLife Engine - by SoftNews Media Group
2. Добавить в админку поиск по файлу. Чтобы можно было вбить локальный адрес файла и получить сравнительную информацию как на гитхабе. Слева оригинал, справа - модифицированная копия с подсветкой изменений. Или хотя бы просто показать список плагинов которые вносят изменения в этот файл.
3. В имени кеша файла перед хешем прописывать имя файла, к примеру engine.php_226ba0642590b9136386fb777e0a09ec.php
4. Добавить кнопку для пересохранения всех плагинов. Сейчас для этого нужно открыть плагин и просто нажать сохранить, но как-то это не продуктивно.
5. Добавить возможность текстового экспорта/импорта плагина без фактического использования xml файлов.
- 1
-
4 минуты назад, alex32 сказал:
А где инициализаруется редактор, который в всплывающем окне при быстром редактировании
engine/ajax/editnews.php
$('.wysiwygeditor').froalaEditor({
- 1
-
3 минуты назад, MSW сказал:
заменить второе вхождение
Заменять больший кусок кода...
} else { $file_link = $config['http_home_url'] . "engine/skins/images/all_file.png"; $data_url = "#"; $file_play = ""; }; if( $this->area == "xfieldsfile" ) {
-
Админка, добавление новостей на сайте и комментарии:
<?xml version="1.0" encoding="utf-8"?> <dleplugin> <name>Froala p tag</name> <description>Перенос строки тегом p вместо br</description> <icon></icon> <version></version> <dleversion></dleversion> <versioncompare>less</versioncompare> <mysqlinstall><![CDATA[]]></mysqlinstall> <mysqlupgrade><![CDATA[]]></mysqlupgrade> <mysqlenable><![CDATA[]]></mysqlenable> <mysqldisable><![CDATA[]]></mysqldisable> <mysqldelete><![CDATA[]]></mysqldelete> <file name="engine/editor/shortnews.php"> <operation action="after"> <searchcode><![CDATA[$('.wysiwygeditor').froalaEditor({]]></searchcode> <replacecode><![CDATA[enter: $.FroalaEditor.ENTER_P,]]></replacecode> </operation> </file> <file name="engine/editor/shortsite.php"> <operation action="after"> <searchcode><![CDATA[$('.wysiwygeditor').froalaEditor({]]></searchcode> <replacecode><![CDATA[enter: $.FroalaEditor.ENTER_P,]]></replacecode> </operation> </file> <file name="engine/editor/comments.php"> <operation action="after"> <searchcode><![CDATA[$('#comments').froalaEditor({]]></searchcode> <replacecode><![CDATA[enter: $.FroalaEditor.ENTER_P,]]></replacecode> </operation> </file> </dleplugin>
Не забываем обновлять страницу Ctrl->F5
- 1
-
Выскажу свою скромную точку зрения по поводу маркета в том виде как его сейчас обсуждают.
Нет и однозначно нет.
Анализировать код и гарантировать его качество/безопасность/надежность? Я вообще даже не представляю, кто на это пойдет. Тем более если учитывать, что очень часто модули кодируют (я в том числе), причем некоторые вообще глобально все файлы закрывают.
В моём представлении - достаточно просто чего-то вроде доски объявлений. К примеру тот же Avito.
Чтобы был хоть какой-никакой, но централизованный каталог модулей к DLE. Как бесплатных, так и платных.
Можно сделать ограничение, к примеру на одну платную публикацию - одна бесплатная.
Или сделать ограничение по рейтингу, хочешь в платный раздел - набери 10, 20, 50 лайков за бесплатные модули.
Еще как вариант - добавить официальную группу разработчиков проверенных репутацией и временем.
- 2
-
3 минуты назад, celsoft сказал:
ошибка в данном случае не в работе DLE, а в вашей логике построения шаблона.
Да я ж не спорю, я к тому, что стоит этот момент как-то задокументировать.
Мол так и так, при использовании на главной custom вместо content - нужно скрывать тег {content} в not-aviable=main
-
3 часа назад, celsoft сказал:
Это лишь вы так делаете.
Я так не делаю. Нужно было проверить другую вещь и я столкнулся с такой ситуацией.
Я лишь сообщил, что при обычном использовании стандартных функций движка выдает не корректный итоговый результат. Параметр этот - http://prntscr.com/jfa92t
Что делать с этой информацией - решать вам.
3 часа назад, celsoft сказал:Навигация на сайте должна быть одна, а не две,
Так и есть. В настройках выбрана опция отображения custom на главной. При этом содержимое переменной $tpl->result['content'] пусто и соответственно навигации в нем нет.
-
Очень радует п.3.
Однако есть некоторые сомнения по способам его использования. Ну и предложения само собой.
К примеру по инструкции нужно вставить код в functions.php после строки:
else $config['allow_cache'] = false;
Но таки строки в файле 2, а вставлять нужно после второй. Можно конечно заменять бОльший участок кода:
} else $custom_limit = $config['news_number']; if( preg_match( "#cache=['\"](.+?)['\"]#i", $param_str, $match ) ) { if( $match[1] == "yes" ) $config['allow_cache'] = 1; else $config['allow_cache'] = false;
Но вот допустим в 13.1 добавится еще код, который будет как раз между этими блоками. И все, инструкцию опять переписывать и адаптировать/совмещать под 2 версии dle.
Это частный случай, подобных мест может быть очень много.
Следующая возможная проблема - несовместимость 2х модулей в следствии внесенных изменений.
К примеру
else $config['allow_cache'] = false;
На:
else { $config['allow_cache'] = false; include "file.php"; }
Ну, в принципе по большому счету это не такая уж большая проблема, легко решаема в частном порядке в рамках техподдержки. Но мне кажется будет уже значительно сложнее отслеживать изменения от других файлов и проводить отладку.
По поводу предложения.
Добавить автозагрузчик классов с поддержкой namespace`ов, чтобы можно было изначально в init.php подключить свои классы модуля.
Или же аналогичным образом добавить точки автоподключения файлов модулей в init.php и engine.php.
Чтобы можно было автоматически подгружать свои файлы с функциями/классами/загрузчиками и чтобы можно было легко делать вывод контента модулем не подключая его внутри switch ($do)
В общем идя интересная и уже хочется пощупать в живую
- 2
-
Почитал описание функции в пресс релизе, полистал Документацию, посмотрел в подписи к параметру в настройках DLE.
Нигде не написано, что при использовании параметра "Новости выводимые в шаблоне при помощи тега {custom}" необходимо скрывать тег {content} в not-aviable=main
Иначе на страницах навигации {custom navigation="yes"} будет отображать ошибку 404, мол ничего нету.
Ошибку показывает обработчик в modules/main.php:563
Не исключаю варианта, что я просто плохо искал документацию по этому функционалу. Но мне кажется, как минимум, в админке в настройках при включении этого параметра должна быть описана эта особенность.
- 2
-
При загрузке изображения по URL выполняется проверка заголовков, в частности Content-Length
Некоторые хостинги изображений не отдают этот заголовок, отчего скрипт возвращает ошибку, мол файла нет или он не доступен.
На скорую руку заменил строку:
if ( preg_match("#Content-Length: ([0-9]+)#i",$x,$size) ) return intval($size[1]); else return 0;
На:
if (preg_match("#Content-Length: ([0-9]+)#i",$x,$size)) { return intval($size[1]); } else { $x = @file_get_contents($this->from); $x = strlen($x); return $x; }
И все заработало.
Т.е. проблема исключительно в отсутствии заголовка Content-Length
Так же неплохо было бы добавить поддержку URL`ов вида:
example.com/image.jpg?123123
Чтобы не нужно было вручную удалять ?123123
-
5.6.38-log MySQLi
https://dev.mysql.com/doc/refman/8.0/en/innodb-restrictions.html
ЦитатаSHOW TABLE STATUS
does not give accurate statistics onInnoDB
tables except for the physical size reserved by the table. The row count is only a rough estimate used in SQL optimization.Сама документация говорит, что данный запрос не может давать точно значение количества записей в таблицах InnoDB.
-
Да, действительно не зависит от версии DLE.
Записал видео для наглядности:
https://sandev.pro/uploads/show_db.wmv
1 час назад, celsoft сказал:Никаких проверок в этом файле нет, он выполняет команды описанные в файле бекапа. И в файле бекапа стоят MySQL запросы и на создание таблиц и на вставку данных. Это во время импорта, а во время экспорта тоже проверок нет, он экспортирует все, что выдает БД.
Запрос на получение данных.
211: $result = mysqli_query($dblink, "SHOW TABLE STATUS");
Получение количества записей в таблице
222: $tabinfo[$item['Name']] = $item['Rows'];
Проверка (которой нет?), на количество записей в таблице.
303: if ($tabinfo[$table] > 0) {
И получается, что строки 303 - 333 просто игнорируются, т.к. скрипт ошибочно считает что записей в БД нет.
Это судя по всему известная проблема.
https://www.google.com.ua/search?q=show+table+status+rows+wrong
-
Сделал тут давеча бекап средствами DLE и через некоторое время решил восстановить БД. После импорта слетела авторизация. Каково же было мое удивление, когда оказалось, что таблица dle_users не была сохранена, но при импорте была пересоздана и оказалась пустой. Т.е. полностью слетели данные таблицы dle_users и dle_admin_sections (возможно и другие некоторые).
Выполняю запрос на dle 12.1
SHOW TABLE STATUS WHERE name like 'dle_users'
В результате вижу Rows = 0, хотя записи однозначно есть.
Выполняю этот же запрос на DLE 12, все норм.
Кодировка utf-8, версия PHP: 5.6, 7.0, 7.1
PS. Кто не знает, в файле engine/inc/dumper.php именно по результатам этого запроса выполняется проверка, экспортировать данные из таблицы или нет (т.к. их нету типа).
-
DLE 12.
Если у группы пользователей запрещен доступ (или открыт) в определенные категории, то он получит ошибку:
Unknown column 'dle_post.category' in 'where clause'
Код:
(SELECT id FROM " . PREFIX . "_comments " . $where . " ORDER BY id desc LIMIT ".$fromcstart.", ".intval($config['comm_nummers'])." ) as sub
Имеем запрос:
(SELECT id FROM dle_comments WHERE dle_post.category NOT REGEXP '[[:<:]](3)[[:>:]]' ORDER BY id desc LIMIT 0, 30 ) as sub
не хватает LEFT JOIN dle_post ON ...
(SELECT " . PREFIX . "_comments.id FROM " . PREFIX . "_comments LEFT JOIN " . PREFIX . "_post ON " . PREFIX . "_comments.post_id=" . PREFIX . "_post.id " . $where . " ORDER BY " . PREFIX . "_comments.id desc LIMIT ".$fromcstart.", ".intval($config['comm_nummers'])." ) as sub
-
engine/download.php
$value = str_replace ( "www.", "", $value );
http://arwwww.ru/ => arwru
Да и зачем она вообще если есть clean_url
-
Точно, подзабыл я про тег ifxfvalue.
Но в любом случае, мне кажется, что лучше изначально исключить не используемые в шаблоне доп.поля.
-
engine/modules/show.short.php
Разве эта строка должна находиться внутри цикла while?
$xfields = xfieldsload();
Я бы так вообще предложил такой вариант, перед while:
$xfields = xfieldsload(); foreach ($xfields as $k => $v) { if (stripos($tpl->copy_template, '_'.$v[0].']') == false) { unset($xfields[$k]); } }
- 1
-
При временном размещении пользователя в группе используется разный формат даты в datepicker и тот что выводит DLE.
DLE: d.m.Y H:i:s
datepiker: Y-m-d H:i
Открыть engine/inc/editusers.php
Найти строку:
if( $row['time_limit'] != "" ) $row['time_limit'] = date( $langformatdatefull, $row['time_limit'] );
Заменить на:
if( $row['time_limit'] != "" ) $row['time_limit'] = date( "Y-m-d H:i", $row['time_limit'] );
-
Если в заголовке статьи использовать тег {content}, то при просмотре полной новости он будет выводиться внутри {headers} и затем заменяться на контент.
-
14 часа назад, SKYNET74 сказал:
С чего это он будет отображаться как обычный текст?
Будет отображаться точно так же, как и был добавлен.С того, что htmlpurifier был добавлен только в 11.2. До этого в стандартном BB редакторе подобная конструкция легко проходит и отображается в итоге http://example.com/
-
Допустим в фильтре слов стоит запрет добавления комментариев с текстом http
Но комментарий
http://example.com/
Будет успешно добавлен и в теле страницы будет отображаться как нормальный текст.
-
Подключаю файл:
{include file="file.php?field=[xfvalue_poster]"}
Имя картинки примерно такое:
/uploads/posts/2016-05/1027396235-agenty-sch.i.t..jpg
В файле engine/classes/templates.class.php в строке
$name = str_replace( '..', '', $name );
Заменяются точки не только в пути подключения файла, но и в передаваемом значении. После чего в файле уже получаем значение с неправильным адресом.
/uploads/posts/2016-05/1027396235-agenty-sch.i.tjpg
Хак: Правильное расположение новой категории
в Готовые Моды, Хаки, Локализаторы, Советы
Опубликовано: · Изменено пользователем Sander1
При создании категории или подкатегории не учитывается параметр posi. Вернее у новой категории этот параметр позиции равен единице, отчего при создании категория размещается не в конце списка, а в начало ветки:
Лично мне это кажется дико неудобным. Создал, перетянул (а когда категорий 50 и тянуть со скроллом, запоминая на глазок отсутп... уфф) в конец списка, сохранил. Многовато-лишних действий.
Данный метод подойдет так же и для предыдущих версий DLE. Только там код подключения немного отличается, вставлять нужно после строки, которая начинается на:
С уважением,
Олег Александрович a.k.a. Sander