Seen on this TXP Forum thread. In our case, we output a table of the (latest) published articles categories by section/day of the week, but the construction can be adapted to any data:
Mon | Tue | Wed | Thu | Fri | Sat | Sun | |
---|---|---|---|---|---|---|---|
About | - | - | hope-for-the-future | hope-for-the-future | - | - | - |
Plugins | textpattern | textpattern | textpattern | textpattern | - | plugins | |
Sandbox | - | - | reciprocal-affection | hope-for-the-future | textpattern | - | |
Tips | textpattern | textpattern | textpattern | textpattern | textpattern | textpattern | textpattern |
Solution
The solution proposed on the forum is rather messy (and does not work with recent etc_query
), we give here a simpler version. The idea is to first construct a table of all possible cases filled with -
, and then replace the appropriate cases with articles categories.
So we start with an empty table:
Mon | Tue | Wed | Thu | Fri | Sat | Sun | |
---|---|---|---|---|---|---|---|
About | - | - | - | - | - | - | - |
Plugins | - | - | - | - | - | - | - |
Sandbox | - | - | - | - | - | - | - |
Tips | - | - | - | - | - | - | - |
If you take a look at the page source, every row of this table is marked up with data-release
and data-vintage
attributes:
<tr data-release="about">
<th>About</th>
<td data-vintage="0">-</td>
...
<td data-vintage="6">-</td>
</tr>
This is obtained with
<table>
<thead>
<tr><th></th><th>Mon</th>...<th>Sun</th></tr>
</thead>
<txp:section_list wraptag="tbody" break="">
<tr data-release="<txp:section />">
<th><txp:section title="1" /></th>
<td data-vintage="0">-</td>
...
<td data-vintage="6">-</td>
</tr>
</txp:section_list>
</table>
Now we pass this table (stored in some <txp:variable name="table" />
) to etc_query
to replace the content of the cases corresponding to some article with its category. To this end, we construct a ;
-separated list of replacement rules like
//tr[@data-release='about']/td[@data-vintage='2']=hope-for-the-future;
//tr[@data-release='about']/td[@data-vintage='3']=hope-for-the-future; ...
with
<txp:article_custom sort="Section, DAYOFWEEK(Posted)">
<txp:if_different>//tr[@data-release='<txp:section />']/td[@data-vintage='<txp:posted format="%w" />']=<txp:category1 />;</txp:if_different>
</txp:article_custom>
and store it in <txp:variable name="replace" />
. Now just call
<txp:etc_query data='<txp:variable name="table" />' replace='<txp:variable name="replace" />' />
and enjoy the result!
File(s)
- File: etc_query.txt [60.72 kB] (4263 downloads, ~29 per month)