Технический сбой

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

Как реализовать скрытие новостей с определенной категории, если пользователь не хочет данные новости видеть?


     Общие вопросы по PHP, Модули, Хаки, Ламерские вопросы    2801

вопрос
Доброго времени суток. Понадобилось реализовать следующее, дабы следовать законам, хотелось бы скрыть контент 18+ от пользователей, которые этого видеть не хотят. Порывшись в интернете не нашел ничего подходящего. Я создал дополнительно поле в настройках профилей пользователей с именем adult, типом "список", названием "Скрывать на сайте контент 18+" и значениями "Да, мне еще нет 18" / "Нет, мне уже 18+".Подскажите как создать условие, чтобы новости из определенного раздела скрывались с сайта, если пользователь выбрал вариант ответа "Да, мне еще нет 18" ? Может кто-то уже реализовал подобное или знает где об этом почитать. Буду чрезмерно признателен.

Ответил: PunPun


Создать доп поле для профиля (Список).
Открыть /engine/modules/show.short.php найти :
$sql_result = $db->query( $sql_select );
Выше вставить :
$year18 = explode ("||", $member_id['xfields']);
$year18 = explode ("|", $year18[0]);
if(in_array($category_id, array(1,2,3,4)) AND $year18[1] == "Нет")
{
    $tpl->load_template( 'info.tpl' );
    $tpl->set( '{error}', "Материал +18" );
    $tpl->set( '{title}', "Ойой, кто-то хочет пошалить!" );
    $tpl->compile( 'content' );
    $tpl->clear();
    return;
}
Где 1,2,3,4 - это id категорий для +18
Где $year18[0] - 0 это место положения доп поля в базе (если не переставлял то можно считать и по админке)
Где $year18[1] == "Нет" - вместо "Нет" может быть любое значение которое будет означать, что бы пользователю скрывать материал с +18

Мой вариант без запроса в БД + без запросов в новости если новости нужно скрывать.

17 комментариев

sadan
Юзер

sadan - -

можно сделать без поправки кода php, если использовать куки для тега [category=

DomiTori
Юзер

DomiTori - -

sadan,
А подробнее. Моэно было бы засоувать в группу отдельную, но геморно

sadan
Юзер

sadan - -

вот простой пример:

<a id="no18" href="#">мне еще нет 18</a><br />
<a id="m18" href="#">мне уже 18+</a>
<style type="text/css">
    #fillBackground {
        display: none;
    }
</style>
<div id="fillBackground">
    текст
</div>
<script type="text/javascript">
    var Cookie = {
        set: function(name, value, expires, path, domain, secure) {
            document.cookie = name + "=" + escape(value) +
                ((expires) ? "; expires=" + expires : "") +
                ((path) ? "; path=" + path : "") +
                ((domain) ? "; domain=" + domain : "") +
                ((secure) ? "; secure" : "");
        },
        get: function(name) {
            var prefix = name + "=";
            var cookieStartIndex = document.cookie.indexOf(prefix);
            if (cookieStartIndex == -1) return null;
            var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length);
            if (cookieEndIndex == -1) cookieEndIndex = document.cookie.length;
            return unescape(document.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex));
        },
        del: function(name, path, domain) {
            if ( this.get( name ) ) {
                document.cookie = name + "=" +
                    ((path) ? "; path=" + path : "") +
                    ((domain) ? "; domain=" + domain : "") +
                    "; expires=Thu, 01-Jan-16 00:00:01 GMT";
            }
        }
    }

    if ( Cookie.get("test") != "1" ) {
        document.getElementById( 'fillBackground' ).style.display = 'block';
    }

    document.getElementById( 'no18' ).onclick = function() {
        Cookie.set("test", "1");
        document.getElementById( 'fillBackground' ).style.display = 'none';
        return false;
    }
    
    
function delete_cookie ( test )
{
  var cookie_date = new Date ( );
  cookie_date.setTime ( cookie_date.getTime() - 1 );
  document.cookie = test += "=; expires=" + cookie_date.toGMTString();
}

    document.getElementById( 'm18' ).onclick = function() {
        delete_cookie ( "test" );
        return false;
    }
</script>

DomiTori
Юзер

DomiTori - -

Спасибо за ваш метод, опробуем. А знает кто как сделать следующее:
заглядываем в ячейку с бд и считываем инфу из доп поля профилей adult уданного пользователя.
Если значение доп поля == ’’да, мне уже есть 18‘’
Отобразить след код
иначе ити дальше
Както так

sadan
Юзер

sadan - -

зачем дополнительное поле? есть скрипты при первом посещении сайта, тоже в куки

LazyDev
PHP-developer

LazyDev - -

***Комментарий удален***

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

sadan
Юзер

sadan - -

вот и эксперт, четко!

DomiTori
Юзер

DomiTori - -

Gameer,спасибо, ты мастер своего дела. сделал по инструкции. новости как в {content} так и через {custom category=} при любом ответе, да или нет всеравно отображаются с разных пользователей.
array(17,18) изменил под категории с хентаем, варианты ответов изменил на да и нет. может я упустил что-то?

LazyDev
PHP-developer

LazyDev - -

DomiTori, если зайти в категорию 17 или 18, ошибка выдает ?

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

DomiTori
Юзер

DomiTori - -

Gameer,
нет, новости отображаются без какой либо ошибки или надписей

LazyDev
PHP-developer

LazyDev - -

DomiTori, проверял на DLE 10.5 UTF-8 чистый двиг, все отлично работает

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

DomiTori
Юзер

DomiTori - -

Gameer,
$year18 = explode ("||", $member_id['xfields']);
$year18 = explode ("|", $year18[0]);
if(in_array($category_id, array(17,18)) AND $year18[1] == "Нет")
{
    $tpl->load_template( 'info.tpl' );
    $tpl->set( '{error}', "Материал +18" );
    $tpl->set( '{title}', "Ойой, кто-то хочет пошалить!" );
    $tpl->compile( 'content' );
    $tpl->clear();
    return;
}


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

в xfields в бд на нескольких пользователях стоит значения "adult|Нет", никаких других доп полей у меня нет.

LazyDev
PHP-developer

LazyDev - -

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

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

DomiTori
Юзер

DomiTori - -

Gameer,
решил попробовать на другом сайте, не засоренным модулями. по прежнему ничего не дает. попробовал вставить не до
$sql_result = $db->query( $sql_select );

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

FastFud
Юзер

FastFud - -

А не проще ли будет так
        $year18 = explode ("||", $member_id['xfields']);
$year18 = explode ("|", $year18[0]);
if(in_array($category_id, array(1,2,3,4)) AND $year18[1] == "Нет")
{
    msgbox( 'Ойой, кто-то хочет пошалить!', 'Материал +18' );
    return;
}
?

LazyDev
PHP-developer

LazyDev - -

FastFud, зачем нам создавать еще один объект класса ?

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

DomiTori
Юзер

DomiTori - -

Цитата: FastFud
$year18 = explode ("||", $member_id['xfields']);
$year18 = explode ("|", $year18[0]);
if(in_array($category_id, array(1,2,3,4)) AND $year18[1] == "Нет")
{
    msgbox( 'Ойой, кто-то хочет пошалить!', 'Материал +18' );
    return;
}


твой код приводит к ошибке
Parse error: syntax error, unexpected '0' (T_LNUMBER)

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

наверх