Concrete5用户帐户上的动态选择列表/添加用户页面

时间:2016-11-21 11:46:12

标签: concrete5 concrete5-5.7

我想在用户帐户页面添加表单选择输入/添加用户页面,其中包含动态的选项/值列表。

我知道如何从动态列表中获取数据库表并为选择选项创建动态列表。

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

问题:在帐户/添加用户页面中添加此项并将其保存到用户表的位置和方式?

1 个答案:

答案 0 :(得分:0)

如果我理解你,你需要用户属性。它将自动保存在UserInfo中,如果您正确设置选项,它将显示在用户帐户页面/添加用户页面上。

请注意,以下所有代码都应放在/application/controllers中的Controller文件中,或者更好地放在包内。如何创建包有详细记录here。这样,您的网站可以毫无问题地进行更新。

您的关联数组包含来自数据库表或其他来源的动态值,以填充用户属性(在这种情况下为下拉菜单):

$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));        
}