Textpattern CMS support forum
You are not logged in. Register | Login | Help
- Topics: Active | Unanswered
#1 2012-08-07 16:50:30
- richtestani
- Plugin Author
- Registered: 2009-11-08
- Posts: 128
Dynamic Output Form
My first very basic plugin I am adding here. I’ll post the code and the plugin itself.
Its a simple idea of extending the output_form to allow variables within them. I like to think of them as functions with arguments.
Only a valid form name is required.
Hope someone else finds it useful.
- Name: rlt_output_form v0.3
- Type: Public side plugin
- Send your form dynamic arguments
- Author: Richard Testani
- URL: http://rtest.ws/
- Recommended load order: 5
- ……………………………………………………………
- This is a plugin for Textpattern – http://textpattern.com/
- To install: textpattern > admin > plugins
- Paste the following text into the ‘Install plugin’ box:
- ……………………………………………………………
YToxMTp7czo0OiJuYW1lIjtzOjE1OiJybHRfb3V0cHV0X2Zvcm0iO3M6NjoiYXV0aG9yIjtzOjE1OiJSaWNoYXJkIFRlc3RhbmkiO3M6MTA6ImF1dGhvcl91cmkiO3M6MTY6Imh0dHA6Ly9ydGVzdC53cy8iO3M6NzoidmVyc2lvbiI7czozOiIwLjMiO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjMyOiJTZW5kIHlvdXIgZm9ybSBkeW5hbWljIGFyZ3VtZW50cyI7czo0OiJoZWxwIjtzOjE2NzI6IjxoMT5EeW5hbWljIE91dHB1dCBGb3JtPC9oMT4KPHA+QnVpbGQgZHluYW1pYyBmb3JtcyB1c2luZyBzdGFuZGFyZCB0ZXh0cGF0dGVybiBmb3Jtcy48L3A+CjxwPkNyZWF0ZSBhIGZvcm0gd2l0aCByZXBsYWNhYmxlIHZhbHVlcyB1c2luZyBzdGFuZGFyZCBUZXh0cGF0dGVybiB2YXJpYWJsZXMuPC9wPgo8cD5QYXNzIGluIHRob3NlIHZhcmlhYmxlcyBmcm9tIHRoZSBybHRfb3V0cHV0X2Zvcm0gdGFnIGFzIHN0YW5kYXJkIGF0dHJpYnV0ZXMuPC9wPgo8aDI+RXhhbXBsZTo8L2gyPgo8cCBzdHlsZT0iY29sb3I6IHJlZDsiPiZsdDt0eHA6cmx0X291dHB1dF9mb3JtIGZvcm09JnF1b3Q7bXlfdHhwX2Zvcm0mcXVvdDsgdGl0bGU9JnF1b3Q7V2VsY29tZSB0byBteSBQYWdlJnF1b3Q7IHNob3dfaW1hZ2U9JnF1b3Q7MSZxdW90OyAvJmd0OzwvcD4KPHA+Q3JlYXRlIGEgc3RhbmRhcmQgVFhQIGZvcm0gYW5kIGluY2x1ZGUgbm9ybWFsIFRYUCB2YXJpYWJsZXMuPC9wPgo8cCBzdHlsZT0iY29sb3I6IHJlZDsiPiZsdDt0eHA6dmFyaWFibGUgbmFtZT0mcXVvdDt0aXRsZSZxdW90OyAvJmd0OzwvcD4KPHAgc3R5bGU9ImNvbG9yOiByZWQ7Ij4mbHQ7dHhwOmlmX3ZhcmlhYmxlIG5hbWU9JnF1b3Q7c2hvd19pbWFnZSZxdW90OyB2YWx1ZT0mcXVvdDsxJnF1b3Q7Jmd0OzwvcD4KPHAgc3R5bGU9ImNvbG9yOiByZWQ7Ij4mbHQ7aW1nIHNyYz0mcXVvdDsvbXlfaW1hZ2UucG5nJnF1b3Q7IGFsdD0mcXVvdDtwaWN0dXJlIG9mIGEgaG9yc2UmcXVvdDsgLyZndDs8L3A+CjxwIHN0eWxlPSJjb2xvcjogcmVkOyI+Jmx0Oy90eHA6aWZfdmFyaWFibGUmZ3Q7PC9wPgo8aDI+RXhhbXBsZSAyOjwvaDI+aDI+CjxwPllvdSBjYW4gYWxzbyB1c2UgdGhlIHRhZyBhcyBhIHdyYXBwZXIsIGFsb25nIHdpdGggdGhlIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5uZXQvd2lraS9pbmRleC5waHA/dGl0bGU9eWllbGQiPnlpZWxkIHRhZzwvYT4uPC9wPgo8cD5UaGUgeWllbGQgdGFnIGdvZXMgaW50byB5b3VyIGZvcm0sIGFuZCBnZXRzIHJlcGxhY2VzIHdpdGggdGhlIGlubmVyIHRleHQgd2l0aGluIHJsdF9vdXR1dF9mb3JtIHRhZy4KPHAgc3R5bGU9ImNvbG9yOiByZWQ7Ij4mbHQ7dHhwOnJsdF9vdXRwdXRfZm9ybSBmb3JtPSZxdW90O215X3R4cF9mb3JtJnF1b3Q7IHRpdGxlPSZxdW90O1dlbGNvbWUgdG8gbXkgUGFnZSZxdW90OyBzaG93X2ltYWdlPSZxdW90OzEmcXVvdDsgLyZndDs8L3A+CjxwIHN0eWxlPSJjb2xvcjogcmVkOyI+Jmx0O3R4cDpybHRfb3V0cHV0X2Zvcm0gZm9ybT0mcXVvdDtteV90eHBfZm9ybSZxdW90OyBjb2xvcj0mcXVvdDtibHVlJnF1b3Q7IHNob3dfaW1hZ2U9JnF1b3Q7MSZxdW90OyZndDs8L3A+CjxwPkFuZCB0aGF0IGlzIGhvdyBpdCdzIGRvbmU8L3A+CjxwIHN0eWxlPSJjb2xvcjogcmVkOyI+Jmx0O3R4cDpybHRfb3V0cHV0X2Zvcm0mZ3Q7PC9wPgo8aDM+WW91ciBmb3JtIGNvbnRlbnQ6PC9oMz4KPHA+TXkgZmF2b3JpdGUgY29sb3IgaXM6ICZsdDt2YXJpYWJsZSBuYW1lPSZxdW90O2NvbG9yJnF1b3Q7IC8mZ3Q7PC9wPgo8cD4mbHQ7eWllbGQgLyZndDs8L3A+CjxwPjxiPlRISVMgV0lMTCBOT1QgV09SSyBJTiBBUlRJQ0xFUywgVEhJUyBJUyBTVFJJQ1RMWSBJTlNURUFEIE9GIFVTSU5HIFRIRSBPVVRQVVRfRk9STSBUQUcuPC9iPjwvcD4iO3M6NDoiY29kZSI7czoxNDI4OiIkcGx1Z2luWyd2ZXJzaW9uJ10gPSAnMC4zJzsNCiRwbHVnaW5bJ2F1dGhvciddID0gJ1JpY2hhcmQgVGVzdGFuaSc7DQokcGx1Z2luWydhdXRob3JfdXJpJ10gPSAnaHR0cDovL3J0ZXN0LndzLyc7DQokcGx1Z2luWydkZXNjcmlwdGlvbiddID0gJ1NlbmQgeW91ciBmb3JtIGR5bmFtaWMgYXJndW1lbnRzJzsNCiRwbHVnaW5bJ3R5cGUnXSA9IDA7IC8vIDAgZm9yIHJlZ3VsYXIgcGx1Z2luOyAxIGlmIGl0IGluY2x1ZGVzIGFkbWluLXNpZGUgY29kZQ0KJHBsdWdpblsnbmFtZSddID0gJ3JsdF9vdXRwdXRfZm9ybSc7DQoNCg0KZnVuY3Rpb24gcmx0X291dHB1dF9mb3JtKCRhdHRzLCAkdGhpbmcgPSAnJykgew0KDQoJJHJsdF9vcmlnX3ZhcnMgPSBhcnJheSgpOw0KCS8qDQoJCXNldCBUWFAgdmFyaWFibGVzDQoJCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCgkqLw0KCQ0KCQ0KCWlmKCFhcnJheV9rZXlfZXhpc3RzKCd2YXJpYWJsZScsICRHTE9CQUxTKSkgeyANCgkNCgkJJEdMT0JBTFNbJ3ZhcmlhYmxlJ10gPSBhcnJheSgnZm9ybScgPT4gJ2RlZmF1bHQnKTsNCgkJDQoJfQ0KCQ0KCWZvcmVhY2goJGF0dHMgYXMgJG5hbWUgPT4gJHZhbHVlKSB7DQoJCQ0KCQlpZiggYXJyYXlfa2V5X2V4aXN0cygkbmFtZSwgJEdMT0JBTFNbJ3ZhcmlhYmxlJ10pICkgew0KDQoJCQkvLw0KCQkJLy8JbWFuYWdlIHZhcmlhYmxlcyB3aXRoIHRoaXMgbmFtZSwgdG8gcmVzZXQgdGhlaXIgcHJldmlvdXMgdmFsdWUNCgkJCS8vDQoJCQkkcmx0X29yaWdfdmFyc1skbmFtZV0gPSB2YXJpYWJsZShhcnJheSgnbmFtZSc9PiRuYW1lKSk7DQoJCQkNCgkJfSANCgkJDQoJCXZhcmlhYmxlKGFycmF5KCduYW1lJyA9PiAkbmFtZSwgJ3ZhbHVlJyA9PiAkdmFsdWUpKTsNCg0KCX0NCg0KCQ0KCS8qDQoJCWdldCB0aGUgZm9ybSBzdHJpbmcNCgkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KCSovDQoJJG91dHB1dCA9IG91dHB1dF9mb3JtKGFycmF5KCdmb3JtJz0+JGF0dHNbJ2Zvcm0nXSksICR0aGluZyk7DQoJDQoJLyoNCgkJcmVtb3ZlIHZhcmlhYmxlcyBmcm9tIGV4aXN0ZW5jZSB1bmxlc3MgdGhleSB3ZXJlIHByZXZpb3VzbHkgc2V0DQoJCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCgkqLw0KCWZvcmVhY2goJGF0dHMgYXMgJG5hbWUgPT4gJHZhbHVlKSB7DQoJDQoJCXVuc2V0KCRHTE9CQUxTWyd2YXJpYWJsZSddWyRuYW1lXSk7DQoJCQ0KCQlpZiggYXJyYXlfa2V5X2V4aXN0cygkbmFtZSwgJHJsdF9vcmlnX3ZhcnMpICkgew0KCQkJDQoJCQl2YXJpYWJsZShhcnJheSgnbmFtZScgPT4gJG5hbWUsICd2YWx1ZScgPT4gJHJsdF9vcmlnX3ZhcnNbJG5hbWVdKSk7DQoNCgkJfQ0KCQkNCgkJdW5zZXQoJHJsdF9vcmlnX3ZhcnNbJG5hbWVdKTsNCgkJDQoJfQ0KCQ0KDQoJcmV0dXJuICRvdXRwdXQ7DQoNCn0iO3M6NDoidHlwZSI7czoxOiIwIjtzOjU6Im9yZGVyIjtzOjE6IjUiO3M6NToiZmxhZ3MiO3M6MToiMCI7czozOiJtZDUiO3M6MzI6IjFhNThkMDM3YjkzOGY5NjNmYTM0OTQ2MjA3MDhlZjA0Ijt9
Last edited by richtestani (2012-09-22 16:03:39)
Offline
#2 2012-08-07 17:24:31
- uli
- Moderator
- From: Cologne
- Registered: 2006-08-15
- Posts: 4,306
Re: Dynamic Output Form
Hey, congrats!
Now that you have your own plugin prefix the thing should install. But, alas, it mutters something about bad_plugin_code (TXP probably speaks a bit nicer here, actually, but I’ve just set it to display the core strings). Please have a look at why it does so.
In bad weather I never leave home without wet_plugout, smd_where_used and adi_form_links
Offline
#3 2012-08-07 17:39:59
- richtestani
- Plugin Author
- Registered: 2009-11-08
- Posts: 128
Re: Dynamic Output Form
uli, thanks for letting me know – the forum was adding some formatting to the code, so it should be installable now.
Offline
#4 2012-08-07 18:36:38
- uli
- Moderator
- From: Cologne
- Registered: 2006-08-15
- Posts: 4,306
Re: Dynamic Output Form
Alright, now it installs, but the plugin help is malformed (no visible code example), and in ied_plugin_composer there’s no accessible help text, instead there are some duplicated copyright informations and a function. Can’t advise you there, sorry. (The plugin should be named following the function rlt_output_form
, BTW.)
In bad weather I never leave home without wet_plugout, smd_where_used and adi_form_links
Offline
Re: Dynamic Output Form
This would be a nice feature to have in core…
Offline
Re: Dynamic Output Form
Not wanting to hijack the thread nor criticize this new plugin, problem I see with this approach (using txp:variables) is that they remain existing after the form is processed. In other words, the variables are set globally.
It would be could if the created (on-the-fly) variables could be scoped just to the form, as it happens with txp:yield.
I’ve suggested named yields in the past, without success. Artagesw was working on scoped variables but I think that won’t see the light of day any time soon.
smd_macro could be an alternative.
Offline
#7 2012-08-07 22:04:29
- richtestani
- Plugin Author
- Registered: 2009-11-08
- Posts: 128
Re: Dynamic Output Form
Hi maniqui,
I thought about the global variable issue as well – setting a variable(array(‘name’=>$key, ‘value’=>’‘)) i doubt would unset it.
How do you unset txp variables?
I updated the script to use the correct naming style and added some help and an example.
Offline
Re: Dynamic Output Form
There are still issues with your composed plugin package. The code contents that get installed include the actual plugin template. This shouldn’t happen and can causes other issues. For instance error log gets filled by inclusion errors about missing file (zem_tpl.php). How are you compiling the plugins? There is something wrong.
Feature-wise it would be good if it supported yield. You can add yield by passing the functions second argument to the output_form() function as the second parameter.
string output_form( array $atts [ , string $thing=null ] )
You could take a look at the output_form() function to see how $thing is used and what it expects. Which lead to the other thing, missing forms could be let to output_form() to handle instead of retuning a false. The core function will invoke useful error message and all that, which you aren’t and shouldn’t have to. Just call the output_form in any case, it will do the rest.
richtestani wrote:
How do you unset txp variables?
Variables are stored as a global variable named $variable. The variable contains an array map representing the variables used in the tag.
global $variable;
unset($variable['foobar'], $variable['barfoo']);
Take a look at variable() function to see how it’s used. When it comes to clearing the variables, keep in mind that you can’t merely unset them. The plugin will have to keep track of which variables have been set by it, while keeping already set variables safely intact. You should be able to do this by storing the current variables in a temporary variable, which is then used to check which variables where previously set and which weren’t. Those that weren’t are unset and those that were, are restored to their original state.
Last edited by Gocom (2012-08-07 23:25:28)
Offline
Re: Dynamic Output Form
richtestani,
I upgraded you to a plugin author so you can release your plugins in the proper forum
Yiannis
——————————
NeMe | hblack.art | EMAP | A Sea change | Toolkit of Care
I do my best editing after I click on the submit button.
Offline
Re: Dynamic Output Form
Just to mention: that’s what cbe_output_form already does.
Last edited by CeBe (2012-08-08 18:43:07)
Offline
#11 2012-08-12 13:41:55
- richtestani
- Plugin Author
- Registered: 2009-11-08
- Posts: 128
Re: Dynamic Output Form
Updated the plugin to support the yield tag, and reset previously set variables of the same name to their original values.
If anyone sees an issues I have missed, please let me know.
Thanks for all the feedback here.
Rich
Last edited by richtestani (2012-08-12 13:42:16)
Offline
Re: Dynamic Output Form
richtestani wrote:
If anyone sees an issues I have missed, please let me know.
There is something strange going on with the composed plugin package. The code itself contains the whole plugin template including the help file, <?php tags and and the global plugin array. The plugin file currently contains the following:
Array
(
[name] => rlt_output_form
[author] => Richard Testani
[author_uri] => http://rtest.ws/
[version] => 0.3
[description] => Send your form dynamic arguments
[code] => $plugin['version'] = '0.3';
$plugin['author'] = 'Richard Testani';
$plugin['author_uri'] = 'http://rtest.ws/';
$plugin['description'] = 'Send your form dynamic arguments';
$plugin['type'] = 0; // 0 for regular plugin; 1 if it includes admin-side code
$plugin['name'] = 'rlt_output_form';
if(0) {
?>
# --- BEGIN PLUGIN HELP ---
[ help file ]
# --- END PLUGIN HELP ---
<?php
}
[ plugin's code/function ]
[type] => 0
[order] => 5
[flags] => 0
[help] => [ help file again ]
[md5] => 5fdb4534ee643daacd97bb8f82f7cdfe (wondering from what this checksum is).
)
Which all in all, doesn’t seem right. How are you composing/compiling the plugin? I can offer help or suggestions if you have problems.
Offline