Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll

Возрастная категория пользователей

Возрастная категория пользователей
, by

При регистрации пользователь вводит дату своего рождения.

Есть 3 возрастные категории пользователей:

16-23

24-50

51-100

 

Вопрос:

каким образом сделать возрастные категории (можно как-то таксономией?),

и как автоматически назначать соответствующую возрастную категорию пользователю если у нас есть дата рождения которую он вводит при регистрации?

 

Спасибо!

1 answer
votes: 980
Answer

Начал делать так:

Создал словарь таксономии "Возрастная категория" в котором добавил 3 термина (16-23, 24-50, 51-100):

Добавил поле (ссылку на словарь) в профайле.

Поставил модуль Rules.

Пытаясь создать правило застрял.

Можно ли как-то с помощью модуля Rules назначить пользователю соответствующий термин, при регистрации?

Как узнать с помощью этого модуля возраст пользователя?

Соответсвенно, если у пользователя завтра ДР то переназначить термин.

 

Спасибо!

 


Если вам нужно просто знать категории пользователей, тогда создайте поле с текстовыми значениями и сделайте обязательным для заполнения.

Если нужен какой-то функционал, тогда лучше сделать обычный выбор даты, через поля date:

https://drupal.org/project/Date


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

 

Или я Вас не правильно понял?

 

Мне просто потом нужно будет формировать платежки для пользователя, а цена оплаты за месяц зависит от возрастной категории.

 

Хочу создать правило с помощью модуля Rules, чтобы при регистрации автоматически присвоить соответствующий термин таксономии для юзера.

 

Есть поле типа Date,куда пользователь вводит дату рождения;

И есть поле типа Computed которое считает сколько сейчас лет пользователю.

 

Вопрос возник по созданию правила.

 

Делаю так: 

Событие: Перед сохранением нового пользователя;

Условие: вот тут не знаю как проверить что значение поля типа  Computed входит в соответствующий диапазон 16-22;

Действие: и не знаю как присвоить пользователю термин.

 

Есть предложения?

 

Спасибо!


Вы предложите пользователя заполнить дату, а в какую категорию он входит вычисляйте сами. Поле можно скрыть, чтобы потом использовать в своих целях. Но тут нужно предусмотреть возможность, что пользователь дату свою сменит, нужно будет категорию пересчитать. Можно пересчитывать категорию при вычисление суммы платежа.


Я думаю модуль Rules позволяет задать ограничение на даты, чтобы настроить правила.

 


Сделал с помощью поля computed.

Computed Code (PHP):

$age = ( time() - strtotime($entity->field_profile_birthdate[LANGUAGE_NONE][0]['value']) ) / 86400 / 365.25;

if($age>=16 && $age<=23){

$entity_field[0]['value'] = 1;

}

else if($age>=24 && $age<=59){

$entity_field[0]['value'] = 2;

}

else if($age>=60 && $age<=100){

$entity_field[0]['value'] = 3;

 

}


field_profile_birthdate - машинное имя поля типа Date


Display Code (PHP):

$display_output = $entity_field_item['value'];


тоесть если пользователю 16-23 года то в базу пишем 1, если 24-59 - то пишем 2, и если 60-100 - пишем 3.

Но значение записывается только во время создания (тобиш регистрации) пользователя или когда я повторно сохраняю профиль. Тоесть если я регистрируюсь сегодня и мне 23 года, а завтра у меня ДР то я записан в категорию 16-23. И на следующий день мне уже 24 но я все равно  в категории 16-23.

Возникает следующий вопрос:

как это можно побороть? 

какие варианты?

 

Спасибо!

 


Если вам только один раз нужно вычислять, то лучше ваш php-код навесить на хук hook_user_insert(), и уже в нем в нужно поле записать данные и не менять.