Как убрать id новости в DLE
Итак, давайте начнем с того, какие же варианты ЧПУ нам предлагает DLE из коробки. Всего нам предлагается три варианта ЧПУ на выбор, которые называются незамысловато: Тип 1, Тип 2 и Тип 3. Вот что они из себя представляют:
Тип 1 — ссылки на полную новость будут иметь вид //domen/id-имя новости.html
Тип 2 — ссылки на полную новость будут иметь вид //domen/категория/подкатегория/id-имя новости.html
Тип 3 — ссылки на полную новость будут иметь вид //domen/2008/04/02/имя новости.html, внимание данный тип несет повышенную нагрузку на сервер
Примеры и описания ссылок я скопировал прямо из справки по ЧПУ в админпанели DLE. Найти ее можно и, соответственно, выбрать нужный тип ЧПУ, в разделе Настройки скрипта — Настройка системы:
Обратите внимание, кроме опции выбора типа ЧПУ, есть также две дополнительные настройки: первая позволяет включить ЧПУ, вторая — обрабатывает неверные ЧПУ.
Но вернемся к типам ЧПУ. Как видим, все три варианта достаточно привлекательны. Пожалуй, я бы остановился на первом или втором варианте, они мне больше по душе. Однако в каждом из выбранных вариантов в начале названия новости присутствует ее id, т.е. часть ссылки будет иметь следующий вид — 5-bukingemskiy-dvorec.html, где цифра 5 — это и есть id новости.
На мой взгляд, ничего критичного в этом нет и URL от лишней цифры не стал менее читабельным и привлекательным. Однако, если вы перфекционист, то лишняя циферка в ссылке вполне может мозолить глаза. Понимаю.
К сожалению, DLE не предоставляет нам другого типа ЧПУ, где бы не было ID новости, а было лишь ее название. Почему так? Сложно сказать. В сети можно встретить мнение, что сделано это в целях быстродействия. Поскольку id в таблице новостей имеет первичный ключ, это значит, что найти нужную запись по id можно очень быстро и DLE достанет нам полный текст по id новости действительно быстро. Если же убрать id и искать новость по ее алиасу (название транслитом), тогда процесс будет идти тем медленнее, чем больше новостей на сайте.
Однако это не совсем так, поскольку данная проблема надумана и легко решается. Достаточно проиндексировать поле, в котором хранится алиас, и поиск по данному полю будет производиться так же быстро, как и по полю id с первичным ключом. К слову, поле alt_name в таблице dle_post проиндексировано, для него установлен индекс KEY, т.е. выборка по данному полю будет осуществляться быстро. Так что проблема, как я и сказал выше, надумана и реализовать еще один тип ЧПУ или же просто убрать из двух первых ненужные ID — вполне реально.
Возможно, разработчики DLE в последующих версиях движка внесут соответствующие изменения, но пока что мы вынуждены довольствоваться тем, что есть, поскольку без изменений в коде самого движка убрать id новости в DLE не получится.
К слову, разработчики всегда принимают предложения от пользователей для будущих версий движка. Можете внести свое предложение, если такового еще нет, или проголосовать за уже внесенное здесь.
Как убрать ID из новостей
Если убрать id из новостей — новости невозможно будет нормально выводить и редактировать.
Вы же не стираете в паспорте адрес прописки?
12 комментариев
Похожие вопросы
Как уменьшить или убрать отступ в шаблоне Gemini
10.08.2011 al-fattah Стили (CSS), Ламерские вопросы
Убрать текст с новостей
18.12.2012 rp0M Ламерские вопросы
Убрать не нужные кавычки
19.04.2013 mediafiree Ламерские вопросы
Убрать поле «Немного о себе»
06.06.2013 seot Ламерские вопросы
Растягивание полей (убрать во всём что растягивается)
30.07.2013 maxvel0007 Ламерские вопросы
Убрать категорию с главной страници
03.06.2014 bitdeffa Общие вопросы, Модули, Хаки, Ламерские вопросы
Как убрать
18.06.2014 Viktoriya Общие вопросы, Ламерские вопросы
Где в Админ панели убрать обводку?
14.01.2015 вАСЯ Ламерские вопросы
Как удалить фиксированные новости из ленты новостей на главной?
21.01.2015 tonik Ламерские вопросы
Как убрать тень вокруг картинок?
10.04.2015 sa22-91 Ламерские вопросы
Последние события
Sinoid | Как сделать вывод статистики общего коли . 18
Sinoid
Как сделать вывод статистики общего количества пользователей по каждому значению доп. поля?
Вчера, 20:33
-
в каждый
пару ключ+значение массива $resultArray[] ? Если примерно как ниже, то не знаю, будут ли такие пары без ошибок влезать в html:
+
>
?>
3. Напиши пжл весь country.php ещё раз со всеми изменениями и с кэшированием.
rewenas | Как сделать вывод статистики общего коли . 18

