単語の自動リンク化

:exclamation: Discourse には「Watched Words」という組み込み機能があり、このテーマコンポーネントの機能の大部分を 再現できます。このテーマコンポーネントをインストールする前に、そちらの利用を検討してください。

:discourse2: 概要 Auto-Linkify Wordsを使用すると、投稿内の特定の単語やパターンを、希望する宛先 URL で自動的にハイパーリンク化できます。
:hammer_and_wrench: リポジトリリンク https://github.com/discourse/discourse-linkify-words
:open_book: Discourse テーマは初めて? Discourse テーマの使い方に関する初心者ガイド

このテーマコンポーネントをインストール

機能

設定方法

以下の形式でテーマ設定を構成します。

WORD, https://destination.url.com

または、正規表現(JavaScript 実装)を使用する場合は以下の形式です。

/regex/, https://destination.url.com

1 行に 1 つの項目

正規表現の使用

正規表現を使用すると、特定のパターンを単一の URL と一致させることができます。これは、同義語や文の中で異なる形態を取りうる単語などに役立ちます。

さらに、一致した内容に基づいて URL を自動的に生成することも可能です。例えば、それぞれ固有の数値 ID を持つ製品の一覧があり、それらをそれぞれの URL に自動リンクさせたいとします。その場合、以下のように記述します。

/product-([0-9]+)/, https://myshop.com/product/$1

product-42https://myshop.com/product/42 に自動リンクされます。
正規表現内のキャプチャ括弧と、URL 内の $1 に注意してください。$1 は括弧内の一致した部分に置換されます。文字列の複数の部分をキャプチャし、$2$3 などを使用する事も可能です。

正規表現はデフォルトで大文字小文字を区別しますが(WORD とは異なり、WORD は大文字小文字を区別しません)、標準的な「i」修飾子を使用することで変更できます。

/foo/i, https://example.com

この場合、FOO、Foo、foo のすべてが一致します。

実際にどのように表示されるか?

制限事項

  • 置換は Web UI でのみ表示され、メールには表示されません。

設定

名前 説明
linked words
excluded tags
excluded classes

クレジット

テーマ設定の構築に @Osama 様、実装のガイダンスに https://stackoverflow.com/questions/8949445/javascript-bookmarklet-to-replace-text-with-a-link 様へ心より感謝申し上げます。


:discourse2: 当方でホストされていますか? テーマコンポーネントは、Standard、Business、Enterprise プランでご利用いただけます。

「いいね!」 104
Add <abbr> tags to words in posts
How to automatically convert Keywords to Affiliate Links?
Special inline commands
Discourse Linkify Google Sheets
Is there a plugin to make my forum a shop?
When a thread is too important to lose
Customizing your site with existing theme components
User preference persists through Safe Mode
Add settings to your Discourse theme
Discourse Dictionary Plugin :ab:
How to replace text and update dynamically
Redirecting internal links via routes
Watched Words to serve as shortcut command to insert links
Limit # of links for a watched word?
How can I enable: Auto-hyperlinking text to reference to other posts?
How can I enable: Auto-hyperlinking text to reference to other posts?
Notification email without external link
Rewrite external URLs
Rewrite external URLs
Linked/forcing search keywords to specific topics/posts
Replace text with more than just links?
Community glossary?
The most easy way to let my users insert a FinViz chart image based on values?
Options for integrating a wiki knowledge base
Abbreviations and acronyms plugin
Support for magnet links
Need proofread of this advise about using theme preview
Meta annotation sidepost for bots?
Add <abbr> tags to words in posts
Object Settings?
Add <abbr> tags to words in posts
Any Autolinker solution for Discourse?
Javascript in theme component only runs once?
Images in posts versus topic-list-previews
Replacing special text to linkify them on posts
Comment on a question instead of answering it
Auto-replace text with link to topic
What are the different ways to customize content inside a post (custom attributes and such)
Minor mod to Automatic Actions based on Words Found in Posts
Prevent hyperlink
Turn off automatic (c) to © substitution
Watched words links corrupt @mentions and #categories
Get only top level posts in topic via discourse API

fantastic, system-wide feature… was thinking about this just the other day!

Hi

First off, I’d just like to thank everyone for all the help provided to me over the past few weeks. I know I’ve been asking lots of questions - I am also a beginner to Discourse and coding in general, and the community here has been incredible.

