Скрыть объявление
ВАШИ ПРАВА ОГРАНИЧЕНЫ!

Зарегистрируйтесь на форуме, чтобы стать полноценным участником сообщества!

Удаляем похожие новости (дубли) на дле

Тема в разделе "Хаки DLE", создана пользователем makdem, 7 ноя 2017.

07.11.17 в 06:23
20.01.24 в 13:29
32
14.120
4
  1. TopicStarter Overlay
    makdem

    makdem Бывалый

    Регистрация:
    3 окт 2017
    Сообщения:
    341
    Лучших ответов:
    1
    Рейтинги:
    +101 / 24 / -0
    На своём сайте, работающем на 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 и тд не возможно,если у вас новости стоят только лишь по названию то да можно удалить !
     
    #1 makdem, 7 ноя 2017
    Последнее редактирование: 8 ноя 2017
    • Нравится Нравится x 4
  2. byroot

    Забанен

    Регистрация:
    10 окт 2015
    Сообщения:
    12.297
    Лучших ответов:
    54
    Рейтинги:
    +5.205 / 74 / -0
    В результате фильмы с одинаковым названием, если в заголовке введено только название, будут удалены и оставлен только один первый встретившийся материал.
     
  3. TopicStarter Overlay
    makdem

    makdem Бывалый

    Регистрация:
    3 окт 2017
    Сообщения:
    341
    Лучших ответов:
    1
    Рейтинги:
    +101 / 24 / -0
    Согласен,есть небольшой риск потерять пару новостей ,но если как у меня за сотни дублей было то тем в помощь)
     
  4. madpitbull

    madpitbull Бывалый

    Регистрация:
    26 сен 2015
    Сообщения:
    393
    Лучших ответов:
    0
    Рейтинги:
    +60 / 6 / -0
    Есть еще вот такой код для чистки дубликатов:

    Код:
    <?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 файл с вышеуказанным кодом, закинуть в корневую директорию сайта и запустить.
    dle найти дубли новостей
    Спасибо за код @Gameer, очень он мне был необходим когда то.
     
    #4 madpitbull, 7 ноя 2017
    Последнее редактирование модератором: 18 сен 2020
    • Нравится Нравится x 2
  5. Karambole

    PRO Users

    Регистрация:
    7 апр 2016
    Сообщения:
    531
    Лучших ответов:
    1
    Рейтинги:
    +300 / 106 / -0
    А есть какой-то метод, чтобы при добавлении новостей (если будет дублироваться заголовок) всплывала предупреждающая подсказка или не публиковалась новость, если уже есть такой "H1" ???
    Просто не хочется каждый раз при добавлении новостей нажимать на кнопку "Найти похожие новости".
     
  6. Karambole

    PRO Users

    Регистрация:
    7 апр 2016
    Сообщения:
    531
    Лучших ответов:
    1
    Рейтинги:
    +300 / 106 / -0
    Так что, никто не знает?

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

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

    Забанен

    Регистрация:
    10 окт 2015
    Сообщения:
    12.297
    Лучших ответов:
    54
    Рейтинги:
    +5.205 / 74 / -0
    • Нравится Нравится x 1
  8. uskino

    PRO Users

    Регистрация:
    20 окт 2015
    Сообщения:
    764
    Лучших ответов:
    1
    Рейтинги:
    +174 / 23 / -0
    Есть проще гораздо вариант, точнее не проще, а надежнее. Прогоняешь сайт пауком как-нибудь по типу нетпикспайдера, выгружаешь список страниц с дублями тайтлов и еще чего угодно. И ручками уже как надо правишь или удаляешь.
     
    • Нравится Нравится x 1
  9. Karambole

    PRO Users

    Регистрация:
    7 апр 2016
    Сообщения:
    531
    Лучших ответов:
    1
    Рейтинги:
    +300 / 106 / -0
    Чёт не получился у меня этот вариант:
    По инструкции в файле engine/inc/addnews.php кнопку "Найти похожие новости" нашёл и удалил.
    Но потом нужно:
    Какое событие, куда его вешать? В комментах тоже задавали этот вопрос, но он так и остался без ответа ещё с 2012-го года.

    Вобщем придётся приучивать себя нажимать на кнопку "Найти похожие новости" при добавлении новостей (((
     
  10. byroot

    Забанен

    Регистрация:
    10 окт 2015
    Сообщения:
    12.297
    Лучших ответов:
    54
    Рейтинги:
    +5.205 / 74 / -0
    Karambole найти
    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();">
    2017-11-08_21-09-24.png

    Когда курсор будет не в поле заголовка новости - будет выполнен автоматический поиск новостей. Проверено на ДЛЕ 11.3.

    но вообще лучше приучить себя пользоваться кнопкой: всего один раз нажать её надо и никаких проблем ;)
     
    • Лучший Лучший x 1
  11. Karambole

    PRO Users

    Регистрация:
    7 апр 2016
    Сообщения:
    531
    Лучших ответов:
    1
    Рейтинги:
    +300 / 106 / -0
    так вот куда этот "onchange" надо было вставить.
    byroot, Спасибо Огромное! теперь заработало как надо ))
     
  12. ArtAlf

    ArtAlf Посетитель

    Регистрация:
    8 мар 2019
    Сообщения:
    75
    Лучших ответов:
    0
    Рейтинги:
    +4 / 2 / -0
    Спасибо отличный запрос удаляет то что нужно ALTER IGNORE TABLE dle_post ADD UNIQUE INDEX titleindex (title);
    ALTER TABLE dle_post DROP INDEX titleindex
     
  13. Boba

    Boba Бывалый

    Регистрация:
    18 апр 2020
    Сообщения:
    493
    Лучших ответов:
    0
    Рейтинги:
    +184 / 44 / -0
    Спасибо работает
     
  14. nent

    nent Новичок

    Регистрация:
    5 дек 2017
    Сообщения:
    48
    Лучших ответов:
    0
    Рейтинги:
    +0 / 0 / -0
    не пашет

    ALTER IGNORE TABLE dle_post ADD UNIQUE INDEX titleindex (title)



    MySQL said: [​IMG]

    #1071 - Specified key was too long; max key length is 1000 bytes
     
  15. Wampir4ik

    Wampir4ik Посетитель

    Регистрация:
    4 май 2017
    Сообщения:
    64
    Лучших ответов:
    0
    Рейтинги:
    +22 / 0 / -0
    Не работает этот метод на dle 14
     
  16. mikim

    mikim Зелёный

    Регистрация:
    28 апр 2020
    Сообщения:
    6
    Лучших ответов:
    0
    Рейтинги:
    +3 / 0 / -0
    Удаляю руками, сорян если метод уже был.
    1. Захожу в базу phpmyadmin
    2. Пишу
    Код:
    SELECT * FROM dle_post
    WHERE metatitle IN
        (SELECT metatitle FROM dle_post GROUP BY metatitle HAVING COUNT(metatitle) > 1)
    ORDER BY metatitle
    В результате выводит по две одинаковые записи. Сравниваю одно ли это и то же... если да, то каждую вторую, увы, но руками, удаляю.
    Ревизию провожу раз в месяц, в принципе запары нет. Была только в первый раз.
     
    • Нравится Нравится x 1
  17. OrenZeN

    OrenZeN Зелёный

    Регистрация:
    25 сен 2016
    Сообщения:
    21
    Лучших ответов:
    0
    Рейтинги:
    +1 / 1 / -0
    А есть вариант допустим удаление дублей по доп полям? допустим по id кинопоиск?
     
    • Нравится Нравится x 1
  18. Andrij

    Andrij Бывалый

    Регистрация:
    30 мар 2017
    Сообщения:
    509
    Лучших ответов:
    2
    Рейтинги:
    +84 / 27 / -0
    Нашел способ? Вот тоже сегодня случайно увидел дубль, и подумал что странное что нету какого то хака для кинопоиск ид. Может есть у кого? Удаление дублей по кп.ид или что то в этом роде?
     
  19. Constantine174

    PRO Users

    Регистрация:
    27 авг 2018
    Сообщения:
    691
    Лучших ответов:
    0
    Рейтинги:
    +97 / 40 / -0
    У меня больше 100 новостей дублей. В ручную это удалять, ужас.
     
  20. Boba

    Boba Бывалый

    Регистрация:
    18 апр 2020
    Сообщения:
    493
    Лучших ответов:
    0
    Рейтинги:
    +184 / 44 / -0
    Напишу простенький модуль как нибуть для отслеживание дублей
     
    • Нравится Нравится x 2
Похожие темы
  1. u-andreya
    Ответов:
    6
    Просмотров:
    1.124
  2. kogtehvost
    Ответов:
    4
    Просмотров:
    960
  3. Nika
    Ответов:
    4
    Просмотров:
    1.606
  4. Romantv
    Ответов:
    14
    Просмотров:
    1.045
  5. ВалераСтакашкин
    Ответов:
    3
    Просмотров:
    439
Загрузка...
Яндекс.Метрика