Concrete5 Динамический список выбора в учетной записи пользователя/добавление страницы пользователя

64
6

Я хочу добавить вкладку выбора формы на странице учетной записи пользователя/добавить страницу пользователя с динамическим списком опций/значений.

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

echo $form->select('clientsID', $indexed_array, '0');

Вопрос: Где и как добавить это в учетную запись/добавить страницу пользователя и сохранить ее в таблице пользователя?

спросил(а) 2021-01-19T15:09:44+03:00 6 месяцев, 2 недели назад
1
Решение
126

Если я вас хорошо понимаю, вам нужен атрибут пользователя. Он будет автоматически сохранен в UserInfo и если вы правильно настроите параметры, он будет отображаться на странице учетной записи пользователя/добавить страницу пользователя.

Обратите внимание, что весь следующий код должен идти в файле контроллера в /application/controllers или даже лучше внутри пакета. Как создать пакет хорошо документирован здесь. Таким образом, ваш сайт может быть обновлен без каких-либо проблем.

Ваш ассоциативный массив с динамическими значениями из таблицы БД или другими источниками, которые должны быть заполнены в атрибуте пользователя (в этом случае раскрывающийся список):

$options = array(
'foo' => 'Foo',
'bar' => 'Bar',
'baz' => 'Baz'
);

Параметры атрибутов:

$selectArgs = array(
'akHandle' => 'my_select',
'akName' => t('my Select'), // t() is for translation
'uakProfileDisplay' => true, // Will be displayed on the Users Profile page
'uakMemberListDisplay' => true, // Will be displayed on the dashboard members page
'uakProfileEdit' => true, // A memeber is able to edit the attribute
'uakProfileEditRequired' => true, // The attribute MUST be filled with a value
'uakRegisterEdit' => true, // Will be displayed on the Register Page
'uakRegisterEditRequired' => true, // The attribute MUST be filled with a value upon registration
'akIsSearchableIndexed' => true, // The attribute will be indexed (searchable)
'akSelectAllowOtherValues' => false, // A user may add/remove other options to the select attribute
'akSelectOptionDisplayOrder' => 'alpha_asc', // the display order
'akIsSearchable' => true // one can search by these options
);

Используемые классы:

use \Concrete\Core\Attribute\Type as AttributeType;
use UserAttributeKey;
use Concrete\Attribute\Select\Option;

Определить тип атрибута:

$attrSelect = AttributeType::getByHandle('select');

Проверьте, существует ли атрибут, а если нет, создайте его:

$mySelect = UserAttributeKey::getByHandle($selectArgs['akHandle'])

if(!is_object($mySelect)) {
UserAttributeKey::add($attrSelect, $selectArgs);
$mySelect = UserKey::getByHandle($args_address['akHandle']);
}

И, наконец, заполните параметры в списке:

foreach($options as $value) {
Option::add($mySelect, t($value));
}

ответил(а) 2021-01-19T15:09:44+03:00 6 месяцев, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема