Шаблоны для DLE » Модули » Быстрая подписка на комментарии

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


Установка:


1. В папке 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\":\"Вы успешно подписались. Отписаться?\"}";
}
?>



2. JS код вставить в любой подключенный к шаблону js файл:

$(document).on('click','.unsubcomm',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");
});



3. В файле шаблона addcomments.tpl или fullstory.tpl в желаемом месте вставить код:

[not-group=5]<span class="unsubcomm">Подписаться на комментарии</span>[/not-group]



Наличие имени класса unsubcomm - обязательно.


4. При желании использовать стиль кнопки:

.unsubcomm{
	display: inline-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(dаta:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAIAAABi9+OQAAAAI0lEQVQImWP49esXEwMDA9O/f/+YGBgYmP7//4+Vj0ucTHUA3nos7QvvyugAAAAASUVORK5CYII=) repeat-x 0 0;
	-webkit-border-radius: 2px;
	-moz-border-radius: 2px;
	border-radius: 2px;
}
.unsubcomm:hover{
	color: #222;
	background: #fff url(dаta:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAIAAABi9+OQAAAAG0lEQVQImWN49+4dEwMDAxMjIyNZNBMTEzn6AGFhAzKAZ4ckAAAAAElFTkSuQmCC) repeat-x 0 0;
}
.unsubcomm:active{
	border-color: #fc0;
}



Все!


Также небольшое дополнение чтобы сразу отображать статус - подписан пользователь или нет.


Установка:

1. Создать engine/mods/subscribed.php с содержимым:

<?PHP
if(!defined('DATALIFEENGINE')) die("Hacking attempt!");
$row = $db->super_query( "SELECT user_id, name, email, hash FROM " . PREFIX . "_subscribe WHERE news_id = " . intval( $_GET['newsid'] ) . " AND user_id = {$member_id['user_id']}" );
if($row['user_id'])
	echo "Отписаться от комментариев";
else
	echo "Подписаться на комментарии";
?>



2. В шаблоне addcomments.tpl вместо текста "Подписаться на комментарии" использовать код:

{include file="engine/mods/subscribed.php"}



Получиться должно примерно так:

[not-group=5]<span class="unsubcomm">{include file="engine/mods/subscribed.php"}</span>[/not-group]



Все!


Загрузка не требуется!
  • Версия DLE: 10.x - 14.x
  • Категория: Модули
  • Автор: Sander
  • Источник:

собрано 3030.00 рублей Поддержать автора

Войдите на сайт


Все собранные средства будут переданы автору этой статьи - DEN
Сумма перевода от 10.00 рублей
00
85
0
24-07-2022, 13:13
Обсудить (0)
Похожие модули
Комментарии
Минимальная длина комментария - 10 знаков. комментарии модерируются
Комментариев еще нет. Вы можете стать первым!
Помощь в публикации комментариев:
1.) Если вы хотите задать вопрос, тогда просто оставьте комментарий, не нужно вопрос добавлять в ответ.
2.) Если вы хотите ответить на комментарий, для этого есть кнопка "ответить" под нужным вам вопросом.
  • bowtiesmilelaughingblushsmileyrelaxedsmirk
    heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
    winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
    worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
    expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
    disappointedconfoundedfearfulcold_sweatperseverecrysob
    joyastonishedscreamtired_faceangryragetriumph
    sleepyyummasksunglassesdizzy_faceimpsmiling_imp
    neutral_faceno_mouthinnocent
Мы ценим вашу конфиденциальность
Мы используем файлы "cookie" на нашем веб-сайте, чтобы предоставить вам наиболее релевентный результат, помня ваши предпочтения и повторные посещения.
Нажимая "Принять" вы соглашаетесь на использование всех файлов "cookie".
Принять
Не принимаю
Показать цели
X

Платные услуги новостей