Wie erweitert man die Artikelliste??

Gesperrt
dSit.
Beiträge: 15
Registriert: Di 24. Feb 2004, 16:37
Kontaktdaten:

Wie erweitert man die Artikelliste??

Beitrag von dSit. »

hallo,

da ich ein contenido/php/mysql newbie bin, sind selbst einfache änderungen an den bestehenden modulen für mich sehr schwierig. vielleicht kann mir jemand helfen.

die standard artikelliste (4.4) listet headline, subheadline und den beginn des textes auf. soweit so gut, funktioniert auch alles.
in meinen artikeln sind aber noch diverse andere felder definiert (cms_html[1..x]). wie muss ich die artikelliste anpassen, damit ich auch noch die inhalte anderer felder angezeigt bekomme?
an welcher stelle des codes werden diese aus der datenbank ausgelesen und wie bzw. wo werden sie dann variablen zugewiesen??
bitte um hilfe!

eine andere frage wäre dann noch, wie ist es möglich z.b. die headline (also die ausgabe der artikelliste) zu sortieren? nach anfangsbuchstaben oder zahlen... macht das ein php-skript oder liefert die datenbank sortierfunktionen?

vielen dank für die hilfe!!

greetings dSit.
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Re: Wie erweitert man die Artikelliste??

Beitrag von emergence »

dSit. hat geschrieben:die standard artikelliste (4.4) listet headline, subheadline und den beginn des textes auf. soweit so gut, funktioniert auch alles.
in meinen artikeln sind aber noch diverse andere felder definiert (cms_html[1..x]). wie muss ich die artikelliste anpassen, damit ich auch noch die inhalte anderer felder angezeigt bekomme?
an welcher stelle des codes werden diese aus der datenbank ausgelesen und wie bzw. wo werden sie dann variablen zugewiesen??
bitte um hilfe!
am besten suchst du mal nach artikelliste - da gibts schon jede menge threads dazu. die info die du suchst müsste dort zu finden sein.
dSit. hat geschrieben:eine andere frage wäre dann noch, wie ist es möglich z.b. die headline (also die ausgabe der artikelliste) zu sortieren? nach anfangsbuchstaben oder zahlen... macht das ein php-skript oder liefert die datenbank sortierfunktionen?
das sortieren erreichst du mit anpassung des sql queries
such in deinem modul die zeile mit $sql oder $query...
so gesehen sorgt das sql query in den meisten fällen für die sortierung
dSit.
Beiträge: 15
Registriert: Di 24. Feb 2004, 16:37
Kontaktdaten:

Sortierung funktioniert nicht richtig

Beitrag von dSit. »

Danke für die Hilfe, hat mir schon weitergeholfen!

Jedoch bin ich jetzt auf ein anderes Problem gestoßen:
Die Artikellistenausgabe soll nach einem Wert sortiert werden, der sich bei mir in der Tabelle CONTENT und Spalte value befindet: also con_CONTENT.value. Das Problem ist nur, daß in dieser Zelle mehrere Werte gespeichert sind, die ich zwar mit "idtype=xx" und "typeid=xx" unterscheiden kann, aber das mit dem sortieren klappt nicht so ganz.

Wie kann ich mit dem ORDER BY-Befehl nach einem ganz bestimmten Wert dieser Zelle (zb. idtype=1 AND typeid=3) sortieren?

Vielleicht kann mir jemand das query-Statement ergänzen??

Code: Alles auswählen

$query = "SELECT ARTLANG.idart, ARTLANG.idartlang FROM ".$cfg["tab"]["cat_art"]." AS CATART, ".
         $cfg["tab"]["art_lang"]." AS ARTLANG ".
         "WHERE CATART.idcat = '$selcat' AND ARTLANG.idart = CATART.idart AND ARTLANG.idlang = '$lang' AND ".
         "ARTLANG.online = '1' ORDER BY CATART.idart";
Vielen Dank!!
...und schöne Ostern!

Gruß dSit.
Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Re: Sortierung funktioniert nicht richtig

Beitrag von Halchteranerin »

Hallo,
ich verstehe nicht genau, was Du da wie sortieren willst, aber mit ORDER BY kannst Du nur nach einer bestimmten Spalte und dann aufsteigend (ASC) oder absteigend (DESC) sortieren. Hoechstens mit HAVING und GROUP BY, wenn Du wirklich feste Werte angeben willst.

