добавить значения пользовательских полей в качестве тегов в пользовательский портлет Liferay

У меня есть настраиваемое поле под названием «Навыки» в профиле пользователя liferay 6.2 (т. е. когда вы нажимаете раздел «Моя учетная запись» -> «Подробности»). На данный момент это поле «Навыки» принимает несколько текстовых значений и отображается как обычный текст. Я хочу показать, что каждый навык вводится как тег. Есть ли доступный компонент пользовательского интерфейса для выполнения этой задачи? Я проверил управление тегами в документации Liferay. Они предлагают добавить теги из раздела Admin->content. Однако я хочу создавать теги на лету, когда пользователь вводит значения в Skills.


person user596502    schedule 13.06.2016    source источник


Ответы (2)


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

Для этого вам нужно будет создать Custom CreateAccountAction для создания учетных записей пользователей.

Это делается с помощью проекта Liferay Extension Plugin, который также расширяет метод addUser() в liferay.

затем внутри расширенного метода addUser() вы добавляете логику для создания AssetCategory, AssetVocabulary и тегов

вот пример возможного метода создания тега Skill

protected AssetCategory addAssetCategory(long userId,
        long parentCategoryId, String title, long vocabularyId,
        ServiceContext serviceContext) throws Exception {

    Map<Locale, String> titleMap = new HashMap<Locale, String>();

    setLocalizedValue(titleMap, title);

    return AssetCategoryLocalServiceUtil.addCategory(userId,
            parentCategoryId, titleMap, null, vocabularyId, null,
            serviceContext);

}

protected AssetVocabulary addAssetVocabulary(long userId, String title,
        ServiceContext serviceContext) throws Exception {

    Map<Locale, String> titleMap = new HashMap<Locale, String>();

    setLocalizedValue(titleMap, title);

    return AssetVocabularyLocalServiceUtil.addVocabulary(userId,
            StringPool.BLANK, titleMap, null, null, serviceContext);
}

Убедитесь, что вы используете serviceContext.setAddGroupPermissions(true) и serviceContext.setAddGuestPermissions(true) перед вызовом методов, чтобы гарантировать получение правильных разрешений.

person Temire Emmanuel    schedule 21.04.2017
comment
Создайте ServiceContext следующим образом ServiceContext serviceContext = ServiceContextFactory.getInstance(BlogsEntry.class.getName(), portletRequest); - person Temire Emmanuel; 21.04.2017
comment
На самом деле я использовал плагин ввода тегов Bootstrap, чтобы решить эту проблему в то время. Спасибо за эти комментарии, я проверю это позже, если нам снова понадобятся эти требования. - person user596502; 25.04.2017

мой подход заключается в использовании селектора тегов актива пользовательского интерфейса Liferay. Он предоставляет компонент пользовательского интерфейса для назначения и отображения тегов.

<label>Skills</label>
        <liferay-ui:asset-tags-selector
            className="<%= User.class.getName() %>"
            classPK="<%= selUser != null ? selUser.getUserId() : 0 %>"
        />
person user596502    schedule 16.06.2016