Het cms is voorzien van een eigen zoekmachine die voor elke website kan worden gebruikt. Bij het publiceren maakt het cms de nodige zoekformulieren aan en maakt een database van alle woorden waarop gezocht kan worden incl. de pagina's waar de woorden op staan. Dit zorgt voor een snel zoekresultaat.
De zoekmachine bestaat in principe uit drie pagina's, namelijk het standaard zoekpagina, de resultaatpagina en de pagina als er geen zoekresultaten zijn. Deze drie pagina's kunnen niet direct onderscheiden worden, maar tijdens het publiceren is de stijl-variabele is_search beschikbaar waarmee aparte opmaak geregeld kan worden.
De hyperlink naar de zoekmachine is cgi/search.cgi?site=mijnwebsite. In het cms werkt deze zoekmachine niet, maar in het cms is wel een soortgelijke zoekmachine voor redacteuren aanwezig. In de html kunnen beide zoekmachines als volgt worden opgeroepen:
... <a <!-- TMPL_IF NAME="edit" -->href="#" onclick="parent.xcmsSearch();return false;"<!-- TMPL_ELSE -->href="/cgi/search.cgi?site=<!-- TMPL_VAR NAME="site" -->"<!-- /TMPL_IF -->>Zoek</a> ...
Het zoekformulier op alle zoekpagina's is standaard en toont afhankelijk van de beschikbaarheid van de modules ook de mogelijk om gericht te zoeken in de nieuwsitems en nieuwsbrieven. Indien het gewenst is ook specifiek te kunnen zoeken in andere modules als forum, agenda, etc. dan kan dit worden gerealiseerd door een eigen zoekformulier. Dit zoekformulier kan met behulp van javascript het standaard zoekformulier vervangen:
... <!-- TMPL_IF NAME="is_search" --> <!-- Het eigen zoekformulier dat (mits op een zoekpagina) ergens in de html pagina wordt gezet. Ipv de standaard radiobuttons om te zoeken in een module wordt een SELECT-box getoond. Aan het eind staat de javascript dat het standaard formulier gaat vervangen. --> <form id="sq2" action="cgi/search.cgi" method="post"> <p class="searchquery"> <input type="text" name="q" id="q" /><input class="button" type="submit" value="Zoek" /><br> <label for="mode">Zoek op</label><select name="mode" id="mode"> <option value="all">alle</option> <option value="any">één van de</option> </select> <label for="include"> woorden in </label><select name="include" id="include"> <option value="">Website</option> <option value="/download/">Downloads</option> <option value="forum.cgi">Forum</option> <option value="/newsletters/">Nieuwsbrieven</option> </select> <input type="hidden" name="site" value="<!-- TMPL_VAR NAME="site" -->" /> </p> </form> <script type="text/javascript"> // bewaar de 'vorige' ingestelde waarde van 'Zoeken in'... var si = document.getElementById("si").value; // vervang de inhoud van het standaard zoekformulier met ons formulier document.getElementById("sq").innerHTML = document.getElementById("sq2").innerHTML; // zet de net bewaarde waarde voor 'Zoeken in...' document.getElementById("include").value = si; // toon het zoekformulier document.getElementById("sq").style.display = "block"; </script> <!-- /TMPL_IF --> ...
Om te voorkomen dat het standaard zoekformulier even zichtbaar is voor het wordt vervangen:
/* beide zoekformulieren niet tonen, de javascript zal na het vervangen het 'standaard' formulier tonen */ #sq { /* standaard formulier */ display: none; } #sq2 { /* ons formulier */ display: none; }
De standaard zoekmachine kan de bezoeker een lijst van mogelijke zoekwoorden tonen op basis van een gedeeltelijk ingevoerd zoekwoord. Als minimaal drie karakters zijn ingevoerd wordt een keuze getoond van alle mogelijk zoekwoorden incl. het aantal resultaten (zie ook Google Suggest.)
Deze techniek kan ook worden gebruikt om bijvoorbeeld een tag cloud te maken: elke keer als een bezoeker een karakter in tikt kunnen de bijbehorende zoekresultaten (=zoekwoorden) dynamisch worden getoond waarbij elk woord een grootte heeft afhankelijk van het aantal zoekresultaten.
Op verzoek kan ook een eenvoudige statistiek van zoekwoorden beschikbaar gemaakt worden, bijvoorbeeld om een lijst van meest gebruikte zoekwoorden te tonen.
De zoekmachine zal alle woorden die het vindt op een pagina indexeren. Dit is niet wenselijk voor elementen die op elke pagina voorkomen, bijvoorbeeld het menu of een footer. Als een footer bijvoorbeeld het woord 'project' bevat, dan zal de bezoeker die zoekt op dat woord alle pagina's als resultaat terug krijgen.
Om te voorkomen dat de zoekmachine bepaalde elementen indexeert kan de 'tag' <!--no_index--> (zonder spaties na of voor de --!) worden gebruikt. Het einde wordt gemarkeerd door de tag <!--/no_index-->:
... <!--no_index--> <!-- sla de complete header met bijv. menu en sitewide menu over... --> <div id="header"> ... </div> <!--/no_index-->
NB: Via de pagina-instellingen kan een pagina ook compleet worden uitgesloten van de zoekresultaten.
Soms kan het ook wenselijk zijn dat de zoekmachine bepaalde hyperlinks niet gaat volgen. In dat geval kan de 'tag' <!--no_follow--> worden gebruikt. Het einde wordt gemarkeerd door de tag <!--/no_follow-->:
... <!--no_follow--> <!-- skip links in de footer, de zoekmachine gaat niet naar die (pagina's) --> <div id="footer"> ... </div> <!--/no_follow--> ...
NB: <!--no_index--> en <!--no_follow--> hebben geen effect op publieke zoekmachines als Google of Yahoo, etc.