Gruss
Christa
dSit.
Beiträge: 15
Registriert: Di 24. Feb 2004, 16:37
Kontaktdaten:

Beitrag von dSit. »

...per HTMLHEAD[x] habe ich verschiedene Daten in der DB gespeichert. Wie ich das sehe sind diese alle in der Tabelle CONTENT, unter "value" gespeichert.
Die verschiedenen Daten haben alle idtype='1' (wg. HEAD), aber verschiedene typeid's, da verschiedene Werte.
Das Sortieren nach einem Wert klappt (!), aber die so sortierten Werte sollen danach nochmal nach dem anderen Kritierium sortiert werden....
(1. Wert ist das Datum, 2. die Uhrzeit).
Deshalb muss ich ja auf einen einzelnen Eintrag zugreifen können.

Hat darauf jemand ne Antwort, bzw. weißt Du jetzt was ich meine?
Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin »

dSit. hat geschrieben:weißt Du jetzt was ich meine?
Ich bin mir nicht ganz sicher ...

Denn Dein Query oben laeuft ueber die Tabelle cat_art, und Du schreibst aber in derselben Nachricht, dass Du nach etwas in der Tabelle content sortieren willst ... Evtl. tut's das hier, falls ich Dich richtig verstanden habe:

Code: Alles auswählen

$query = "SELECT ARTLANG.idart, ARTLANG.idartlang 
         FROM ".$cfg["tab"]["cat_art"]." AS CATART, ". 
              $cfg["tab"]["art_lang"]." AS ARTLANG ". 
              $cfg["tab"]["content"]." AS CONTENT ". 
         "WHERE CATART.idcat = '$selcat' AND 
                ARTLANG.idart = CATART.idart AND 
                CONTENT.idartlang = ARTLANG.idartlang AND
                ARTLANG.idlang = '$lang' AND ". 
                "ARTLANG.online = '1' 
          ORDER BY CATART.idart, CONTENT.typeid";
Gruss
Christa
dSit.
Beiträge: 15
Registriert: Di 24. Feb 2004, 16:37
Kontaktdaten:

Beitrag von dSit. »

Danke für die schnelle Antwort, aber leider funkts nicht oder ich mach irgendwas falsch.
Sorry,
da ich was php und mysql angeht nicht wirklich zu den Profis gehöre, kann ich leider auch nicht richtig erklären, was das Problem ist.

Versuchen wir´s mal so:
Ziel: eine abgewandelte Artikelliste soll eine Tabelle ausgeben. Die Tabelle hat viel Spalten (demnach müssen VIER Werte irgendwo aus der Datenbank kommen). Diese Werte sind:
DATUM, ORT, ZEIT, NAME

Das mit dem ausgeben klappt auch alles wunderbar. Aber da es sich um ca. 60 Datensätze handelt wäre eine sortierte Ausgabe natürlich schön... ;-)

Jetzt das Problem (und nochmal....):
ich möchte nach ORT und nach DATUM sortieren.
1. nach Ort
2. nach Datum

(Diese Daten verweisen auf eine Seite wo die ganze Information steht, funktioniert auch)

...da aber Ort, sowie Datum in der Tabelle CONTENT (.value) gespeichert sind (das hat mir mein phpmyadmin verraten), weiß ich jetzt nicht wie ich sortieren kann....
Die Werte sind also laut phpmyadmin in der gleichen Zelle, aber unter verschiedenen idtype und typeid Werten.

Den query-Befehl habe ich aus meinem Output-Modul, das alle Werte genauso anzeigt, wie ich´s haben will.

Vielleicht fällt Dir ja nochwas dazu ein!!

Vielen Dank und einen schönen Abend,

wünscht dSit.
Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin »

Von PHP habe ich in der Tat selbst nicht viel Ahnung, dachte aber, von Datenbanken mehr als genug Ahnung zu haben. :)

Dein Problem wird mir immer klarer, aber eine Loesung habe ich leider nicht. DENN: wenn Ort UND Datum innerhalb derselben Zelle enthalten sind, sprich im Prinzip Teil des dort enthaltenen Strings sind (der Datentyp von value ist longtext, also eine lange Zeichenkette), dann KANNST Du einfach NICHT nach Teile dieser Zeichenkette sortieren, wie denn auch?
dSit. hat geschrieben: Den query-Befehl habe ich aus meinem Output-Modul, das alle Werte genauso anzeigt, wie ich´s haben will.
Das verstehe ich wiederum nicht: wenn Dein Befehl schon die Werte anzeigt, wie Du sie haben willst, wo ist dann das Problem? Stehe ich gerade auf der Leitung? :)

