Go to main content

Textpattern CMS support forum

You are not logged in. Register | Login | Help

#1 2017-09-14 11:22:31

etc
Developer
Registered: 2010-11-11
Posts: 4,252
Website GitHub

Making your plugins 4.7-aware

We all remember the plugin breakage panic provoked by some changes (mainly registration and null date defaults) in txp 4.6. Fortunately, the most popular plugins are patched now, so it’s time to make them 4.7-ready.

The good news is that a vast majority of 4.6-compatible (public-side) plugins should work in 4.7 without any problem. But, to be sure, or if you want your favorite plugin to enjoy new possibilities, please read what follows.

An important new feature of the upcoming txp 4.7 are global attributes. Roughly speaking, any plugin can register one or more attributes that will be valid for any (core or plugin) tag and applied to its output.

Let us consider a basic example. Suppose that we need a plugin that replaces all the occurrences of from string to to string. In 4.6 we would do it this way:

// TXP 4.6 tag registration
if (class_exists('\Textpattern\Tag\Registry')) {
	Txp::get('\Textpattern\Tag\Registry')->register('abc_replace');
}

function abc_replace($atts, $thing = null)
{
	extract(lAtts(array(
		'from' => 'foo',
		'to' => 'bar'
	), $atts, false));

	return str_replace($from, $to, $thing);
}

Now, the new abc_replace tag can be used as container:

<txp:abc_replace from="wordpress" to="textpattern">
	<txp:body />
</txp:abc_replace>

In 4.7 we get new powers: implement our plugin as attribute:

// TXP 4.7 tag registration
if (class_exists('\Textpattern\Tag\Registry')) {
	Txp::get('\Textpattern\Tag\Registry')->register('abc_replace'); //container mode
	if(method_exists('\Textpattern\Tag\Registry', 'registerAttr'))    //attribute mode
		Txp::get('\Textpattern\Tag\Registry')->registerAttr('abc_replace', 'from')->registerAttr('abc_replace', 'to');
}

function abc_replace($atts, $thing = null) { ... }

And voilà, now every tag also accepts from and to attributes:

<txp:body from="wordpress" to="textpattern" />

Some of the commonly used attributes (wraptag, class, etc) have been registered by core, so plugins don’t have to implement them anymore. But if you wish, you can override the core behavior and treat them yourself. For this, it is important to call lAtts() function somewhere inside your plugin:

  • bad way: $wraptag = $atts['wraptag'];
  • good way: extract(lAtts(array('wraptag' => ''), $atts));

This will inform the core that the plugin has its own wraptag attribute, so the global one will not be applied. Fortunately, most plugins adhere to this rule, but if yours starts to wrap its output twice, you know what to do now.

To resume, a public-side plugin:

  • does not need to implement wraptag, class, html_id, atts, label, labeltag and escape attributes if it treats them in the usual way;
  • otherwise, ensure that they are passed through lAtts() filter;
  • if you register a global attribute, don’t give it a txp- prefixed name, they are reserved for core;
  • additionally, parse(EvalElse($thing, $condition)) is deprecated, replace it with parse($thing, $condition).

I leave the eventual admin-side plugins patching with Stef and Phil. Happy coding!

Offline

#2 2017-09-14 11:39:33

Bloke
Developer
From: Leeds, UK
Registered: 2006-01-29
Posts: 10,224
Website GitHub

Re: Making your plugins 4.7-aware

Thanks for the detailed info on this important topic, Oleg.

For completeness, can you please explain what happens if two plugins try to register the same attribute name, or two plugins attempt to override a core global attribute. i.e. which one wins:

  1. When plugins are loaded from the database (earliest load order? last load order?)
  2. When plugins are loaded from the cache directory (earliest alphabetical plugin implementation wins?)

Will the second one issue a warning that the attribute is already defined by abc_some_plugin or silently overwrite its implementation? Or are they chained? Presumably, applying the developer prefix to attributes is recommended to avoid this in most cases.

Last edited by Bloke (2017-09-14 11:41:20)


