Seite 1 von 2
Abfrage gegen Startartikel erweitern
Verfasst: Di 14. Feb 2006, 14:17
von Wutz
Ich habe folgenden Code und würde gerne Startartikel ausschliessen. Im Forum konnte ich nichts genaues finden.
Code: Alles auswählen
$sql_2 = "
SELECT
c.idcat,
d.idart,
e.idartlang,
e.created,
DATE_FORMAT(e.created,'%d.%m.%y') AS erstellungsdatum
FROM
{$cfg['tab']['cat']} AS a,
{$cfg['tab']['cat']} AS b,
{$cfg['tab']['cat']} AS c
LEFT JOIN
{$cfg['tab']['cat_art']} AS d ON c.idcat = d.idcat
LEFT JOIN
{$cfg['tab']['art_lang']} AS e ON d.idart = e.idart
WHERE
(
(
c.idcat = b.idcat
AND b.parentid = a.idcat
)
OR
(
c.idcat = b.idcat
AND b.idcat = a.idcat
)
)
AND a.idcat = $categorie
AND e.online = 1
AND e.redirect = 0
AND e.external_redirect = 0
AND e.idlang = $lang
$nurstartartikel
ORDER BY
e.created DESC
LIMIT
$limit, $angezeigte_anzahl";
In der
config.php habe ich
$cfg["is_start_compatible"] = false;. Wie muss ich das noch erweitern, dass es alle nicht-Startartikel holt?
Verfasst: Di 14. Feb 2006, 14:43
von Wutz
Ich habe nun versucht mich durch die
Contenido FAQ zu lesen, allerdings komme ich noch nicht klar damit was das
left join bzw. die left join-Anweisung macht?
Verfasst: Di 14. Feb 2006, 14:59
von mvf
Wutz hat geschrieben:Ich habe nun versucht mich durch die
Contenido FAQ zu lesen, allerdings komme ich noch nicht klar damit was das
left join bzw. die left join-Anweisung macht?
man möge mich korrigieren, denn so ganz habe ich die config einstellungen für startartikel noch nicht überblickt, aber ...
in navigationsmodulen und/oder artikellisten bspw. checke ich die startartikel über die tabelle
con_cat_lang, value der startidartlang, die dann wiederum mit der con_art_lang value idartlang abgeglichen werden muss um an die idart zu kommen
vielicht hilft das ein wenig weiter
http://contenido.org/forum/viewtopic.ph ... c&start=27
ab meinem post bitte bis zum ende lesen, da sese dass ganze nochmal korrigiert. ziel war dort der umgekehrte fall
Verfasst: Di 14. Feb 2006, 15:21
von Wutz
Ich habe den Code so erweitert:
Code: Alles auswählen
$sql_1 = "
SELECT count(*) AS anzahl
FROM
{$cfg['tab']['cat']} AS a,
{$cfg['tab']['cat']} AS b,
{$cfg['tab']['cat']} AS c,
{$cfg['tab']['art_lang']} AS ARTLANG,
{$cfg['tab']['cat_lang']} AS CATLANG
LEFT JOIN
{$cfg['tab']['cat_art']} AS d ON b.idcat = d.idcat
LEFT JOIN
{$cfg['tab']['art_lang']} AS e ON d.idart = e.idart
WHERE
(
(
c.idcat = b.idcat
AND b.parentid = a.idcat
)
OR
(
c.idcat = b.idcat
AND b.idcat = a.idcat
)
)
AND a.idcat = $categorie
AND e.online = 1
AND e.redirect = 0
AND e.external_redirect = 0
AND ARTLANG.idartlang != CATLANG.startidartlang";
$sql_2 = "
SELECT
c.idcat,
d.idart,
e.idartlang,
ARTLANG.idartlang AS idartlang,
e.created,
DATE_FORMAT(e.created,'%d.%m.%y') AS erstellungsdatum
FROM {$cfg['tab']['cat']} AS a,
{$cfg['tab']['cat']} AS b,
{$cfg['tab']['cat']} AS c,
{$cfg['tab']['art_lang']} AS ARTLANG,
{$cfg['tab']['cat_lang']} AS CATLANG
LEFT JOIN
{$cfg['tab']['cat_art']} AS d ON c.idcat = d.idcat
LEFT JOIN
{$cfg['tab']['art_lang']} AS e ON d.idart = e.idart
WHERE
(
(
c.idcat = b.idcat
AND b.parentid = a.idcat
)
OR
(
c.idcat = b.idcat
AND b.idcat = a.idcat
)
)
AND a.idcat = $categorie
AND e.online = 1
AND e.redirect = 0
AND e.external_redirect = 0
AND e.idlang = $lang
AND ARTLANG.idartlang != CATLANG.startidartlang
ORDER BY
e.created DESC
LIMIT
$limit, $angezeigte_anzahl";
Nun werden auf einmal alle Artikel ausgegeben.

