Редактирование рейтинга через админку


Модуль позволяет выставлять и изменять рейтинг новостей прямо в админ-панели. Редактирование происходит на странице списка всех новостей. Как это выглядит можно посмотреть на картинке в этой статье. При нажатии на рейтинг, он становится редактируемым. При записи нового значения и нажатии Enter, он сохраняется.


Установка:
1. Загрузить из архива edit_rating.php в папку engine/ajax/.

2. Открыть engine/inc/editnews.php и найти (строка ~511):
<td class="news-list-tab" style="width: 60px"><i class="icon-eye-open tip" data-original-title="{$lang['st_views']}"></i></td>

Добавить ниже:
<td class="news-list-tab" style="width: 60px"><i class="icon-star"></i></td>

Найти еще (строка ~285):
$entries .= "<a title='{$lang['edit_act']}' href=\"?mod=editnews&action=editnews&id={$row['id']}\">{$title}</a>
        <td class=\"news-list-tab\" style=\"text-align: center\"><a data-original-title=\"{$lang['st_views']}\" class=\"status-info tip\" href=\"{$full_link}\" target=\"_blank\">{$row['news_read']}</a></td><td class=\"news-list-tab\" align=\"center\">" . $comm_link;

Заменить на:
$entries .= "<a title='{$lang['edit_act']}' href=\"?mod=editnews&action=editnews&id={$row['id']}\">{$title}</a>
        <td class=\"news-list-tab\" style=\"text-align: center\"><a data-original-title=\"{$lang['st_views']}\" class=\"status-info tip\" href=\"{$full_link}\" target=\"_blank\">{$row['news_read']}</a></td><td class=\"news-list-tab\" style=\"text-align: center\"><a href=\"#\" class='my_rating' data-id=\"".$row['eid']."\">".$row['rating']."</a></td><td class=\"news-list-tab\" align=\"center\">" . $comm_link;

Найти еще (строка ~186):
$db->query( "SELECT p.id, p.date, p.title, p.category, p.autor, p.alt_name, p.comm_num, p.approve, p.fixed, e.news_read, e.votes FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) " . $where . " ORDER BY " . $order_by . " LIMIT $start_from,$news_per_page" );

Заменить на:
$db->query( "SELECT p.id, p.date, p.title, p.category, p.autor, p.alt_name, p.comm_num, p.approve, p.fixed, e.news_read, e.votes, e.eid, e.rating FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) " . $where . " ORDER BY " . $order_by . " LIMIT $start_from,$news_per_page" );

Добавить в самый конец:
<script>
    $(function(){
        $(document).on("click", ".my_rating", function(){
            var rating_id = $(this).attr("data-id");
            var old_rating = $(this).text();
            $(this).replaceWith('<input type="text" class="edit_rating" style="width: 40px; height: 18px; text-align: center;" value="'+old_rating+'" data-id="'+rating_id+'">');
            $(".edit_rating").select();
            return false;
        })
        $(document).on("keydown", ".edit_rating", function(event){
            var el = $(this);
            var rating_id = $(this).attr("data-id");
            var new_rating = $(this).val();
            if(event.keyCode==13){
               $.ajax({
                   type: 'POST',
                   url: "<?php echo $config["http_home_url"]; ?>engine/ajax/edit_rating.php",
                   data: {
                       "new_rating": new_rating,
                       "eid": rating_id
                   },
                   dataType: 'text',
                   success: function(data){
                       if(data == 1){
                           if(new_rating.length <= 1) new_rating = new_rating + ".0";
                           el.replaceWith('<a href="#" class="my_rating" data-id="'+rating_id+'">'+new_rating+'</a>');
                       }
                       else alert(data);
                   }
               });
                return false;
            }
        });
    })
</script>

3. Найти в базе данных таблицу dle_post_extras и изменить тип поля rating с INT на DECIMAL со значением 2,1 (если хотите рейтинг типа IMBD):


Редактирование рейтинга через админку

4. Чтобы с сайта никто не мог выставить рейтинг, в engine/ajax/rating.php на строке 17 просто добавить:
exit;

5. Для вывода рейтинга в новостях, следует добавить в любое место shortstory.tpl и fullstory.tpl:
{my-rating} 

6. Открыть engine/modules/show.short.php и найти (строка ~388):
else {
            
            $tpl->set( '{rating}', "" );
            $tpl->set( '{vote-num}', "" );
            $tpl->set_block( "'\\[rating\\](.*?)\\[/rating\\]'si", "" );
            $tpl->set_block( "'\\[rating-plus\\](.*?)\\[/rating-plus\\]'si", "" );
            $tpl->set_block( "'\\[rating-minus\\](.*?)\\[/rating-minus\\]'si", "" );
        }

Добавить ниже:
$tpl->set( '{my-rating}', $row['rating'] );

7. Открыть engine/modules/show.full.php, найти строки с кодом как в предыдущем пункте (строка ~768) и добавить ниже:
$tpl->set( '{my-rating}', $row['rating'] );

Готово!

redaktirovanie-reytinga-cherez-adminku.zip
Создайте аккаунт или авторизуйтесь для скачивания
 
Версия DLE: 11.х
Кодировка: utf-8
Автор: Kylaksizov
Информация
Посетители, находящиеся в группе Гость, не могут оставлять комментарии к данной публикации.