Gruss
Christa
dSit.
Beiträge: 15
Registriert: Di 24. Feb 2004, 16:37
Kontaktdaten:

Beitrag von dSit. »

der erste query-Befehl sucht wohl nur die relevanten artikel, die ausgabe der einzelnen daten erfolgt dann hiermit:

Code: Alles auswählen

 $sql_zeit = "SELECT * FROM ".$cfg["tab"]["content"]." WHERE idartlang = '$value' AND idtype = '1' AND typeid = '4'";

    $db->query($sql_zeit);
    $db->next_record();
    $zeit = urldecode($db->f("value"));

for ($i=CMS_VALUE[6]; $i < CMS_VALUE[6]+20; $i++)
{
$zeit1 = substr($zeit , 0, $i);

$cut = substr($zeit, $i);
if ((ord ($cut) == 32)||(ord ($cut) == 44)||(ord ($cut) == 45)) {

$zeit= substr($zeit , 0, $i);
$zeit .= ' .....';
       }
    }
(davon gibt´s dann logischerweise insgesamt 4)

was würdest Du sagen: muss ich diese mit ORDER BY sortieren, oder im ersten befehl?

Gruß dSit.
Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin »

dSit. hat geschrieben:der erste query-Befehl sucht wohl nur die relevanten artikel, die ausgabe der einzelnen daten erfolgt dann hiermit:
puh, das ist mir zu viel PHP auf einmal, und ich kann nur vermuten, waws da passiert. :oops: Ich hoffe, emergence (oder jemand anders) meldet sich nochmal. :)
Soweit ich das verstehe, ist das in diesem Query auch so, dass erst nur der value-Wert gelesen wird und mit dem etwas 'angestellt' wird, deswegen wuesste ich nach wie vor nicht, wo Du nach dem Teilstring sortieren sollst. :cry:

Gruss
Christa
dSit.
Beiträge: 15
Registriert: Di 24. Feb 2004, 16:37
Kontaktdaten:

Beitrag von dSit. »

.... :roll: .....
na dann probier´s ich mal weiter. wenn Du jemanden weißt, der das alles besser kann als ich, dann frag ihn/sie mal nach ner Antwort!

danke trotzdem für die hilfe!

sonnige grüße,

dSit.
dSit.
Beiträge: 15
Registriert: Di 24. Feb 2004, 16:37
Kontaktdaten:

Sortieren der DB-Ausgabe einer abgewandelten Artikelliste

Beitrag von dSit. »

Hallo Contenido-Cracks,

mit einer abgewandelten Artikelliste gebe ich 4 verschiedene Werte aus der Datenbank aus. Das funktioniert mit dem unten stehenden Output-Modul auch ohne Probleme.

Die Ausgabe soll logischerweise sortiert werden (nach "stage" und als zweites nach "date") - aber leider bekomme ich das nicht hin.

Kann mir bitte jemand helfen den Output-Code so anzupassen, dass diese Sortierung funktioniert. Weiter oben habe ich schon versucht zu beschreiben was ich für das Problem halte - schaut´s Euch mal an, wahrscheinlich ist es für Euch nicht schwierig!! ;-)
<?


//Frontendpfad ermitteln
$query = "SELECT frontendpath FROM ".$cfg["tab"]["clients"]." WHERE idclient='".$client."'";
$db->query($query);
$db->next_record();
$frontendpath = $db->f("frontendpath");



$startarton = "AND CATART.is_start = '0' AND";

//soll der startartikel mit ausgegeben werden?.
$print_startartikel = "CMS_VALUE[14]";
if($print_startartikel !=""){
$startarton = "AND";

}


// second db class instance
$db2 = new DB_Contenido;

// selected category
$selcat = "CMS_VALUE[0]";