I am wondering if it would be possible to add on a feature to this, which is very similar in nature. I think most of the functionality is built, my use case for this is slightly different however.

Would it be possible to have a box like this on a ‘Tags’ page, where the user can type in specific tag words manually, and it would create a customized url based on these words? For example, the image below would produce a url something like this: www.websitename.com/tags/■■■■■/■■■■■/■■■■■. This would be a great feature for Tags Intersection, and would allow the user to specify the words in their intersection.

image

Thanks.

「いいね!」 1

seems to be not showing when you add it to a theme:

21%20AM

tried adding to default… but doesn’t seem to be working as intended:

It is not a problem related to this specific theme, see:

https://meta.discourse.org/t/js-error-on-click-adding-a-theme-component/82313

「いいね!」 4

Sometimes one like is not enough. :heart: Office high-fives took place today as we thought through all the ways we could put this to use!

One question, though: Is the following a bug?

Most of my links are working, however urls that include appended parameters are failing.

For example, I want to use this link:
https://republicwireless.com/shop/phones/moto-x4/?icid=phones-cta-forums-moto-x4-post

but when it is created from linkified words, clicking it results in:
https://forums.republicwireless.com/clicks/track?url=%20https%3A%2F%2Frepublicwireless.com%2Fshop%2Fphones%2Fmoto-x4%2F%3Ficid%3Dphones-cta-forums-moto-x4-post&post_id=134361&topic_id=16863

The same link added to a post traditionally (pasted, or using the “link” icon from the toolbar) works.

「いいね!」 5

Looks like @zogstrip fixed this FIX: don't track clicks · discourse/discourse-linkify-words@ef072b3 · GitHub … I just updated your component, can your refresh the problem page and try again?

「いいね!」 6

That appears to have fixed it! Thank you!!

「いいね!」 1

Keep in mind, we are going to elevate this to a proper feature in Discourse in the “special actions on words” section, but it will take a bit.

I love that this is a component though cause we get to “test out components” in anger. @Osama / @j.jaffeux one huge omission we have here is that it is ultra mega super painful working with long lists in settings, try this out with 50 or so links to experience the pain. We need a different “list” control for managing long lists of things.

「いいね!」 14

do you have any idea in mind about this?

「いいね!」 1

Honestly, I am not sure, but have a look at republic for an example of how painful this gets.

「いいね!」 2

Agreed it’s a massive pain…

A first step would be to give it more width, but that wouldn’t make it perfect.

What do you think if I hide the part after the comma, and you can only see it when mouse overing ?

I think that would be good, you mostly care about the words you are linkifying when you look at the list.

「いいね!」 2

I kind of think it needs another mode of item per row, that way at least you can tell what is going on in long lists

「いいね!」 2

I see. Shouldn’t be hard to do, I already apply this kind of per multi-select modification for category colors, I have an idea, will work on it in the next days.

「いいね!」 4

Here is my proposal:

A new site-setting type: dictionary.

  • one item per row
  • explicitly shows the key/value relation
  • ellipsis the end of the value so it’s always readable
  • will limit the height for the component so it becomes scrollable after something like 10 rows

If it works for you I will work on it beginning next week.

「いいね!」 8

Do we have other site settings that need this?

not to my knowledge, but AFAIK it doesn’t have to be an explicit new type server side, it could only be a new type client site like (url-list, host-list…)

So in the end it would be very little code, it’s mostly a subclass of list-setting where I split the label and present it differently.

We should split this topic

I feel there are a few settings that list urls like allowed iframes and some others that can easily benefit from item-per-row, maybe even the user list in admin groups as well

I think we should start with a simple item per row mode prior to adding dictionary

「いいね!」 8

After a discussion with sam:

  • rename our current “list” to “compact-list”, which will display as many items per row it can (list current behavior)
  • “list” will now only display one item per row
  • this shouldn’t touch server side client setting, default UI for list will be modified, and the new client side site setting “compact-list” will rely on “list”
「いいね!」 8

I think, there is a missing step in configuring Linkify component.

After this

Then, activate the linkify components in every theme.

I hope the last step should help others newbie like me.

I am certainly love this feature. :heart:

「いいね!」 9