На сайте, который я часто посещаю, есть настройка карточки пользователя, включающая ссылку на внешний сайт, специфичный для каждого пользователя (по сути, профиль пользователя). Однако при клике на эту ссылку страница открывается в текущей вкладке, несмотря на то, что у меня включена настройка «Открывать все внешние ссылки в новой вкладке». Есть ли способ для администратора обратиться к настройке пользователя «Открывать все внешние ссылки в новой вкладке», чтобы это учитывалось?
Вы знаете, какая это тема или компонент? Я думаю, что стоит поднять этот вопрос именно там — возможно, его можно обновить, чтобы он учитывал настройку сайта. ![]()
Я предположил, что это было сделано на заказ, но я могу уточнить у администратора.
Похоже, что администратор создал пользовательское поле для ссылки на внешний профиль пользователя и затем разработал собственную тему. Они следовали инструкциям с (Retired) Use an ID in a custom user field to link to a user's external profile. Мне стоит просто спросить там, как использовать настройку пользователя для открытия ссылки в новой вкладке?
Думаю, это зависит от того, хотите ли вы, чтобы использовалась эта настройка; кастомизация её не учитывает, хотя, похоже, атрибут target добавляется корректно:
Добавление target='_blank' откроет ссылку в новой вкладке или окне независимо от настройки сайта, так как они не взаимодействуют друг с другом.
На сайте, где ссылки не открываются в новых вкладках, проверьте исходный код: содержат ли ссылки указанное значение target?
Если они хотят проверить настройку сайта, они могут сделать что-то вроде этого в рамках существующей кастомизации:
// инициализация переменных siteSettings и target:
const siteSettings = api.container.lookup('site-settings:main');
const target = siteSettings.default_other_external_links_in_new_tab ? "_blank" : ""
// измените условие if, где создаётся ссылка, чтобы использовать переменную target:
if (userFields && userFields[userFieldId]) {
const url = "http://myawesomewebsite.com/user/" + userFields[userFieldId];
const link = `<a href="${url}" target="${target}">${url}</a>`;
return Ember.Object.create({ link, name: externalUserIdField.get('name') });
} else {
return null;
}
Но есть ли способ проверить настройку пользователя? Насколько я понимаю, настройка сайта — это просто значение по умолчанию для новых пользователей, но в идеале эта ссылка должна учитывать изменения, которые пользователи внесли в свои собственные настройки. Один пользователь может захотеть, чтобы ссылка открывалась в той же вкладке, а другой — в новой.
Ах, точно, я упустил часть про «user»
извините.
Использование настройки пользователя почти ничем не отличается, нужно лишь изменить первые две константы, чтобы они ссылались на пользователя:
// настройка переменных user и target:
const user = api.getCurrentUser()
const target = user?.user_option?.external_links_in_new_tab ? "_blank" : ""
а затем всё остальное останется прежним.
Если бы это работало более похоже на ядро, мы бы проверяли, существует ли пользователь, и если нет — возвращались бы к настройкам сайта:
// настройка переменных user, siteSettings и target:
const user = api.getCurrentUser()
const siteSettings = api.container.lookup('site-settings:main');
let target = siteSettings.default_other_external_links_in_new_tab ? "_blank" : "";
if (user) { // если пользователь существует, устанавливаем target на основе опции пользователя
target = user.user_option?.external_links_in_new_tab ? "_blank" : ""
}
// измените условие if, где создаётся ссылка, чтобы использовать переменную target:
if (userFields && userFields[userFieldId]) {
const url = "http://myawesomewebsite.com/user/" + userFields[userFieldId];
const link = `<a href="${url}" target="${target}">${url}</a>`;
return Ember.Object.create({ link, name: externalUserIdField.get('name') });
} else {
return null;
}
Работает отлично, спасибо!