Не нравятся результаты поиска? Попробуйте другой поиск!
dle-faq.ru FAQ (все вопросы) Общие вопросы по PHP Не получается удалить ID в новостях DLE 11.1, где допущена ошибка?

Не получается удалить ID в новостях DLE 11.1, где допущена ошибка?


     10.09.2016    Общие вопросы по PHP    548

вопрос
Автор уверяет, что данная инструкция и поправки убирают ID в новостях на DLE 11, но на DLE 11.1 выдает ошибку, что проблема в engine...

В общем, кто разбирается в данном языке программирования помогите, если не сложно

1. Открываем файл /engine/engine.php и ищем код:
if ($subaction != '' or $newsid) {
    if (! $newsid) $sql_news = "SELECT * FROM " . PREFIX . "_post LEFT JOIN " . PREFIX . "_post_extras ON (" . PREFIX . "_post.id=" . PREFIX . "_post_extras.news_id) WHERE alt_name ='$news_name' AND date >= '{$year}-{$month}-{$day}' AND date < '{$year}-{$month}-{$day}' + INTERVAL 24 HOUR LIMIT 1";
    else $sql_news = "SELECT * FROM " . PREFIX . "_post LEFT JOIN " . PREFIX . "_post_extras ON (" . PREFIX . "_post.id=" . PREFIX . "_post_extras.news_id) WHERE  id = '{$newsid}'";
    
    if ($subaction == '') $subaction = "showfull";
   }

Заменяем на:
if ($subaction != '' or $_GET['newsid']) {  
                if (! $_GET['newsid']) $sql_news = "SELECT * FROM " . PREFIX . "_post LEFT JOIN " . PREFIX . "_post_extras ON (" . PREFIX . "_post.id=" . PREFIX . "_post_extras.news_id) WHERE alt_name ='$news_name' AND date >= '{$year}-{$month}-{$day}' AND date < '{$year}-{$month}-{$day}' + INTERVAL 24 HOUR LIMIT 1";  
                else $sql_news = "SELECT * FROM " . PREFIX . "_post LEFT JOIN " . PREFIX . "_post_extras ON (" . PREFIX . "_post.id=" . PREFIX . "_post_extras.news_id) where alt_name = '{$_GET['newsid']}'";  
                
                if ($subaction == '') $subaction = "showfull";
            }

2. В файлах /engine/modules/show.short.php, show.custom.php, topnews.php ищем:
if( $row['category'] and $config['seo_type'] == 2 ) {
    
     $full_link = $config['http_home_url'] . get_url( $row['category'] ) . "/" . $row['id'] . "-" . $row['alt_name'] . ".html";
    
    } else {
    
     $full_link = $config['http_home_url'] . $row['id'] . "-" . $row['alt_name'] . ".html";
    
    }
  
   } else {
    
    $full_link = $config['http_home_url'] . date( 'Y/m/d/', $row['date'] ) . $row['alt_name'] . ".html";
   }
  
  } else {
  
   $full_link = $config['http_home_url'] . "index.php?newsid=" . $row['id'];
  
  }

Заменяем на:
if( $row['category'] and $config['seo_type'] == 2 ) {  
                      
                    $full_link = $config['http_home_url'] . get_url( $row['category'] ) . "/" .  $row['alt_name'] . ".html";  
                  
                } else {  
                      
                    $full_link = $config['http_home_url'] .  $row['alt_name'] . ".html";  
                  
                }  
              
            } else {  
                  
                $full_link = $config['http_home_url'] . date( 'Y/m/d/', $row['date'] ) . $row['alt_name'] . ".html";  
            }  
          
        } else {  
              
            $full_link = $config['http_home_url'] . "index.php?newsid=" . $row['alt_name'];  
          
        }

3. В файлах /engine/modules/show.full.php ищем:
$full_link = $config['http_home_url'] . $c_url . "/" . $row['id'] . "-" . $row['alt_name'] . ".html";

Заменяем на:
$full_link = $config['http_home_url'] . $c_url . "/" . $row['alt_name'] . ".html";

ищем:
$full_link = $config['http_home_url'] . $row['id'] . "-" . $row['alt_name'] . ".html";

заменить на:
$full_link = $config['http_home_url'] . $row['alt_name'] . ".html";

ищем:
$full_link = $config['http_home_url'] . "index.php?newsid=" . $row['id'];

заменить на:
$full_link = $config['http_home_url'] . "index.php?newsid=" . $row['alt_name'];


4. Открываем файл /.htaccess и ищем:
# Сам пост

и то что под этой строчкой (12 строк кода) удаляем и заменяем на:

