Удаляем похожие новости на ДЛЕ

makdem

Новичок
Регистрация
4 Окт 2017
Сообщения
58
Реакции
10
Баллы
8
На своём сайте, работающем на CMS DLE, столкнулся с проблемой дубликатов новостей.

Сначала руками удалял, потом подумал, что это долго и нудно. Стал искать выход по автоматическому удалению новостей, у которых совпадают названия в TITLE. В поиске предлагают всякое устаревшее гомно для DLE. Все это сомнительно, вместе с ними в подарок можно получить бэкдор, потерять посетителей из-за падения трафика.

Короче говоря, нашел выход. Весьма рабочая инструкция! Мне, по крайней мере, помогла.
Заходим в PhpMyAdmin. Кто забыл логин и пароль базы данных DLE, может посмотреть их через файл менеджер в файле dbconfig.php. Этот файл по этому адресу лежит относительно корня:

/engine/data/dbconfig.php

В PhpMyAdmin выбираете вашу базу данных. Обязательно сделайте резервную копию базы и сохраните ее, мало ли что может случиться!!! Затем переходите на вкладку SQL.

В поле вводите запрос:

ALTER IGNORE TABLE dle_post ADD UNIQUE INDEX titleindex (title);

ALTER TABLE dle_post DROP INDEX titleindex;


Получаете ответ: SQL-запрос был выполнен успешно.

Вот и все го то, думаю многим пригодится а нет, то и ладно)) всём удачи!

PS: У меня новости ставятся так:- Пассажиры 2009, то есть приставка к новости по году фильма и удалить Пассажиры 2016 и тд не возможно,если у вас новости стоят только лишь по названию то да можно удалить !
 
Последнее редактирование:

MadPitbull

Приватовец
Приватовец
VIP
Регистрация
6 Апр 2017
Сообщения
103
Реакции
15
Баллы
18
Есть еще вот такой код для чистки дубликатов, может кому тоже пригодится, что бы не лазать в базу:

Код:
<?PHP
//                          COPYRIGHT FDSTAR.NET
@error_reporting(E_ALL ^ E_NOTICE);
@ini_set('display_errors', true);
@ini_set('html_errors', false);
@ini_set('error_reporting', E_ALL ^ E_NOTICE);

define('DATALIFEENGINE', true);

$member_id = FALSE;
$is_logged = FALSE;
$content = '';

define('ROOT_DIR', dirname (__FILE__));
define('ENGINE_DIR', ROOT_DIR.'/engine');
define('DROP_IMAGES', false);


@include (ENGINE_DIR.'/data/config.php');
if (!$config['version_id']) die("Datalife Engine not installed. Please run install.php");
require_once ENGINE_DIR.'/classes/mysql.php';
require_once ENGINE_DIR.'/data/dbconfig.php';

$sql = "SELECT *,count(*) as `post_counter`
        FROM `". PREFIX. "_post`
        GROUP BY `alt_name`
        ORDER BY `post_counter` DESC";
$res = $db->query($sql);
$row = $db->get_row($res);

if($row && count($row))
{
    if($row['post_counter']<=1)
    {
        die('COMPLETE !');
    }
    if(DROP_IMAGES)
    {
        $sql= "SELECT *
                FROM `". PREFIX. "_images`
                WHERE `news_id`='{$row['id']}' ";
   
        $res2 = $db->query($sql);
        while($row2 = $db->get_row($res2))
        {
            $images_array = split("\|\|\|", $row2['images']);
            foreach($images_array as $image)
            {
                if($image = trim($image))
                {
                    $image = ltrim($image, '/');
                    if(preg_match('#([0-9]{4}\-[0-9]{2}/)(.*)$#', $image, $match))
                    {
                        $img_date_dir = $match[1];
                        $img_name = basename($match[2]);
                      
                        $img_thumb_address = ROOT_DIR. '/uploads/posts/'. $img_date_dir. 'thumbs/'. $img_name;
                        $img_address = ROOT_DIR. '/uploads/posts/'. $img_date_dir. $img_name;
   
                        @$img_thumb_address_delete = (int)unlink($img_thumb_address);
                        @$img_address_delete = (int)unlink($img_address);
                      
                        $content.= "{$img_address} {$img_address_delete} <br /> {$img_thumb_address} {$img_thumb_address_delete}<hr />";
                    }
                    else
                    {
                        $content.= '<br />NO IMAGES FOUND<br />';
                    }
                }
            }
            $sql = "DELETE FROM `". PREFIX. "_images` WHERE `id`='{$row2['id']}'";
            $db->query($sql);
            $content.= $sql. "<hr />";
        }

    } 
   
    $sql= "DELETE FROM `". PREFIX. "_post` WHERE `id`='{$row['id']}' ";
    $db->query($sql);
    $content.= $sql. "<hr />";
}


echo <<<HTML

<html>
    <head>

<script language="JavaScript" DEFER><!--
function reload_page()
{
         document.location.reload();
}
--></script>

    </head>
    <body onload="reload_page();">
          {$content} 
    </body>
</html>

HTML;

?>
Создать php файл с вышеуказанным кодом, закинуть в корневую директорию сайта и запустить.
Спасибо за код @Gameer, очень он мне был необходим когда то.
 

AntonTex

Новичок
Регистрация
4 Окт 2017
Сообщения
67
Реакции
7
Баллы
8
А как с фильмами, у которых совпадает название? "Пассажиры" например
 

makdem

Новичок
Регистрация
4 Окт 2017
Сообщения
58
Реакции
10
Баллы
8
риск
А как с фильмами, у которых совпадает название? "Пассажиры" например
риск потерять несколько дубликатов есть ,но если у вас множественные дубли новостей более сотни,так бывает,то лучше потерять пару схожих)
 

