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

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


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

вопрос
Доброго времени суток. Понадобилось реализовать следующее, дабы следовать законам, хотелось бы скрыть контент 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 - 2 июля 2015 05:05 -

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

DomiTori
Юзер

DomiTori - 2 июля 2015 09:56 -

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

sadan
Юзер

sadan - 2 июля 2015 11:44 -

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

<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 - 2 июля 2015 12:02 -

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

sadan
Юзер

sadan - 2 июля 2015 12:06 -

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

LazyDev
PHP-developer

LazyDev - 2 июля 2015 13:02 -

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

Мой блог: LazyDev.pro

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

sadan
Юзер

sadan - 2 июля 2015 13:09 -

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

DomiTori
Юзер

DomiTori - 2 июля 2015 17:08 -

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

LazyDev
PHP-developer

LazyDev - 2 июля 2015 17:13 -

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

Мой блог: LazyDev.pro

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

DomiTori
Юзер

DomiTori - 2 июля 2015 18:22 -

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

LazyDev
PHP-developer

LazyDev - 2 июля 2015 19:09 -

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

Мой блог: LazyDev.pro

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

DomiTori
Юзер

DomiTori - 2 июля 2015 19:15 -

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 - 2 июля 2015 19:22 -

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

Мой блог: LazyDev.pro

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

DomiTori
Юзер

DomiTori - 2 июля 2015 19:41 -

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

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

FastFud
Юзер

FastFud - 2 июля 2015 21:10 -

А не проще ли будет так
        $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 - 2 июля 2015 21:32 -

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

Мой блог: LazyDev.pro

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

DomiTori
Юзер

DomiTori - 2 июля 2015 22:17 -

Цитата: 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)

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

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

наверх