Textpattern CMS support forum
You are not logged in. Register | Login | Help
- Topics: Active | Unanswered
#157 2009-12-05 11:58:33
Re: smd_query: Talk to the database directly via SQL
kostas45 wrote:
I also need my url (get) vars on all pages together with the pg var. Should next/prev links take account of that?
No. They can’t because txp:newer and txp:older don’t take them into account. smd_query doesn’t alter the tags’ functionality. They output a link to the current section’s list page and add ?pg=pagenum
to the URL. Nothing more.
Example 11: Next/prev link targets are somehow wrong.
What do you mean “somehow wrong”? Look at the pageform
in the example and see what it is doing, then alter it to suit your application. The example constructs links to the current article (using txp:permlink) so if you are using smd_query in an article it will page through the results and retain the current article in view. If you want to use it while in a list page you will need to change the anchor destinations accordingly.
Regarding the variables, the same applies. If you copied the example verbatim then it only adds the smd_qpg
var to the links. If you want to tack on your existing URL params you will have to grab them from the URL and construct your links to include ¶m=val&some=var&...
. You might like to consider adi_gps here, or use smd_query itself to grab (and optionally filter) the URL params then add them to your custom pagination links using the plugin’s ?varname
notation to insert the variable names where you want them.
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
#158 2009-12-05 12:16:08
- kostas45
- Member
- From: Greece
- Registered: 2007-11-08
- Posts: 61
Re: smd_query: Talk to the database directly via SQL
You are right! Sorry about that, I should have been more careful.
Custom pagination is definitely more useful :-)
Thanks for your help and work.
-Kostas
Offline
#159 2009-12-07 00:05:40
Re: smd_query: Talk to the database directly via SQL
Hi Stef,
I have begun looking at the new version, and am a little confused by all the extra gribble ;)
I am looking at a simple example to start with:
Existing article form
<txp:if_individual_article>
<txp:smd_if field="prev_title, next_title" operator="isused, isused" logic="or">
<h4>Adjacent Entries</h4>
<ul>
<txp:smd_if field="prev_title" operator="isused"><li><a href="<txp:link_to_prev />/">Previous Entry</a></li></txp:smd_if>
<txp:smd_if field="next_title" operator="isused"><li><a href="<txp:link_to_next />/">Next Entry</a></li></txp:smd_if>
</ul>
</txp:smd_if>
</txp:if_individual_article>
New article form
<txp:if_individual_article>
<txp:smd_if field="prev_title, next_title" operator="isused, isused" logic="or">
<h4>Adjacent Entries</h4>
<ul>
<txp:smd_query_if_prev><li><a href="<txp:link_to_prev />/">Previous Entry</a></li></txp:smd_query_if_prev>
<txp:smd_query_if_next><li><a href="<txp:link_to_next />/">Next Entry</a></li></txp:smd_query_if_next>
</ul>
</txp:smd_if>
</txp:if_individual_article>
However, when I use the new article form
, I only see the Next Entry
link which works OK except when I get to the last article in the section. It then shows a link to http://site.com/
. The Previous Entry
link never shows.
Also, can you please explain what pageform
is? Is it a form of type article
or misc
???
Last edited by speeke (2009-12-07 00:09:48)
“People who value their privileges above their principles soon lose both.”
Dwight D. Eisenhower
Offline
#160 2009-12-07 09:39:04
Re: smd_query: Talk to the database directly via SQL
speeke wrote:
I have begun looking at the new version, and am a little confused by all the extra gribble ;)
Having read through your code, I conclude it’s my crap documentation, sorry. I’ll see if I can tidy it up to make it clearer.
In the meantime, <txp:smd_query_if_prev>
(and next) can only be used inside a pageform
. Anywhere else they’ll do absolutely nothing (as you found!)
On a side note, <txp:link_to_prev> and <txp:link_to_next> shouldn’t need all the smd_if clutter, because they will automatically not render any container content if there is no next/prev article.
Also, can you please explain what
pageform
is? Is it a form of typearticle
ormisc
???
pageform
is where you put a bunch of {}
replacement tags (and/or navigation tags) to allow your visitors to page through your smd_query result sets. The replacement tags available are things that allow you to display stuff like “Showing records X to Y of Z” or “Previous M / Next N records”. And you can put TXP’s newer/older tags in here or construct your own, as shown in the plugin’s Example 11. You can place the contents of your pageform above or below the result set (or in both places!) using the pagepos
attribute.
btw, it doesn’t matter what type you assign to your form. The types are just for your own organisational use and mean nothing above that.
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
#161 2009-12-07 09:57:51
Re: smd_query: Talk to the database directly via SQL
Bloke wrote:
On a side note,
<txp:link_to_prev>
and<txp:link_to_next>
shouldn’t need all the smd_if clutter, because they will automatically not render any container content if there is no next/prev article.
Yes, that’s true. However, I don’t want an empty list if one or other are not true. Or an unnecessary <h4> title if neither are true. If there’s a cleaner way to do this, I’d love to know. I really like to get that XHTML validation tick, and make things as usable as possible ;-)
btw, it doesn’t matter what type you assign to your form. The types are just for your own organisational use and mean nothing above that.
That’s good to know. However, I thought some things had to go in an article
type form for them to render???
Last edited by speeke (2009-12-07 12:18:24)
“People who value their privileges above their principles soon lose both.”
Dwight D. Eisenhower
Offline
#162 2009-12-07 10:18:00
Re: smd_query: Talk to the database directly via SQL
speeke wrote:
I don’t want an empty list if one or other are not true
Can you do something like this? (untested)
<txp:if_individual_article>
<txp:smd_if field="prev_title, next_title" operator="isused, isused" logic="or">
<h4>Adjacent Entries</h4>
<ul>
<txp:link_to_prev><li>Previous Entry</li></txp:link_to_prev>
<txp:link_to_next><li>Next Entry</li></txp:link_to_next>
</ul>
</txp:smd_if>
</txp:if_individual_article>
That way if neither are present you see nothing, but if one or the other are present you enter the smd_if container whereby the link_to_prev/next containers will be displayed depending on which link(s) are available. And you will always get a valid XHTML list — even if it’s a list of one item.
EDIT: crap, no, you’re right. That’ll render the anchor around the <li>
. You know what these two tags need? A wraptag
attribute!
However, I thought some things had to go in an article type form for them to render
I don’t think so (someone correct me if I’m wrong). But if you want to preview the forms they have to be of type article.
Last edited by Bloke (2009-12-07 10:20:13)
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
#163 2009-12-07 12:13:46
Re: smd_query: Talk to the database directly via SQL
Bloke wrote:
You know what these two tags need? A
wraptag
attribute!
Indeed! But how to get one wraptag to work with two tags (<txp:smd_query_if_prev>
and <txp:smd_query_if_next>
). Now that presents a challenge! Could perhaps a break="li"
be made available to these tags, assuming that <ul> is already hard-coded separately?
I don’t think so (someone correct me if I’m wrong). But if you want to preview the forms they have to be of type article.
I’m sure you’re right. I’ve read in Textpattern Solutions (p.193) the following, which I’ve just tested, but it appears not to hold true (perhaps Txp 4.2 has changed this by default?):
… As an example, although a misc-type form
could not render a <txp:title />
tag … it could contain a <txp:article />
tag that referenced a proper article form containing the <txp:title />
tag.
“People who value their privileges above their principles soon lose both.”
Dwight D. Eisenhower
Offline
#164 2009-12-07 22:49:34
Re: smd_query: Talk to the database directly via SQL
Also, is it possible to use <txp:smd_if />
in this context?
Page {smd_thispage} of {smd_pages} (Showing records {smd_row_start} to {smd_row_end} of {smd_allrows})
<txp:smd_if field="{smd_row_next}" operator="eq" value="1">
... variable "echeck" = Last entry
<txp:else />
... variable "echeck" = Next {smd_rows_next} entries
</txp:smd_if>
where
<a href="...{smd_nextpage}"><txp:variable name="echeck" /></a>
EDIT: Yes, it is. I misspelled smd_row_next above – should be smd_rows_next :-|
Last edited by speeke (2009-12-07 23:01:04)
“People who value their privileges above their principles soon lose both.”
Dwight D. Eisenhower
Offline
#165 2010-01-11 00:27:55
Re: smd_query: Talk to the database directly via SQL
Hi Stef,
Happy New Year!
A (hopefully) quick query. I have the following:
<txp:smd_query query="SELECT ID FROM textpattern WHERE Section = '?s' AND Status = 4 AND (SUBSTR(Posted,1,10)='?month' OR SUBSTR(Posted,1,7)='?month' OR SUBSTR(Posted,1,4)='?month') GROUP BY Posted DESC" limit="1" pageform="content-main_nextprev">
<txp:article listform="article_list" id="{ID}" />
<txp:else />
No articles exist in this section for the date specified. Please try again.
</txp:smd_query>
All works well except when I add a date (in the url in the title bar) on which no articles were posted. If the user generates such a url, I would like to advise that “no articles exist”, hence the <txp:else />
tag, but the logic fails. I’ve tried various <txp:smd_if>
configurations too, but to no avail.
Any suggestions greatly appreciated.
Last edited by speeke (2010-01-11 00:34:59)
“People who value their privileges above their principles soon lose both.”
Dwight D. Eisenhower
Offline
#166 2010-01-11 09:39:11
Re: smd_query: Talk to the database directly via SQL
speeke wrote:
the logic fails
Hmmm, this is odd — and I know it isn’t much consolation — but your code seems to work for me. If I specify ?month=2008-06
where I know I have no articles, I see the ‘else’ message. Every other time I see an article and pagination links (incidentally, paging between articles is fun because the pagination form has to read the ?month and add it to the URL as well as the page variable!)
One thing you should probably alter is your txp:article; it should be <txp:article_custom />
because txp:article doesn’t take the id
attribute since it’s context sensitive.
If that doesn’t help, I suggest adding debug="2"
to the smd_query tag so we can see what the plugin sees on a page where there should be no articles. Let me know what you find, and I’ll help you dig further.
Happy New Year to you too. Hope it’s a good one.
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
#167 2010-01-11 11:20:22
Re: smd_query: Talk to the database directly via SQL
Bloke wrote:
One thing you should probably alter is your txp:article; it should be
<txp:article_custom />
Yes, indeed. Although, strangely enough <txp:article />
worked perfectly well, or at least the same as <txp:article_custom />
. And, no improvement with problem stated above.
If that doesn’t help, I suggest adding
debug="2"
to the smd_query tag
Done. When articles are found, the output appears as I imagine it should. However, there is no output at all for the <txp:else />
scenario. Could the fact that this code is in an article form
be relevant? It is called from a page
called “section” via:
<txp:article form="content-main_entries" limit="1" />
BTW: I’ve added the limit="1"
to prevent those vicious end loops from repeating the articles ;)
Off to get some zzz’s now. Will check back on the morrow!
“People who value their privileges above their principles soon lose both.”
Dwight D. Eisenhower
Offline
#168 2010-01-11 22:35:23
Re: smd_query: Talk to the database directly via SQL
Well, I think I’ve narrowed down when the problem’s occurring, but I have no idea why. The following code works perfectly in a page
:
<txp:smd_switch item="?s">
<txp:smd_case value="section-name">
<txp:if_variable name="month" value="">
month value is empty
<txp:else />
<txp:smd_query query="SELECT ID FROM textpattern WHERE Section = '?s' AND Status = 4 AND (SUBSTR(Posted,1,10)='?month' OR SUBSTR(Posted,1,7)='?month' OR SUBSTR(Posted,1,4)='?month') GROUP BY Posted DESC" limit="1">
article list here
<txp:else />
error here
</txp:smd_query>
</txp:if_variable>
</txp:smd_case>
</txp:smd_switch>
But as soon as I place this in an article form
, and call it using the <txp:article />
in post #167 above, the error here
message fails. All other logic works fine. I’ve tried exchanging ?s
with ?section
in the code, but no luck.
Stumps me! I’m hoping some Stef magic can enlighten me ;)
Last edited by speeke (2010-01-11 22:39:30)
“People who value their privileges above their principles soon lose both.”
Dwight D. Eisenhower
Offline