Jump to content



Recommended Posts

I will share a little texformatter from a actual project for a client.

In my former CMS i had an easy addon where i could preset terms like in a glossary that will replaced in the Wysiwyg fields on every page.

So there are solutions that i know but the all work not that easy like my former used addon.

The title of the glossary_item is used for the termsearch.

This textformatter search for terms in ||termexample|| or ||example term|| and replace them complete. If a term was in ||pipes|| and there was no hit in the glossary entries the pipes will deleted from the term and only the clean value will returned. So no room for wrong user entries like if i used HannCode or something else.

This is great for abbreviations, external- and internal links and could extended for every possible replacement that makes sense like footnotes and so on.

I like the pages concept for content and so i use pages for glossary and simple replacement where a user wanna have it. No autolinking without control, easy use pipes on abbreviations and links and it simple works.

Some explanations from the Github Readme:


You have to use a pagestructure for the glossary items

  • holder Page for entries template "glossary"
  • glossary items template "glossary_item"

The type of a glossary item could be a abbreviation, a external or internal link. Everything you need could added to the textformatter like more complex stuff, footnotes or other replacements.


There are working solutions like the great module from Ryan Cramer Autolink in the Profields https://processwire.com/api/modules/profields/autolinks/

But here Users don't could setup easy the terms to replace - this is only ment for webmasters or admins.

There are a module for abbreviations from sunlix https://processwire.com/talk/topic/7467-module-processabbreviate/

But here i only have options for abbreviations and i couln't easy add stuff or replacments i need.


Github: https://github.com/mr-fan/TextformatterGlossary

Example Templates for Import: https://github.com/mr-fan/TextformatterGlossary/blob/master/template-examples.json

Best regards mr-fan


  • Like 10
Link to comment
Share on other sites

Great idea!

If I understand correctly, the module looks for a glossary page with a title that matches the text between the pipe delimiters. I'm wondering about cases where the term in the textarea needs to be slightly different than the glossary page title, for instance if you need to use a plural form of term. Say I have a glossary page for "mouse" but in my textarea I need to say "mice" - could a variation like that still be linked to the glossary item? Perhaps introduce some syntax to manually specify the glossary term for such cases?

Link to comment
Share on other sites

This could be solved in two ways.

1. create a second term

2. add a field for "plural" and change the textformatter to search in "title" and "plural" field...

would work.

But from my experience you will need specific terms on specific words like ||PW|| or ||contact|| as Link and for abbreviation you have fix terms, too.

regards mr-fan

Link to comment
Share on other sites

  • 8 months later...

Hi @mr-fan

Your module sounds to be exactly what I'm looking for :). Unfortunately, I'm not sure I understand what to do. I tried to import your example template but ran many errors (see screenshot). I'm using PW 3.0.24.

Do I can just create a "page_link" field in the glossary_term template (since I will just use this one)? Do I need something else particular? Can I add another field like summary to have a more longer text?

Also, if want to output the list of all terms on the glossary page, I just used the template/field as we normally do? 




Link to comment
Share on other sites

Oh i forgot the used fields you need...a headline field, a page select and a url field for internal and external links - so give this import file a try:


the whole system is very flexible since we use pages.

for now there 3 different types of the glossary there that will be replaced if you look at the code it is very simple to know whats going on behind:

//set the replacement depending from the item type
switch ($entry->glossary_type) {
   case '1': //abbr
        $replacement = '<abbr title="' . $entry->headline . '">' . $term . '</abbr>';
   case '2': //external link
        $replacement = '<a rel="help" target="blank" href="' . $entry->extern_link . '" data-original-title="' . $entry->headline . '"><span class="fa-globe" aria-hidden="true"></span> ' . $term . '</a>';
   case '3': //internal link
        //internal link need to get the url
        $internLink  = wire('pages')->get("$entry->page_link");
        $replacement = '<a rel="help" href="' . $internLink->url . '" data-original-title="' . $entry->headline . '">' . $term . '</a>';
        $replacement = $term;

it yould be possible to upscale the textformatter to use for footnotes, remarks or something else...;)

regards mr-fan

Link to comment
Share on other sites


I progress! I created the fields. It seems to have to have a little inconsistency between "glossar" and "glossary" but I thinks everything is fine now. But it doesn't seems to works. If I understand correctly, if the term is not created, it should at least remove the ||. But even if the glossary_item "test" exists, nothing seems to happen. Do you have an idea of what going wrong?


PS Evidently, module is correctly installed, there is no error. I'm using PW 3.0.28




Link to comment
Share on other sites

On 27/10/2015 at 4:02 AM, mr-fan said:

I like the pages concept for content and so i use pages for glossary and simple replacement where a user wanna have it. No autolinking without control, easy use pipes on abbreviations and links and it simple works.

I get the reason for having manual control of where links/abbreviations appear, but what do you think about adding an option where terms are replaced automatically? It would be nice to give the user the ability to add new terms to the glossary without having to go through all their pages looking for where the term appears and adding the ||term|| syntax manually.

Link to comment
Share on other sites

For this proposal Ryan build a great module that works really good:


From my point of view Ryan is right on his choice to let only admins set the terms if an automatic is running...

The mixture of user defined terms and automatic replacement could be very dangerous.

But you could simple fork and change the module and switch from the ||regex|| to a exact search for the terms and replace them automagical.....since i'm a "second hand" webdev + living on a farm in south germany = summertime is some harvest and less time for the desk ;)
best regards mr-fan


  • Like 2
Link to comment
Share on other sites

  • 4 years later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Create New...