Spyhog 65 Опубликовано: 4 июня 2018 Рассказать Опубликовано: 4 июня 2018 Здравствуйте. На одном иностранном форуме 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'] ); } Цитата Ссылка на сообщение Поделиться на других сайтах
Spyhog 65 Опубликовано: 9 июня 2018 Рассказать Опубликовано: 9 июня 2018 Автор Я сделал вот так. В коде 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" Теперь хайд открывается, если рейтинг понизили. Знатоки, скажите пожалуйста, правильно я сделал? Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.