Wow, this plugin does a lot... it seems to be inline
(but without the feeds
or the ability to not have archive="yes"
), plus part of
?trail, plus some sorting, plus an ingenious workaround
for template evaluation being relatively stateless.
A large part of this plugin would just fall off if one of the versions of
"allow plugins to add sorting methods" was merged, which was a
large part of the idea of that feature request To make use of that
you'd have to use pagespec_match_list
in the trail case too, but that's
easy enough - just add list => [@the_trail_pages]
to the arguments.
Another large part would fall off if this plugin required, and internally
invoked, inline
(like my comments
plugin does) - inline
runs
pagetemplate
hooks, and in particular, it'll run the field
hook.
Alternatively, this plugin could invoke pagetemplate
hooks itself,
removing the special case for field
.
Perhaps the headers
thing could migrate into inline somehow? That might
lead to making inline too big, though.
I think inline is already too big, honestly. --KathrynAndersen
A fair point; perhaps my complaint should be that inline does too many orthogonal things. I suppose the headers feature wouldn't really make sense in an inline that didn't have
archive="yes"
, so it'd make sense to recommend this plugin as a replacement for inlining with archive=yes (for which I now realise "inline" is the wrong verb anyway ) --sI think inline would be a bit less unwieldy if there was some way of factoring out the feed stuff into a separate plugin, but I don't know if that's possible. --K.A.
Is the intention that the trail
part is a performance hack, or a way
to select pages? How does it relate to wikitrails or
?trail? --smcv
The
trail
part is both a performance hack, and a way to select pages. I have over 5000 pages on my site, I need all the performance hacks I can get. For the performance hack, it is a way of reducing the need to iterate through every single page in the wiki in order to find matching pages. For the way-to-select-pages, yes, it is intended to be similar to wikitrails and ?trail (and will be more similar with the new release which will be happening soon; it will add prev* and next* variables). The idea is that, rather than having to add special "trail" links on PageA to indicate that a page is part of the trail, it takes advantage of the%links
hash, which already contains, for each page, an array of the links from that page to other pages. No need for special markup, just use what's there; a trail is defined as "all the pages linked to from page X", and since it's an array, it has an order already. But to avoid that being too limiting, one can use apages=...
pagespec to filter that list to a subset; only the pages one is interested in. And one can also sort it, if one so desires. --KathrynAndersenThat's an interesting approach to trails; I'd missed the fact that links are already ordered.
This does have the same problems as tags, though: see tagged() matching wikilinks and matching different kinds of links. I suppose the question now is whether new code should be consistent with
tag
(and potentially be fixed at the same time as tag itself), or try to avoid those problems?The combination of
trail
with another pagespec in this plugin does provide a neat way for it to work around having unwanted pages in the report, by limiting by a suitable tag or subdirectory or something. --sEither that, or somehow combine tagging with fields, such that one could declare a tag, and it would create both a link and a field with a given value. (I've been working on something like that, but it still has bugs). That way, the test for whether something is tagged would be something like "link(tag/foo) and field(tag foo)". --K.A.
I can see that this'd work well for 1:1 relationships like next and previous, but I don't think that'd work for pages with more than one tag - as far as I can see,
field
's data model is that each page has no more than one value for each field? Matching different kinds of links has some thoughts about how it could be implemented, though. --sYou have a point there. I'm not sure what would be better: to add the concept of arrays/sets to
field
, or to think of tags as a special case. Problem is, I find tags as they currently exist to be too limiting. I prefer something that can be used for Faceted Tagging http://en.wikipedia.org/wiki/Faceted_classification; that is, things like Author:Fred Nurk, Genre:Historical, Rating:Good, and so on. Of course, that doesn't mean that each tag is limited to only one value, either; just to take the above examples, something might have more than one author, or have multiple genres (such as Historical + Romance).It might be that adding arrays to the
field
plugin is a good way to go: after all, even though field=value is the most common, with the flexibility of things like YAML, one could define all sorts of things. What I'm not so sure about is how to return the values when queried, since some things would be expecting scalars all the time. Ah, perhaps I could use wantarray? Is there a way of checking a HTML::Template template to see if it expecting an array for a particular value? --KathrynAndersen
How about arrays?
In discussion, I outline how there's a problem in getfield displaying array refs when the data is a YAML array. I also propose a patch there so that arrays are join'd with a space separator, which is less than ideal, but at least works for getfield. However, for report, I am not sure it's as good. Should it make two rows for those? How should we parse this? Thanks. -- anarcat