Не нравятся результаты поиска? Попробуйте другой поиск!
dle-faq.ru FAQ (все вопросы) Общие вопросы по PHP Как реализовать скрытие новостей с определенной категории, если пользователь не хочет данные новости видеть?

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


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

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

Ответил: Gameer


Создать доп поле для профиля (Список).
Открыть /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

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

Комментарии пользователей (18)

sadan
16

107 | 38

sadan - 2 июля 2015 05:05 - Юзер

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

DomiTori
8

132 | 21

DomiTori - 2 июля 2015 09:56 - Юзер

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

sadan
16

107 | 38

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
8

132 | 21

DomiTori - 2 июля 2015 12:02 - Юзер

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

sadan
16

107 | 38

sadan - 2 июля 2015 12:06 - Юзер

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

Gameer
224

1120 | 395

Gameer - 2 июля 2015 13:02 - Эксперт

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

Истина в противоречии.​

sadan
16

107 | 38

sadan - 2 июля 2015 13:09 - Юзер

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

DomiTori
8

132 | 21

DomiTori - 2 июля 2015 17:08 - Юзер

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

Gameer
224

1120 | 395

Gameer - 2 июля 2015 17:13 - Эксперт

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

Истина в противоречии.​

DomiTori
8

132 | 21

DomiTori - 2 июля 2015 18:22 - Юзер

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

Gameer
224

1120 | 395

Gameer - 2 июля 2015 19:09 - Эксперт

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

Истина в противоречии.​

DomiTori
8

132 | 21

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|Нет", никаких других доп полей у меня нет.

Gameer
224

1120 | 395

Gameer - 2 июля 2015 19:22 - Эксперт

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

Истина в противоречии.​

DomiTori
8

132 | 21

DomiTori - 2 июля 2015 19:41 - Юзер

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

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

Gameer
224

1120 | 395

Gameer - 2 июля 2015 19:49 - Эксперт


DomiTori,

Истина в противоречии.​

FastFud
50

1599 | 588

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;
}
?

Gameer
224

1120 | 395

Gameer - 2 июля 2015 21:32 - Эксперт

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

Истина в противоречии.​

DomiTori
8

132 | 21

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)

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

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