if($selcat!="0" && $selcat!=""){

// select all articles in category widthout start article
$query = "SELECT ARTLANG.idart, ARTLANG.idartlang FROM ".$cfg["tab"]["cat_art"]." AS CATART, ".
$cfg["tab"]["art_lang"]." AS ARTLANG ".
"WHERE CATART.idcat = '$selcat' AND ARTLANG.idart = CATART.idart AND ARTLANG.idlang = '$lang' AND ".
"ARTLANG.online = '1' ORDER BY CATART.idart";

// execute query
$db->query($query);

unset($articleID);
unset($linkID);

// get id's of sub articles
while ($db->next_record()) {
$articleID[] = $db->f("idartlang");
$linkID[] = $db->f("idart");
} // end while


/****************** start table **************************/
echo '
<table border="1" bgcolor="#FCED98" bordercolor="#F8DE4B" cellpadding="3" cellspacing="0" width="480px"

<tr>
<td width="30px"><font face="Arial" size="2"><b>Datum, Tag<b/></font></td>
<td width="30px"><font face="Arial" size="2"><b>Bühne<b/></font></td>
<td width="60px"><font face="Arial" size="2"><b>Uhrzeit<b/></font></td>
<td width="200px"><font face="Arial" size="2"><b>Band<b/></font></td>
</tr>

';


// Loop through articles
if (is_array($articleID)) {
foreach ($articleID as $key => $value) {
// select all CMS variables of the article


//stage

$sql_stage = "SELECT * FROM ".$cfg["tab"]["content"]." WHERE idartlang = '$value' AND idtype = '1' AND typeid = '5'";

$db->query($sql_stage);
$db->next_record();

$stage = urldecode($db->f("value"));



for ($i=0; $i < 20; $i++)
{
$stage1 = substr($stage , 0, $i);

$cut = substr($stage, $i);
if ((ord ($cut) == 32)||(ord ($cut) == 44)||(ord ($cut) == 45)) {

$stage= substr($stage , 0, $i);
$stage .= ' .....';
}
}

//date

$sql_date = "SELECT * FROM ".$cfg["tab"]["content"]." WHERE idartlang = '$value' AND idtype = '1' AND typeid = '3'";
$db->query($sql_date);
$db->next_record();
$date = urldecode($db->f("value"));

for ($i=CMS_VALUE[6]; $i < CMS_VALUE[6]+20; $i++)
{
$date1 = substr($date , 0, $i);

$cut = substr($date, $i);
if ((ord ($cut) == 32)||(ord ($cut) == 44)||(ord ($cut) == 45)) {

$date= substr($date , 0, $i);
$date .= ' .....';
}
}


//HEADLINE

$sql = "SELECT * FROM ".$cfg["tab"]["content"]." WHERE idartlang = '$value' AND idtype = '1' AND typeid = '1'";

$db->query($sql);
$db->next_record();
$headline = urldecode($db->f("value"));

for ($j=CMS_VALUE[3]; $j < CMS_VALUE[3]+20; $j++)
{
$headline1 = substr($headline , 0, $j);

$cut = substr($headline, $j);
if ((ord ($cut) == 32)||(ord ($cut) == 44)||(ord ($cut) == 45)) {

$headline= substr($headline , 0, $j);
$headline .= ' .....';
}
}


//uhrzeit

// if($print_zeit!="0" && $print_zeit!=""){
$sql_zeit = "SELECT * FROM ".$cfg["tab"]["content"]." WHERE idartlang = '$value' AND idtype = '1' AND typeid = '4'";

$db->query($sql_zeit);
$db->next_record();
$zeit = urldecode($db->f("value"));

for ($i=CMS_VALUE[6]; $i < CMS_VALUE[6]+20; $i++)
{
$zeit1 = substr($zeit , 0, $i);

$cut = substr($zeit, $i);
if ((ord ($cut) == 32)||(ord ($cut) == 44)||(ord ($cut) == 45)) {

$zeit= substr($zeit , 0, $i);
$zeit .= ' .....';
}
}



// link
$link = $sess->url("front_content.php?client=$client&lang=$lang&idcat=$selcat&idart=$linkID[$key]&m=$m&s=$s");



/***********************Anfang Tablezeile für Artikelliste**********************/
echo '
<font face="Arial" size="1">
<tr>
<td><font face="Arial" size="2">'.$date.'</font></td>
<td><font face="Arial" size="2">'.$stage.'</font></td>
<td><font face="Arial" size="2">'.$zeit.'</font></td>
<td><font face="Arial" size="2"><b><A HREF="'.$link.'">'.$headline.'</a><br></font></td>
</tr>
</font>

';


} // end while



unset($headline);
unset($headline1);
unset($date);
unset($date1);
unset($stage);
unset($stage1);
unset($zeit);
unset($zeit1);


} // end foreach

} // end if (is_array)

echo '</table>';
/***********************ende Table**********************/

?>
Danke und beste Grüße,

dSit. :wink:
Gesperrt