Ограничение к контенту по возрасту пользователя (phpFOX)
28.09.2017 04:07:10 pm
Делал разработку ограничения к контенту по возрасту, пока что сделал предупреждение в виде одной строчки под названием страницы (модуль pages), для зарегистрированных пользователей:
И для гостей:
Делаю так: открываю: module/pages/include/component/controller/view.class.php, нахожу:
Ниже добавляю:
Далее, открываю: module/profile/template/default/block/header.html.php, нахожу:
Ниже добавляю:
Этот файл я уже прежде исправлял, так что при поиске фрагмента кода, код может отличаться.
Затем в администраторском разделе, добавляю две новые языковые переменные:
В таблицу phpfox_pages, необходимо добавить поле limitation, где будут значения false (либо null) - ограничение отключено, true - ограничение включено. Пока включать|отключать ограничение надо путем "поездки" в БД, то есть в ручную, но думаю, что это я скоро исправлю.
Готово.
Вам нет восемнадцати лет. Контент данной страницы Вам запрещён.
И для гостей:
Контент данной страницы предназначен для лиц в возрасте от восемнадцати лет и старше.
Делаю так: открываю: module/pages/include/component/controller/view.class.php, нахожу:
$mId = $this->request()->getInt('req2');
if (!($aPage = Phpfox::getService('pages')->getForView($mId)))
{
return Phpfox_Error::display(Phpfox::getPhrase('pages.the_page_you_are_looking_for_cannot_be_found'));
}
Ниже добавляю:
# Проверка возраста ограничения
if ($aPage['limitation'])
{
if (Phpfox::isUser())
{
$limitation = ((int) Phpfox::getUserBy('age') < 18) ? 1 : null;
}
else
{
$limitation = 2;
}
$this->template()
->assign(array(
'limitation' => $limitation
)
);
}
# Проверка возраста ограничения END
Далее, открываю: module/profile/template/default/block/header.html.php, нахожу:
{foreach from=$aBreadCrumbs key=sLink item=sCrumb name:link}
{if $phpfox.iteration.link == 1}
<span class="profile_breadcrumb">»</span> <a href="{$sLink}">{$sCrumb}</a>
{/if}
{/foreach}
Ниже добавляю:
{if isset($limitation)}
<div>
{if $limitation == 1}
{phrase var='pages.limitation_prohibition'}
{else}
{phrase var='pages.limitation_warning'}
{/if}
</div>
{/if}
Этот файл я уже прежде исправлял, так что при поиске фрагмента кода, код может отличаться.
Затем в администраторском разделе, добавляю две новые языковые переменные:
pages.limitation_warning
- Контент данной страницы предназначен для лиц в возрасте от восемнадцати лет и старше.pages.limitation_prohibition
- Вам нет восемнадцати лет. Контент данной страницы Вам запрещён.
В таблицу phpfox_pages, необходимо добавить поле limitation, где будут значения false (либо null) - ограничение отключено, true - ограничение включено. Пока включать|отключать ограничение надо путем "поездки" в БД, то есть в ручную, но думаю, что это я скоро исправлю.
Готово.
- Жалоба
28.09.2017 04:14:52 pm
Продолжаю разработку ограничения, теперь я сделал предупреждение в виде модального окна с затемненным, прозрачным фоном страницы.
Если заходит гость на страницу с контентом для взрослых впервые, появляется модальное окно, где сказано о запрещенном контенте и спрашивается о совершеннолетии пользователя. Если пользователь жмет кнопку Да, значит он подтверждает, что ему уже исполнилось восемнадцать лет, предупреждение исчезает вместе с мешающим слоем (плавно, как и появляется) и пользователь может смотреть страницу полностью. Если гость нажмет Нет, его просто перенаправит на главную страницу.
Если на страницу заходит зарегистрированный пользователь не достигший совершеннолетия, он получит сообщение о том, что ему ещё рано такое смотреть и после нажатой кнопки Да, браузер перекинет его на главную страницу.

