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

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

Быстрая подписка на комментарии

Тема в разделе "Модули DLE", создана пользователем Sander, 1 июн 2016.

01.06.16 в 23:58
01.06.16 в 23:58
0
652
3
  1. TopicStarter Overlay
    Sander

    Sander Новичок

    Регистрация:
    5 мар 2016
    Сообщения:
    49
    Лучших ответов:
    0
    Рейтинги:
    +101 / 0 / -0
    [​IMG]

    Стандартный алгоритм подписки устроен так, что подписаться на комментарии можно только при добавлении комментария.
    Этот простенький модуль исправляет это упущение.С помощью этого хака/модуля пользователи смогут подписываться на комментарии буквально одним кликом.
    Собственно пример работы этой кнопки вы можете посмотреть на моем же сайте

    Установка
    В папке engine/ajax создать файл subscribe.php с содержимым:
    Код:
    <?php
    /*
    Подписка на комментарии
    Автор: Sander
    Сайт: http://sandev.pro/
    */
    @error_reporting ( E_ALL ^ E_WARNING ^ E_NOTICE );
    @ini_set ( 'display_errors', true );
    @ini_set ( 'html_errors', false );
    @ini_set ( 'error_reporting', E_ALL ^ E_WARNING ^ E_NOTICE );
    
    define( 'DATALIFEENGINE', true );
    define( 'ROOT_DIR', substr( dirname(  __FILE__ ), 0, -12 ) );
    define( 'ENGINE_DIR', ROOT_DIR . '/engine' );
    
    include ENGINE_DIR . '/data/config.php';
    date_default_timezone_set ( $config['date_adjust'] );
    
    require_once ENGINE_DIR . '/classes/mysql.php';
    require_once ENGINE_DIR . '/data/dbconfig.php';
    require_once ENGINE_DIR . '/modules/functions.php';
    dle_session();
    $user_group = get_vars( "usergroup" );
    if( ! $user_group ) {
        $user_group = array ();
        $db->query( "SELECT * FROM " . USERPREFIX . "_usergroups ORDER BY id ASC" );
        while ( $row = $db->get_row() ) {
            $user_group[$row['id']] = array ();
            foreach ( $row as $key => $value ) $user_group[$row['id']][$key] = stripslashes($value);
        }
        set_vars( "usergroup", $user_group );
        $db->free();
    }
    
    require_once ENGINE_DIR . '/modules/sitelogin.php';
    if(!$is_logged) $member_id['user_group'] = 5;
    
    $post_id = intval($_POST['post_id']);
    if($post_id<1) die("{\"error\":\"Не определена новость для подписки\"}");
    
    if(!$user_group[$member_id['user_group']]['allow_subscribe']) die("{\"error\":\"Вы не можете пользоваться подпиской\"}");
    
    $row = $db->super_query( "SELECT id, allow_comm FROM " . PREFIX . "_post WHERE id = $post_id" );
    if(!$row['id']) die("{\"error\":\"Публикация не найдена или была удалена\"}");
    if(!$row['allow_comm']) die("{\"error\":\"Комментарии к данной публикации запрещены\"}");
    
    $row = $db->super_query( "SELECT user_id, name, email, hash FROM " . PREFIX . "_subscribe WHERE news_id = $post_id AND user_id = {$member_id['user_id']}" );
    if($row['user_id']){
        //отписываем
        $db->query( "DELETE FROM " . PREFIX . "_subscribe WHERE news_id = $post_id AND user_id = {$member_id['user_id']}" );
        echo "{\"html\":\"Вы успешно отписались. Подписаться заново?\"}";
    }else{
        //подписываем
        if(function_exists('openssl_random_pseudo_bytes')) $stronghash = md5(openssl_random_pseudo_bytes(15));
        else $stronghash = md5(uniqid( mt_rand(), TRUE ));
        $salt = str_shuffle($stronghash);
        $s_hash = "";
        for($i = 0; $i < 10; $i ++) $s_hash .= $salt{mt_rand( 0, 31 )};
        $s_hash = md5($s_hash);
        $db->query( "INSERT INTO " . PREFIX . "_subscribe (user_id, name, email, news_id, hash) values ('{$member_id['user_id']}', '{$member_id['name']}', '{$member_id['email']}', '{$post_id}', '{$s_hash}')" );
        echo "{\"html\":\"Вы успешно подписались. Отписаться?\"}";
    }

    JS код вставить в любой подключенный к шаблону js файл:
    Код:
    $(document).on('click','.subscribe-comments span',function(){
        ShowLoading();
        var $this = $(this);
        $.post(dle_root+"engine/ajax/subscribe.php",{post_id:$('#post_id').val()},function(d){
            HideLoading();
            if(d.error) DLEalert(d.error,"Ошибка");
            else $this.html(d.html);
        },"json");
    });

    В файле шаблона addcomments.tpl или fullstory.tpl в желаемом месте вставить код:
    HTML:
    <div class="subscribe-comments"><span>Подписаться на комментарии</span></div>
    Наличие имени класса subscribe-comments - обязательно. span можно убрать, но тогда необходимо будет убрать его и из JS.

    При желании использовать мой стиль кнопки:
    Код:
    .subscribe-comments{
        float: right;
    }
    .subscribe-comments span{
        display: block;
        border: 1px solid #ccc;
        padding: 0 20px;
        height: 26px;
        font: normal 12px/26px Verdana;
        -webkit-box-sizing: content-box;
        -moz-box-sizing: content-box;
        box-sizing: content-box;
        cursor: pointer;
        color: #555;
        background: #e5e5e5 url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAIAAABi9+OQAAAAI0lEQVQImWP49esXEwMDA9O/f/+YGBgYmP7//4+Vj0ucTHUA3nos7QvvyugAAAAASUVORK5CYII=) repeat-x 0 0;
        -webkit-border-radius: 2px;
        -moz-border-radius: 2px;
        border-radius: 2px;
    }
    .subscribe-comments span:hover{
        color: #222;
        background: #fff url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAIAAABi9+OQAAAAG0lEQVQImWN49+4dEwMDAxMjIyNZNBMTEzn6AGFhAzKAZ4ckAAAAAElFTkSuQmCC) repeat-x 0 0;
    }
    .subscribe-comments span:active{
        border-color: #fc0;
    }
    Вот и все :)

    С уважением,
    Олег Александрович a.k.a. Sander
     
    #1 Sander, 1 июн 2016
    Последнее редактирование: 2 июн 2016
    • Нравится Нравится x 3
Яндекс.Метрика