Seite 1 von 1

w3concepts Artikelliste mit Kategorienamen als Unterteilung

Verfasst: Fr 22. Jul 2005, 17:02
von MyAccount
Hallo,

versuche mich gerade an einem Modul-Mix aus Hauptnavigation und w3concept.alist*. Habe auch ein Posting http://contenido.org/forum/viewtopic.php?t=8659 gefunden, was in etwa in diese Richtung geht.

Da ich hier zu keinem brauchbaren Ergebnis komme, bin ich zu dem Schluss gekommen, dass dieser Ansatz falsch ist. Das Hauptnavigations-Modul im Zusammenhang mit der Funktion catIsChildOf() bricht die ganze Sache im Ansatz schon ab, da richtigerweise keine Überkategorie gefunden wird.

HAUPTNAVI
SERVICENAVI

NEWSORDNER
POLITIK
WIRTSCHAFT
...


Eigentlich möchte ich, dass alle Artikel die unter Politik und Wirtschaft stehen aufgelistet werden. Und zwar mit der jeweiligen Kategoriebezeichnung als Überschrift und nach Kategorienamen sortiert. Letzters stellt kein großes Problem dar.

Meine Frage ist nun, ob es überhaupt Sinn macht, mit dem Hauptnavigationsmodul zu arbeiten. Ist eine neue SQL-Abfrage nach allen Kategorien einer sel_idcat der bessere Weg?

Verfasst: So 24. Jul 2005, 21:45
von MyAccount
Habe mich mal mit der Klasse ArticleCollection befasst und folgendes gezaubert:

Code: Alles auswählen

<?php
global $cfg, $client, $lang;
include_once($cfg["path"]["contenido"] . 'classes/class.template.php');

$idcat = CMS_VALUE[0]

if ( !is_object($db2) ) {
  $db = new DB_Contenido;
}

$sql = "SELECT
                CAT_LANG.name
        FROM
                ".$cfg["tab"]["cat"]." AS CAT,
                ".$cfg["tab"]["cat_lang"]." AS CAT_LANG
        WHERE
                CAT.idclient  = '".$client."'
        AND
                CAT_LANG.idlang    = '".$lang."'
        AND
                CAT.idcat     = CAT_LANG.idcat
        AND
                CAT.parentid     = '".$idcat."'";
$db->query($sql);

while ($db->next_record()) {

  $name = $db->f("name");
  $parentid = $db->f("parentid");
  echo "<b>".$name."<b><br>\n";

  $articleListOptions = array("idcat"     => $parentid,
                             "lang"       => $lang,
                             "client"     => $client,
                             "start"      => 0,
                             "order"      => "created",
                             "direction"  => "asc");
                              
  $articleList = new ArticleCollection($articleListOptions);

  while ($article = $articleList->nextArticle()){

   $title = $article->get("title");
   echo $title."<br>\n";

  } //END WHILE

} //END WHILE
?>
Hier sollen die Name $db->f("name") aller Unterkategorien der gegebenen Kategorie CMS_VALUE[0] und die Titel $article->get("title")aller Artikel die in diesen Unterkategorien sind ausgegeben werden.

Leider funktioniert das nicht so, wie ich mir das denke. Die Namen der Unterkategorien werden richtig ausgegeben, aber die Artikelklasse scheint immer leer zu sein.

Bin für jeden Tipp dankbar.

Verfasst: Mo 25. Jul 2005, 08:09
von Oldperl
MyAccount hat geschrieben:

Code: Alles auswählen

<?php
global $cfg, $client, $lang;
include_once($cfg["path"]["contenido"] . 'classes/class.template.php');
Ist das der Start einer Funktion oder warum hast du globale Var definiert?

Code: Alles auswählen

if ( !is_object($db2) ) {
  $db = new DB_Contenido;
}
Sollte das nicht heißen

Code: Alles auswählen

if ( !is_object($db) ) {
  $db = new DB_Contenido;
So das hier geprüft wird ob $db schon existiert und nicht $db2?

Code: Alles auswählen

$sql = "SELECT
                CAT_LANG.name
        FROM
                ".$cfg["tab"]["cat"]." AS CAT,
                ".$cfg["tab"]["cat_lang"]." AS CAT_LANG
        WHERE
                CAT.idclient  = '".$client."'
        AND
                CAT_LANG.idlang    = '".$lang."'
        AND
                CAT.idcat     = CAT_LANG.idcat
        AND
                CAT.parentid     = '".$idcat."'";
$db->query($sql);

while ($db->next_record()) {

  $name = $db->f("name");
  $parentid = $db->f("parentid");
  echo "<b>".$name."<b><br>\n";

  $articleListOptions = array("idcat"     => $parentid,
                             "lang"       => $lang,
                             "client"     => $client,
                             "start"      => 0,
                             "order"      => "created",
                             "direction"  => "asc");
                              
  $articleList = new ArticleCollection($articleListOptions);

  while ($article = $articleList->nextArticle()){

   $title = $article->get("title");
   echo $title."<br>\n";

  } //END WHILE

} //END WHILE
?>
Soviel ich gesehen habe darfst du die Klasse ArticleCollection nicht in die 1. while Schleife legen, sonst wird jedesmal ein und dieselbe Instanz neu angelegt. Nicht 100% sicher, ich schnupper auch erst in diese Klassen rein. 8)
Aber es gibt da einen sehr guten Thread der das ganze verständlich und mit Beispiel erklärt.

Guckst du hier :roll:
:arrow: http://contenido.org/forum/viewtopic.php?t=2087

Gruß aus Franken

Ortwin