Чтобы после каждого перехода или перезагрузки запрещенной странице, гостю не пришлось соглашаться, что он совершеннолетний, я использовал куки (плагин jquery.cookie.js). Как гость подтверждает свое совершеннолетие, сохраняется кука, и при каждой загрузки страницы, проверяется ее наличие, если она есть, то вход свободный, если нет, выводим сообщение.
Далее в этом же файле, меняем код из первого поста, что между комментариев:
Меняем на:
Вот тут:
Теперь переходим к самому модулю common, открываем (или создаем, если нет): module/common/include/service/common.class.php и вставляем эту функцию:
В этом же модуле создаем ещё два файла:
common.css - залить в папку: module/common/static/css/default/default/.
common.js - залить в папку: module/common/static/jscript/.
Содержимое файла common.css:
Содержимое файла common.js:
Теперь эти два файла надо подключить. Я их подключил в include/library/phpfox/phpfox/phpfox.class.php. Значит, открываем файл phpfox.class.php, находим:
Ниже добавляем:
Теперь создаем шаблон модального окна: module/common/template/default/block/limitation.html.php:
Тут я исправил фразы common.limitation_prohibition и common.limitation_warning, то есть изменил модуль к которому они принадлежат, с pages на common, а так же добавил слова Да и Нет (common.yes | common.no).
Вот собственно и все. Чистим кэш, проверяем работу.
Если заходит гость на страницу с контентом для взрослых впервые, появляется модальное окно, где сказано о запрещенном контенте и спрашивается о совершеннолетии пользователя. Если пользователь жмет кнопку Да, значит он подтверждает, что ему уже исполнилось восемнадцать лет, предупреждение исчезает вместе с мешающим слоем (плавно, как и появляется) и пользователь может смотреть страницу полностью. Если гость нажмет Нет, его просто перенаправит на главную страницу.
Если на страницу заходит зарегистрированный пользователь не достигший совершеннолетия, он получит сообщение о том, что ему ещё рано такое смотреть и после нажатой кнопки Да, браузер перекинет его на главную страницу.


Чтобы после каждого перехода или перезагрузки запрещенной странице, гостю не пришлось соглашаться, что он совершеннолетний, я использовал куки (плагин jquery.cookie.js). Как гость подтверждает свое совершеннолетие, сохраняется кука, и при каждой загрузки страницы, проверяется ее наличие, если она есть, то вход свободный, если нет, выводим сообщение.
Далее в этом же файле, меняем код из первого поста, что между комментариев:
# Проверка возраста ограничения
# Проверка возраста ограничения END
Меняем на:
# Проверка возраста ограничения
if ($aPage['limitation'] && $limitation = Phpfox::getService('common')->limitation())
{
$this->template()
->assign(array(
'limitation' => $limitation
)
);
}
# Проверка возраста ограничения END
Вот тут:
Phpfox::getService('common')->limitation()
используется мною созданный модуль common, будьте внимательны, если у вас нет модуля с таким же названием, необходимо его создать, либо изменить название при обращении к файлам.Теперь переходим к самому модулю common, открываем (или создаем, если нет): module/common/include/service/common.class.php и вставляем эту функцию:
# Проверка возраста ограничения
public function limitation()
{
if (Phpfox::isUser() && Phpfox::getUserBy('age') < 18 | !Phpfox::isUser())
{
return Phpfox::isUser() ? (((int) Phpfox::getUserBy('age') < 18) ? 1 : null) : 2;
}
return false;
}
# Проверка возраста ограничения END
В этом же модуле создаем ещё два файла:
common.css - залить в папку: module/common/static/css/default/default/.
common.js - залить в папку: module/common/static/jscript/.
Содержимое файла common.css:
/* Ограничение возраста */
#window {
width: 300px;
height: 80px;
border-radius: 5px;
border: 3px #000000 solid;
background: #FFFFFF;
position: fixed;
top: 45%;
left: 50%;
margin-top: -150px;
margin-left: -150px;
display: none;
z-index: 10;
padding: 10px;
}
#overlay {
z-index: 9;
position: fixed;
background-color: #000000;
opacity: 0.9;
width: 100%;
height: 100%;
top: 0;
left: 0;
display: none;
}
.answer
{
padding: 10px 2px;
}
/* Ограничение возраста END */
Содержимое файла common.js:
/* Ограничение возраста */
$(document).ready(function() {
if ($('#overlay').length > 0 && $('#window').length > 0 && !getCookie('DANFA')) {
$('#overlay').fadeIn(1000, function() {
$('#window')
.css('display', 'block')
.animate({opacity: 2, top: '50%'}, 1000);
});
};
});
$('#true').click(function() {
cleaning();
setCookie('limitation', true, 360);
return false;
});
$('#false').click(function() {
location.href='/';
return false;
});
function cleaning() {
$('#window').animate({opacity: 0, top: '45%'}, 1000, function() {
$(this).css('display', 'none');
$('#overlay').fadeOut(1000);
});
};
/* Ограничение возраста END */
Теперь эти два файла надо подключить. Я их подключил в include/library/phpfox/phpfox/phpfox.class.php. Значит, открываем файл phpfox.class.php, находим:
if (!defined('PHPFOX_IS_AD_PREVIEW') && !defined('PHPFOX_IN_DESIGN_MODE') && !defined('PHPFOX_INSTALLER') && Phpfox::getParam('core.site_wide_ajax_browsing'))
{
$oTpl->setHeader('cache', array('jquery/plugin/jquery.address.js' => 'static_script'));
}
Ниже добавляем:
# Модуль common
if (Phpfox::isModule('common'))
{
$oTpl->setHeader('cache', array(
'common.css' => 'module_common',
'common.js' => 'module_common'
)
);
}
Теперь создаем шаблон модального окна: module/common/template/default/block/limitation.html.php:
{if isset($limitation)}
<div id="window">
{if $limitation == 1}
{phrase var='common.limitation_prohibition'}
<div class="answer">
<form>
<input type="submit" value="{phrase var='common.yes'}" id="false" class="button">
</form>
</div>
{else}
{phrase var='common.limitation_warning'}
<div class="answer">
<form>
<input type="submit" value="{phrase var='common.yes'}" id="true" class="button">
<input type="submit" value="{phrase var='common.no'}" id="false" class="button">
</form>
</div>
{/if}
</div>
<div id="overlay"></div>
{/if}
Тут я исправил фразы common.limitation_prohibition и common.limitation_warning, то есть изменил модуль к которому они принадлежат, с pages на common, а так же добавил слова Да и Нет (common.yes | common.no).
Вот собственно и все. Чистим кэш, проверяем работу.
28.09.2017 04:17:58 pm
Наконец то дошли руки к этой разработке. Сейчас я хочу сделать установку ограничения при создании или редактировании страницы, чтобы не приходилось постоянно лезть в БД, чтобы изменить ограничение, так как это очень не удобно, а для кого то вообще не представляется такая возможность.
Начнем с добавления фразы, я добавлю в свой модуль такую фразу:
common.mature_content:
Фраза для русского языка - Контент для взрослых?
Фраза для английского языка - Mature content?
Теперь открываем: module/pages/template/default/controller/add.html.php, находим:
Ниже добавляем:
Открываем: module/pages/include/service/process.class.php, находим:
Добавляем ниже:
Теперь очищаем кэш сайта и проверяем работу. Готово.
В поле limitation теперь будут значения 0 - ограничение отключено, 1 - ограничение включено.
Результат:

