Помощь Добавление комментариев в любом файле по ID новости

Тема в разделе "DLE", создана пользователем killoff, 1 ноя 2015.

Информация :
Актуальная версия DataLife Engine 12.0
( Final Release v.12.0 | Скачать DataLife Engine | Скачать 12.0 demo )
Нужно ли обновляться | Как обновиться | Изменения в шаблонах
> Нет русских символов <
[Приватная тема DLE (Все подробности в ЛС к модератору раздела)]

Версии 11.3 и ниже - уязвимы!

Локализации | F.A.Q. | Внешний вид
Правила раздела | Правила форума
Обсуждение хайда карается баном!
В каждом сообщении указывайте версию DLE, которого они касаются!
Модераторы: killoff
  1. killoff

    killoff CD тихо, и не DVD меня ;)

    Moderator
    Регистр.:
    13 май 2008
    Сообщения:
    2.238
    Симпатии:
    831
    Пытался выдрать {comments} {addcomments} из файла engine/modules/show.full.php, но что-то не хотят работать эти теги. Есть модули вывода последних комментариев в любом месте, их тоже на добавление исправить не смог, т.к. в кодинге php я не разбираюсь, а простыми правками файлов не получилось это реализовать.

    В общем просьба знающих помощь как это реализовать: есть файл модуля со своим файлом шаблона и в нем нужно сделать вывод и добавление комментариев по id новости... :glob:
     
  2. Gameer

    Gameer Постоялец

    Регистр.:
    25 апр 2014
    Сообщения:
    130
    Симпатии:
    84
    1) Создаешь форму :
    PHP:
    <?PHP
    $tpl
    ->load_template'addcomments.tpl' );

    if (
    $config['allow_subscribe'] AND $user_group[$member_id['user_group']]['allow_subscribe']) $allow_subscribe true; else $allow_subscribe false;

    if( 
    $config['allow_comments_wysiwyg'] > ) {
        
    $text='';
        include_once 
    ENGINE_DIR '/editor/comments.php';
        
    $bb_code "";
        
    $allow_comments_ajax true;
    } else
        include_once 
    ENGINE_DIR '/modules/bbcode.php';

    if ( 
    $is_logged AND $user_group[$member_id['user_group']]['disable_comments_captcha'] AND $member_id['comm_num'] >= $user_group[$member_id['user_group']]['disable_comments_captcha'] ) {

        
    $user_group[$member_id['user_group']]['comments_question'] = false;
        
    $user_group[$member_id['user_group']]['captcha'] = false;

    }

    if( 
    $user_group[$member_id['user_group']]['comments_question'] ) {

        
    $tpl->set'[question]'"" );
        
    $tpl->set'[/question]'"" );

        
    $question $db->super_query("SELECT id, question FROM " PREFIX "_question ORDER BY RAND() LIMIT 1");
        
    $tpl->set'{question}'"<span id=\"dle-question\">".htmlspecialcharsstripslashes$question['question'] ), ENT_QUOTES$config['charset'] )."</span>" );

        
    $_SESSION['question'] = $question['id'];

    } else {

        
    $tpl->set_block"'\\[question\\](.*?)\\[/question\\]'si""" );
        
    $tpl->set'{question}'"" );

    }

    if( 
    $user_group[$member_id['user_group']]['captcha'] ) {

        if ( 
    $config['allow_recaptcha'] ) {

            
    $tpl->set'[recaptcha]'"" );
            
    $tpl->set'[/recaptcha]'"" );

            
    $tpl->set'{recaptcha}'"<div class=\"g-recaptcha\" data-sitekey=\"{$config['recaptcha_public_key']}\" data-theme=\"{$config['recaptcha_theme']}\"></div>" );

            
    $tpl->set_block"'\\[sec_code\\](.*?)\\[/sec_code\\]'si""" );
            
    $tpl->set'{reg_code}'"" );

        } else {

            
    $tpl->set'[sec_code]'"" );
            
    $tpl->set'[/sec_code]'"" );
            
    $path parse_url$config['http_home_url'] );
            
    $tpl->set'{sec_code}'"<a onclick=\"reload(); return false;\" title=\"{$lang['reload_code']}\" href=\"#\"><span id=\"dle-captcha\"><img src=\"" $path['path'] . "engine/modules/antibot/antibot.php\" alt=\"{$lang['reload_code']}\" width=\"160\" height=\"80\" /></span></a>" );
            
    $tpl->set_block"'\\[recaptcha\\](.*?)\\[/recaptcha\\]'si""" );
            
    $tpl->set'{recaptcha}'"" );
        }

    } else {
        
    $tpl->set'{sec_code}'"" );
        
    $tpl->set'{recaptcha}'"" );
        
    $tpl->set_block"'\\[recaptcha\\](.*?)\\[/recaptcha\\]'si""" );
        
    $tpl->set_block"'\\[sec_code\\](.*?)\\[/sec_code\\]'si""" );
    }

    if( 
    $config['allow_comments_wysiwyg'] > ) {

        
    $tpl->set'{editor}'$wysiwyg );

    } else {
        
    $tpl->set'{editor}'$bb_code );

    }

    $tpl->set'{text}''' );
    $tpl->set'{title}'$lang['news_addcom'] );

    if( 
    $vk_url ) {
        
    $tpl->set'[vk]'"" );
        
    $tpl->set'[/vk]'"" );
        
    $tpl->set'{vk_url}'$vk_url );   
    } else {
        
    $tpl->set_block"'\\[vk\\](.*?)\\[/vk\\]'si""" );
        
    $tpl->set'{vk_url}''' );   
    }
    if( 
    $odnoklassniki_url ) {
        
    $tpl->set'[odnoklassniki]'"" );
        
    $tpl->set'[/odnoklassniki]'"" );
        
    $tpl->set'{odnoklassniki_url}'$odnoklassniki_url );
    } else {
        
    $tpl->set_block"'\\[odnoklassniki\\](.*?)\\[/odnoklassniki\\]'si""" );
        
    $tpl->set'{odnoklassniki_url}''' );   
    }
    if( 
    $facebook_url ) {
        
    $tpl->set'[facebook]'"" );
        
    $tpl->set'[/facebook]'"" );
        
    $tpl->set'{facebook_url}'$facebook_url );   
    } else {
        
    $tpl->set_block"'\\[facebook\\](.*?)\\[/facebook\\]'si""" );
        
    $tpl->set'{facebook_url}''' );   
    }
    if( 
    $google_url ) {
        
    $tpl->set'[google]'"" );
        
    $tpl->set'[/google]'"" );
        
    $tpl->set'{google_url}'$google_url );
    } else {
        
    $tpl->set_block"'\\[google\\](.*?)\\[/google\\]'si""" );
        
    $tpl->set'{google_url}''' );   
    }
    if( 
    $mailru_url ) {
        
    $tpl->set'[mailru]'"" );
        
    $tpl->set'[/mailru]'"" );
        
    $tpl->set'{mailru_url}'$mailru_url );   
    } else {
        
    $tpl->set_block"'\\[mailru\\](.*?)\\[/mailru\\]'si""" );
        
    $tpl->set'{mailru_url}''' );   
    }
    if( 
    $yandex_url ) {
        
    $tpl->set'[yandex]'"" );
        
    $tpl->set'[/yandex]'"" );
        
    $tpl->set'{yandex_url}'$yandex_url );
    } else {
        
    $tpl->set_block"'\\[yandex\\](.*?)\\[/yandex\\]'si""" );
        
    $tpl->set'{yandex_url}''' );
    }

    if( ! 
    $is_logged ) {
        
    $tpl->set'[not-logged]''' );
        
    $tpl->set'[/not-logged]''' );
    } else
        
    $tpl->set_block"'\\[not-logged\\](.*?)\\[/not-logged\\]'si""" );

    if( 
    $is_logged $hidden "<input type=\"hidden\" name=\"name\" id=\"name\" value=\"{$member_id['name']}\" /><input type=\"hidden\" name=\"mail\" id=\"mail\" value=\"\" />";
    else 
    $hidden "";

    // $tpl->copy_template = "<form  method=\"post\" name=\"dle-comments-form\" id=\"dle-comments-form\" action=\"{$_SESSION['referrer']}\">" . $tpl->copy_template . "
    // <input type=\"hidden\" name=\"subaction\" value=\"addcomment\" />{$hidden}
    // <input type=\"hidden\" name=\"post_id\" id=\"post_id\" value=\"$news_id\" /></form>";

    // Вот тут форма нашая
    $tpl->set'[form]'"<form  method=\"post\" name=\"dle-comments-form\" id=\"dle-comments-form\" action=\"{$_SESSION['referrer']}\">" );
    $tpl->set'[/form]'"<input type=\"hidden\" name=\"subaction\" value=\"addcomment\" />{$hidden}</form>" );

    if (!isset(
    $path['path'])) $path['path'] = "/";

    $tpl->copy_template .= <<<HTML
    <script type="text/javascript">
    <!--
    $(function(){

    $('#dle-comments-form').submit(function() {
    doAddComments();
    return false;
    });

    });

    function reload () {

    var rndval = new Date().getTime();

    document.getElementById('dle-captcha').innerHTML = '<img src="
    {$path['path']}engine/modules/antibot/antibot.php?rndval=' + rndval + '" width="160" height="80" alt="" />';

    };
    //-->
    </script>
    HTML;

    if ( 
    $user_group[$member_id['user_group']]['captcha'] AND $config['allow_recaptcha'] ) {

    $tpl->copy_template .= <<<HTML
    <script src='https://www.google.com/recaptcha/api.js?hl={$lang['wysiwyg_language']}' async defer></script>
    HTML;

    }

    $tpl->compile'addcomments' );
    $tpl->clear();
    echo 
    $tpl->result['addcomments']; // выводим работу шаблона
    unset ($tpl->result['addcomments']);
    Там можешь вместо addcomments подключить другой шаблон. Весь код внутри шаблона заключаешь в теги
    Код:
    [form]шаблон[/form]
    далее для передачи нужной новости передаешь через name="post_id" - id новости. Можешь к примеру так
    Код:
    [form]шаблон <input type="hidden" name="post_id" id="post_id" value="{news-id}" />[/form]
    По идеи, должно работать.

    А вывод комментариев можешь организовать с помощью ShowComments 2.1 [DLE 9.x - 10.x] передать id новости и все.
     
    Последнее редактирование модератором: 1 ноя 2015
    killoff нравится это.
  3. killoff

    killoff CD тихо, и не DVD меня ;)

    Moderator
    Регистр.:
    13 май 2008
    Сообщения:
    2.238
    Симпатии:
    831
    Добавлял в место подключения файла
    PHP:
    <?php

    $id_news 
    = (int)$_GET['id_news'];     //преемник нашего id новости

    $row $db->query("SELECT * FROM ".PREFIX."_post WHERE id='$id_news'");
    while(
    $list $db->get_row$row ))
    {

    $title $list['title']; //вытащит из базы название новости
    $onlinetitle $list['title'];
    $xf xfieldsdataload($list['xfields']);
    $year $xf['year'];

    $kinopoisk $xf['idkp'];
    $cacheid $id_news;
    $all unserialize(dle_cache"kino_rating"."_".$cacheid$config['skin'] ));
    $kino_rating $all[0];
    $kino_votes $all[1];
    $imdb_rating $all[2];
    $imdb_votes $all[3];
    $timeout stream_context_create( array (
    'http' => array(
    'timeout' => 1
    )
    )
    );
    if (
    $all =='') {
    $all = array();
    $kinopoisk preg_replace('#<(.+?)>#'''$kinopoisk);
    $kinopoisk $kinopoisk;
    $rating file_get_contents("http://rating.kinopoisk.ru/{$kinopoisk}.xml"0$timeout);
    preg_match("/kp_rating num_vote=['\"](.+)['\"]>(.+)</isU"$rating$kp);
    $kino_rating $kp[2];
    $kino_votes = ($kino_rating) ? $kp[1] : "";
    $kino_votes $kino_votes;
    preg_match("/imdb_rating num_vote=['\"](.+)['\"]>(.+)</isU"$rating$imdb);
    $imdb_rating $imdb[2];
    $imdb_votes = ($imdb_rating) ? $imdb[1] : "";
    $imdb_votes $imdb_votes;
    $all = array( $kino_rating$kino_votes$imdb_rating$imdb_votes);
    create_cache"kino_rating"."_".$cacheidserialize($all), $config['skin'] );
    }
    if (
    $imdb_rating =='' or $imdb_rating =='0') {
    $kino_rate round(($kino_rating), 1);
    $kino_rate str_replace(",""."$kino_rate);
    $sum_vote number_format($kino_votes);
    $sum_vote str_replace(","" "$sum_vote);
    } elseif (
    $kino_rating =='0' or $kino_rating =='') {
    $kino_rate round(($imdb_rating), 1);
    $sum_vote number_format($imdb_votes);
    } else {
    $kino_rate round(($kino_rating+$imdb_rating)/21);
    $kino_rate str_replace(",""."$kino_rate);
    $sum_vote number_format(($kino_votes+$imdb_votes)/2);
    $sum_vote str_replace(","" "$sum_vote);
    };

    }

    $tpl->set'{title}'$title);
    $tpl->set'{year}'$year);
    $tpl->set'{news-id}'$id_news);

    $tpl->load_template'_comment.tpl' );


    $tpl->set('{kinopoisk}'$kino_rate);
    $tpl->set('{kinopoisk_vote}'$sum_vote);

    //    include_once ENGINE_DIR . '/modules/add_comment.php';

    $tpl->compile'content' );
    $tpl->clear();

    ?>
    где
    PHP:
    //    include_once ENGINE_DIR . '/modules/add_comment.php';
    и не работает даже {sec-code} :( (подключение шаблона отключал, т.к. выше в коде есть подключение шаблона).

    Может в другое место его подключать надо или код моего файла настолько кривой... :conf:

    Вывод итак через него сделал пока в одном шаблоне, в полный листинг комментариев пока с добавлением не разберусь даже не смотрел пока ещё..

    PS с гитхаба вчера качал там была версия 2.0 :) щас обновлюсь.
     
    Последнее редактирование: 1 ноя 2015
  4. Gameer

    Gameer Постоялец

    Регистр.:
    25 апр 2014
    Сообщения:
    130
    Симпатии:
    84
    Попробуй в php файле с добавлением комментариев сделать новый объект.
    Код:
    $tpl_add_comm = new dle_template(); $tpl_add_comm->dir = TEMPLATE_DIR;
    и заменить все $tpl-> на $tpl_add_comm->
     
  5. killoff

    killoff CD тихо, и не DVD меня ;)

    Moderator
    Регистр.:
    13 май 2008
    Сообщения:
    2.238
    Симпатии:
    831
    Побовал, не помогает (((
    Вообще при подключении add_comment.php к странице грузится ещё код страницы с ошибкой что публикации не найдено. :(
     
  6. killoff

    killoff CD тихо, и не DVD меня ;)

    Moderator
    Регистр.:
    13 май 2008
    Сообщения:
    2.238
    Симпатии:
    831
    Ещё вопрос возник...
    Я удалил в файле show.full.php всё что касается комментариев, и теперь стало после добавления комментария перекидывать на главную страницу сайта. Как исправить, чтобы обновлялась нужная страница с комментариями? Пробовал http://htmlforum.ru/index.php?showtopic=47537 но не помагает((

    Пробовал заменить в
    Код:
    $tpl->set( '[form]', "<form  method=\"post\" name=\"dle-comments-form\" id=\"dle-comments-form\" action=\"index.php\">" );
    Index.php на страницу комментариев по news-id или же просто заменив на {$_SESSION['referrer']}, но тогда комментарий вообще не добавляется. Что тут не так? :eek:
     
    Последнее редактирование: 27 ноя 2015