{% set doc = hit._source %}
<li class="hit">
- <a href="{{doc.url}}">{{doc.title}}</a>
- {% if doc.author.name %}
- by <a href="{{doc.author.url}}">{{doc.author.name}}</a>
- {% endif %}
- <br/><tt>{{doc.extra.cleanUrl}}</tt>
- {% if doc.modate %}
- <br/>Changed: {{doc.extra.day}}
- {% endif %}
+ <span class="title">
+ <a href="{{doc.url}}">{{doc.title}}</a>
+ {% if doc.author.name %}
+ by
+ <em>
+ {% if doc.author.url %}
+ <a href="{{doc.author.url}}">{{doc.author.name}}</a>
+ {% else %}
+ {{doc.author.name}}
+ {% endif %}
+ </em>
+ {% endif %}
+ </span>
+ <br/><tt class="url" title="{{doc.extra.cleanUrl}}">{{ellipsis(doc.extra.cleanUrl, 60)}}</tt>
+ <span class="extract">
+ <br/>
+ {% if doc.modate %}
+ <span class="date">{{doc.extra.day|date("Y-m-d")}}</span>
+ {% endif %}
+ </span>
</li>
--- /dev/null
+{% if attribute(activeFilters, type) %}
+ <b>{{title}}</b>
+ <ul class="nav nav-pills">
+ <li class="active">
+ <a href="{{attribute(activeFilters, type).removeUrl}}">
+ {{activeFilters[type].label|default('unknown')}} ❌
+ </a>
+ </li>
+ </ul>
+{% elseif attribute(aggregations, type).buckets|length > 1 %}
+<b>{{title}}</b>
+<ul class="nav nav-pills">
+{% for bucket in attribute(aggregations, type).buckets|slice(0, 10) %}
+ <li>
+ <a href="{{bucket.url}}">
+ {{bucket.key|default('unknown')}} ({{bucket.doc_count}})
+ </a>
+ </li>
+{% endfor %}
+</ul>
+{% endif %}
<p>
Filter results by:
</p>
-{% if aggregations.tags.buckets|length > 1 %}
-<b>Tag</b>
-<ul class="nav nav-pills">
-{% for bucket in aggregations.tags.buckets|slice(0, 10) %}
- <li>
- <a href="{{bucket.url}}">{{bucket.key}} ({{bucket.doc_count}})</a>
- </li>
-{% endfor %}
-</ul>
-{% endif %}
-
-{% if aggregations.domain.buckets|length > 1 %}
-<!-- FIXME: negate domain -->
-<b>Domain</b>
-<ul class="nav nav-pills">
-{% for bucket in aggregations.domain.buckets|slice(0, 10) %}
- <li>
- <a href="{{bucket.url}}">{{bucket.key}} ({{bucket.doc_count}})</a>
- </li>
-{% endfor %}
-</ul>
-{% endif %}
-
-{% if aggregations.language.buckets|length > 1 %}
-<b>Language</b>
-<ul class="nav nav-pills">
-{% for bucket in aggregations.language.buckets|slice(0, 10) %}
- <li>
- <a href="{{bucket.url}}">{{bucket.key}} ({{bucket.doc_count}})</a>
- </li>
-{% endfor %}
-</ul>
-{% endif %}
-
-{% if aggregations.type.buckets|length > 1 %}
-<b>Type</b>
-<ul class="nav nav-pills">
-{% for bucket in aggregations.type.buckets|slice(0, 10) %}
- <li>
- <a href="{{bucket.url}}">{{bucket.key}} ({{bucket.doc_count}})</a>
- </li>
-{% endfor %}
-</ul>
-{% endif %}
-
+{% include 'search/sidebar-filter.htm' with {'type': 'tags', 'title': 'Tag'} %}
+{% include 'search/sidebar-filter.htm' with {'type': 'domain', 'title': 'Domain'} %}
+{% include 'search/sidebar-filter.htm' with {'type': 'language', 'title': 'Language'} %}
+{% include 'search/sidebar-filter.htm' with {'type': 'type', 'title': 'Type'} %}
}
.hit {
margin-bottom: 2ex;
+}
+.hit .title {
+ font-size: 120%;
+}
+.hit .url {
+ color: #070;
+}
+.hit .extract {
+ font-size: 95%;
+}
+.hit .date {
+ color: #666;
}
\ No newline at end of file
}
$perPage = 10;//$GLOBALS['phinde']['perPage'];
+$baseLink = '?q=' . urlencode($query);
+
$filters = array();
if (isset($_GET['filter'])) {
$allowedFilter = array('domain', 'language', 'tags', 'term');
}
}
}
+$activeFilters = array();
+foreach ($filters as $type => $value) {
+ $activeFilters[$type] = array(
+ 'label' => $value,
+ 'removeUrl' => buildLink($baseLink, $filters, $type, null),
+ );
+}
+
+function buildLink($baseLink, $filters, $addFilterType, $addFilterValue)
+{
+ if ($addFilterValue === null) {
+ if (array_key_exists($addFilterType, $filters)) {
+ unset($filters[$addFilterType]);
+ }
+ } else {
+ $filters[$addFilterType] = $addFilterValue;
+ }
+
+ $params = http_build_query(array('filter' => $filters));
+ if (strlen($params)) {
+ return $baseLink . '&' . $params;
+ }
+ return $baseLink;
+}
$es = new Elasticsearch($GLOBALS['phinde']['elasticsearch']);
$res = $es->search($query, $filters, $page, $perPage);
$pager = new Html_Pager(
$res->hits->total, $perPage, $page + 1,
- '?q=' . $query
+ $baseLink
);
foreach ($res->hits->hits as &$hit) {
}
}
-$baseLink = '?q=' . urlencode($query);
foreach ($res->aggregations as $key => &$aggregation) {
foreach ($aggregation->buckets as &$bucket) {
- $bucket->url = $baseLink
- . '&filter[' . urlencode($key) . ']=' . urlencode($bucket->key);
+ $bucket->url = buildLink($baseLink, $filters, $key, $bucket->key);
}
}
//var_dump($res->aggregations);
'hitcount' => $res->hits->total,
'hits' => $res->hits->hits,
'aggregations' => $res->aggregations,
+ 'activeFilters' => $activeFilters,
'pager' => $pager
)
);
);
$GLOBALS['twig']->addExtension(new \Twig_Extension_Debug());
+$twig->addFunction('ellipsis', new \Twig_Function_Function('\phinde\ellipsis'));
+function ellipsis($text, $maxlength)
+{
+ if (strlen($text) > $maxlength) {
+ $text = substr($text, 0, $maxlength - 1) . '…';
+ }
+ return $text;
+}
function render($tplname, $vars = array(), $return = false)
{