Textpattern CMS support forum
You are not logged in. Register | Login | Help
- Topics: Active | Unanswered
Re: Attributes for txp:yield?
Please test this dev commit:
- you don’t need to explicitly set
yield="id, name, etc"
in shortcode when mixing them with global attributes anymore, txp will try to be smart. - you can wrap (not empty) tags output between some
prepend
andappend
strings, settingwraptag="prepend<+>append"
attribute. The split string<+>
is temporary, awaiting a better proposal.
Thanks @Destry and @jacob for ideas.
Offline
Re: Attributes for txp:yield?
Awesome!
Some great fun can be had with this and the slightly tweaked example from the shortcodes page:
<figure<txp:yield name="class" wraptag=" class='<+>'" />>
<txp:image id='<txp:yield name="id" />' />
<txp:if_yield name="caption">
<figcaption><txp:yield name="caption" escape="tidy,textile" /></figcaption>
<txp:else />
<txp:image_info id='<txp:yield name="id" />' wraptag="figcaption" escape="tidy,textile" />
</txp:if_yield>
</figure>
Let’s try this:
<txp::figure id="129" caption="My overridden caption" />
Works and puts a custom caption in.
<txp::figure id="129" class="fred" caption="My overridden caption" />
Adds class='fred'
to the <figure>
tag. Single quotes, sure, but it’s easier than escaping them or incurring the penalty of using single quotes around the entire thing and forcing another parse for tag-in-attributes when there aren’t any.
Speaking of which, you can even go a bit more extreme:
<txp:variable name="mycap">This is my caption</txp:variable>
<txp::figure class="fred" id="129" caption='<txp:variable name="mycap" />' />
Or go nuts with the prepend and append:
<txp:variable name="mycap">This is my caption</txp:variable>
<txp::figure class="fred" id="129" caption='<txp:variable name="mycap" wraptag="Caption: <i><+></i>" />' />
Which renders:
<figcaption>Caption: <i>This is my caption</i></figcaption>
Wonderful! And it all works identically with the longhand <txp:output_form form="figure" yield id="129" />
.
The only snag I can find so far is that if you don’t specify a caption
it doesn’t pick up the default one. It seems that <txp:if_yield>
always sees the (empty) caption
attribute even if you don’t specify it. The plan with that figure
shortcode was to use the caption assigned to the image itself if nothing was supplied. Thus, this:
<txp::figure id="129" />
Should output the <figcaption>
for the image, if there is one. It’s not doing that and renders an empty <figcaption>
.
Do we need to tweak the example to set a default or something? Or have the recent tweaks broken this functionality?
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: Attributes for txp:yield?
Bloke wrote #310527:
if you don’t specify a
caption
it doesn’t pick up the default one. It seems that<txp:if_yield>
always sees the (empty)caption
attribute even if you don’t specify it … have the recent tweaks broken this functionality?
Yay, thanks, that is a bug (not recent though) that appears on successive form calls, will patch shortly. I would also like to find something more esthetic for <+>
pattern, any suggestion?
Offline
Re: Attributes for txp:yield?
Destry wrote #310521:
Looking at this closer, I think there might be a discrepancy here against what I intended.
In my original example, the
name=""
attribute wasn’t pulling from a link data item, it was a free attribute to type in any name value a person wants for that given aside. If not used, nothing outputs.I don’t think that’s how this integrated example of etc’s is designed, though. Am I wrong?
I have adapted the example to recent commits, it should work as you describe now.
Offline
Re: Attributes for txp:yield?
etc wrote #310529:
…it should work as you describe now.
Thanks. I’ve updated the doc example
So, besides being a good excuse to demonstrate another way to juggle tag structure, the only real advantage with this example is being able to output multiple links in one place with a single tag. I can’t imagine ever doing that myself based on the purpose of this particular shortcode, but okay.
I’m not sure how that would impact using the free name
attribute though — e.g. what if you needed three different names parsed to each link quote (name values are not pulled from the link data) — but it would work fine with one ID, as normal.
In any case, I made a relevant comment about that in the doc. People have to explore a bit and learn how to adapt. We can’t do cookie-cut code for every scenario, after all. ;)
Offline
Re: Attributes for txp:yield?
Bloke wrote #310527:
Awesome!
+1 – Excellent! Big thanks for adding this Oleg.
I like the way you have implemented it as an extension of the existing wraptag
attribute for ‘freeform’ wrap scenarios with a placeholder for the content. It introduces no new attributes and is more succinct to write in code too. I take it this will work everywhere where wraptag
is a valid attribute?
I don’t mind <+>
as a choice of placeholder either. It’s not likely to conflict with an other needs like an @, #, or | might, and looks like a placeholder.
TXP Builders – finely-crafted code, design and txp
Offline
Re: Attributes for txp:yield?
jakob wrote #310534:
I don’t mind
<+>
as a choice of placeholder either.
Agree. Anything else might be more confusing, in fact.
Offline
Re: Attributes for txp:yield?
Destry wrote #310531:
So, besides being a good excuse to demonstrate another way to juggle tag structure, the only real advantage with this example is being able to output multiple links in one place with a single tag.
Not really, that was already possible with your structure. The main difference is that if you provide a wrong (not existing) id
, your snippet will output an empty <aside></aside>
, and mine will output nothing. Plus the possibility to wrap linklist
in other tags that aside
. Both are ok depending on users needs.
jakob wrote #310534:
I take it this will work everywhere where
wraptag
is a valid attribute?
It will work with every tag processing wraptag
via doWrap()
(or rather tag()
) function. This includes core and most plugins, but if a plugin author decides to treat wraptag
differently, (s)he can.
Offline
Re: Attributes for txp:yield?
etc wrote #310540:
main difference is that if you provide a wrong (not existing)
id
, your snippet will output an empty<aside></aside>
, and mine will output nothing. Plus the possibility to wraplinklist
in other tags thataside
.
Good points! That first one is kind of funny. I can’t imagine anyone making that mistake and not catching it after a front-side verification. I’m a front-side verifier to a fault. Type a word, I must go check it! :)
The layers to this onion are too many for me to keep track of.
Thanks again.
Offline
Re: Attributes for txp:yield?
etc wrote #310528:
that is a bug (not recent though) that appears on successive form calls
Thanks for the patch. Working smoothly now. Rockin’.
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