# Сам пост
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),([0-9]+),(.*).html(/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&cstart=$5&news_name=$6 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),(.*).html(/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/print:page,([0-9]+),(.*).html(/?)+$ engine/print.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*).html(/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_name=$4 [L]

RewriteRule ^([^.]+)/page,([0-9]+),([0-9]+),([0-9]+)-(.*).html(/?)+$ index.php?newsid=$4&news_page=$2&cstart=$3 [L]
RewriteRule ^([^.]+)/page,([0-9]+),([0-9]+)-(.*).html(/?)+$ index.php?newsid=$3&news_page=$2 [L]
RewriteRule ^([^.]+)/print:page,([0-9]+),([0-9]+)-(.*).html(/?)+$ engine/print.php?news_page=$2&newsid=$3 [L]
RewriteRule ^([^.]+)/(.*).html(/?)+$ index.php?newsid=$2 [L]

RewriteRule ^page,([0-9]+),([0-9]+),([0-9]+)-(.*).html(/?)+$ index.php?newsid=$3&news_page=$1&cstart=$2 [L]
RewriteRule ^page,([0-9]+),([0-9]+)-(.*).html(/?)+$ index.php?newsid=$2&news_page=$1 [L]
RewriteRule ^print:page,([0-9]+),([0-9]+)-(.*).html(/?)+$ engine/print.php?news_page=$1&newsid=$2 [L]
RewriteRule ^(.*).html(/?)+$ index.php?newsid=$1 [L]

Ответа пока нет


Комментарии пользователей (9)

erfesto
15

erfesto - 10 сентября 2016 20:17 - Юзер

Для тех, кто думает, что данные изменения плохо скажутся на движок, вот ответ от программиста:

В сети можно встретить мнение, что ID в новости сделано в целях быстродействия. Поскольку id в таблице новостей имеет первичный ключ, это значит, что найти нужную запись по id можно очень быстро и DLE достанет нам полный текст по id новости действительно быстро. Если же убрать id и искать новость по ее алиасу (название транслитом), тогда процесс будет идти тем медленнее, чем больше новостей на сайте.

Однако это не совсем так, поскольку данная проблема надумана и легко решается. Достаточно проиндексировать поле, в котором хранится алиас, и поиск по данному полю будет производиться так же быстро, как и по полю id с первичным ключом. К слову, поле alt_name в таблице dle_post проиндексировано, для него установлен индекс KEY, т.е. выборка по данному полю будет осуществляться быстро. Так что проблема, как я и сказал выше, надумана и реализовать еще один тип ЧПУ или же просто убрать из двух первых ненужные ID — вполне реально.

blacksmith
2

blacksmith - 10 сентября 2016 22:37 - Юзер

Автор уверяет, что данная инструкция и поправки убирают ID в новостях на DLE 11, но на DLE 11.1 выдает ошибку, что проблема в engine...


О какой ошибке сообщает, на какую строчку указывает?

erfesto
15

erfesto - 11 сентября 2016 09:40 - Юзер

Parse error: syntax error, unexpected end of file in /var/www/admin/data/www/mysite.com/engine/engine.php on line 1038

Сейчас попробую установить на DLE 11, мб автор врет...

Sander
1155

1663 | 1212

Sander - 11 сентября 2016 10:00 - Эксперт

Покажите код строки: 1037-1039

SanDev.pro - мой блог.

ICQ: 404-037-556
Skype: Sander8804

erfesto
15

erfesto - 11 сентября 2016 10:14 - Юзер

Добрый день! Это моя ошибка, дико извиняюсь, все работает на DLE 11.1.
Только sitemap.xml генерируется с id, это можно как-нибудь исправить?

И похожие новости отображает с id(

Может вы сможете доработать данный хак и на свой блог выложите:)

erfesto
15

erfesto - 11 сентября 2016 10:25 - Юзер

Еще комментарий при добавлении и перезагрузки страницы - пропадают( видно комментарии сохраняются под новостью с id

erfesto
15

erfesto - 11 сентября 2016 10:44 - Юзер

В общем, все печально( нашел самый серьезный баг:
- использую чпу тип 2, новость доступна по адресам: site.ru/category/news.html(best),
site.ru/news.html,
site.ru/subcategory/news.html , site.ru/category/subcategory/news.html

Новость вообще доступна везде, например: site.ru/privetrebyata/kakdela/chtonovogo/luboytext/news.html

Обработка неверных Чпу не работает(

erfesto
15

erfesto - 11 сентября 2016 09:56 - Юзер

На DLE 11 работает!

Dobyjeeep
9

Dobyjeeep - 15 ноября 2016 17:36 - Юзер

На ДЛЕ 11.1 не работает! Как исправить?

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы