# Metadata collection that needs to happen during the scan pass.
if ($key eq 'title') {
$pagestate{$page}{meta}{title}=HTML::Entities::encode_numeric($value);
+ if (exists $params{sort}) {
+ $pagestate{$page}{meta}{titlesort}=$params{sort};
+ }
+ else {
+ $pagestate{$page}{meta}{titlesort}=$value;
+ }
return "";
}
elsif ($key eq 'description') {
}
}
-sub title {
- my $title = $pagestate{$_[0]}{meta}{title};
+sub titlesort {
+ my $key = $pagestate{$_[0]}{meta}{titlesort};
- if (defined $title) {
- return $title;
+ if (defined $key) {
+ return $key;
}
return pagetitle(IkiWiki::basename($_[0]));
}
sub sort_meta_title {
- return title($_[0]) cmp title($_[1]);
+ return titlesort($_[0]) cmp titlesort($_[1]);
}
sub match {
be set to a true value in the template; this can be used to format things
differently in this case.
+ An optional `sort` parameter will be used preferentially when
+ [[ikiwiki/pagespec/sorting]] by `meta_title`:
+
+ \[[!meta title="The Beatles" sort="Beatles, The"]]
+
+ \[[!meta title="David Bowie" sort="Bowie, David"]]
+
* license
Specifies a license for the page, for example, "GPL". Can contain
* `age` - List pages from the most recently created to the oldest.
* `mtime` - List pages with the most recently modified first.
-* `title` - Order by title.
+* `title` - Order by title (page name).
* `title_natural` - Only available if [[!cpan Sort::Naturally]] is
installed. Orders by title, but numbers in the title are treated
as such, ("1 2 9 10 20" instead of "1 10 2 20 9")
[[!if test="enabled(meta)" then="""
-* `meta_title` - Order by the full title set by the `\[[!meta title="foo"]]`
- [[ikiwiki/directive]].
+* `meta_title` - Order according to the `\[[!meta title="foo" sort="bar"]]`
+ or `\[[!meta title="foo"]]` [[ikiwiki/directive]], or the page name if no
+ full title was set.
"""]]
Plugins can add additional sort orders, so more might be available on this