Как использовать настройку «Открывать все внешние ссылки в новой вкладке» в настройках сайта

На сайте, который я часто посещаю, есть настройка карточки пользователя, включающая ссылку на внешний сайт, специфичный для каждого пользователя (по сути, профиль пользователя). Однако при клике на эту ссылку страница открывается в текущей вкладке, несмотря на то, что у меня включена настройка «Открывать все внешние ссылки в новой вкладке». Есть ли способ для администратора обратиться к настройке пользователя «Открывать все внешние ссылки в новой вкладке», чтобы это учитывалось?

Вы знаете, какая это тема или компонент? Я думаю, что стоит поднять этот вопрос именно там — возможно, его можно обновить, чтобы он учитывал настройку сайта. :slight_smile:

Я предположил, что это было сделано на заказ, но я могу уточнить у администратора.

Похоже, что администратор создал пользовательское поле для ссылки на внешний профиль пользователя и затем разработал собственную тему. Они следовали инструкциям с (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» :sweat_smile: извините.

Использование настройки пользователя почти ничем не отличается, нужно лишь изменить первые две константы, чтобы они ссылались на пользователя:

// настройка переменных 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;
}

Работает отлично, спасибо!