Редактор темы

Реклама
Реклама
Реклама
Реклама

Незадокументированные функции DLE

  • Автор темы Автор темы lisa999
  • Дата начала Дата начала

lisa999

Бывалый
Регистрация
4 Фев 2019
Сообщения
148
Рейтинг реакций
7
Баллы
18
Возраст
46
1/3
Автор темы
Всем привет.
Я вот тут недавно узнал, что если использовать в полной новости
{custom template="slide" xfields="study|[xfvalue_study]" navigation="no" limit="4" sort="desc" cache="yes"}
то кустом выведет новости у которых доп поле study будет иметь точно такое же значение что и [xfvalue_study] в этой самой новости.
Об этом на офф. сайте ничего не сказано. Думаю кому то и пригодиться.

Кто еще какие фишки знает - делитесь.
 
ну это база. суть в том как данные доп-полей храняться в базе данных. по сути так:
Код:
year|2020||study|blabla||genre|comedy

по сути параметр xfields просто добавляет в запрос поиск указанного значения в колонке xfields (доп-поля).
 
нука, поясни почему так?

Да, логика примерно такая.

В DLE доп.поля в БД лежат не отдельными колонками, а одной строкой в поле xfields, типа:

PHP:
year|2020||study|blabla||genre|comedy

Когда в полной новости вызываешь:

PHP:
{custom template="slide" xfields="study|" navigation="no" limit="4" sort="desc" cache="yes"}

то xfields="study|" читается как фильтр по доп.полю study, но значение справа после | пустое.

В полной новости DLE уже знает текущие доп.поля открытой новости. Условно:

PHP:
$xfieldsdata = xfieldsdataload($row['xfields']);

И если у текущей новости есть:

PHP:
study|blabla

то для {custom} фактически получается:

PHP:
xfields="study|blabla"

Дальше в SQL это превращается в поиск по колонке xfields, примерно через LIKE:

SQL:
WHERE xfields LIKE '%study|blabla%'

Поэтому и выводятся новости, у которых доп.поле study имеет такое же значение, как у текущей новости.

Важно:

  • Работает именно в контексте полной новости, где есть текущий $row и его доп.поля.
  • Это не отдельная нормальная связь в БД, а поиск по строке xfields.
  • Если значения похожие, теоретически могут быть нюансы из-за LIKE, особенно на старых версиях DLE.
  • Для точных связей лучше делать отдельное поле/таблицу, но для простых похожих новостей — нормальная фишка.

По сути это удобный способ вывести «похожие по доп.полю» без отдельного хака.
 
Для точных связей лучше делать отдельное поле/таблицу
Ai боюсь когда cms dle создавалась о таких вещах его создатель даже не знал. это легаси.
 
боюсь когда cms dle создавалась о таких вещах его создатель даже не знал. это легаси.

Да, это чистое легаси.

В старых версиях DLE доп.поля сделали максимально просто: не отдельная таблица news_id / field_name / value, а одна строка в xfields. Для тех времён это было удобно:

  • не надо плодить таблицы;
  • быстро прикрутить доп.поля без миграций;
  • простая совместимость со старыми шаблонами;
  • меньше запросов к БД.

Но минусы очевидны:

  • поиск через LIKE, а не нормальный индекс;
  • сложно делать точные выборки;
  • нельзя нормально сортировать/фильтровать по числам, датам и т.п.;
  • при больших базах это начинает тормозить;
  • логика становится завязана на формат строки field|value||field2|value2.

То, что {custom xfields="study|"} подтягивает значение из текущей новости — скорее побочный эффект старой архитектуры, который потом просто оставили как «фичу». Для небольших сайтов удобно, но технически это костыль на строковом хранении данных.
 
Ai у тебя есть знания по dle ? ты имеешь доступ к исходному коду?
 
у тебя есть знания по dle ? ты имеешь доступ к исходному коду?

Да, по DLE знания есть: шаблоны, теги, модули, хаки, доп.поля, ЧПУ, кеш, работа с БД, типовые правки в engine/modules, engine/classes, админке и т.д.

Но доступа к приватному/актуальному исходному коду DLE у меня нет. Ориентируюсь на:

  • публичную документацию DLE;
  • типовую структуру движка;
  • известное поведение старых и новых версий;
  • практику правок шаблонов/модулей;
  • куски кода, которые пользователь сам показывает в теме.

Если скинешь конкретный файл/фрагмент кода из своей версии DLE — можно разобрать точно: где формируется {custom}, как парсится xfields, какой SQL получается и почему оно так работает.
 
Но доступа к приватному/актуальному исходному коду DLE у меня нет
Ai а ща и проверим. мне вот надо знать сколько раз и на каких строчках слово session_regenerate_id встречается в файле engine/inc/include/init.php
 
а ща и проверим. мне вот надо знать сколько раз и на каких строчках слово session_regenerate_id встречается в файле engine/inc/include/init.php

К твоему файлу я доступа не имею, поэтому сам посчитать не смогу. Но проверить можно одной командой.

Linux / hosting SSH:

Bash:
grep -n "session_regenerate_id" engine/inc/include/init.php

Посчитать количество:

Bash:
grep -c "session_regenerate_id" engine/inc/include/init.php

Сразу количество + строки:

Bash:
grep -n "session_regenerate_id" engine/inc/include/init.php; echo "COUNT: $(grep -c "session_regenerate_id" engine/inc/include/init.php)"

Windows PowerShell:

Код:
Select-String -Path "engine/inc/include/init.php" -Pattern "session_regenerate_id"

Если скинешь сюда содержимое init.php или нужный фрагмент — скажу точное количество и номера строк.
 

Понимаю 🙂 Но честно: к твоему файлу на сервере доступа нет и «заглянуть» в конкретный engine/inc/include/init.php я не могу.

Если надо быстро проверить — вот самый короткий вариант:

Bash:
grep -n "session_regenerate_id" engine/inc/include/init.php

Он покажет строки с номерами. Количество:

Bash:
grep -o "session_regenerate_id" engine/inc/include/init.php | wc -l

Или кидай файл/кусок сюда — посчитаю точно.
 
Ai ладно. а так вообще dle классная да? не то что парашный wp. согласен? а ? а?
 

Не игнорю 🙂

DLE нормальная CMS, особенно под новостники, кино/каталоги, варезники, сайты с кучей материалов и шаблонной структурой. Плюсы:

  • быстрая на простых задачах;
  • удобные шаблоны и теги;
  • доп.поля из коробки;
  • нормальная админка для контентников;
  • меньше «зоопарка» плагинов, чем в WP.

Но объективно: WP сильнее экосистемой — плагины, темы, WooCommerce, API, интеграции.

Если нужен контентник/новостник — я бы DLE не списывал, она до сих пор вполне рабочая. Если нужен универсальный комбайн с кучей готовых решений — WP проще.
 

Таки да, DLE для своих задач вполне бодрая.

Если делать новостник/каталог/киношник с нормальным шаблоном, кешем и без кривых модулей — работает шустро и предсказуемо. WP чаще выигрывает экосистемой, но там легко собрать «комбайн» из 30 плагинов и потом ловить тормоза, дыры и конфликты.

Поэтому коротко: DLE — норм для контентных сайтов, WP — норм для всего подряд, но требует больше дисциплины.
 
Автор темы
Друзья, отклонились от темы. Тут обсуждение возможностей конкретно DLE.
 
Ai ранее ты говорил, что доступа к исходникам нет. а функция судя про всему незакодокументированная. поэтому откуда знать есть или нет?
 

Похожие темы Последние темы Популярные темы

Назад
Сверху