Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Как скрыть комментарий под спойлер, в зависимости от включения флажка?

Как скрыть комментарий под спойлер, в зависимости от включения флажка?


     06.05.2020    dle, спойлер, флажок, комментарии    Общие вопросы по PHP, Модули, Хаки, MySQL    172

вопрос
Здравствуйте. В общем суть вопроса и если есть решения, буду очень благодарен, в форме добавления комментария присутствует checkbox (содержит ли комментарий спойлеры к сериалу) , как сделать, чтобы при нажатии на этот checkbox пользователем, после отправки комментария он скрывался под спойлер. Заранее большое спасибо

Ответа пока нет


21 комментарий

Temiros
Юзер

Temiros - 7 мая 2020 16:30 -

Тоже интересно, как такое замутить

deadluk
Юзер

deadluk - 8 мая 2020 00:10 -

но ведь можно просто попросить комменты кидать под спойлер, тем более, можно кинуть ту часть, что действительно является спойлером, а не личным мнением ТС или подобное.

например

На латыни название моржа – Odobenus rosmarus можно перевести, как «гуляющая с помощью зубов морская лошадь». Когда морж использует свои выдающиеся бивни, чтобы вытащить свое тяжелое тело из воды на льдину, это выглядит так, как будто он «гуляет» с помощью своих бивней, отсюда и название. и дальше текст о классных моржах

soldatimar
Юзер

soldatimar - 8 мая 2020 20:54 -

deadluk, Спасибо, но к сожалению, именно такое нужно, видимо в стол заказов мне дорога.Но все равно спасибо за совет.

deadluk
Юзер

deadluk - 8 мая 2020 21:46 -

если б знал, то скинул ответ)

dj-avtosh
PHP-developer

dj-avtosh - 9 мая 2020 00:03 -

Этот чекбокс стандартным функционалом реализован?

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

soldatimar
Юзер

soldatimar - 9 мая 2020 00:50 -

Блин... Вот, что значит не умение правильно высказывать свои мысли, прошу прощения. Имел ввиду, добавить чекбокс в форму добавления комментариев, по нажатию на который комментарий пусть не обязательно под спойлер уходил, хотя бы класс добавлялся, а там уже оформить можно.

dj-avtosh
PHP-developer

dj-avtosh - 9 мая 2020 01:03 -

Нужно создать поле в phpmyadmin допустим с названием is_spoiler в таблице dle_comments с типом tinyint = 1, по default = 0.

Потом в /engine/modules/addcomments.php найти:

$name = $db->safesql( htmlspecialchars(strip_tags( trim( $_POST['name'] ) ), ENT_QUOTES, $config['charset'] ) );


ниже добавить:

$is_spoiler = ! empty ( $_POST['is_spoiler'] ) && is_scalar( $_POST['is_spoiler'] ) ? 1 : 0;


Найти:

			if( $is_logged ) $db->query( "INSERT INTO " . PREFIX . "_comments (post_id, user_id, date, autor, email, text, ip, is_register, approve, parent) values ('{$post_id}', '{$member_id['user_id']}', '{$time}', '{$name}', '{$mail}', '{$comments}', '{$_IP}', '1', '{$where_approve}', '{$parent}')" );
			else $db->query( "INSERT INTO " . PREFIX . "_comments (post_id, date, autor, email, text, ip, is_register, approve, parent) values ('{$post_id}', '{$time}', '{$name}', '{$mail}', '{$comments}', '{$_IP}', '0', '{$where_approve}', '{$parent}')" );


заменить на:

			if( $is_logged ) $db->query( "INSERT INTO " . PREFIX . "_comments (is_spoiler, post_id, user_id, date, autor, email, text, ip, is_register, approve, parent) values ('{$is_spoiler}', '{$post_id}', '{$member_id['user_id']}', '{$time}', '{$name}', '{$mail}', '{$comments}', '{$_IP}', '1', '{$where_approve}', '{$parent}')" );
			else $db->query( "INSERT INTO " . PREFIX . "_comments (is_spoiler, post_id, date, autor, email, text, ip, is_register, approve, parent) values ('{$is_spoiler}', '{$post_id}', '{$time}', '{$name}', '{$mail}', '{$comments}', '{$_IP}', '0', '{$where_approve}', '{$parent}')" );




Открыть шаблон addcomments.tpl:

Найти:

<button class="btn btn-big" type="submit" name="submit" title="Отправить комментарий"><b>Отправить комментарий</b></button>


Добавить выше

содержит ли комментарий спойлеры к сериалу? <input type="checkbox" name="is_spoiler" value="1" />

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

dj-avtosh
PHP-developer

dj-avtosh - 9 мая 2020 01:16 -

Далее для вывода в шаблон открыть /engine/classes/comments.class.php

