Textpattern CMS support forum
You are not logged in. Register | Login | Help
- Topics: Active | Unanswered
Pages: 1
Idea
On my own TXP sites and on a few larger TXP sites I run for a client, I often spin up new sections for little app-like projects, and I was thinking today that this might be convenient.1
Along with other per-section options, let’s say this option is available to a given section:
[x] Convert invalid URL segments to variables
Then let’s say you visit /section/example/
, and there’s no article there. If you have this option turned on, instead of showing a 404 error, your browser is redirected to /section/
and now the Textpattern variable urlSegment1
has the value “example” and is available for use in the page template being used at /section/
.
So you could do something like:
http://www.example.com/books/id/345
And then inside the /books/ page template (pseudocode):
if (urlSegment1 == "id" && urlSegment2 != "") {
//query third-party database
book_lookup(urlSegment2)
}
Thoughts? Too edge-casey for TXP? Just thinkin’.
1 And it is conveniently stolen from another CMS. Still I think this really harnesses one of TXP’s strengths—you can easily start up a new section in your browser and get coding.
Last edited by maruchan (2015-07-17 04:46:59)
Offline
Re: Idea
That’s just the right side of crazy to be useful.
How do you propose the passed info is made secure? Any sanitisation done before being turned into a variable?
Regardless, I’d be tempted to just stuff any future parts into an array instead of separate variables:
if (isset($urlParam[0]) && urlParam[0] === "id"
&& isset($urlParam[1]) && urlParam[1] != "") {
book_lookup($urlParam[1]);
}
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
Re: Idea
I’ve got a plugin, etc_url
, that can extract (sanitized) txp-related parameters from an url. For example, <txp:etc_url url='<txp:page_url />' type="id" />
will return 345
on http://www.example.com/books/345
, even if this article does not exist.
So you could include something like this at the beginning of in your error_404
page template:
...
<txp:variable name="id" value='<txp:etc_url url=''<txp:page_url />'' type="id" />' />
<txp:if_variable name="id">
<txp:php>txp_status_header();</txp:php>
do something special
<txp:else />
normal error handling
<txp:if_variable>
The download site is currently offline, but I can send it by email.
It would be even cleaner to intercept the 404 error, registering a callback on textpattern
that sets $pretext['status'] = 200
and $pretext['page'] = 'default'
(or whatever), and include the snippet above (without txp_status_header
) in your section page.
Offline
Re: Idea
etc wrote #293377:
It would be even cleaner to intercept the 404 error, registering a callback on
textpattern
Can you use the callback in txp_die()
?
callback_event('txp_die', $code, 0, $url);
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
Offline
Re: Idea
How do you propose the passed info is made secure? Any sanitisation done before being turned into a variable?
Personally I like the idea of pushing sanitization-thinking onto end-user designers/developers and I think it’d be pretty cool to add some sanitization options to txp:variable for e.g. email, phone, etc. and then maybe adding a warning in Diagnostics and/or in Testing mode if txp:variable is in use without sanitization. But I have only broad ideas there.
I’ve got a plugin, etc_url
Love to try it. Would it support longer parameter lists like /products/motorcycles/honda, where only /products/ exists as a section in the DB?
Last edited by maruchan (2015-07-17 17:47:15)
Offline
Offline
Pages: 1