Здравствуйте. На одном иностранном форуме 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'] );
}