komisch auch, es werden zwar alle alle Titel ausgegeben, als Link macht es mir aber immer das gleich und auch beim Datum.
Verfasst: Di 14. Feb 2006, 15:29
von mvf
Code: Alles auswählen
{$cfg['tab']['cat']} AS a,
{$cfg['tab']['cat']} AS b,
{$cfg['tab']['cat']} AS c,
das schon mal grosser murx IMHO
und bitte beschreibe doch mal genau was du machen willst für welches modul? des snippet ganz oben, wo kommt des her?
Verfasst: Di 14. Feb 2006, 15:39
von Wutz
Es geht um die Artikelliste "
w3concepts_alist_v1" von kummer.
Ich will einfach die Artikel ohne Startartikel.
Verfasst: Di 14. Feb 2006, 16:06
von mvf
Wutz hat geschrieben:Es geht um die Artikelliste "
w3concepts_alist_v1" von kummer.
Ich will einfach die Artikel ohne Startartikel.
kkder code sthet da zwar so drin aber warum ich eine tabelle mit drei bezeichnern führen soll ist mir nicht klar
andererseits ist die artikelliste schon etwas älter und ich weiss ned ob des so mit der 4.6.4 funzt
anderer ansatz
du willst einfach aller artikel ohne startartikel einer kategorie
also karo-einfach ohne 4en sozuagen

da sollte sich eine in der 4.6.4 funktionierende alist finden.
suche mal im board, ich guck auch mal parallel, hatte doch sowas grade erst am wickel und verworfen weil eben karo-einfach
Verfasst: Di 14. Feb 2006, 16:20
von Wutz
Ich habe den Code mal ausgedünnt, sieht nun so aus:
Code: Alles auswählen
<?php
# Konfiguration
$kategorie = "CMS_VALUE[0]";
$angezeigte_anzahl = "CMS_VALUE[1]";
if( $angezeigte_anzahl == "" ) {
$angezeigte_anzahl = 10;
}
$startartikel = "CMS_VALUE[2]";
if( $startartikel == "" ) {
$startartikel = false;
}
$subheadline = "CMS_VALUE[3]";
if( $subheadline == "" ) {
$subheadline = 200;
}
$navigationslink['previous'] = "CMS_VALUE[4]";
if( $navigationslink['previous'] == "" ) {
$navigationslink['previous'] = "zurück";
}
$navigationslink['next'] = "CMS_VALUE[5]";
if( $navigationslink['next'] == "" ) {
$navigationslink['next'] = "vor";
}
# $ebene = "CMS_VALUE[6]";
$limit = (isset($_GET['displaylimit']) && $_GET['displaylimit'] > 0)?($_GET['displaylimit']):(0);
$db = new DB_Contenido;
$db2 = new DB_Contenido;
# Wenn Startartikel true ist, werden die Startartikel dargestellt, sonst nicht.
if( $startartikel ) {
$nur_startartikel = "";
} else {
$nur_startartikel = "AND d.is_start = 0";
}
# Liest die Anzahl betroffener Artikel aus der Datenbank
$sql_1 = "SELECT
count(*) AS anzahl
FROM
{$cfg['tab']['cat']} AS a,
{$cfg['tab']['cat']} AS b,
{$cfg['tab']['cat']} AS c
LEFT JOIN
{$cfg['tab']['cat_art']} AS d ON b.idcat = d.idcat
LEFT JOIN
{$cfg['tab']['art_lang']} AS e ON d.idart = e.idart
WHERE
(
(
c.idcat = b.idcat
AND b.parentid = a.idcat
)
OR
(
c.idcat = b.idcat
AND b.idcat = a.idcat
)
)
AND a.idcat = $kategorie
AND e.online = 1
AND e.redirect = 0
AND e.external_redirect = 0
$nur_startartikel
";
$sql_2 = "SELECT
c.idcat,
d.idart,
e.idartlang,
e.created,
DATE_FORMAT(e.created,'%d.%m.%y') AS erstellungsdatum
FROM
{$cfg['tab']['cat']} AS a,
{$cfg['tab']['cat']} AS b,
{$cfg['tab']['cat']} AS c
LEFT JOIN
{$cfg['tab']['cat_art']} AS d ON c.idcat = d.idcat
LEFT JOIN
{$cfg['tab']['art_lang']} AS e ON d.idart = e.idart
WHERE
(
(
c.idcat = b.idcat
AND b.parentid = a.idcat
) OR (
c.idcat = b.idcat
AND b.idcat = a.idcat
)
)
AND a.idcat = $kategorie
AND e.online = 1
AND e.redirect = 0
AND e.external_redirect = 0
AND e.idlang = $lang
$nurstartartikel
ORDER BY
e.created DESC
LIMIT
$limit, $angezeigte_anzahl
";
$db->query($sql_1);
$db->next_record();
$anzahl_artikel = $db->f("anzahl");
$db->query($sql_2);
echo '<table cellpadding="0" cellspacing="0" style="width:100%">';
while( $db->next_record() ) {
$sql = "SELECT
value
FROM
{$cfg['tab']['content']}
WHERE
idartlang = ".$db->f("idartlang")."
AND idtype = 3
ORDER BY
typeid ASC
";
$db2->query($sql);
$db2->next_record();
$link = $sess->url("front_content.php?client=$client&lang=$lang&idcat=".$db->f("idcat")."&idart=".$db->f("idart"));
echo "<tr><td class=\"artlist_headline\"> <a href=\"$link\" class=\"artlist_headlinelink\">".urldecode($db2->f("value"))."</a> </td>";
echo "<td class=\"artlist_date\">".$db->f("erstellungsdatum")."</td></tr>";
$db2->next_record();
// die subheadline auf die gewünschte länge reduzieren (trennung nur
// nach bzw. vor einem ganzen wort
if( strlen($db2->f("value")) > $subheadline ) {
$newsubheadline = '';
$worte = explode (" ",strip_tags(urldecode($db2->f("value"))));
$zulang = false;
foreach ($worte as $wort) {
if (strlen($newsubheadline." ".$wort) >= $subheadline) $zulang = true;
$newsubheadline = (!$zulang)?($newsubheadline." ".$wort):($newsubheadline);
}
$newsubheadline .= "...";
} else {
$newsubheadline = strip_tags(urldecode($db2->f("value")));
}
echo "<tr><td class=\"artlist_subheadline\" colspan=\"2\">$newsubheadline</td></tr>";
echo "<tr><td>$link</td></tr>";
}
echo '</table>';
?>
Es sollte diese Liste sein, da zum einen wichtig ist, dass es mehrere Ebenen tief ausliest und es soll
nicht die Advanced sein.
Eigentlich ist dies ja eine einfache Liste, ich will doch nur die Startartikel nicht dabeihaben? Ich bekomme einfach nicht das in die Abfrage was fehlt, ich bin am verzweifeln.

