Seite 1 von 1

Artikel mit kompletten Inhalt untereinander ausgeben

Verfasst: Mo 10. Okt 2005, 23:18
von DanielK
Hallo,

ich bin ganz neu bei Contenido.
Ich bin echt begeistert, was dieses CMS alles kann, obwohl ich erst seit ein paar Tagen damit arbeite.

Die Aufteilung Layout / Module / Templates habe ich auch schon gut im Griff. Ich erstelle ehrenamtlich die Website unsere Ortsgemeinde. Nun gibt es auf dieser eine Liste mit allen Vereinen.
Die Seite für jeden Verein ist wie folgt aufgebaut:
(Code der Module in den entsprechenden Containern)

CMS_HTMLHEAD[1] = Vereinsname
CMS_HTML[1] = Vereinsbeschreibung (Anschrift / Telnr.)
if ("CMS_LINKDESCR[2]" != "") { echo "<a href=CMS_LINK[2] target='_new'> E-Mailkontakt: CMS_LINKDESCR[2]</a>"; } = Emailkontakt
if ("CMS_LINK[1]" != "") { echo "<a href=CMS_LINK[1] target='_new'>CMS_LINKDESCR[1]</a>"; } = Internetseite

So nun würde ich gerne eine Vereinsliste erstellen, auf der alle Vereine in Alphabetischer Reihenfolge ausgegeben werden, so wie es auf der alten Seite der Fall war.

Bsp:

SPD Ortsverein ORT,
Vorsitzender: Name, Straße,
Telefon: 0/0
E-Mailkontakt: Name
http://www.spd-ort.de/

Squaredance-Club
Vorsitzende: Name, Schriftführer: Name,
Telefon: 0/0 oder 0/0
E-Mailkontakt: Name

Wie kann ich das am Besten lösen?
Ich muss sicher ein Modul erstellen. Gibt es eine Funktion welche mir alle Artikel (=Vereine) ausgibt, die ich dann per PHP-Schleife durchlaufen kann? In der Kategorie Vereine befindet sich jedoch auch der Startartikel, welcher die Vereinsliste selbst ist, diesen müsste ich dann jedoch von diesem Aufruf in der Schleife ausschließen können?!

Ich hoffe Ihr könnte mir weiterhelfen.

Danke!

MfG
Daniel

Verfasst: Di 11. Okt 2005, 07:09
von Halchteranerin
Hallo Daniel,

such mal nach "Artikelliste". Es gibt garantiert irgendwo eine, die auch Text aus dem Artikel mit ausgibt. Du kannst dann die Textlaenge so einstellen, dass der ganze Artikel angezeigt wird, weil deine Artikel anscheinend nicht so lang sind.

Gruss
Christa

Verfasst: Di 11. Okt 2005, 10:36
von HerrB
Einen Anfang findest Du hier: http://www.contenido.org/forum/viewtopi ... 8565#48565

Thread ganz durchlesen. Mit den Änderungen auf der zweiten Seite kannst Du neben dem "Haupt-Topic" (wie auch immer Du es definierst) auch ein weiteres Feld ausgeben.

Daraus sollte das Prinzip ersichtlich sein. Im weiteren Verlauf wirst Du die internen IDs benötigen. Ändere daher (alles nach Berücksichtigung von Seite 2):