The smd plugin menagerie — for when you need one more gribble of power from Textpattern. Bleeding-edge code available on GitHub.

Txp Builders – finely-crafted code, design and Txp

Offline

#3 2017-09-14 12:16:08

etc
Developer
Registered: 2010-11-11
Posts: 4,252
Website GitHub

Re: Making your plugins 4.7-aware

The last loaded plugin will win without any warning, exactly as with the tags. They can not be chained (think of wraptag), but we could add a warning. Actually, we already have this problem with tags: suppose that in some plugin, <txp:child /> depends on <txp:parent />. Now, if another plugin registers <txp:parent /> tag, <txp:child /> will be still alive, but orphan. So yes,

Bloke wrote #306992:

applying the developer prefix to attributes is recommended to avoid this in most cases.

Offline

#4 2017-09-14 12:54:00

Bloke
Developer
From: Leeds, UK
Registered: 2006-01-29
Posts: 10,224
Website GitHub

Re: Making your plugins 4.7-aware

Thanks for the clarification. I’m not bothered about a warning, unless you think it’ll be handy for debugging. Otherwise, anyone overriding global atts like wraptag will get a warning, when it’s actually a feature.


The smd plugin menagerie — for when you need one more gribble of power from Textpattern. Bleeding-edge code available on GitHub.

Txp Builders – finely-crafted code, design and Txp

Offline

#5 2017-09-14 12:56:59

etc
Developer
Registered: 2010-11-11
Posts: 4,252
Website GitHub

Re: Making your plugins 4.7-aware

Actually, some auxiliary global attributes (like class) can be shared if they are mapped to an empty value:

Txp::get('\Textpattern\Tag\Registry')->registerAttr(false, 'class');

It just suppresses the “unknown attribute” warning which otherwise would be issued if a tag has no own class attribute.

Another subtlety: if in a tag the default value of some global attribute is null, the global will apply. This allows for overridable defaults, like in

function file_download_description($atts)
{
    global $thisfile;

    assert_file();

    extract(lAtts(array(
        'escape'  => null
    ), $atts));

    if ($thisfile['description']) {
        return ($escape === null)
            ? txpspecialchars($thisfile['description'])
            : $thisfile['description'];
    }
}

Offline

#6 2017-09-14 17:45:11

ruud
Developer emeritus
From: a galaxy far far away
Registered: 2006-06-04
Posts: 5,068
Website

Re: Making your plugins 4.7-aware

etc wrote #306991:

if you register a global attribute, don’t give it a txp- prefixed name, they are reserved for core;

Should we, similar to plugin tag names, use our 3-char prefix for global attributes we introduce?
If so, you may want to update the examples to reflect this.

Some attributes don’t seem usable on their own, like from and to in the example. Is there a way to generate an error if a user forgets or misspells one of the required attributes in a set?

Offline

#7 2017-09-14 20:07:01

etc
Developer
Registered: 2010-11-11
Posts: 4,252
Website GitHub

Re: Making your plugins 4.7-aware

ruud wrote #307004:

Should we, similar to plugin tag names, use our 3-char prefix for global attributes we introduce?
If so, you may want to update the examples to reflect this.

Some attributes (e.g. wraptag) are unambiguous enough, so I wouldn’t impose a prefix. Actually, a plugin can already substitute itself to a (unprefixed) core tag, hence there is no reason to forbid it for attributes.

Some attributes don’t seem usable on their own, like from and to in the example. Is there a way to generate an error if a user forgets or misspells one of the required attributes in a set?

Dunno. The problem is the same for the tags: what

<txp:abc_replace to="textpattern">
	<txp:body />
</txp:abc_replace>

means? The plugin (be it tag or attribute) will just use the default values in this case or throw an error, but catching it on processing is too expensive in loops, and the syntax parser has no idea of mandatory attributes.

We could require that plugins register their attributes with dependencies, which would be great for parser and tagbuilder. But these dependencies can be very complex, so this seems unreal. We should rather allow the plugins to modify txp_parsed tree, switching their node off if something is wrong on the first pass. Why not, any side-effects?

