Seite 1 von 1
Artikelliste aus Beispielmandant
Verfasst: Mo 8. Dez 2003, 08:08
von feiger_abweichler
hallo,
und wieder mal ne frage:
kann man das modul artikelliste aus dem beispielmandanten irgendwie begrenzen, so dass es z.b. nur noch die fünf neuesten artikel einer kategorie anzeigt.
oder vielleicht gibt es für die 4.4er version ja sogar eins und ich habe es übersehen? es soll nur die artikelüberschrift anzeigen können.
kann mir jemand einen tip geben oder mir dabei helfen, das beispielmodul zu modifizieren?
tausend dank und viele grüße,
der abweichler
Verfasst: Mo 8. Dez 2003, 09:41
von agon
Hallo,
ich habe mir folgendes - zugegebenermaßen nicht sonderlich elegantes - Modul gebastelt:
Input:
Code: Alles auswählen
echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\">
<tr>
<td>Überschrift</td>
<td><input type=\"text\" name=\"CMS_VAR[2]\" value=\"CMS_VALUE[2]\"></td>
</tr>
</table>";
Output:
Code: Alles auswählen
<?php
$sql = "SELECT ARTLANG.idart, ARTLANG.idartlang, ARTLANG.title, CATART.idcat
FROM ".$cfg["tab"]["cat_art"]." AS CATART, ".$cfg["tab"]["art_lang"]." AS ARTLANG, ".$cfg["tab"]["art"]." AS ART
WHERE ARTLANG.idart = CATART.idart AND CATART.idart = ART.idart AND ARTLANG.idlang = '$lang' AND ARTLANG.online = '1' AND ART.idclient='$client' AND CATART.idcat='$idcat' AND CATART.is_start='0'
ORDER BY ARTLANG.created DESC";
$db->query($sql);
if ($db->num_rows() != 0)
{
echo '<h2>CMS_VALUE[2]</h2>
<p class="klein">';
}
for ($i=0; $i<min($db->num_rows(),5); $i++)
{
$db->next_record();
$navmod_link ="front_content.php?client=$client&la"."ng=$lang&idcat=".$db->f("idcat")."&idart=".$db->f("idart")."";
echo '<a href="'.$sess->url("$navmod_link").'" class="klein">'.$db->f("title").'</a>';
if ($i != $db->num_rows()-1)
{
echo '</p><p class="klein">';
}
}
if ($db->num_rows() != 0)
{
echo '</p>';
}
?>
Die "5" gibt an, wie viele Artikel gelistet werden sollen (könnte man auch in den Input ziehen).
Gelistet werden die neuesten Artikel nach Erstellungsdatum (nicht letzte Änderung); der Startartikel wird ausgeschlossen.
Angezeigt werden die Titel, nicht die Überschriften.
Soll die Überschrift 1. Ordnung angezeigt werden (vorausgesetzt, diese liegt in
CMS_HTMLHEAD[1]), müßte die Abfrage lauten:
Code: Alles auswählen
$sql = "SELECT ARTLANG.idart, CATART.idcat, CONTENT.value AS title
FROM ".$cfg["tab"]["cat_art"]." AS CATART, ".$cfg["tab"]["art_lang"]." AS ARTLANG, ".$cfg["tab"]["cat"]." AS CAT, ".$cfg["tab"]["content"]." AS CONTENT
WHERE ARTLANG.idart = CATART.idart AND CATART.idcat = CAT.idcat AND ARTLANG.idartlang=CONTENT.idartlang
AND CONTENT.idtype='1' AND CONTENT.typeid='1' AND CAT.idcat='$idcat' AND ARTLANG.idlang = '$lang' AND ARTLANG.online = '1' AND CATART.is_start='0'
ORDER BY ARTLANG.created DESC";
Sollte tun
Andreas
Verfasst: Mo 8. Dez 2003, 16:12
von feiger_abweichler
hallo,
erst einmal vielen dank für deine hilfe.
leider zeigt das modul bei mir gar nichts an. wie kann man denn den baum festlegen, aus dem das modul die artikel anzeigen soll?
bin leider in php nicht ganz so fit...
viele grüße,
der abweichler
Verfasst: Mo 8. Dez 2003, 16:18
von agon
Hallo,
das Modul in der vorliegenden Form sollte die Artikel aus der aktuellen Kategorie nehmen; um eine andere Kategorie auswählen zu können, müßten Input und Output noch erweitert werden.
In der Form mit der Anzeige des internen Titels läuft das Modul bei mir auch unter 4.4.1.
Sind denn in der entsprechenden Kategorie Artikel außer dem Startartikel online? Und stehen in der Modulansicht die Ampeln auf "grün"?
Gruß
Andreas
Verfasst: Di 9. Dez 2003, 22:43
von feiger_abweichler
hallo,
also bei mir sieht das modul wie folgt aus:
input:
Code: Alles auswählen
/**
* Artikelliste mit I1,H1,T1
*
* Erstellt eine Liste mit allen Artikel bis
* auf den Startartikel.
*
* INPUT
*
* Author Jan Lengowski
* Copyright four for business AG
*/
// selected category
$selected = "CMS_VALUE[0]";
echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\">
<tr valign=\"top\">
<td>Kategorie wählen:</td>
<td>
<select name=\"CMS_VAR[0]\">";
if($selected!="0" && $selected!=""){
echo"<option value=\"0\">--- kein ---</option>";
}else{
echo"<option selected=\"selected\" value=\"0\">--- kein ---</option>";
}
// fetch all categorys
$query = "SELECT A.idcat, A.level, C.name FROM ".$cfg["tab"]["cat_tree"]." AS A, ".
$cfg["tab"]["cat"]." AS B, ".$cfg["tab"]["cat_lang"]." AS C WHERE A.idcat=B.idcat ".
"AND B.idcat=C.idcat AND C.idlang='$lang' AND B.idclient='$client' ".
"AND C.visible=1 ORDER BY A.idtree";
// execute query
$db->query($query);
// loop result and build the options
while ($db->next_record()) {
// indent spacer
$spaces = "|";
// how many levels
$levels = $db->f("level");
for ($i = 0; $i < $levels; $i ++) {
// add 2 spaces for every level
$spaces = $spaces . "--";
} // end for
$spaces .= ">";
if ($selected == $db->f("idcat")) {
// selected category
echo "<option selected=\"selected\" value=\"". $db->f("idcat") ."\">". $spaces . $db->f("name") ."</option>";
} else {
// category
echo "<option value=\"". $db->f("idcat") ."\">". $spaces . $db->f("name") ."</option>";
} // end if
} // end while
echo " </select>";
echo " </td>
</tr>
<tr>
<td>Überschrift</td>
<td><input type=\"text\" name=\"CMS_VAR[2]\" value=\"CMS_VALUE[2]\"></td>
</tr>
<tr>
<td>Angezeigte Länge in Zeichen</td>
<td><input type=\"text\" name=\"CMS_VAR[3]\" value=\"CMS_VALUE[3]\"></td>
</tr>
</table>";
Output:
Code: Alles auswählen
<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* REFERENZ MODUL / ARTIKELLISTE
*
* Artikelliste mit Img 1, Head 1, Head 2
*
* Erstellt eine Liste mit allen Artikel bis
* auf den Startartikel.
*
* Author : Jan Lengowski
* Copyright : four for business AG
* Created : 15-08-2002
* Modified : 16-08-2002
************************************************/
// 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 DESC";
// 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
// loop through subarticles
echo '
<table width="150" border="0" cellspacing="0" cellpadding="0">
<tr><td height="21" width="22" style="border: 0px"></td>
<td width="135" style="border: 0px; padding-left:10px" class="punkte">CMS_VALUE[2]</td></tr>
';
if (is_array($articleID)) {
foreach ($articleID as $key => $value) {
// select all CMS variables of the article
$sql = "SELECT * FROM ".$cfg["tab"]["content"]." WHERE idartlang = '$value' AND idtype = '1' AND typeid = '1'";
$db->query($sql);
$db->next_record();
$head = $db->f("value");
if ( strlen($head) > "CMS_VALUE[3]") {
$head = substr($head, 0, "CMS_VALUE[3]");
$head .= '..';
}
// link
$link = $sess->url("front_content.php?client=$client&lang=$lang&idcat=$selcat&idart=$linkID[$key]&m=$m&s=$s");
echo '<tr><td colspan="2" class="text" height="22" style="border: 0px; padding-left:20px"><a class="klein" href="'.$link.'">'.urldecode($db->f("value")).'</a><br> </td></tr>';
} // end while
unset($headline);
unset($text);
} // end foreach
} // end if (is_array)
echo '</table><br>';
?>
ich würde mich freuen, wenn mir jemand helfen kann, hier irgendwie einen befehl einzufügen, dass nur die fünf neuesten artikel der ausgewählten kategorie angezeigt werden.
oder noch besser:
man könnte im input auswählen, wie viele artikel angezeigt werden, also über eine variable steuern (leere variable = alle einträge)
tausend dank an alle helfer im voraus,
der abweichler
Verfasst: Di 9. Dez 2003, 23:45
von mtealc
beim output modul in der ersten sql anweisung
ändern in
dann müßte es gehen
keine gewähr nur so aus dem kopf
gruss micha
Verfasst: Di 9. Dez 2003, 23:53
von feiger_abweichler
hallo,
erstmal vielen dank für die antwort.
ich bin leider contenido- und php/sql-anfänger (auch wenn ich es geschafft habe, mit dem system innerhalb von 3 tagen eine site online zu stellen:
http://www.studis-gegen-gebuehren.de).
im output sehe ich, so weit reichen meine kenntnisse die erste sql-anweisung:
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 DESC";
kannst du mir helfen, wo dort die limitierung rein müsste?
vielen dank und gruß,
thomas
Verfasst: Mi 10. Dez 2003, 07:43
von HerrB
Ans Ende.
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 DESC LIMIT 0,5";
Gruß
HerrB
Verfasst: Mi 10. Dez 2003, 09:45
von feiger_abweichler
hallo,
dat läuft!!!!
zu sehen unter
http://www.studis-gegen-gebuehren.de
danke und viele grüße aus bremen
der abweichler