Code: Alles auswählen

      if ($db->num_rows() > 0) { 
         $db2 = new DB_Contenido; 
         $query2 =  "SELECT CONTENT.value AS headline FROM "; 
in

Code: Alles auswählen

      if ($db->num_rows() > 0) { 
         $db2 = new DB_Contenido; 
         $query2 =  "SELECT CONTENT.value AS headline, CONTENT.typeid AS typeid, CONTENT.idtype AS idtype FROM "; 
Damit Du alle gewünschen Felder ermitteln kannst, musst Du diese Stelle:

Code: Alles auswählen

         // Container-ID 
         $query2 .= "AND CONTENT.typeid = '<C-ID2>' "; 

         // Content-Type 
         $query2 .= "AND CONTENT.idtype = '<T-ID2>' "; 
entsprechend anpassen. Das müsste dann so aussehen:

Code: Alles auswählen

         $query2 .= "AND ((CONTENT.typeid = '<C-ID2>'  AND CONTENT.idtype = '<T-ID2>')"; 
         $query2 .= "OR    (CONTENT.typeid = '<C-ID3>'  AND CONTENT.idtype = '<T-ID3>')"; 
         $query2 .= "OR    (CONTENT.typeid = '<C-ID4>'  AND CONTENT.idtype = '<T-ID4>'))";
Man beachte, dass es sich um AND ( (Bedingung1 AND Bedingung2) OR (...) OR (...) ) handelt - öffnende und schließende Klammern nicht übersehen. Was C-ID und T-ID ist, sollte aus Seite 2 ersichtlich sein.

Bei dem Ergebnis besteht das Problem, dass Du a) nicht weisst, ob der Subtyp überhaupt vorhanden bzw. gefüllt ist und b) in welcher Reihenfolge die Daten kommen. Daher musst Du zwischenpuffern:

Statt:

Code: Alles auswählen

$db2->query($query2 . "AND ARTLANG.idart = '".$articleID."'"); 
            if ($db2->next_record()) { 
               $subheadline = urldecode($db2->f("headline")); 
               $subheadline = strip_tags($subheadline); 
               if (strlen($subheadline) > $maxChar) { 
                  $subheadline = substr($subheadline, 0, $maxChar); 
                  $subheadline .= '..'; 
               } 
            } 
nimmst Du sowas wie:

Code: Alles auswählen

$db2->query($query2 . "AND ARTLANG.idart = '".$articleID."'");
            unset($mydata);
            $mydata = array("Description" => "&nbsp;", "EMail" => "&nbsp;", "Link" => "&nbsp;");
            while ($db2->next_record()) {
               $subheadline = urldecode($db2->f("headline")); 
               $subheadline = strip_tags($subheadline);
               if ($db2->f("typeid") == "<C-ID2 - muss wieder ersetzt werden!> AND $db2->f("idtype") == "<T-ID2 - muss wieder ersetzt werden!>") {
                  $mydata["Description"] = $subheadline;
               } else if ($db2->f("typeid") == "<C-ID3 - muss wieder ersetzt werden!> AND $db2->f("idtype") == "<T-ID3 - muss wieder ersetzt werden!>") {
                  $mydata["EMail"] = $subheadline;
               } usw.
            }
Im nachfolgenden Code stehen dann in $mydata die Daten zur Verfügung (oder eben &nbsp;) und können ausgegeben werden.

Gruß
HerrB

P.S.: Ungetestet, zunächst kein Support. Kann noch Fehler enthalten. Erst mal selber gucken...

Verfasst: Di 11. Okt 2005, 18:21
von DanielK
Hallo!

vielen Dank für die Mühe!
Ich habe gestern Nacht noch ein wenig gesucht und bin auf die Funktion "ArticleCollection ($options)" gestoßen.
Damit habe ich es jetzt gelöst.
Dazu habe ich hier im Forum ein Modul gefunden, welches diese Funktion benutzt. Ich muss sagen, dass das sehr gut funktioniert.
Schade, dass ich nicht schneller auf folgende Implementierung gestoßen bin:
http://www.contenido.org/forum/viewtopi ... collection

Mit dieser Funktion kann man sich die ganzen MySQL Abfragen sparen.
Leider gibt es im Admin Handbuch auch keinen Verweis auf vorgefertigte Funktionen. Vllt wäre das mal anzudenken, wenigstens solche Grundfunktionen mit in die Admin-Doku aufzunehmen.

MfG
Daniel

Verfasst: Di 11. Okt 2005, 21:54
von silicone
Kannst du den Code posten?
ürde mich auch sehr interessieren ;-)

Verfasst: Do 24. Aug 2006, 15:24
von smart
Mich auch!

Verfasst: Do 24. Aug 2006, 15:28
von i-fekt
Öhm, schau mal aufs Datum... :roll:

Verfasst: Do 24. Aug 2006, 15:57
von smart