Textpattern CMS support forum
You are not logged in. Register | Login | Help
- Topics: Active | Unanswered
Textpattern evaluation (dis)abilities
I often miss the ability to evaluate simple arithmetic (like 2*2
), logical (contains('<txp:title />', 'etc')
) and other expressions in Textpattern. Certainly, there is <txp:php />
and plugins, but I would like to introduce a tag for this. So, please test <txp:evaluate />
branch and suggest any ideas before it goes (or not) into 4.7. The usage is simple:
<txp:evaluate query="2*2" /> (outputs 4)
<txp:evaluate query="starts-with('Textpattern', 'Text') and not(contains('Textpattern', 'press'))">
yay
<txp:else />
nay
</txp:evaluate>
See here for the list of available functions. Site admins can extend (via a pref) this list with PHP string functions that they consider safe to use.
Edit: another example: increment the value of a variable (e.g. on each loop) and compare it to something:
<txp:variable name="counter" value="0" />
...
<txp:variable name="counter" value='<txp:evaluate query=''<txp:variable name="counter" /> + 1'' />' />
<txp:evaluate query='<txp:variable name="counter" /> >= 5'>
you'd better stop
</txp:evaluate>
Last edited by etc (2016-10-24 20:51:47)
Offline
#2 2016-10-25 14:16:26
- uli
- Moderator
- From: Cologne
- Registered: 2006-08-15
- Posts: 4,306
Re: Textpattern evaluation (dis)abilities
Yes! Definitely! Please!
At the time the idea of variables was presented I hinted at the need of an evaluation method for variables. In the meantime two variable evaluation plugins plus Ruuds var hack for his rvm_counter confirmed that need.
And now core tags will take care of that: Great! Even better that you intend to add text evaluations! That’s not covered yet by plugins AFAIR! Both of these features together matches the Textpattern way of versatility and opens a lot of possibilities, and I’m totally looking forward on having these at my disposal, yay!
My only concern is that you seem to introduce another syntax, apparently different from the if_custom_field’s match="pattern"
method. Or am I currently being too dim? (PS: Looking at the function list it might be XPath?)
Unfortunately I’m currently quite overwhelmed with work so I can’t test yet, I’m sorry. (PS 2: And if it’s XPath I’d be stretched too thin anyway.)
In bad weather I never leave home without wet_plugout, smd_where_used and adi_form_links
Offline
#3 2016-10-25 14:21:05
- uli
- Moderator
- From: Cologne
- Registered: 2006-08-15
- Posts: 4,306
Re: Textpattern evaluation (dis)abilities
BTW, if the query value here
<txp:variable name="counter" value='<txp:evaluate query=''<txp:variable name="counter" /> + 1'' />' />
contains tags in tags: Would that be possible by wrapping three single apostrophes ('''
) around?
In bad weather I never leave home without wet_plugout, smd_where_used and adi_form_links
Offline
Re: Textpattern evaluation (dis)abilities
uli wrote #302477:
My only concern is that you seem to introduce another syntax, apparently different from the if_custom_field’s
match="pattern"
method.
Yes, it’s a different thing. You can use any function allowed by site admins in evaluations. Few of them are predefined (see below), but the list is extendible. If you wish, you could set $prefs['txp_functions'] = 'date,preg_match'
and call
<txp:evaluate query="date('w')=0 or date('w')=6">week-end!</txp:evaluate>
or
<txp:evaluate query='preg_match("/\bParis\b/", ''<txp:custom_field name="cities" />'')' />
(PS: Looking at the function list it might be XPath?)
Damn, I’m discovered! :-) Yes, because it’s simple, fast and secure to use. There are only few predefined constructs (arithmetic, logic, some functions), but you (admin) can extend the list at your liking (see above).
Offline
Offline
#6 2016-10-25 22:57:19
- uli
- Moderator
- From: Cologne
- Registered: 2006-08-15
- Posts: 4,306
Re: Textpattern evaluation (dis)abilities
etc wrote #302482:
<txp:evaluate query='preg_match("/\bParis\b/", ''<txp:custom_field name="cities" />'')' />...
The preg_match option is reassuring (my POV).
And $prefs['txp_functions'] = 'date,preg_match'
would go into config.php
?
In bad weather I never leave home without wet_plugout, smd_where_used and adi_form_links
Offline
Offline
#8 2016-10-27 07:40:49
- gomedia
- Plugin Author
- Registered: 2008-06-01
- Posts: 1,373
Re: Textpattern evaluation (dis)abilities
At the risk of starting a bun fight (or causing offence) … this looks great for a plugin but built into the core, not so sure.
Textpattern lacks basic built-in website building functionality at the moment – whitespace trimming, intelligent wrap tagging, standard tags (e.g. txp:custom_field) missing wrap tag attributes, access to URL vars etc etc – I’d hope that the core priorities would be elsewhere.
I think adi_if_content (written by etc) is a better & more powerful candidate for core inclusion.
And the syntax of txp:evaluate would be borderline impenetrable to many users – destroying one of Textpatterns strengths: code readability.
Offline
Re: Textpattern evaluation (dis)abilities
gomedia wrote:
At the risk of starting a bun fight (or causing offence) … this looks great for a plugin but built into the core, not so sure.
Absolutely no offense taken nor intended — all ideas are welcome.
Textpattern lacks basic built-in website building functionality at the moment – whitespace trimming, intelligent wrap tagging, standard tags (e.g. txp:custom_field) missing wrap tag attributes, access to URL vars etc etc – I’d hope that the core priorities would be elsewhere.
True, and we are working on it. I have already tested “core” attributes, like trim
or wrap
. It works, we just need a distinctive name: _trim
, txp:trim
or something else. Any idea?
I think adi_if_content (written by etc) is a better & more powerful candidate for core inclusion.
Possible. What about enhancing <txp:hide />
with adi_if_content
functionality?
And the syntax of txp:evaluate would be borderline impenetrable to many users – destroying one of Textpatterns strengths: code readability.
Here I must disagree: how <txp:evaluate query="2*2=4" />
is less readable than
<txp:adi_calc name="test" value="2" multiply="2" />
<txp:if_variable name="test" value="4" />
Offline
Re: Textpattern evaluation (dis)abilities
etc wrote #302513:
Absolutely no offense taken nor intended — all ideas are welcome.
True, and we are working on it. I have already tested “core” attributes, like
trim
orwrap
. It works, we just need a distinctive name:_trim
,txp:trim
or something else. Any idea?
Just a word about that; on my side I’d prefer to keep txp:
for tags and use something else for attributes; underscore seems ok to me, and it is three characters less! ;-)
I still need to test txp:evaluate
…
Offline
Offline
#12 2016-10-27 11:42:15
- gomedia
- Plugin Author
- Registered: 2008-06-01
- Posts: 1,373
Re: Textpattern evaluation (dis)abilities
etc wrote #302513:
Here I must disagree: how
<txp:evaluate query="2*2=4" />
is less readable than
<txp:adi_calc name="test" value="2" multiply="2" />...
Poor little adi_calc – it’s only a simple little sausage! To me that says very loudly: perform a calculation on a variable and then test the value of the variable.
If txp:evaluate
is to become a general purpose conditional maybe it should be txp:if
.
Offline