Also today I realized that the User Profile page actually displays the custom field as it should, although compared to the user card, now the custom field (Website) is displayed last instead of first…
I feel like I’ve seen a discussion of this, but I can’t find it now.
I’ve got a custom profile field that holds a user’s website implemented using this tutorial, but allowing for any external site to be entered, rather than just linking to Twitter or something. The problem I have is that about 80% of the users don’t bother to put “http(s)://” in front of the URL they enter. They (rightly) expect that “www.example.com” should just work. So how do I make it just work?
Edited to add: Figured it out. Below is the entire if block of javascript I used to determine whether to attempt to show an external link. The inner if is what determines whether the external URL needs to have “http” added to it, and takes care of doing it.
if (userFields && userFields[churchURLFieldId]) {
const rawChurchURL = userFields[churchURLFieldId];
var url = rawChurchURL;
if (!/^https?:\/\//i.test(rawChurchURL)) {
url = 'http://' + rawChurchURL;
}
const link = "<a href='"+url+"' target='_blank'>"+userFields[churchNameFieldId];+"</a>";
return Ember.Object.create({ link, name: churchURL.get('name') });
} else {
return null;
}
Можно ли редактировать существующие поля профиля пользователя, а не добавлять новые? Чтобы, например, значение существующего поля Twitter можно было отредактировать и включить в него якорную ссылку.
В основном посте, где мы добавляем новые кликабельные поля профиля с помощью коннекторов, outlet’ов Handlebars и т.п., эти поля «добавляются», поэтому мне пришлось скрыть существующие поля профиля.
Например, я мог добавить кликабельное поле Twitter, но тогда пришлось бы скрыть существующее поле Twitter.
Теперь новое поле Twitter будет находиться в отдельном div, а не в том же div Ember, который существовал ранее, что приводит к странным проблемам с CSS.
Поможет ли использование /connectors/user-profile-public-fields/Twitter вместо /connectors/user-profile-primary/ в этой ситуации?
Это очень здорово! Я сделал форк и попытался сделать его более универсальным компонентом темы, убрав специфичные для Namati элементы. Надеюсь, вам не возражает!
Также я создал отдельный пост, чтобы другим было проще его найти:
Всем привет, хотел поделиться тем, что создал очень простую версию плагина для этого. Она позволяет указать, какое поле пользователя сделать ссылкой, и — опционально — префикс (например, https://mysite.com/users/). Решил поделиться, на случай если кто-то предпочтёт установить компонент темы вместо изменения кода. Он основан на коде из оригинального сообщения в этой теме.
Кстати, для моего конкретного случая я не хочу, чтобы любой пользователь мог его редактировать; вместо этого я планирую обновлять его через API Discourse. В таком случае, будет ли «пользовательское поле» лучше, чем «поле пользователя»? Я вижу оба варианта в API, но custom_fields пустые.
@wilson29thid, не могли бы вы создать тему с тегом #theme для этого компонента? Было бы здорово, если бы это был устанавливаемый тематический компонент, чтобы не заставлять людей каждый раз копировать и вставлять код.
Конечно — создаст ли тема здесь с этим тегом возможность её установки?
Уже можно установить через URL репозитория Git. Создание темы просто поможет людям легче её найти.
Вопрос немного другой. Я хочу добавить ссылку, открывающуюся в новом окне, в описание поля пользователя на странице регистрации. Эта страница не распознаёт ссылки, оформленные в виде [это](формат).
Я хочу, чтобы пользователи подтверждали, что ознакомились с нашими ценностями сообщества, прежде чем присоединиться, и наличие ссылки поможет, если они их пропустили. Сейчас я просто попросил их скопировать и вставить полную ссылку в свой браузер.
Как это работает с Discourse 3.2 и Ember 5?
Я обновил версию: <script type="text/discourse-plugin" version="1.13.0"> и заменил api.registerConnectorClass на api.renderInOutlet, как было предложено здесь, но в консоли браузера появляется ошибка: [THEME 27] Error: klass is not an Ember component
Я заменил property на computed, как было предложено здесь, но в консоли браузера появляется ошибка: [THEME 27] ReferenceError: computed is not defined
О, я забыл импорт, поэтому добавил недостающий import EmberObject, { computed } from '@ember/object'; после открывающего тега скрипта, но это привело к ошибке SyntaxError: “/discourse/theme-27/discourse/initializers/theme-field-140-common-html-script-3: ‘import’ и ‘export’ могут появляться только на верхнем уровне.”.
Хм, да, техники, предложенные в оригинальном посте, довольно устарели (что вполне понятно, учитывая, что он был написан в 2016 году
).
В наши дни подобные вещи должны упаковываться в git-репозиторий и публиковаться как #theme-component, чтобы пользователи могли устанавливать и настраивать их через настройки.
В итоге я переделал TC от @wilson29thid здесь, хотя в нём всё ещё есть предупреждение об устаревании, которое мне нужно исправить в будущем.
Эта функция ОП теперь доступна в новом мини-компоненте: