Textpattern CMS support forum
You are not logged in. Register | Login | Help
- Topics: Active | Unanswered
What is [txp:if_different] and how does it work.
First of all please excuse my ignorance. In textbook it says:-
The tag will execute the contained statement when the value of the contained statement differs from the preceding value for that contained statement. Can be used in article, link, comment, and file forms.
The examples are great and i use them, but i still don’t really understand whats happening and how it actually works. Could some of you clever programmers please try to explain in laymans(less asbtract way) terms how it works?
I think, therefore I AM, … … er … I think :-?
Offline
Re: What is [txp:if_different] and how does it work.
If previous contained code is different from current returned code, the code is shown, If it returns same it isn’t. Let’s put it like:
First call: <txp:if_different>Cat | <txp:category /></txp:if_different>
Returns: Cat | general
Second call: [...]
Returns: Cat | general
Third call: [...]
Returns: Cat | web
So we get a matching of those returnings. And if it is different from the previous, then the contained statement is shown. If it is same then it isn’t.
Cat | general
== Cat | general
!= Cat | web
It shows: Cat | general
and Cat | web
, because the second returned code was identical with the first one.
Hope that explains it better.
Offline
Re: What is [txp:if_different] and how does it work.
Timid&friendly
It’s best explained by example. Take an article list as given by <txp:article_custom section="blog" sort="category1">
. It returns a list of articles and each one has a load of “properties” (for want of a better word), e.g. each has a body, an excerpt, a category1, category2, a posted date, and so on.
Inside the container of this article_custom tag, the TXP parser ‘sees’ each article as it goes by. Instead of just displaying the same content from every article, you might want to show them grouped by category1 on the screen, for example. Since we’ve sorted by category1 we can ask the container to only output something when it detects that the category1 in the current article is different from the category1 of the article before it.
In other words, TXP keeps a note of each property in each article and you can ‘watch’ to see when one of those changes as the articles go past TXP’s eyes. When it does, if_different fires and you can display something.
It’s probably more complicated than that and I guess there are some things you can’t watch, but essentially that’s it.
Last edited by Bloke (2009-06-03 19:05:07)
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: What is [txp:if_different] and how does it work.
OK that makes a lot of sense :-D
So if i am correct, the tag makes an array of all the values for a given “property”- (the property you want to watch) and if the value is different from the previous values(s) of that property, it outputs all the unique values within that given property AND makes a list of any other related code tide to the parent form. An array within an array right?
I think, therefore I AM, … … er … I think :-?
Offline
Re: What is [txp:if_different] and how does it work.
Yes. It’s a bit like a filter. As you know you can have a load of categories which aren’t necessarily tied to a single section, however with <txp:if_different>
you can go through one specific section looking at the categories that are used in that one section and output a list of the categories. Obviously the same category can be used for several articles in that section but it will only be listed once.
Stuart
In a Time of Universal Deceit
Telling the Truth is Revolutionary.
Offline
Re: What is [txp:if_different] and how does it work.
Timid&friendly wrote:
So if i am correct, the tag makes an array of all the values for a given “property”- (the property you want to watch) and if the value is different from the previous values(s) of that property, it outputs all the unique values within that given property AND makes a list of any other related code tide to the parent form. An array within an array right?
Yes. But it’s doing it one article at a time so it outputs stuff as it goes rather than waiting till the end.
Thus if your blog about programming and zookeeping had an article_custom that returned this list of articles (abbreviated content!) :
Title Cat1 Posted
---------------------------------------------
Textpattern is great txp 28 May 2009
4.0.9 is gonna rock txp 25 May 2009
The new orang-utans zoo 03 Jun 2009
The penguins have landed zoo 02 Jun 2009
Giraffe central zoo 23 May 2009
Then you could just output the stuff one at a time so it looked like that on the screen. But, if instead of displaying category1 inline, you wanted to put the articles under their category headings so it looked like this:
Title Posted
---------------------------------------------
txp
Textpattern is great 28 May 2009
4.0.9 is gonna rock 25 May 2009
zoo
The new orang-utans 03 Jun 2009
The penguins have landed 02 Jun 2009
Giraffe central 23 May 2009
if_different could be told to ‘watch’ for changes in cat1. The parser / if_different sees the following, one by one:
1) Textpattern is great : cat1 = “txp”
===> This is different from before (previously cat1 was ‘empty’), I’ll output the cat1
2) 4.0.9 is gonna rock : cat1 = “txp”
===> Hmm, same as before, skip it
3) The new orang-utans : cat1 = “zoo”
===> This is different from before (previously cat1 was ‘txp’), I’ll output the cat1
4) The penguins have landed : cat1 = “zoo”
===> Same as before, skip it
5) Giraffe central : cat1 = “zoo”
===> Same as before, skip it
So it’s kind of doing stuff as it goes rather than building up arrays of arrays. Internally it might be doing the sub-array thing, I don’t know. Never looked!
EDIT: thebombsite was of course quicker, and more succinct :-)
Last edited by Bloke (2009-06-04 15:26:43)
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: What is [txp:if_different] and how does it work.
Bloke wrote:
EDIT: thebombsite was of course quicker, and more succinct :-)
Nah, “the penguins have landed” was well worth it.
Offline
Re: What is [txp:if_different] and how does it work.
Thx guyz, i think i understand now how it works and when to use it
I think, therefore I AM, … … er … I think :-?
Offline