Karambole

Новичок
Регистрация
1 Мар 2017
Сообщения
189
Реакции
137
Баллы
43
А есть какой-то метод, чтобы при добавлении новостей (если будет дублироваться заголовок) всплывала предупреждающая подсказка или не публиковалась новость, если уже есть такой "H1" ???
Просто не хочется каждый раз при добавлении новостей нажимать на кнопку "Найти похожие новости".
 

AntonTex

Новичок
Регистрация
4 Окт 2017
Сообщения
67
Реакции
7
Баллы
8
А есть какой-то метод, чтобы при добавлении новостей (если будет дублироваться заголовок) всплывала предупреждающая подсказка или не публиковалась новость, если уже есть такой "H1" ???
Просто не хочется каждый раз при добавлении новостей нажимать на кнопку "Найти похожие новости".
Вот сейчас так и делаю, но...иногда проскакивает дубль
 

Karambole

Новичок
Регистрация
1 Мар 2017
Сообщения
189
Реакции
137
Баллы
43
Так что, никто не знает?

Есть какая-то настройка в ДЛЕ, чтобы при добавлении новостей, если такой заголовок уже есть - то новость не публиковалась или всплывала подсказка типа "такая новость уже есть" и т.д. ???

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

Анна

Модератор
Команда форума
Приватовец
VIP
Прошёл марафон
Регистрация
23 Апр 2017
Сообщения
1.377
Реакции
540
Баллы
113
Так что, никто не знает?

Есть какая-то настройка в ДЛЕ, чтобы при добавлении новостей, если такой заголовок уже есть - то новость не публиковалась или всплывала подсказка типа "такая новость уже есть" и т.д. ???

(нажимать на кнопку "Найти похожие новости" при публикации - не вариант, всё время забываю, да и долго это)
Новости парсером заполняешь? Там при поиске видно, что есть новость на сайте
 

Karambole

Новичок
Регистрация
1 Мар 2017
Сообщения
189
Реакции
137
Баллы
43
Новости парсером заполняешь? Там при поиске видно, что есть новость на сайте
Да, парсером "PKinoPoisk V3.3.0".
Но он не показывает, что новость уже есть на сайте. Чтоб увидеть, что такая новость уже есть, нужно каждый раз (какой кошмар) нажимать кнопку "Найти похожие новости".

Правда, мне это больше нужно для другого ГС-а (не кино). Там нет парсера и не хочется делать дубли.
 

Анна

Модератор
Команда форума
Приватовец
VIP
Прошёл марафон
Регистрация
23 Апр 2017
Сообщения
1.377
Реакции
540
Баллы
113
Да, парсером "PKinoPoisk V3.3.0".
Но он не показывает, что новость уже есть на сайте. Чтоб увидеть, что такая новость уже есть, нужно каждый раз (какой кошмар) нажимать кнопку "Найти похожие новости".

Правда, мне это больше нужно для другого ГС-а (не кино). Там нет парсера и не хочется делать дубли.
-3ZrQn2UOng.jpg
 

Karambole

Новичок
Регистрация
1 Мар 2017
Сообщения
189
Реакции
137
Баллы
43
@Анна, прикольно, это парсером "PKinoPoisk V3.3.0" такое получается?
У меня парсер "PKinoPoisk V3.3.0" такое не выдаёт:
Безымянный.jpg
Фильм "Джунгли (2017)" уже опубликован на сайте.
В настройках парсера покапался, но не нашёл такой фичи.

Да и @byroot (Спасибо ему Огромное) уже нашёл рабочий метод:
Нужно в файле engine/inc/addnews.php на 316 строке найти:
HTML:
<input type="text" style="width:99%;max-width:437px;" name="title" id="title">&nbsp;<button onclick="find_relates(); return false;" class="btn btn-sm btn-black">{$lang['b_find_related']}</button>
И заменить на:
HTML:
<input type="text" style="width:99%;max-width:437px;" name="title" id="title" onchange="find_relates();">
Теперь при вводе названия, поиск похожих новостей выполняется автоматически.
 

Анна

Модератор
Команда форума
Приватовец
VIP
Прошёл марафон
Регистрация
23 Апр 2017
Сообщения
1.377
Реакции
540
Баллы
113
@Анна, прикольно, это парсером "PKinoPoisk V3.3.0" такое получается?
У меня парсер "PKinoPoisk V3.3.0" такое не выдаёт:
Посмотреть вложение 2350
Фильм "Джунгли (2017)" уже опубликован на сайте.
В настройках парсера покапался, но не нашёл такой фичи.

Да и @byroot (Спасибо ему Огромное) уже нашёл рабочий метод:
Нужно в файле engine/inc/addnews.php на 316 строке найти:
HTML:
<input type="text" style="width:99%;max-width:437px;" name="title" id="title">&nbsp;<button onclick="find_relates(); return false;" class="btn btn-sm btn-black">{$lang['b_find_related']}</button>
И заменить на:
HTML:
<input type="text" style="width:99%;max-width:437px;" name="title" id="title" onchange="find_relates();">
Теперь при вводе названия, поиск похожих новостей выполняется автоматически.
Да, это версия 3.3.0. Странно, что у тебя такого нет...
 

Dsim

Новичок
Регистрация
24 Дек 2021
Сообщения
1
Реакции
0
Баллы
1
Подскажите, пожалуйста, актуальный запрос для удаления всех дублей через базу.

Тот что в шапке, пишет слишком длинный ключ.
 
Сверху Снизу