rewenas
Как сделать вывод статистики общего количества пользователей по каждому значению доп. поля?
Вчера, 18:01
Сразу хочу сказать я в этом деле самоучка. Так что могу что то не так понимать и реализовывать
rewenas | Как сделать вывод статистики общего коли . 18

rewenas
Как сделать вывод статистики общего количества пользователей по каждому значению доп. поля?
Вчера, 17:59
1 Если тебе нужно вывести из $iso_countries массива только ключи то:
$keys = array_keys($iso_countries);
2 В смысле переопределять? Его никто даже не трогал. Или я тебя просто не понимаю. Я всего лишь думал что инпутом у тебя пользователи выбирают страну :в следствие чего у тебя в столбец land таблицы dle_users заноситься двухбуквенный код стран.
Ещё сделал выбор страны проживания, который заносится скриптом в стандартный DLE-тег
Поэтому этим кодом:
if (isset($iso_countries[$country])) { $country_name = $iso_countries[$country]; $tpl->set('{land>', $country_name); > else { $tpl->set('{land>', 'Код страны не найден'); >
Заменил этот двухбуквенный код на название страны
3 Тогда тебе нужно:
$result = $db->query("SELECT land, COUNT(*) AS user_count FROM " . USERPREFIX . "_users WHERE land != '' GROUP BY land"); $resultArray = array(); while ($row = $result->fetch_assoc()) { $country = $row['land']; $user_count = $row['user_count']; $country_counts[$country] = $user_count; > foreach ($country_counts as $country => $user_count) { $resultArray[] = array( 'Страна' => $country, 'Количество пользователей' => $user_count ); >
Результат запроса сохраняется в переменной $result. Далее создается пустой массив для хранения данных $resultArray = array(); И далее внутри цикла foreach в этот массив записывается каждый элемент массива $country_counts в виде массива с ключами страна и количество пользователей. Наверное это то что тебе как раз надо
Sinoid | Как сделать вывод статистики общего коли . 18

Sinoid
Как сделать вывод статистики общего количества пользователей по каждому значению доп. поля?
Вчера, 16:53
rewenas, Спасибо. Но:
1. $iso_countries будет содержать только коды. Названия стран потом будет выводить скрипт.
2. нельзя переопределять. Он мне нужен сам по себе как доп. поле каждого юзера. Туда заносится выбор страны юзером и оттуда отображается страна и флаг рядом с аватаром юзера в его комментах и в профиле.
3. На выходе из PHP мне нужен только сортированный (или нет) массив ненулевых количеств юзеров по каждой стране. Далее этот массив будет обрабатываться скриптом через библиотеку Chart.js , чтобы выводить диаграмму по всем странам. Bootstrap не использую. Про графическое представление списка на странице статов можешь не думать. Лучше сделай комментарии в коде PHP или здесь, что там происходит хотя бы в основной логике алгоритма.
rewenas | Как сделать вывод статистики общего коли . 18

rewenas
Как сделать вывод статистики общего количества пользователей по каждому значению доп. поля?
Вчера, 16:21
1 Создать в engine/data/ конфигурационный файл country-configuration.php с массивом ключей, представляющими коды стран и их значения.
"Андорра", 'AE' => "Объединенные Арабские Эмираты", 'AF' => "Афганистан", // Здесь надо добавить все оставшиеся 245 стран из нужных 249. Их очень много и добавлять очень долго, я не стал 'ZW' => "Зимбабве", ); ?>
2 Создать через систему плагинов или просто так в engine/modules/ файл с названием country.php
include_once ENGINE_DIR . "/data/country-configuration.php"; $tpl->load_template('users-country.tpl'); $tpl->result['users-country'] = dle_cache( "users-country_", $tpl->result['users-country'], true); if (!$tpl->result['users-country']) { $result = $db->query("SELECT land, COUNT(*) AS user_count FROM " . USERPREFIX . "_users WHERE land != '' GROUP BY land"); $country_counts = array(); while( $row = $db->get_row($result) ) { $country = $row['land']; $user_count = $row['user_count']; if (isset($iso_countries[$country])) { $country_name = $iso_countries[$country]; $tpl->set('{land>', $country_name); > else { $tpl->set('{land>', 'Код страны не найден'); > $tpl->set('{user-count>', $user_count); $tpl->compile('users-country'); > $tpl->clear(); create_cache( "users-country_", $tpl->result['users-country'], true ); > echo $tpl->result['users-country']; ?>
3 В папке вашего шаблона создать новый users-country.tpl файл. ( Стили в нем написаны просто для примера, их необходимо перенести в свой CSS файл вашего шаблона. Можно их изменять или добавлять новые, делая оформление на ваш вкус и цвет.)
4 В шаблоне stats.tpl вставить строку подключения {include file=»/engine/modules/country.php»>
rewenas | Как сделать вывод статистики общего коли . 18

rewenas
Как сделать вывод статистики общего количества пользователей по каждому значению доп. поля?
Вчера, 01:51
Не знаю насколько конечно это правильно, но я вижу это в голове у себе немного по другому. Завтра постараюсь реализовать
Sinoid | Как сделать вывод статистики общего коли . 18

Sinoid
Как сделать вывод статистики общего количества пользователей по каждому значению доп. поля?
Вчера, 01:11
rewenas, Понятно, что в статистику нет смысла выводить страны, которые никто не выбрал. Но ожидаю, что за несколько месяцев работы моего глобального научного сайта наберутся юзеры из около 60-80 стран. Всё равно много переменных выводить нужно. Допустим, внутри PHP считаем и формируем теги только тех стран zz, где > 0, заносим их в массив, сортируем по убыванию, а на страницу статистики выдаём список рейтинга из пар zz: . Как это всё реализовать в PHP?
rewenas | Как сделать вывод статистики общего коли . 18

rewenas
Как сделать вывод статистики общего количества пользователей по каждому значению доп. поля?
Вчера, 00:32
Можно например вывести только те страны что пользователи отметили у себя и посчитать в них суммарное количество пользователей. Причем сделать это отдельно подключаемым шаблоном, который отдельной строкой можно подключить в шаблоне статистики.
rewenas | Как сделать вывод статистики общего коли . 18

rewenas
Как сделать вывод статистики общего количества пользователей по каждому значению доп. поля?
Вчера, 00:30
Sinoid | Как сделать вывод статистики общего коли . 18

Sinoid
Как сделать вывод статистики общего количества пользователей по каждому значению доп. поля?
18-11-2023, 21:30
rewenas, А что делать? Есть какое-то другое решение. Ну и что, это лишь временные переменные в виде тегов.
- Sign In with Apple для DLE 14 2
- Модуль парсер ссылки с донора и з… 0
- Модификация аватарок DLE 16.1 27
- Модуль — Парсер статей и интеграц… 0
- Добавить поддержку для … 4
- Как обрезать название статьи 1
- Скрипт автозаполнения полей 3
- Парсер/граббер или конвертация БД 1
- Добавление дополнительного функци… 1
- Реализовать адекватную загрузку а… 4
- Запоминание открытой вкладки и со… 0
- Авторизация пользователей через Т… 0
- GeoIP — показ информации в зависи… 0
- Push-уведомление через OneSignal.… 0
- Giphy for comments (TinyMCE) 4
- Множественные опросы — модуль Mul… 0
- Расширенные закладки 0
- Расширение возможностей аккаунта … 0
- ChatGPT Driver 2
- Country Filter 0
Убрать id новости из url

Собственно вопрос в заголовке, как удалить id из адреса полной новости DLE? Нужна надёжная инструкция. Нашёл инструкцию некого Gameer а, не знаю как будет работать для dle 11x ?
Robin_Good
Новичок
Регистрация 19 Авг 2017 Сообщения 12 Реакции 1 Баллы 3

@Хьюго , зачем тебе это нада ? Поверь не заморачуйся на этом
BlackHARD
Новичок
Регистрация 11 Июн 2017 Сообщения 52 Реакции 11 Баллы 8

Ходил слух, что на 10.4 работает
В файле .htaccess находим RewriteEngine on ниже вставляем RewriteBase / RewriteCond % ^[A-Z]\ /([^.]+)\.html\ HTTP RewriteRule ^([^\.]+)\.p?html?$ http://example.com/$1 [R=301,L] RewriteCond % !(\.[^./]+)$ RewriteCond % !-d RewriteCond % !-f RewriteRule (.*) /$1.html [L] не забудьте заменить example.com на свой адрес
Если есть проблема с категориями: Как убрать .html в конце адреса
Последнее редактирование: 26 Ноя 2017
Хьюго
Новичок
Регистрация 25 Ноя 2017 Сообщения 8 Реакции 0 Баллы 1

@Хьюго , зачем тебе это нада ? Поверь не заморачуйся на этом
Мне это нужно. А вы делали такое себе? Какие проблемы стоит ожидать?
Ходил слух, что на 10.4 работает
В файле .htaccess находим RewriteEngine on ниже вставляем RewriteBase / RewriteCond % ^[A-Z]\ /([^.]+)\.html\ HTTP RewriteRule ^([^\.]+)\.p?html?$ http://example.com/$1 [R=301,L] RewriteCond % !(\.[^./]+)$ RewriteCond % !-d RewriteCond % !-f RewriteRule (.*) /$1.html [L] не забудьте заменить example.com на свой адрес
Datalife Engine Rewrite URL Without ID
I want to change rewrite url to remove id number, so site/2-post.html —> Normally
site/post.html —> That I want Is it possible ? I’ve checked modules php files and changed codes where was necessary, but in .htaccess couldn’t unable to set. my .htaccess is here I guess there is necessarry part when I changed it some problems happend
RewriteRule ^([0-9]+)-([^/]*)\.html$ /index.php?newsid=$1&seourl=$2 [L]
12.2k 21 21 gold badges 91 91 silver badges 136 136 bronze badges
asked May 5, 2013 at 23:56
Gökhan Değirmenci Gökhan Değirmenci
11 2 2 bronze badges
3 Answers 3
I don’t think what you want to achieve is possible, because the application will need to know the ID in order to do anything useful. If the only thing the browser requests is site/post.html , the server cannot magically reinvent the ID that would previously have been in the URL.
The only way this is possible is if the application can look up an article based purely on the «seourl» parameter, in which case you can simply remove the «newsid» part from the URL, leaving a rule like this:
RewriteRule ^([^/]*)\.html$ /index.php?seourl=$1 [L]
Предыдущая запись