Verfasst: Mo 25. Jul 2005, 22:16
von MyAccount
Ist das der Start einer Funktion oder warum hast du globale Var definiert?
Ist schon raus. Hatte das tatsächlich aus der Funktion.
Sollte das nicht heißen

Code: Alles auswählen

if ( !is_object($db) ) { 
  $db = new DB_Contenido; 
Da hast Du auch Recht.

Das da jedesmal ein neues Objekt ArticelCollection erzeugt wird, ist auch so gewollt. Eine Collection für jede Kategorie.

Den Artikel, den Du empfiehlst, habe ich gelesen. Nur, weil ich darüber gestolptert bin, habe ich die Klasse ArticleCollection überhaupt entdeckt. Hey, und ich weiß jetzt, dass es einen extra Ordner für Klassen gibt. ;-) Kleiner Spaß.

Wäre toll, wenn es eine CategoryCollection gäbe.

Gruß Frank

Verfasst: Mo 25. Jul 2005, 23:09
von Oldperl
Einen habsch noch :lol:

Guckst du hier :roll:

:arrow: http://www.thilo-sommer.de/PHPMyFAQ/ind ... =2&lang=de

Ist auch nochmal alles genau erklärt. Hab im Moment nur zu wenig Zeit, bastel grad an nem Tickermodul. Dabei verwende ich die beiden Klassen aber auch und es funzt.

hatte nur Probleme nach Copy&Paste aus der FAQ, hab dann einen Variablennamen angepaßt und es ging. Glaube mit der Variablen $articleList gibt es irgendwie ein Problem, hab sie in $artikelListe umbenannt. Weiß nicht ob evtl 'article' ein reservierter Begriff ist in PHP, war auf alle Fälle scho komisch.

Hier mal der Auszug aus meiner Funktionierenden Abfrage

Code: Alles auswählen

// Klasseninstanz oder Abbrechen
$artikelListe = new ArticleCollection($articleListOptions) or die( "Klasse ArticleCollection existiert nicht");

 while ($artikel = $artikelListe->nextArticle())
{   if ("CMS_VALUE[9]" == "title" || "CMS_VALUE[9]" == ""){
    $headline = $artikel->get("title"); }
    else {
    $headline = $artikel->getContent("CMS_VALUE[9]", "CMS_VALUE[8]");}
    if (strlen($headline) > $maxChar) {
            $headline = substr($headline, 0, $maxChar);
            $headline .= "...";}

            $link = $sess->url("front_content.php?client=$client&lang=$lang&idcat=$selCat&idart=".$artikel->get('idart')."&m=$m&s=$s");
            $TickerText .= '<a href="'.$link.'" class="TickerLink" onfocus="if(this.blur)this.blur()">'.$headline.'</a>';
         $TickerText .= $TickerDelimiter;
      unset($headline);
} // end while
Du kannst dabei mit

Code: Alles auswählen

$artikel->get("title")
z. B. den Titel des Artikels rausziehen, oder mit

Code: Alles auswählen

$artikel->getContent(<CMS_VAR>, <CMS_VAR_NR>);} 
auf die Contentinhalte der Artikel zugreifen. Nicht schlecht das Teil :wink:

Ach mist, scho wieder nach 12, muß weiter, noch nen Entwurf online stellen :shock:
Und morgen um halb sieben is die Nacht auch wieder zu Ende :roll:
Also bis denne 8)

Verfasst: Di 26. Jul 2005, 11:32
von MyAccount
Hallo oldperl,

danke, werde ich heute abend mal testen.

Wieso eigentlich oldperl?! Soll das heißen, dass Du Perl den Rücken gekehrt hast?

Verfasst: Di 26. Jul 2005, 15:32
von Oldperl
MyAccount hat geschrieben:Wieso eigentlich oldperl?! Soll das heißen, dass Du Perl den Rücken gekehrt hast?
Nicht wirklich :wink:

Ist eher aus alten Chattagen geblieben und ich bin zu bequem :oops: mir jedesmal nen anderen auszudenken 8)

Re: w3concepts Artikelliste mit Kategorienamen als Unterteilung

Verfasst: Do 13. Mai 2010, 16:29
von hypekermit
Habe ein Problem den Content aus der konfigurationn abzufragen

Code: Alles auswählen

$headline = $artikel->getContent("CMS_VALUE[1]");
klappt leider nicht

besteht überhaupt die Möglichkiet damit den Inhalt abzufragen?

Re: w3concepts Artikelliste mit Kategorienamen als Unterteilung

Verfasst: Fr 14. Mai 2010, 09:33
von Oldperl
Hallo hypekermit,

schau dir mal bitte die API-Doku zur Klasse Article und ArticleCollection an. Die Klassenfunktion getContent kann für bestimmte Inhaltstypen abgefragt werden, welche in den Klassenkommentaren bezeichnet sind.
:arrow: http://www.conrepo.org/apidoc/contenido ... 8.11/html/
Auch würde ich hier die CMS-Value nicht direkt im Aufruf der Funktion nutzen, sondern vorher eine Variable damit füllen und diese auf den richtigen Inhalt, bzw. auf ein Leer sein,
prüfen.

Gruß aus Franken

Ortwin

Re: w3concepts Artikelliste mit Kategorienamen als Unterteilung

Verfasst: Fr 14. Mai 2010, 12:10
von hypekermit
hallo ortwin,

danke für den Tip.

aber leider steige ich da ganz nicht durch.

in der api steht nichts von CMS_VALUE[x] abfragen

hast du schon so etwas realisiert wenn ja hast du ein snippet für mich wie es funktioniert?


danke & viele Grüße
Michael