Für Websites großer Organiationen wie z.B. Universitäten oder Krankenhäuser, reicht die Indizierung einer singulären Domain in der Regel nicht aus, sondern die Suche soll die Ergebnisse nicht nur aus ZMS sondern aus diversen andere Datenquellen gleichzeitig anzeigen Mit dem ZMS-internen ZCatalog stösst man hier an Grenzen. Skalierbare Indexer wie Apache Solr sind dafür besser geeignet. Entsprechend hat sich das Konfigurations-Menu der Suche erweitert.

suche2.png

Konfiguration der Suche: Neben der Auswahl eines Connectors lässt sich bestimmen, welche Attribute für welche Content-Objektklassen (gewichtet) indiziert werden sollen. In Regel reicht eine Volltext-Indizierung der PAGE-Klassen (ZMSDocument, ZMSFolder) über ihr standard_html-Methodenattribut.

Damit man mit fremden Indexern arbeiten kann, ist eine Standard-Schnittstelle nötig, über die ZMS mit den Fremdsystemen kommunizieren kann. Hierfür verwendet ZMS nun den primär den JSON-Standard, d.h. auch mit dem einbautren Indexer ZCatalog wird über JSON kommuniziert. Desweiteren gibt eine Beispiel-Implementieurng für den Solr-Connector. Um die Suchtreffer anzuzeigen, sind in der Drittsicht einige JS-Libs erforderlich, die in der Lage sind, den JSON-Strom per AJAX schön lesbar in die Ergebnis.Page zu implantieren. Auch die Ergebnis-Seite selbst ist anzulegen.Im Detail sind folgende drei Schritte zu erledigen:

1. JS im Master-Template ergänzen

Sofern man nicht ohnehin die ZMS-eigene bootstrap-all.min.js auch für die Drittsicht verwendet, müssen in den Drittsicht-Templates neben query die für die Such-Prozessierung relevanten JS-Libs verfügbar sein. (Tipp: im Sinne der Ladezeit-Optiierung empfiehlt es sich, lediglich das schlanke zmi.js im HTML-HEader zu laden und die drei folgenden Scipts samt getZMILang-Call im Footer aufzurufen.)

# JS-Scripts für die JSON-Prozessierung #

<script type="text/javascript" src="/++resource++zms_/zmi.js"></script>
<script type="text/javascript" charset="UTF-8" src="/++resource++zms_/i18n/ger.js"></script>
<script type="text/javascript" src="/++resource++zms_/zmi.core.js"></script>
<script type="text/javascript" src="/++resource++zms_/ZMS/zmi_body_content_search.js"></script>
<script type="text/javascript">
		function getZMILang() {
			return 'ger';
		}
</script>

2. Kleines Suchfeld im Master-Template ergänzen

Ein kleines Suchfeld auf jeder HTML-Seite wird über das Mastertemplate (standard_html) eingebunden. (Anm: Die Form-Action holt sich hier im Beispiel die Resultat-URL über eine Mapping-Tabelle; selbstverständlich lässt sich die Ziel-Url auch fest einsetzen oder man lässt das Master-Template entsprechend auf URL-Parameter reagieren.)

# Einfache Such-Form #

<form method="get" id="searchform" 
	tal:attributes="action python:zmscontext.objMap(context,request)['suche'].getHref2IndexHtml(request)">
	<input name="search" id="search" class="form-control" type="text" placeholder="Suche"
		title="Geben Sie bitte hier Ihren Suchbegriff ein." />
</form>

3. Code für die Trefferanzeige, z.B. als Textabschnitt

Für die Trefferanzeige kann man in ZMS ein Dokument anlegen, das einen Textanschnitt (im HTML-Format) mit folgendem Code-Snippt zur Aufbereitung des JSON-Response enthält

suche4.png

Das ZMS-Dokument für die Anzeige der Suchtreffer besteht aus einem Textabschnitt mit dem Tempate-Code für die Darstellung des Suchformulars und der Container-Elemente für die Ergebnistreffer

# Anzeige des Resultat-Stroms (JSON) #

<form class="search" method="get">

	<tal:block tal:condition="python:request.get('searchform',True)">
	<input tal:condition="python:request.get('searchform')" type="hidden" name="searchform" tal:attributes="value python:request.get('searchform')" />
	<input tal:condition="python:request.get('lang')" type="hidden" name="lang" tal:attributes="value python:request.get('lang')" />
	<input tal:condition="python:request.get('preview')" type="hidden" name="preview" tal:attributes="value python:request.get('preview')" />
	<legend tal:content="python:here.getZMILangStr('SEARCH_HEADER')">Search header</legend>
	<div class="form-group">
		<div class="col-md-12">
			<div class="input-group">
				<tal:block tal:content="structure python:here.getTextInput(fmName='searchform',elName='search',value=request.get('search',''))">the value</tal:block>
				<span class="input-group-btn">
			<button type="submit" class="btn btn-primary">
				<tal:block tal:content="structure python:here.zmi_icon(name='icon-search')"></tal:block>
			</button>
				</span>
			</div>
		</div>
	</div><!-- .form-group -->
	</tal:block>

<div id="search_results" class="form-group" style="display:none">
	<div class="col-md-12">
		<h4 tal:content="python:here.getZMILangStr('SEARCH_HEADERRESULT')">Result</h4>
		<div class="header row">
			<div class="col-md-12">
				<span class="small-head">
					<span class="glyphicon glyphicon-refresh" alt="Loading..."></span>
					<tal:block tal:content="python:here.getZMILangStr('MSG_LOADING')">loading</tal:block>
				</span>
			</div>
		</div><!-- .header.row -->
		<div class="line row"></div><!-- .row -->
			<div class="pull-right">
				<ul class="pagination"></ul>
			</div>
	</div>
</div>

</form>

Erstellt von: Dr. F. Hoffmann , SNTL Publishing GmbH & Co KG , erstellt am:  07.04.2016 , zuletzt geändert: 07.04.2016