Textpattern CMS support forum
You are not logged in. Register | Login | Help
- Topics: Active | Unanswered
etc_url: rewrite some parts of url
This tiny plugin will take an url and append (or rewrite) some query string to it, like this:
<txp:etc_url url="http://my.web.site/section/tag/?q=etc&pg=2" query="pg=3" />
will produce http://my.web.site/index.php?s=tag&q=etc&pg=3
in messy
mode, and http://my.web.site/tag/?q=etc&pg=3
in /section/title
permalink mode.
Semantic txp parameters (like section or category) do receive no special treatment in clean mode, i.e. any only part of ?query
url
is parsed.
Attributes
- url: url to rewrite, default is the current page url.
- context: article, file, image or link. To be used in an article (file, …) form for custom schemes compatibility and/or faster processing. Empty by default.
- query:
&
-separated list of tokens to append/modify, like this:key1=val1&key2&key3=val3
. Ifval
is not set, thekey
will be removed fromurl
. - sanitize: comma-separated URL parameters that should be transformed following the same rules as for article titles.
- type: URL parameter to extract, default none (the whole URL). If type starts with
&
, it’s value will be URL-encoded. - mode: optional TXP
permlink mode
used to parseurl
.
History
Version 0.1: initial release.
Version 0.2: respects all permalink modes. Added custom attribute.
Version 0.3: added sanitize and type attributes, removed custom attribute.
Version 0.3.4: added context and mode attributes.
Last edited by etc (2015-09-28 11:03:13)
Offline
Re: etc_url: rewrite some parts of url
Very good of you to release this, etc. I will look into the pagination method. I still need to understand xpath, but it is something I want to do sooner than later. :-)
Offline
Re: etc_url: rewrite some parts of url
maruchan wrote:
Very good of you to release this, etc.
Thank you for your welcome, and have fun with xpath! It is just another language for DOM traversing, with very similar to jQuery or CSS syntax, that is understood by php (and now by TXP:-) too.
Offline
Offline
Re: etc_url: rewrite some parts of url
Version 0.2: respects permalink modes.
Edit: it can also create links to articles filtered by multiple criteria that will fit any permalink mode:
<txp:etc_url url="" query="c=novels&author=Jack London&month=1903" />
Last edited by etc (2013-04-09 12:16:24)
Offline
Re: etc_url: rewrite some parts of url
Hi, can I use etc_url for constructing an url from the content of a custom field?
Example:
In the custom field: two words
The url I want: http://sitename.com/section/two-words The section is not the same as the article itself, no need to generate it dynamicly for this use.
The url rewriting should follow the same rules as textpattern uses to generate an url from an article title. This means: words need to be stripped from diacritics, capitals removed, connected by a dash.
Another more sophisticated approach might be:
1: read the contents of the custom field
2: look for an article with the same title
3: if it exists: output the url to use it as a link
But I probably need another plugin for that.
-kees
Offline
Re: etc_url: rewrite some parts of url
Hi,
I don’t think you need a plugin for this. If your custom field is called, say, link
, try
<txp:variable name="link"><txp:php>
global $thisarticle;
echo stripSpace($thisarticle['link'], 1);
</txp:php></txp:variable>
<a href='/section/<txp:variable name="link" />'><txp:custom_field name="link" /></a>
<!-- will generate something like <a href='/section/two-words'>Two Words</a> -->
Use etc_url
only if you need to respect the site url mode:
<txp:etc_url url="" query='s=<txp:variable name="link" />' />
<!-- will generate something like <a href='http://sitename.com/?s=two-words'>Two Words</a> in messy mode -->
Offline
Re: etc_url: rewrite some parts of url
etc wrote:
Hi,
I don’t think you need a plugin for this. If your custom field is called, say,
link
, try
<txp:variable name="link"><txp:php>
global $thisarticle;
echo stripSpace($thisarticle['link'], 1);
</txp:php></txp:variable>
<a href='/section/<txp:variable name="link" />'><txp:custom_field name="link" /></a>
<!-- will generate something like <a href='/section/two-words'>Two Words</a> -->
Thanks! I allready thought this should be possible with txp:variable. I’ll give it a try.
-k
Offline
Re: etc_url: rewrite some parts of url
you’re suggested solution with txp:variable does the trick perfectly!
thanks!
-kees
Offline
#10 2015-09-24 11:11:13
- Gallex
- Member
- Registered: 2006-10-08
- Posts: 1,308
Re: etc_url: rewrite some parts of url
all worked well until owner moved site to another host. now i’m getting this error:
Tag error: <txp:output_form form='main_menu_<txp:variable name="lang" />' /> -> Textpattern Notice: Form not found: main_menu_ while parsing form None on page default_eng
i can’t find what’s wrong. could anbybody take a look? i’ll make a temporary account for you
Offline
#11 2015-09-24 11:56:06
- uli
- Moderator
- From: Cologne
- Registered: 2006-08-15
- Posts: 4,306
Re: etc_url: rewrite some parts of url
How is variable lang
defined? What might be inside it the moment it’s getting parsed?
And what has the error to do with etc_url?
In bad weather I never leave home without wet_plugout, smd_where_used and adi_form_links
Offline
#12 2015-09-24 12:22:16
- Gallex
- Member
- Registered: 2006-10-08
- Posts: 1,308
Re: etc_url: rewrite some parts of url
uli wrote #295104:
How is variable
lang
defined? What might be inside it the moment it’s getting parsed?
And what has the error to do with etc_url?
i have multilingual site. i use this plugin to “reflect” some english sections and articles under other languages.
my code:
<txp:variable name="lang" value='<txp:etc_url type="lang" />' />
<txp:variable name="main_menu"><txp:output_form form='main_menu_<txp:variable name="lang" />' /></txp:variable>
<txp:if_variable name="main_menu" value="">
<txp:output_form form="main_menu_eng" />
<txp:else />
<txp:variable name="main_menu" />
</txp:if_variable>
Moderator’s annotation:
Changed bq. to bc. to know curly quotes from straight ones.
– Uli –
Last edited by uli (2015-09-24 12:38:35)
Offline