Начнем с добавления фразы, я добавлю в свой модуль такую фразу:
common.mature_content:
Фраза для русского языка - Контент для взрослых?
Фраза для английского языка - Mature content?
Теперь открываем: module/pages/template/default/controller/add.html.php, находим:
<div class="table">
<div class="table_left">
{phrase var='pages.use_timeline'}
</div>
<div class="table_right">
<input type="radio" value="1" name:"val[use_timeline]" {value type='radio' id='use_timeline' default='1' selected='true'} id="rdo_timeline_1"> <label for="rdo_timeline_1">{phrase var='pages.yes'}</label>
<input type="radio" value="0" name:"val[use_timeline]" {value type='radio' id='use_timeline' default='0'} id="rdo_timeline_0"> <label for="rdo_timeline_0">{phrase var='pages.no'}</label>
</div>
</div>
Ниже добавляем:
<div class="table">
<div class="table_left">
{phrase var='common.mature_content'}
</div>
<div class="table_right">
<input type="radio" value="1" name:"val[limitation]" {value type='radio' id='limitation' default='1'} id="limitation_1"> <label for="limitation_1">{phrase var='common.yes'}</label>
<input type="radio" value="0" name:"val[limitation]" {value type='radio' id='limitation' default='0' selected='true'} id="limitation_0"> <label for="limitation_0">{phrase var='common.no'}</label>
</div>
</div>
Открываем: module/pages/include/service/process.class.php, находим:
if (isset($aVals['use_timeline']))
{
$aUpdate['use_timeline'] = (int) $aVals['use_timeline'];
}
Добавляем ниже:
if (isset($aVals['limitation']))
{
$aUpdate['limitation'] = (int) $aVals['limitation'];
}
Теперь очищаем кэш сайта и проверяем работу. Готово.
В поле limitation теперь будут значения 0 - ограничение отключено, 1 - ограничение включено.
Результат:
