• twitter image
  • facebook image
  • youtube image
  • linkedin image
Language: CMS Made Simple Czech CMS Made Simple France CMS Made Simple Spain CMS Made Simple Hungary CMS Made Simple Russia CMS Made Simple Netherlands

All times are UTC




Post new topic Reply to topic  [ 1 post ] 
Author Message
 Post subject: Mit Content_Dump eine interne Verlinkung auf Tag-Basis aufbauen
PostPosted: Sat Dec 12, 2009 12:33 am 
Hallo zusammen,

wollte letztens bei einem Projekt eine Tag basierte Verlinkung innerhalb einer Site umsetzen. Der Content ist als normaler Seitencontent ohne Module angelegt worden. Von der Anzahl sind es recht viele Artikel und ich wollte die Artikel thematisch verknüpfen. Sprich, wenn ein Artikel den Tag "world" hat, soll dieser Tag auf eine Seite verlinken, auf der alle Artikel mit dem Tag "world" zu finden sind.

Da es hier im Forum gerade ein ähnliches Problem auf News-Modul Basis gibt, wollte ich mal meine Lösung auf regulärer Content-Basis vorstellen. Die Code-Beispiele sind sehr runtergedampft auf das Wesentliche. Bei Fragen einfach unten posten.

Hierfür habe ich Content_Dump mit einer Prise Smarty und htaccess verwendet. Allerdings muss man hierfür den Content-Props-Table in der DB um einen Fulltext-Index erweitern. Das ist per se nicht weiter wild, man sollte aber wissen was man da tut ;). Ich glaube es müsste auch ohne gehen, performanter ist es aber mit Index

Wenn man dies dann getan hast, können mit CD Beiträge nach bestimmten Inhalten gefiltert werden. Allerdings kann CD nur auf den regulären Seitencontent zugreifen. Ein Zugriff auf andere Module ist nicht möglich. Solange man nur kurze Content-Blöcke mit wenig Inhalt (z.B. Tags) durchsuchst, ist das noch OK von der Geschwindigkeit (hängt natürlich auch von der Konfiguration des Servers ab), als richtige Suche im ganzen Content würde ich dann doch lieber ne richtige Suche verwenden.

Nehmen wir an, die tags pflege ich in einem eigenen Content-Block:

{content block="tags" wysiwyg="false" oneline="true" assign="tags"}

Dabei ist es egal ob "world" als einzelnes Wort in diesem Block steht oder ein Wort von mehreren ist. So kann man z.B. mehrere Tags einem Artikel zuordnen.

Aufbau der Tags als Links:

Mit ein wenig smarty drum herum,wird die Ausgabe des Blocks gleich automatisch verlinkt. Dazu brauchen wir aber noch ein kleines UDT zum erzeugen der Tag-Links:

Name: tag_maker
Code:

if ($params['content_tags'] != '') {
  // explode at space
  $links = explode(" ",$params['content_tags']);
  // count elements
  $counter = count($links)-1;
   // walk through all elements
   for ($i=0; $i<=$counter; $i++) {
     echo = "<a href='http://example.com/tags/$links[$i]/'>$links[$i]</a> ";
   }

} else {
   $echo = 'this article has no tags';
}



Der Einbau im Template sähe dann so aus:

Template
Code:

{content block="tags" wysiwyg="false" oneline="true" assign="tags"}

{tag_maker content_tags=$tags}



heraus kommt dann eine Liste mit Links - damit erzeugt man gleich ne "vertaggte" Liste mit Begriffen zu jedem Artikel. Nehmen wir an es sind die Begriffe "lorem ipsum hello world" als String in der Content-Box gegeben. Dann erhält man folgende Links zurück

erzeugte URL
Code:
http://example.com/tags/lorem
http://example.com/tags/ipsum
http://example.com/tags/hello
http://example.com/tags/world


Übersichtsseite:

Um jetzt ne schicke Übersichtsseite zu erzeugen, auf der alle Artikel mit einem bestimmten Tag angezeigt werden, muss die URL wieder aufgelöst werden, damit wir den Begriff als Parameter übergeben können:

htaccess:
Code:

RewriteCond %{REQUEST_URI} ^/tags
RewriteRule ^([^/]*)/([^/]*) index.php?page=$1&tag=$2 [QSA,L]



Wenn auf dem Webserver jetzt die URL http://example.com/tags/hello aufgerufen wird, wird sie als http://example.com/index.php?page=tags&tag=hello verarbeitet.

Jetzt wird's spannend. Um die Übersicht zu erzeugen, müssen wir diesen Parameter ("tag=") jetzt annehmen. Das geht recht simple mit etwas Smarty (vorher aber noch eine Seite mit dem Alias "tags" anlegen - Smarty hier rein):

Smarty für Get-Parameter
Code:

{if isset($smarty.get.tag)}
   {assign var=tag value=$smarty.get.tag}
{else}
   {assign var=tag value='default'}
{/if}



Und den mit Smarty abgegriffenen Wert übergibt man jetzt an Content_Dump.

{content_dump filter=$tag blockname="tags"}

;D

Alles klar?

Zusammenfassung

1) UDT erstellen damit man die interne Verlinkung erzeugen kann

siehe oben

2) UDT im Artikel-Template einbauen

Code:

<html>
  ...
  <h1>{title}</h1>
    <div id="tags">
      This article has the following tags:
      {content block="tags" wysiwyg="false" oneline="true" assign="tags"}
      {tag_maker content_tags=$tags}
    </div>

    <div id="mainContent">
      {content}
    </div>
  ...
</html>



3) htaccess anpassen damit die URLs korrekt aufgelöst werden

siehe oben

4) Übersichts template erstellen

Code:

<html>
  ...

{if isset($smarty.get.tag)}
   {assign var=tag value=$smarty.get.tag}
{else}
   {assign var=tag value='default'}
{/if}

  <h1>View articles being tagged "{$tag}"</h1>

{content_dump block_name="tags" filter=$tag}

<ul>
{foreach from=$dump item=item}
   <li>{cms_selflink page=$item->content->alias}</li>
{/foreach}
</ul>
  ...
</html>



Je nach Lust und Laune kann man dann dieses Rahmengerüst den eigenen Wünschen anpassen.

Beste Grüße
Nils


Top
  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 1 post ] 

All times are UTC


Who is online

Users browsing this forum: No registered users


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Arvixe - A CMSMS Partner