Webdesign1 Beiträge · 1896 Klicks · 1 Teilnehmer
Tagwolke als AddOn für Koobi
- #1Ein anderer Koobi-User hat mich zu der Idee angestiftet, anhand der Schlüsselwörter, die für jede News vergeben werden können, eine sogenannte Tag-Cloud (Wortwolke) zu schreiben, die fabelhaft zum Stöbern animiert.
Ich habe das vorerst nur für News umgesetzt, man kann das natürlich auch auf Artikel, Galerien und Produkte ausdehnen. Außerdem wird die Größe der Tags nicht anhand der Häufigkeit bestimmt, sondern durch Zufall. Beim Klick auf einen Tag werden per Suchabfrage alle News mit dem angegebenen Schlüsselwort ausgegeben.
Funktionsdateien:
system/news.php - Hier muss eine Datenbank-Abfrage für die "matchword" genannten Schlüsselwörter eingebaut werden.
system/query.php - Die Suchabfrage muss erweitert werden, damit per URL-Parameter auch nach Schlüsselwörtern gesucht wird.
Template-Dateien:
templates/_templatename_/news/news.tpl - Das Template muss um die Platzhalter für die Ausgabe der Wortwolke erweitert werden.
templates/_templatename_/search/query.tpl - Auch für die Schlüsselwort-basierte Ausgabe brauchen wir neue Platzhalter und müssen das Template entsprechend ändern.
Bevor es losgeht, noch ein Hinweis. Die können weggelassen werden, sie dienen nur hier im Forum dazu, dass der Code farbig markiert wird.
system/news.php (Zeile ~434) suchen nach:
<?php // Dürfen News kommentiert werden? -> Ende $tmpl->assign("numcomm", $numcomm); $tmpl->assign("theme", $THEME); $tmpl->assign("content", parsetrue("container/".container("news"), "<a class="boxnavi" href="index.php?p=newsarchive&categ=all&area=$area">$lang[newspage]</a>" . SEPARATOR . $header_nav , $tmpl->fetch("news/news.tpl"))); } ?>
darüber einfügen:
<? // =============================================================== // <<-- FUER TAGWOLKE -->> // =============================================================== $mw = "SELECT DISTINCT // Mit Distinct stellt man sicher, dass keine doppelten Matchwords vorkommen. newsid, title, matchword, time_start, hits FROM ".PREFIX."_news ORDER BY RAND(NOW()) LIMIT 0,15"; // Die Funktion ORDER BY RAND(NOW()) sorgt dafür, dass 15 Matchwords zufällig ausgegeben werden. $newsqry = mysql_query($mw) OR die(mysql_error()); $tagwolke = array(); // leeres Arrayelement erzeugen while($row = mysql_fetch_assoc($newsqry)) { $tagwolke[] = $row; } $tmpl->assign('matches', $tagwolke); // Brauchen wir später fürs Template als Platzhalter. ?>
system/query.php (Zeile ~539) suchen nach:
<? //============================================ // Artikel //============================================ if($_GET['search_articles']==1){ ?>
darüber einfügen:
<? // =============================================================== // <<-- FUER TAGWOLKE -->> // =============================================================== if($_GET['search_matchword']==1) { $mw = "SELECT DISTINCT newsid, title, text, matchword, area_id, time_start, hits FROM ".PREFIX."_news WHERE matchword='$q' ORDER BY time_start DESC"; // News mit dem per URL-Parameter übergebenen Schlüsselwort aus der Datenbank ziehen und abwärts nach dem Datum sortieren $newsqry = mysql_query($mw) OR die(mysql_error()); $tagwolke = array(); // leeres Arrayelement erzeugen while($row = mysql_fetch_assoc($newsqry)) { $tagwolke[] = $row; } $tmpl->assign('matches', $tagwolke); // Brauchen wir später als Platzhalter im Suchausgabe-Template } ?>
So, nun gehts an die Templates. Verständlicherweise kann ich hier keine genaue Anleitung angeben, da jeder sein Template anders gestaltet hat.
templates/_templatename_/news/news.tpl
<? <div style="line-hight: 17px; text-align: center; "> {* Festlegen der minimalen und maximalen Schriftgröße *} {assign var=MinFontSize value=9} {assign var=MaxFontSize value=22} {foreach from=$matches item=match} <span style="font-size:{$MinFontSize|rand:$MaxFontSize}px"> <a href="index.php?p=query&area=1&search_matchword=1&q={$match.matchword}&details=1">{$match.matchword}</a> </span> {/foreach} </div> ?>
templates/_templatename_/search/query.tpl (am besten eine Zeile vor {strip} einfügen.
<? {* MATCHITEMS *} {if $smarty.request.search_matchword=='1'} <div class="box_inner"> <div class="box_innerhead">{$lang.found_news} mit dem Schlüsselwort »{$q}«</div> {foreach from=$matches item=match} <div class="{cycle name='ne' values='srow_second,srow_first'}"> <div class="box_padding"> <br /> <div style="border-bottom: 1px solid #999;"> <a class="title_result_search" href="index.php?area={$match.area_id}&p=news&newsid={$match.newsid}">{$match.title}</a> </div> <div style="text-align: right; font-style: italic"> <i>News von {$match.time_start|date_format:"%A, %d.%B %Y"}</i> </div> <br /> <div style="padding-top:2px;padding-bottom:8px; line-height: 17px;"> {$match.text|truncate:350|strip_tags} <br /> <div style="text-align: right;"> <a href="index.php?area={$match.area_id}&p=news&newsid={$match.newsid}">weiterlesen... </a> </div> <br /> </div> </div> </div> {/foreach} </div> {if $pages} <br /> {$pages} <br /> {/if} {/if} ?>
So das müsste es gewesen sein. Falls Fragen auftauchen, einfach hier melden. Ich werde derweil nochmal schauen, ob man die Tag-Suche nicht noch per Mod_Rewrite vereinfachen kann. ploynt.de/Schlüsselwort,tagsuche,1.htm wäre praktisch und für die Besucher einfach nachzuvollziehen.Kann man so stehen lassen.
Anmelden, um mitzureden.