Verfasst: Di 14. Feb 2006, 16:32
von mvf
habe mal auf die schnelle die advanced artikelliste von herrB in der version 0.5 genommen
wirft die artikel der rubrik erste schritte aus
http://dev1.elflein-kosmetik.de/cont46v ... p?idcat=78
schau dir mal die listen von herrB an
leider gibt es keine beschriebung was die alten machen mehr, aber die werden alle noch angeboten zum dl und sind schnell importiert
include anweisung im thread nicht vergessen
darauf basierend sollte dein problem sich lösen lassen, und es ist sicher einfacher eine advanced zu beschneiden als eine simple zu erweitern, zumindest für mich

Verfasst: Di 14. Feb 2006, 16:37
von Wutz
Wie ich schon sagte sind die Advanced Listen eine gute Idee, aber es darf unbedingt keine Advanced sein. Diese Liste hier kann man über die Mandanteneinstellung steuern, bei den Advanced Liste muss man alles auswählen. Wo ich sie einsetzen möchte, darf es nicht über eine Advanced laufen.
Ich hoffe wirklich, dass mir einer der Profis in der SQL Abfrage bei den Zeilen helfen kann, die reinmüssen um auf das "startidartlang" zu prüfen und diese auszuschliessen.
Verfasst: Di 14. Feb 2006, 17:34
von mvf
Wutz hat geschrieben:Wie ich schon sagte sind die Advanced Listen eine gute Idee, aber es darf unbedingt keine Advanced sein. Diese Liste hier kann man über die Mandanteneinstellung steuern, bei den Advanced Liste muss man alles auswählen. Wo ich sie einsetzen möchte, darf es nicht über eine Advanced laufen.
Ich hoffe wirklich, dass mir einer der Profis in der SQL Abfrage bei den Zeilen helfen kann, die reinmüssen um auf das "startidartlang" zu prüfen und diese auszuschliessen.
habe mir des jetzt mal angeschaut und mit meinen bescheidenen kenntnissen denke ich es liegt dana, dass im output um die zeile 38/39 folgendes steht
Code: Alles auswählen
// wenn startartikel true ist, werden die startartikel dargestellt, sonst nicht
$nurstartartikel = ($startartikel)?(''):('AND d.is_start = 0');
nun glaube ich aber, das des so ned mehr funzt weil der startikel wie gesagt jetzt unter cat_lang startidartlang abgelegt wird
sprich des muss mit der idartlang in con_art_lang abgeglichen werden und diese idart (!) dann ausgeschlossen werden
Verfasst: Di 14. Feb 2006, 17:51
von Wutz
Das weiß ich ja alles, oben habe ich den abgespeckten Code gepostet, sort findest du das $nurstartartikel gar nicht mehr.
Es hängt am Wissen über die Einschränkung der Abfrage.