найти:

		$tpl->compile( 'comments' );
		
		return $tpl->result['comments'];
		
	}
	
	function build_customcomments( $tpl, $template ) {


Выше добавить:

if ( ! empty ( $row['is_spoiler'] ) )
{

	$tpl->set( '[is_spoiler]', '' );
	$tpl->set( '[/is_spoiler]', '' );

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

}



-----

Далее открыть файл /engine/modules/functions.php найти:

$sql_select = "SELECT cm.id, post_id, cm.user_id


заменить на

$sql_select = "SELECT cm.is_spoiler, cm.id, post_id, cm.user_id


Продолжение в следующем комментарии...

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

dj-avtosh
PHP-developer

dj-avtosh - 9 мая 2020 01:24 -

1. /engine/modules/lastcomments.php

$comments->query = "SELECT cm.id, 


заменить на

$comments->query = "SELECT cm.is_spoiler, cm.id, 


2. /engine/modules/show.full.php

$comments->query = "SELECT " . PREFIX . "_comments.id, 


заменить на

$comments->query = "SELECT  " . PREFIX . "_comments.is_spoiler, " . PREFIX . "_comments.id, 


3. /engine/modules/search.php

$comms_fields = "SELECT cm.id, 


заменить на

$comms_fields = "SELECT cm.is_spoiler, cm.id, 


4. /engine/ajax/comments.php

$comments->query = "SELECT " . PREFIX . "_comments.id, 


заменить на

$comments->query = "SELECT  " . PREFIX . "_comments.is_spoiler, " . PREFIX . "_comments.id, 


5. ./engine/ajax/addcomments.php

$comments->query = "SELECT " . PREFIX . "_comments.id, 


заменить на

$comments->query = "SELECT  " . PREFIX . "_comments.is_spoiler, " . PREFIX . "_comments.id, 

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

dj-avtosh
PHP-developer

dj-avtosh - 9 мая 2020 01:26 -

Далее в шаблоне с выводом комментарием comments.tpl нужный класс оберунть в

 [is_spoiler]class="spoiler_class"[/is_spoiler] 


ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

dj-avtosh
PHP-developer

dj-avtosh - 9 мая 2020 01:34 -

Что бы работало со всем текстом коммента:

открыть /engine/classes/comments.class.php (то что делали выше в файле comments.class.php оставляем как есть - не трогаем - выше дан верный код)

найти:

		$tpl->compile( 'comments' );
		
		return $tpl->result['comments'];
		
	}
	
	function build_customcomments( $tpl, $template ) {



Выше добавить:

if ( ! empty ( $row['is_spoiler'] ) )
{
       $tpl->set_block( "'\[not_spoiler\](.*?)\[/not_spoiler\]'si", "" );

} else {
	
	$tpl->set( '[not_spoiler]', '' );
	$tpl->set( '[/not_spoiler]', '' );

}


И тогда уже в comments.tpl делаем так:

[not_spoiler]Это мой текст без спойлера: {comment}[/not_spoiler]
 [is_spoiler]Это мой текст со спойлером:  {comment}[/is_spoiler]

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

soldatimar
Юзер

soldatimar - 9 мая 2020 01:47 -

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

dj-avtosh
PHP-developer

dj-avtosh - 9 мая 2020 02:03 -

а в таблице dle_comments какое значение у no_spoiler этого комментария?

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

soldatimar
Юзер

soldatimar - 9 мая 2020 02:06 -

Вот на все комментарии, стоит "0" в не зависимости нажимал я на чекбокс или нет(
вот попробовал 1 в значение прописал тогда комментарий скрывается

dj-avtosh
PHP-developer

dj-avtosh - 9 мая 2020 02:20 -

Надо наверно еще и на js внести правку.

engine/classes/js/dle_js.js


"engine/ajax/controller.php?mod=addcomments",{post_id:k


заменить на

"engine/ajax/controller.php?mod=addcomments",{is_spoiler: $("input[name='is_spoiler']:checked"), post_id:k



--------------------


engine/ajax/controller.php?mod=addcomments",{post_id:p


заменить на

engine/ajax/controller.php?mod=addcomments",{is_spoiler: $("input[name='is_spoiler']:checked"), post_id:p



--------------------


"engine/ajax/controller.php?mod=addcomments",{post_id:a.post_id.value


заменить на

"engine/ajax/controller.php?mod=addcomments",{is_spoiler: $("input[name='is_spoiler']:checked"), post_id:a.post_id.value



ОБНОВИТЬ кеш JS!

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

soldatimar
Юзер

soldatimar - 9 мая 2020 02:30 -

Спасибо большое Вам, все заработало. Правда пропала ajax добавление комментария, перезагружается страница просто, но это и к лучшему даже для меня. Еще раз большое спасибо

dj-avtosh
PHP-developer

dj-avtosh - 9 мая 2020 02:48 -

это значит, что вы внесли что-то с ошибкой, напишите мне в телеграм.

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

doom45
Юзер

doom45 - 11 мая 2020 21:43 -

Скинул на пиво, спасибо

dj-avtosh
PHP-developer

dj-avtosh - 11 мая 2020 22:59 -

Спасибо. А тот человек, которому я помог выше, даже 1 рубль не задонатил)

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

soldatimar
Юзер

soldatimar - 9 мая 2020 02:12 -


Вот скриншот

doom45
Юзер

doom45 - 11 мая 2020 21:39 -

Если будет возможность оставьте ссылку на скачивание плагина, полезный плагин, спасибо!

P.S: Не забудьте про изменений в engine/classes/js/dle_js.js.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх