Textpattern CMS support forum
You are not logged in. Register | Login | Help
- Topics: Active | Unanswered
Pages: 1
#1 2021-07-11 21:07:32
- Myusername
- Member
- Registered: 2019-12-12
- Posts: 165
A way to play with override forms
It’s not specifically a shortcode, but a way that we can play with override forms, and that can be very useful.
Some time ago I wanted to make some changes in the HTML of the article, but they were small changes and didn’t justify the creation of a second form, since this second form would have basically the same HTML as the first one, except for some icons and etc. . If I later wanted to change something in the HTML, I would have to change it in both forms. As a solution, I remember installing the glz_custom_fields plugin, so I can have a checkbox on the article tab and a conditional tag so I can control what to display in those articles.
So, assuming this is my ‘default’ form:
<article>
<h1><txp:title/></h1>
<article::image />
</article>
Now I create a second form, for example, called ‘gallery’:
<txp:variable name="article_gallery" value="1"/>
<txp::default />
<txp:variable name="article_gallery" value=""/>
So once ‘gallery’ is selected: the first line creates a variable called ‘article_gallery’ and assigns it the value of ‘1’. So now with this conditional tag, you can control what to display inside the ‘default’ form, which will be incorporated below.
The last line will just erase the variable’s value so it won’t reflect in the articles that follow.
You can even further organize your code that is inside ‘default’ by doing something like this:
<txp:variable name="gallery_code">
<!-- all gallery code here... -->
</txp:variable>
<txp:variable name="article_gallery" value="1"/>
<txp::default />
<txp:variable name="article_gallery" value=""/>
<article>
<h1><txp:title/></h1>
<if::variable name="article_gallery" value>
<txp:variable name="gallery_code" />
<txp:else/>
<article::image/>
</if::variable>
</article>
Hope it can be useful at some point. If you have a different way of getting the same result, let me know.
Last edited by Myusername (2021-07-11 21:08:04)
Offline
Re: A way to play with override forms
Three other variants on your idea:
1. Only a minor difference: You can use txp:if_custom_field in place of setting a variable and then using if_variable. You then don’t need to unset it afterwards.
<txp:if_custom_field name="has_gallery" value="1">
<!-- gallery code -->
</txp:if_custom_field>
2. You could use the “override_form” method (using the override_form dropdown) and call the “text_post” form from within the “text_post_gallery” form. That way you don’t necessarily have to repeat the code. That depends, of course, on how complex your code is interleaved. Use that together with txp:yield and txp:if_yield to pass conditional content into a (sub)form.
3. You could detect if the article_image field has more thane image using txp:images and put that in a variable and the offset
and limit
attributes. If it has more than one image id/url, output your gallery or slider, if just one, then just the header image.
EDIT: added txp:yield.
TXP Builders – finely-crafted code, design and txp
Offline
#3 2021-07-12 15:39:53
- Myusername
- Member
- Registered: 2019-12-12
- Posts: 165
Re: A way to play with override forms
The problem with using custom_field for this is because:
- You need to set a value, eg ‘1’, to be able to compare later.
- It is not very intuitive (for this purpose) where the custom fields are in the write tab.
However, using txp:yield
instead of using a variable is definitely better. The same result, but cleaner. I will join.
Thanks for the reply.
Offline
Re: A way to play with override forms
My apologies. I misunderstood you completely. I thought you meant you are currently using custom fields as an alternative to the problem of duplicate code in override forms. But now that I re-read your post carefully, I can see you’re doing exactly what I meant with option 2. I posted too hastily.
TXP Builders – finely-crafted code, design and txp
Offline
Pages: 1