Verfasst: Di 14. Feb 2006, 18:05
von mvf
Wutz hat geschrieben:Das weiß ich ja alles, oben habe ich den abgespeckten Code gepostet, sort findest du das $nurstartartikel gar nicht mehr.
Es hängt am Wissen über die Einschränkung der Abfrage.

und da kann ich dich nur wieder auf meine aussagen bisher verweisen
ob startartikel ja oder neine steht in der
die matched dann mit der
und die dazugehörige
muss dann ausgeklammert werden. mit deinem output bin ich gerade am probieren, generell fehlt ja dort ein abgleich mit der CON_CAT_LANG gänzlich, somit ist der startartikel immer drin
und zunächst bringt der mir in einer standard 4.6.4 folgendes
http://dev1.elflein-kosmetik.de/cont46v ... p?idcat=78
Verfasst: Di 14. Feb 2006, 18:22
von Wutz
Ich bin auch schon die ganze Zeit am probieren. Ich habe gedacht, in $sql_2 müsste ja in das SELECT rein f.startidartlang AS startidartlang, damit er das ausliest. In das FROM habe ich {$cfg['tab']['cat_lang']} AS f, damit es weiß von wo er f auslesen soll.
Allein durch die zwei Angaben macht es aber die Liste schon kaputt und es kommen wirre Dinge raus.
Verfasst: Mi 15. Feb 2006, 00:06
von i-fekt
Hier ist mein Ansatz, das auslesen der Unterrubriken fehlt aber:
Code: Alles auswählen
<?php
# Konfiguration
$kategorie = "CMS_VALUE[0]";
$angezeigte_anzahl = "CMS_VALUE[1]";
if( $angezeigte_anzahl == "" ) { $angezeigte_anzahl = 10; }
$startartikel = "CMS_VALUE[2]";
if( $startartikel == "" ) { $startartikel = false; }
$navigationslink['previous'] = "CMS_VALUE[4]";
if( $navigationslink['previous'] == "" ) { $navigationslink['previous'] = "zurück"; }
$navigationslink['next'] = "CMS_VALUE[5]";
if( $navigationslink['next'] == "" ) { $navigationslink['next'] = "vor"; }
$limit = (isset($_GET['displaylimit']) && $_GET['displaylimit'] > 0)?($_GET['displaylimit']):(0);
$db = new DB_Contenido;
$db2 = new DB_Contenido;
# Liest die Artikel aus der Datenbank
$sql_2 = "SELECT
b.idart,
b.created,
b.lastmodified,
b.online,
b.idartlang
FROM
{$cfg['tab']['cat_art']} as a
LEFT JOIN
{$cfg['tab']['art_lang']} as b ON a.idart = b.idart
LEFT JOIN
{$cfg['tab']['cat_lang']} as c ON a.idcat = c.idcat
LEFT JOIN
{$cfg['tab']['cat']} as d ON a.idcat = d.idcat
WHERE
a.idcat = $kategorie
AND b.idlang = $lang
AND b.online = 1
AND c.startidartlang != b.idartlang
ORDER BY
b.created DESC";
$db->query($sql_2);
echo '<table cellpadding="0" cellspacing="0" border="1" width="100%">';
while( $db->next_record() ) {
$sql = "SELECT
value
FROM
{$cfg['tab']['content']}
WHERE
idartlang = ".$db->f("idartlang")."
AND idtype = 3
ORDER BY
typeid ASC
";
$db2->query($sql);
$db2->next_record();
$link = $sess->url("front_content.php?idcat=".$db->f("idcat")."&idart=".$db->f("idart"));
echo "<tr><td><a href=\"$link\" class=\"artlist_headlinelink\">".urldecode($db2->f("value"))."</a>[".$db->f("idart")."] (".$db->f("created").")</td></tr>";
$db2->next_record();
$subheadline = strip_tags(urldecode($db2->f("value")));
echo "<tr><td>".$subheadline."<br><br></td></tr>";
}
echo '</table>';
?>