如何在站点自定义中利用“在新标签页中打开所有外部链接”设置

我经常访问的一个网站在用户卡片上有一个自定义设置,其中包含一个指向每个用户特定外部网站的链接(基本上是用户个人资料)。但是,尽管我启用了“在新标签页中打开所有外部链接”设置,但单击此链接会在当前标签页中打开页面。管理员是否有办法引用用户的“在新标签页中打开所有外部链接”设置,以便遵守此设置?

1 个赞

您知道这是哪个主题/组件吗?我认为可以在那里提出这个问题,也许可以更新它以考虑站点设置。:slight_smile:

我以为它是定制的,但我可以和管理员确认一下。

听起来管理员有一个自定义用户字段用于用户的外部个人资料链接,然后构建了一个自定义主题。他们遵循了 (Retired) Use an ID in a custom user field to link to a user's external profile 的说明。我应该在那里询问如何利用有关在新标签页中打开的用户设置吗?

我认为这取决于您是否希望它使用该设置;自定义设置不考虑该设置,尽管它看起来正确地添加了 target

包含 target='_blank' 将在新标签页/窗口中打开,无论网站设置如何,因为它们不相互作用。

在链接未在新标签页中打开的网站上,当您检查源代码时,链接是否包含该 target 值?

2 个赞

如果他们想检查站点设置,他们可以在现有的自定义中执行类似的操作

// 设置 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;
}
1 个赞

有办法检查用户设置吗?我的理解是,站点设置只是新用户的默认设置,但理想情况下,此链接会尊重用户对其自身设置所做的更改。一个用户可能希望它在同一选项卡中打开,而另一个用户可能希望它在新选项卡中打开。

1 个赞

啊,对了,我忽略了“用户”部分 :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;
}
2 个赞

完美运行,谢谢!

2 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.