Перейти к публикации

Помогите пожалуйста подправить код


Рекомендованные сообщения

Здравствуйте. На одном иностранном форуме xenforo я увидел интересную реализацию. Там, для пользователей ссылки для скачивания файлов прятали под хайды. Чтобы увидеть содержимое хайда, нужно было оценить пост и оставить комментарий. Поскольку многие пользователи любят только брать, забывая даже поблагодарить, то такая реализация мне показалась полезной для автора. Для пользователя не сложно поставить плюс к рейтингу и написать своё мнение, а автору поста приятно.

 

Человек с ником vitnet с dle-faq помог мне такое же реализовать на Dle, за что ему огромное спасибо. Данный код работает со 2 типом рейтинга - Только нравится. Если включить 3 тип рейтинга, то содержимое хайда откроется только в том случае, если рейтинг повысили. Мне кажется это нечестно по отношению к пользователям. Я эту особенность не заметил сразу, потому что сначала использовал 2 тип рейтинга. Сейчас решил перейти на 3. Кому не сложно, можете помочь подправить код, чтобы хайд открывался также и если рейтинг понизят?

 

Вот собственно сама инструкция:

Заходим в engine/modules и в файле show.full.php найти:

if (stripos ( $tpl->result['content'], "[hide" ) !== false ) {
			
			$tpl->result['content'] = preg_replace_callback ( "#\[hide(.*?)\](.+?)\[/hide\]#is", 
				function ($matches) use ($member_id, $user_group, $lang) {
					
					$matches[1] = str_replace(array("=", " "), "", $matches[1]);
					$matches[2] = $matches[2];
	
					if( $matches[1] ) {
						
						$groups = explode( ',', $matches[1] );
	
						if( in_array( $member_id['user_group'], $groups ) OR $member_id['user_group'] == "1") {
							return $matches[2];
						} else return "<div class=\"quote\">" . $lang['news_regus'] . "</div>";
						
					} else {
						
						if( $user_group[$member_id['user_group']]['allow_hide'] ) return $matches[2]; else return "<div class=\"quote\">" . $lang['news_regus'] . "</div>";
						
					}
	
			}, $tpl->result['content'] );
		}

 

Заменить код на:

if( stripos($tpl->result['content'], "[hide" ) !== false ) {
			$tpl->result['content'] = preg_replace_callback( "#\[hide(.*?)\](.+?)\[/hide\]#is", 
				function ($matches) use ($member_id, $user_group, $lang, $row, $db) {
					$matches[1] = str_replace(array("=", " "), "", $matches[1]);
					$matches[2] = $matches[2];

					if( $member_id['user_group'] != 5 ) {
						$rows = $db->super_query( "SELECT news_id, member, rating FROM " . PREFIX . "_logs WHERE news_id='{$row['id']}' AND member='{$member_id['name']}'" );
						
						$count = $db->super_query( "SELECT COUNT(*) AS count FROM " . PREFIX . "_comments WHERE post_id='{$row['id']}' AND user_id='{$member_id['user_id']}'" );

						$count['count'] = intval($count['count']);
						$rows['rating'] = intval($rows['rating']);
						
						if( $matches[1] ) {
							$groups = explode( ',', $matches[1] );
	
							if( (in_array($member_id['user_group'], $groups) && $rows['rating'] >= 1 && $count['count'] >= 1) || $member_id['user_group'] == "1" ) {
								return $matches[2];
							} else {
								if( !$count['count'] ) $lang['news_regus'].= "<br />Оставьте комментарий";
								if( !$rows['rating'] ) $lang['news_regus'].= "<br />Поставьте оценку";
								
								return "<div class=\"quote\">" . $lang['news_regus'] . "</div>";
							}
						} else {
							if( ($user_group[$member_id['user_group']]['allow_hide'] && $rows['rating'] >= 1 && $count['count'] >= 1) || $member_id['user_group'] == "1" ) {
								return $matches[2];
							} else {
								if( !$count['count'] ) $lang['news_regus'].= "<br />Оставьте комментарий";
								if( !$rows['rating'] ) $lang['news_regus'].= "<br />Поставьте оценку";
								
								return "<div class=\"quote\">" . $lang['news_regus'] . "</div>";
							}
						}
					} else {
						if( $matches[1] ) {
							$groups = explode( ',', $matches[1] );
	
							if( in_array($member_id['user_group'], $groups) || $member_id['user_group'] == "1" ) {
								return $matches[2];
							} else return "<div class=\"quote\">" . $lang['news_regus'] . "</div>";
						} else {
							if( $user_group[$member_id['user_group']]['allow_hide'] || $member_id['user_group'] == "1" ) {
								return $matches[2];
							} else {
								return "<div class=\"quote\">" . $lang['news_regus'] . "</div>";
							}
						}
					}
			}, $tpl->result['content'] );
		}

Ссылка на сообщение
Поделиться на других сайтах

Я сделал вот так. В коде 2 раза встречается 

$rows['rating'] >= 1 && $count['count'] >= 1) || $member_id['user_group'] == "1"

Здесь, как я понимаю, идёт Если рейтинг больше или равно 1...... Я посмотрел в мануале по php оператор ИЛИ и сделал вот так:

$rows['rating'] >= 1 || $rows['rating'] <= -1 && $count['count'] >= 1) || $member_id['user_group'] == "1"

Теперь хайд открывается, если рейтинг понизили.

 

Знатоки, скажите пожалуйста, правильно я сделал?

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...