Offline

#8 2017-09-22 08:49:03

etc
Developer
Registered: 2010-11-11
Posts: 4,252
Website GitHub

Re: Making your plugins 4.7-aware

Another novelty are valueless attributes, internally converted to true. By checking $attr === true condition, you can give them some special (natural) meaning. For example,

<txp:category_list exclude parent="animal" />

will be interpreted (in this case) like “output the descendants of animal category excluding animal itself”, i.e. a shortcut for

<txp:category_list exclude="animal" parent="animal" />

Offline

#9 2018-01-28 11:07:22

jakob
Admin
From: Germany
Registered: 2005-01-20
Posts: 4,127
Website

Re: Making your plugins 4.7-aware

Textpattern v4.7: Making admin-side plugins multi-site compatible

From v4.7 onwards, there is a new constant ahu that holds the URL to the admin-side. This accommodates multi-site installations where the admin side is reached via an own subdomain.

The fix is easy. To ensure plugins function correctly in multi-site installations please replace all instances of:

hu.'textpattern/'.index.php …

with

ahu.index.php …

To ensure backwards compatibility with earlier Textpattern versions, you should also include the following before referencing ahu in your code:

if (!defined('ahu')) {
       define("ahu", hu.'textpattern/');
}

That’s all.

Side note: the public login cookie problem with earlier multi-site installations is now resolved. Plugins that rely on the admin-side and public-side being able to read the same login cookie (e.g. public-side login / maintenance mode plugins) should now function correctly provided the public and admin side are subdomains of the same domain.


TXP Builders – finely-crafted code, design and txp

Offline

#10 2018-03-16 18:54:05

uli
Moderator
From: Cologne
Registered: 2006-08-15
Posts: 4,238

Re: Making your plugins 4.7-aware

I’m getting a User_Error "Unknown column 'prefs_id' in 'field list'" for rss_admin_db_manager on 470 beta. I saw some plugins with that error got a fix, but I can’t find the scheme itself for that fix. Do we already have something here in the forum? Don’t recall of any.


In bad weather I never leave home without wet_plugout, smd_where_used and adi_form_links

Offline

#11 2018-03-16 19:02:53

colak
Admin
From: Cyprus
Registered: 2004-11-20
Posts: 8,595
Website GitHub Twitter

Re: Making your plugins 4.7-aware

uli wrote #310027:

I’m getting a User_Error "Unknown column 'prefs_id' in 'field list'" for rss_admin_db_manager on 470 beta. I saw some plugins with that error got a fix, but I can’t find the scheme itself for that fix. Do we already have something here in the forum? Don’t recall of any.

Hi Uli,

Try the one below.. It appears to be working fine on my beta install.

# Name: rss_admin_db_manager v4.4 (compressed)
# Type: Admin/Public plugin
# Database management system.
# Author: Rob Sable
# URL: http://www.wilshireone.com/
# Recommended load order: 5

# .....................................................................
# This is a plugin for Textpattern CMS - http://textpattern.com/
# To install: textpattern > admin > plugins
# Paste the following text into the 'Install plugin' box:
# .....................................................................

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
AAA=

Yiannis
——————————
neme.org | hblack.net | State Machines | NeMe @ github
I do my best editing after I click on the submit button.

Offline

#12 2018-03-16 19:12:44

uli
Moderator
From: Cologne
Registered: 2006-08-15
Posts: 4,238

Re: Making your plugins 4.7-aware

Thanks, Yiannis!
Now, things are beginning to get mysterious: I’ve the same error with your version, so my suspect was I might have altered my DB or something with one of my own plugin experiments. But the only instance of the string prefs_id is inside your and my version of the rss_admin_db_manager. And that doesn’t make any sense in my mind.

EDIT: Is your version Stefs fixed plugin for Maria DBs? (Nope. Slightly different from around character 30 or so)


In bad weather I never leave home without wet_plugout, smd_where_used and adi_form_links

Offline

Board footer

Powered by FluxBB