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

Sander1

местные
  • Публикации

    109
  • Зарегистрирован

  • Посещение

  • Дней в лидерах

    19

Сообщения, опубликованные пользователем Sander1

  1. 5 часов назад, celsoft сказал:

    Какое есть. Нам нужно было зарезервировать какой то символ. Было принято решение что именно этот.

    Я понимаю причину такого решения. Полагаю в текущей реализации работы с доп.полями это действительно единственный наименее болезненный выход.
    Основная суть посыла в том, что необходимо как-то уведомлять пользователя о запрете использовать запятые, а так же "новое не должно ломать старое".

     

    3 часа назад, aleksandrhristich сказал:

    Второй пункт не логичный какой-то

    Да это просто выдуманный нежизнеспособный пример. Речь не бизнес-логике воображаемого приложения, а о неочевидном для пользователей изменении поведения поля при наличии запятой в списках.

     

    39 минут назад, Gameer сказал:

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

    Будут проблемы при смене символа. Если сейчас `,`, а потом в шаблоне надо будет `/`, то придётся выполнять перестроение всех полей с заменой `,` → `/`. А это как-то не логично и накладно. И опять же, будут проблемы если в значении поля уже используется символ `/`, то получим ту же проблему что и в топике.

     

    Как вариант возможно можно было бы рассмотреть вариант с хранением данных в json формате. Ранее, когда JSON не работал с кириллицей, вариант с кастомным форматом `поле|значение||поле2|значение2` был вполне приемлем. Но сейчас, как мне кажется, использование json будет наиболее приемлемым.
    Это решит многие проблемы и позволит более гибко хранить данные с различными дополнительными параметрами, как у загружаемых изображений к примеру.
    Так же позволит использовать цельные значения доп.полей без необходимости костылить/заменять запятые, например подборки `Про мафию, банды и мошенников`.

    Я уж молчу о файле xfields.txt Он уже давно просится перейти на json формат. Строка вида `||text||1|0|0|0|||0|0||||||||||||||` вызывает лишь отчаяние при попытке понять какие там параметры в ней прописаны.

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

    Основная суть проблемы в том, что:
    1. Поменялась логика поведения прежнего функционала даже при выключенной опции мультивыбора.
    2. Нигде не написано, что теперь нельзя использовать запятую в значении поля списка. Оно просто молча перестало работать как было раньше.

     

    Почему я считаю это критической ошибкой.
    Допустим это интернет магазин, в поле "Наличие" прописаны значения:

    Есть, в достаточном количестве
    Есть, под заказ
    Нет, ожидается поставка
    Нет, снято с производства

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

    • Поддерживаю 1
  3. Проблема связана с добавлением функционала Разрешить выбор нескольких значений
    Значение в списке имеет вид:

    Да, можно

    В /engine/inc/xfields.php теперь все значения списка по умолчанию обрабатываются словно включен мультивыбор и разбиваются по запятой:

    $fieldvalue = explode(',', $fieldvalue);  line: 1178

    Т.е. в БД строка имеет вид:

    field|Да, можно||other|value

    где `Да, можно` – это одно цельное значение. А скрипт обрабатывает его словно это перечень значений.

    В результате чего при каждом редактировании новости слетает выбранное прежде значение.
    В коде идёт сравнение строки `Да, можно` из списка и массива [`Да`, ` можно`]. Что и приводит к некорректному результату.

    in_array($value1[0], $fieldvalue)

     

  4. Если при редактировании/создании RSS информера оставить поле выбора категории пустым, то будет Fatal Error. PHP 8 для функции count() теперь выбрасывает ошибку если ей передан не поддерживаемый тип, в данном случае NULL.

    engine/inc/rssinformer.php

    if( !count( $category ) ) {

     

  5. Не-а. Не указано.

    Цитата

    Максимально допустимый вес изображений, загружаемых для публикаций
    Введите максимальный объём загружаемого изображения (в килобайтах)

    Да и в целом неплохо бы добавить "защиту от дурака".

    К тому же проблема только в файле categories.php. Во всех других файлах этой проблемы нет.

  6. Комментарий удаляется из БД прямым запросом игнорируя параметр древовидных комментариев.

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

  7. 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 или хотя бы пустую строку в качестве имени?

  8. Проблемы с очисткой кеша.

    1. При добавлении коммента, который уходит на модерацию – всё равно чистится кеш. Самое плохое что чистится кеш всего контента – `news_`

    2. При ajax подтверждении комментария – излишне чистится почти весь кеш всего сайта, кроме того который реально необходимо чистить – `'comm_' . $post_id`

  9. В админке в расширенном поиске новостей добавить возможность поиска по исключению.
    К примеру – найти все новости где доп.поле НЕ содержат строку poster|

    Какой-нибудь селектор со списком выбора, к примеру:

    Содержит
    Не содержит
    Строго равно
    Начинается на
    Начинается НЕ на
    Заканчивается на
    Заканчивается НЕ на

     

    • Нравится 1
    • Поддерживаю 1
  10. При массовом подтверждении комментариев если случайно обновить страницу и подтвердить повторную отправку формы, то в новостях будет повторно увеличен счётчик comm_num+1
    Не выполняется проверка на существование комментария и находится ли он на модерации.

  11. Парочка предложений по утилите управления плагинами.

    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}

     

  12. На почту отправляется одноразовая ссылка для восстановления пароля, при переходе по которой удаляется запись из БД и повторно воспользоваться ею нет возможности.
    Некоторые почтовые сервисы самостоятельно выполняют переход по ссылке (для проверки на вирусы или ещё с какой-то своей целью), в результате чего пользователь имеет не рабочую ссылку восстановления.

    PS. Простое решение, добавляется проверка IP адреса, чтобы страница сброса пароля работала только если её открыл тот же IP адрес с которого выполнялся запрос на восстановление.
    https://github.com/San-Dev/dle-plugins/blob/master/lostpassword-by-ip.xml

    • Нравится 3
  13. 18 часов назад, celsoft сказал:

    При использовании где? DLE нигде вообще не использует DIRECTORY_SEPARATOR поэтому почему он вдруг его должен как то заменять?

    Да, в движке сейчас нигде не используется. Но ведь система создана для плагинов, вот про них и речь.
    Взять тот же /engine/classes/composer/vendor/composer/ClassLoader.php в нём эта константа используется.

    Можно сказать, это даже скорее не баг, а небольшое пожелание для будущих версий.

    PS. Проблема возникла в самописном автозагрузчике классов.

  14. При использовании DIRECTORY_SEPARATOR на Windows - путь к файлу получается с обратным слешем:

    \engine\modules\file.php

    В то время как в утилите управления плагинами прописан путь:

    /engine/modules/file.php

    Отчего DLEPlugins::Check() не находит файл.

    В принципе мелочь, но ведь не сложно из коробки прописать строку:

    '/' === DIRECTORY_SEPARATOR || $check_file = str_replace(DIRECTORY_SEPARATOR, '/', $check_file);

     

  15. Проблема во всех версиях до 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 параметры"

  16. 1617045261_logo.png

    Основная цель этого модуля - это помощь в поиске проблемных мест и анализе общей производительности сайта.
    Модуль собирает всю подробную информация по всем медленным запросам.
    Затем в админке можно увидеть общую картину, какие разделы дольше всего обрабатываются, какие запросы в БД наиболее частые и наиболее медленные, какие проблемные файлы шаблонов и многое другое.

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

    Цитата

    Страница модуля: Highload by Sander
    Цена: $17

    На странице модуля представлена более подробная информация, а так же там его можно купить в автоматическом режиме

     

  17. Если по заданным критериям не найдено никаких комментариев и используется memcache, то кеширование не будет работать, поскольку метод:

    $content = $comments->build_customcomments( $tpl, $custom_template.'.tpl' );

    Ничего не возвращает, т.е. имеем $content = NULL
    И в мемкеш так же записывается значение NULL

     И следовательно проверка кеша уже недействительна.

    if( $content !== false ) {

     

  18. 1612540862_logo.png

    С помощью данного модуля можно организовать разделение страницы полной новости на вкладки с отдельными URL адресами.

    Для каждой вкладки создается своя отдельная URL страница со своим шаблоном.
    Панель навигации подключается автоматически, но так же можно подключить ее вручную в любом месте сайта.
    Внешний вид панели можно оформить в любом стиле. Единственное что необходимо - это наличие знаний html+css.

    1612534641_screenshot_2.png

    1612534613_screenshot_4.2.png

    1612534604_screenshot_5.png

    1612534618_screenshot_6.png


    Админка:
    1612535456_screenshot_10.png

    1612535524_screenshot_11.png
     

    Цитата

    Страница модуля: Fullpage-Tabs by Sander
    Демо: Довод / Tenet (2020)
    Цена: $8

    На странице модуля представлена более подробная информация, а так же там его можно купить в автоматическом режиме

     

    • Поддерживаю 1
  19. 1608931119_logo.png


    Данный модуль предназначен для легкого и удобного управления всеми custom блоками на вашем сайте.
    Но главной и ключевой его особенностью является полноценная, удобная и безопасная организация AJAX навигации в custom блоке.

    Админка:
    1608931556_screenshot_6.png

    1611579058_screenshot_7.png

    Виды навигации:
    В модуле поддерживается 5 типов навигации (и без навигации).

    1. Стандартная, цифры и кнопки Вперед-Назад.
      1608931558_screenshot_7.png
       
    2. Только цифры
      1608931507_screenshot_10.png
       

    3. Только кнопки Вперед-Назад
      1608931548_screenshot_9.png
       

    4. Показать еще
      1608931515_screenshot_8.png
       

    5. lazyLoad - автоподгрузка по мере прокрутки контента.

     

    Цитата

    Страница модуля: AJAX-Custom by Sander
    Демо: TestFilm - тестовый сайт
    Цена: $7

    На странице модуля представлена более подробная информация, а так же там его можно купить в автоматическом режиме

     

  20. 1611098557_views-top-v2.png

    Новая версия модуля - дополнения для тега custom, который позволяет организовать вывод реально популярных материалов исходя из значений текущих просмотров.
     
    Как известно, в DLE есть возможность вывод "популярных" новостей.
    Это можно сделать через тег {topnews} или посредством {custom order="reads" days="30"}
     
    Но в обоих случаях будет выведен топ популярных материалов основываясь на дате публикации.
    Т.е. если новость была опубликована более месяца назад, но по сей день пользуется популярностью, то вышеуказанные методы такую новость не будут показывать в ТОП-е.
     
    Для решения этой проблемы и создан модуль Views-Top.
    Основной его функционал - это сбор суточной статистики и предоставление возможности вывести реально популярные материалы за заданный промежуток времени.
    1611143091_screenshot_6.png
     
    Так же, помимо его основного функционала, он работает в разы быстрее чем order="reads"
    Пример его использования:
    {custom order="views_top_7"}
    где 7 - количество дней (ТОП созданный в админке модуля).
     
     
    Цитата

    Страница модуля: Views-Top v.2 by Sander
    Демо: TestFilm - тестовый сайт
    Цена: $5

    На странице модуля представлена более подробная информация, а так же там его можно купить в автоматическом режиме

     

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