Sander1
-
Публикации
109 -
Зарегистрирован
-
Посещение
-
Дней в лидерах
19
Сообщения, опубликованные пользователем Sander1
-
-
Нууу, очень спорное решение в данном случае.
Вообще нигде не указано, что теперь нельзя использовать запятую в списках.
Человек просто заметил, что поле не сохранилось. Нет никаких ошибок или сообщений при использовании запятой в поле.Основная суть проблемы в том, что:
1. Поменялась логика поведения прежнего функционала даже при выключенной опции мультивыбора.
2. Нигде не написано, что теперь нельзя использовать запятую в значении поля списка. Оно просто молча перестало работать как было раньше.Почему я считаю это критической ошибкой.
Допустим это интернет магазин, в поле "Наличие" прописаны значения:Есть, в достаточном количестве Есть, под заказ Нет, ожидается поставка Нет, снято с производства
При редактировании будет всегда автоматически выбираться первое значение. И если админ не сразу заметит (а он не сразу заметит), то большое количество данных будет утеряно. И придётся немного помучаться, чтобы восстановить данные из бекапа. И будет хорошо, если всё ограничится лишь восстановлением данных...
- 1
-
Проблема связана с добавлением функционала Разрешить выбор нескольких значений
Значение в списке имеет вид:Да, можно
В /engine/inc/xfields.php теперь все значения списка по умолчанию обрабатываются словно включен мультивыбор и разбиваются по запятой:
$fieldvalue = explode(',', $fieldvalue); → line: 1178
Т.е. в БД строка имеет вид:
field|Да, можно||other|value
где `Да, можно` – это одно цельное значение. А скрипт обрабатывает его словно это перечень значений.
В результате чего при каждом редактировании новости слетает выбранное прежде значение.
В коде идёт сравнение строки `Да, можно` из списка и массива [`Да`, ` можно`]. Что и приводит к некорректному результату.in_array($value1[0], $fieldvalue)
-
Если при редактировании/создании RSS информера оставить поле выбора категории пустым, то будет Fatal Error. PHP 8 для функции count() теперь выбрасывает ошибку если ей передан не поддерживаемый тип, в данном случае NULL.
engine/inc/rssinformer.php
if( !count( $category ) ) {
-
Не-а. Не указано.
ЦитатаМаксимально допустимый вес изображений, загружаемых для публикаций
Введите максимальный объём загружаемого изображения (в килобайтах)Да и в целом неплохо бы добавить "защиту от дурака".
К тому же проблема только в файле categories.php. Во всех других файлах этой проблемы нет.
-
Fatal error: Uncaught TypeError: Unsupported operand types: string * int in /engine/inc/categories.php:127
$max_file_size = (int)($config['max_up_size'] * 1024);
Нужно так:
$max_file_size = (int)$config['max_up_size'] * 1024;
В конфиге:
'max_up_size' => '',
-
Комментарий удаляется из БД прямым запросом игнорируя параметр древовидных комментариев.
Получается что если у комментария были ответы, то из поста пропадает вся ветка, хотя комментарии-ответы по факту существуют.
-
35 минут назад, celsoft сказал:
DLE делает все правильно
Комментарий отправляется на модерцию. Счётчик новости не меняется. Зачем в таком случае чистить кеш?
engine/modules/addcomments.php
Перед строкой:clear_cache( array( 'news_', 'comm_'.$post_id, $cprefix, 'stats' ) );
Достаточно добавить код:
if ($where_approve)
И обратите внимание на п.2. При подтверждении комментария через AJAX обработчик не очищается кеш комментариев новости.
PS. И ещё, чтобы отдельную тему не создавать. Пользователь с именем `noname` проклят невозможностью выставлять оценки в рейтинге.
Все гости записываются в таблицу `dle_logs` и `dle_comment_rating_log` под именем `noname`.
Может будет правильнее для гостей записывать NULL или хотя бы пустую строку в качестве имени? -
Проблемы с очисткой кеша.
1. При добавлении коммента, который уходит на модерацию – всё равно чистится кеш. Самое плохое что чистится кеш всего контента – `news_`
2. При ajax подтверждении комментария – излишне чистится почти весь кеш всего сайта, кроме того который реально необходимо чистить – `'comm_' . $post_id`
-
В админке в расширенном поиске новостей добавить возможность поиска по исключению.
К примеру – найти все новости где доп.поле НЕ содержат строку poster|Какой-нибудь селектор со списком выбора, к примеру:
Содержит Не содержит Строго равно Начинается на Начинается НЕ на Заканчивается на Заканчивается НЕ на
- 1
- 1
-
Не охота создавать отдельный топик, файл engine/ajax/adminfunctions.php – небольшая опечатка:
index.php??subaction
PS. К слову в этом файле для метода commentspublic тоже можно добавить проверку существования коммента на всякий случай.
-
При массовом подтверждении комментариев если случайно обновить страницу и подтвердить повторную отправку формы, то в новостях будет повторно увеличен счётчик comm_num+1
Не выполняется проверка на существование комментария и находится ли он на модерации. -
Парочка предложений по утилите управления плагинами.
1. Есть параметр `Обязательное наличие плагина`. Но он поддерживает только один плагин. А иногда когда делаешь комплексную систему – идёт связка из нескольких отдельных модулей. Идеальным вариантом было бы использование чего-то подобного конфигурационному файлу composer-а, например что-то примитивное типа:
{ "name": "Sandev\CurrentModName", "require": { "php": "^7.1 || 8.1", "dle": ">=14.2 && <16.0", "Sandev\RequiredModule": "*", "Sandev\AnotherRequiredModule": "*", } }
А если сюда ещё добавить и autoload-psr4, то будет вообще сказка.
2. На странице списка плагинов сделать поиск на JS, чтобы был без перезагрузки страницы.
А если развить тему из п.1, то было бы очень удобна организация быстрого поиска по vendor-у. Выводить список авторов на подобии облака тегов.3. На страницу плагина добавить все элементы управления плагином, а не только "Сохранить". Это прям вот вообще необходимо.
4. В списке плагинов добавить обычную ссылку на страницу редактирования плагина, чтобы можно было открыть редактирование плагина в новом окне.
Комментарий по п.3 и п.4: Заходишь на незнакомый сайт, нужно выполнить оптимизацию. А там 50+ плагинов и часть из них имеют имена `rate fav img`, `JS скрипты`, `Новое` и т.п. Приходится открывать плагин, смотреть что там, потом возвращаться назад, вновь искать этот плагин в огромном списке чтобы выполнить любое действие над ним кроме сохранения. Это жутко неудобно.
И незначительный багрепорт. Если первый в списке плагин переместить вниз, то у него не будет верхней кромки из-за наличия класса `no-border-top`. Странно зачем вообще так сделано если можно просто стилями всё оформить:
.table tbody tr + tr td {border-top: 1px solid:#ccc}
-
На почту отправляется одноразовая ссылка для восстановления пароля, при переходе по которой удаляется запись из БД и повторно воспользоваться ею нет возможности.
Некоторые почтовые сервисы самостоятельно выполняют переход по ссылке (для проверки на вирусы или ещё с какой-то своей целью), в результате чего пользователь имеет не рабочую ссылку восстановления.PS. Простое решение, добавляется проверка IP адреса, чтобы страница сброса пароля работала только если её открыл тот же IP адрес с которого выполнялся запрос на восстановление.
https://github.com/San-Dev/dle-plugins/blob/master/lostpassword-by-ip.xml- 3
-
18 часов назад, celsoft сказал:
При использовании где? DLE нигде вообще не использует DIRECTORY_SEPARATOR поэтому почему он вдруг его должен как то заменять?
Да, в движке сейчас нигде не используется. Но ведь система создана для плагинов, вот про них и речь.
Взять тот же /engine/classes/composer/vendor/composer/ClassLoader.php в нём эта константа используется.Можно сказать, это даже скорее не баг, а небольшое пожелание для будущих версий.
PS. Проблема возникла в самописном автозагрузчике классов.
-
При использовании DIRECTORY_SEPARATOR на Windows - путь к файлу получается с обратным слешем:
\engine\modules\file.php
В то время как в утилите управления плагинами прописан путь:
/engine/modules/file.php
Отчего DLEPlugins::Check() не находит файл.
В принципе мелочь, но ведь не сложно из коробки прописать строку:
'/' === DIRECTORY_SEPARATOR || $check_file = str_replace(DIRECTORY_SEPARATOR, '/', $check_file);
-
Проблема во всех версиях до DLE 15.3 включительно.
$custom_cache_id = "customcomments".$param_str.$config['skin'];
Кеш проверятся с использованием значения вышеуказанной переменной.
$content = dle_cache( "news", "customcomments".$custom_cache_id, true );
Т.е. значение получается "customcommentscustomcomments параметры"
А создается кеш с другим именем:
if ( $config['allow_cache'] ) create_cache( "news", $content, "customcomments".$param_str.$config['skin'], true );
Т.е. тут значение получается "customcomments параметры"
-
Обновление - v.1.1
Добавлен раздел с отображением структуры папок сайта и их размеров.
-
Основная цель этого модуля - это помощь в поиске проблемных мест и анализе общей производительности сайта.
Модуль собирает всю подробную информация по всем медленным запросам.
Затем в админке можно увидеть общую картину, какие разделы дольше всего обрабатываются, какие запросы в БД наиболее частые и наиболее медленные, какие проблемные файлы шаблонов и многое другое.Как показывает практика, поиск проблемы занимает гораздо больше времени и усилий, чем её решение.
С помощью данного модуля, можно легко узнать и увидеть всё, что происходит в движке на различных этапах его работы.
ЦитатаСтраница модуля: Highload by Sander
Цена: $17На странице модуля представлена более подробная информация, а так же там его можно купить в автоматическом режиме
-
Да, точно.
Прошу прощения, то видимо я что-то запутался.Сбило с толку, что при разных типах кеширования один и тот же код в одинаковой ситуации возвращает NULL и string('')
-
Если по заданным критериям не найдено никаких комментариев и используется memcache, то кеширование не будет работать, поскольку метод:
$content = $comments->build_customcomments( $tpl, $custom_template.'.tpl' );
Ничего не возвращает, т.е. имеем $content = NULL
И в мемкеш так же записывается значение NULLИ следовательно проверка кеша уже недействительна.
if( $content !== false ) {
-
С помощью данного модуля можно организовать разделение страницы полной новости на вкладки с отдельными URL адресами.
Для каждой вкладки создается своя отдельная URL страница со своим шаблоном.
Панель навигации подключается автоматически, но так же можно подключить ее вручную в любом месте сайта.
Внешний вид панели можно оформить в любом стиле. Единственное что необходимо - это наличие знаний html+css.
Админка:
ЦитатаСтраница модуля: Fullpage-Tabs by Sander
Демо: Довод / Tenet (2020)
Цена: $8На странице модуля представлена более подробная информация, а так же там его можно купить в автоматическом режиме
- 1
-
Данный модуль предназначен для легкого и удобного управления всеми custom блоками на вашем сайте.
Но главной и ключевой его особенностью является полноценная, удобная и безопасная организация AJAX навигации в custom блоке.Админка:
Виды навигации:
В модуле поддерживается 5 типов навигации (и без навигации).-
Стандартная, цифры и кнопки Вперед-Назад.
-
Только цифры
-
Только кнопки Вперед-Назад
-
Показать еще
-
lazyLoad - автоподгрузка по мере прокрутки контента.
ЦитатаСтраница модуля: AJAX-Custom by Sander
Демо: TestFilm - тестовый сайт
Цена: $7На странице модуля представлена более подробная информация, а так же там его можно купить в автоматическом режиме
-
Стандартная, цифры и кнопки Вперед-Назад.
-
Новая версия модуля - дополнения для тега custom, который позволяет организовать вывод реально популярных материалов исходя из значений текущих просмотров.Как известно, в DLE есть возможность вывод "популярных" новостей.Это можно сделать через тег {topnews} или посредством {custom order="reads" days="30"}Но в обоих случаях будет выведен топ популярных материалов основываясь на дате публикации.Т.е. если новость была опубликована более месяца назад, но по сей день пользуется популярностью, то вышеуказанные методы такую новость не будут показывать в ТОП-е.Для решения этой проблемы и создан модуль Views-Top.Основной его функционал - это сбор суточной статистики и предоставление возможности вывести реально популярные материалы за заданный промежуток времени.Так же, помимо его основного функционала, он работает в разы быстрее чем order="reads"Пример его использования:{custom order="views_top_7"}где 7 - количество дней (ТОП созданный в админке модуля).Цитата
Страница модуля: Views-Top v.2 by Sander
Демо: TestFilm - тестовый сайт
Цена: $5На странице модуля представлена более подробная информация, а так же там его можно купить в автоматическом режиме
-
2 часа назад, kamensk сказал:
Посещалка какая? На хостинге размещенны?
У меня - нулевая посещаемость, это тестовые сайты. На хостинге и на локалке.
Критическая ошибка в доп. полях (список) – DLE 17.1
в Прием багов
Опубликовано:
Я понимаю причину такого решения. Полагаю в текущей реализации работы с доп.полями это действительно единственный наименее болезненный выход.
Основная суть посыла в том, что необходимо как-то уведомлять пользователя о запрете использовать запятые, а так же "новое не должно ломать старое".
Да это просто выдуманный нежизнеспособный пример. Речь не бизнес-логике воображаемого приложения, а о неочевидном для пользователей изменении поведения поля при наличии запятой в списках.
Будут проблемы при смене символа. Если сейчас `,`, а потом в шаблоне надо будет `/`, то придётся выполнять перестроение всех полей с заменой `,` → `/`. А это как-то не логично и накладно. И опять же, будут проблемы если в значении поля уже используется символ `/`, то получим ту же проблему что и в топике.
Как вариант возможно можно было бы рассмотреть вариант с хранением данных в json формате. Ранее, когда JSON не работал с кириллицей, вариант с кастомным форматом `поле|значение||поле2|значение2` был вполне приемлем. Но сейчас, как мне кажется, использование json будет наиболее приемлемым.
Это решит многие проблемы и позволит более гибко хранить данные с различными дополнительными параметрами, как у загружаемых изображений к примеру.
Так же позволит использовать цельные значения доп.полей без необходимости костылить/заменять запятые, например подборки `Про мафию, банды и мошенников`.
Я уж молчу о файле xfields.txt Он уже давно просится перейти на json формат. Строка вида `||text||1|0|0|0|||0|0||||||||||||||` вызывает лишь отчаяние при попытке понять какие там параметры в ней прописаны.