# These should correspond to the ES field names, as opposed to the CCL
# things that zebra uses.
- # TODO let the library define the order using the interface.
my %type_to_label = (
- author => { order => 1, label => 'Authors', },
- itype => { order => 2, label => 'ItemTypes', },
- location => { order => 3, label => 'Location', },
- 'su-geo' => { order => 4, label => 'Places', },
- se => { order => 5, label => 'Series', },
- subject => { order => 6, label => 'Topics', },
+ author => 'Authors',
+ location => 'Location',
+ itype => 'ItemTypes',
+ se => 'Series',
+ subject => 'Topics',
+ 'su-geo' => 'Places',
);
# We also have some special cases, e.g. itypes that need to show the
itype => { map { $_->itemtype => $_->description } @itypes },
location => { map { $_->authorised_value => ( $opac ? ( $_->lib_opac || $_->lib ) : $_->lib ) } @locations },
);
- my @facets;
+ my @res;
$exp_facet //= '';
while ( ( $type, $data ) = each %$es ) {
next if !exists( $type_to_label{$type} );
expand => $type,
expandable => ( $type ne $exp_facet )
&& ( @{ $data->{terms} } > $limit ),
- "type_label_$type_to_label{$type}{label}" => 1,
+ "type_label_$type_to_label{$type}" => 1,
type_link_value => $type,
- order => $type_to_label{$type}{order},
};
$limit = @{ $data->{terms} } if ( $limit > @{ $data->{terms} } );
foreach my $term ( @{ $data->{terms} }[ 0 .. $limit - 1 ] ) {
type_link_value => $type,
};
}
- push @facets, $facet if exists $facet->{facets};
+ push @res, $facet if exists $facet->{facets};
}
-
- @facets = sort { $a->{order} cmp $b->{order} } @facets;
- return \@facets;
+ return \@res;
}
};
}
+# This sorts the facets into alphabetical order
+if ($facets && @$facets) {
+ foreach my $f (@$facets) {
+ $f->{facets} = [ sort { uc($a->{facet_label_value}) cmp uc($b->{facet_label_value}) } @{ $f->{facets} } ];
+ }
+ @$facets = sort {$a->{expand} cmp $b->{expand}} @$facets;
+}
+
# use Data::Dumper; print STDERR "-" x 25, "\n", Dumper($results_hashref);
if ($@ || $error) {
$template->param(query_error => $error.$@);