Seite 1 von 1

Nur Startartikel in Article List Advanced ?

Verfasst: Fr 15. Jun 2007, 13:24
von rethus
Ich möchte gerne im Modul Article List Advanced die Checkbox Startartikel anzeigen gegen zwei Radio-Buttons austauschen; Startartikel anzeigen und NUR Startartikel anzeigen.

Irgendwie blick ich aber durch den DB-Aufbau noch nicht so ganz durch.

Der erzeugte SQL-Befehl bei aktiviertem Startartikel-Checkbox ist:

Code: Alles auswählen

SELECT tblData.value AS headline, ARTLANG.pagetitle AS pagetitle, ARTLANG.summary AS summary, ARTLANG.idart AS id, ARTLANG.lastmodified AS lastmodified, ARTLANG.created AS created, ARTLANG.published AS published, CATLANG.name AS category, ARTLANG.idartlang AS idartlang, CATART.idcat AS idcat, CATART.idcatart AS idcatart
FROM con1_cat_art AS CATART, con1_art_lang AS ARTLANG, con1_cat_lang AS CATLANG, con1_content AS tblData
WHERE CATART.idcat
IN (
'80', '84', '41', '80'
)
AND ARTLANG.idlang = '1'
AND tblData.idartlang = ARTLANG.idartlang
AND CATLANG.idlang = ARTLANG.idlang
AND CATLANG.idcat = CATART.idcat
AND ARTLANG.idart = CATART.idart
AND ARTLANG.online = '1'
AND tblData.idtype = '1'
AND tblData.typeid = '1'
ORDER BY RAND( ) ASC
LIMIT 0 , 5
Bei deaktivierten Startartikeln ist es:

Code: Alles auswählen

SELECT tblData.value AS headline, ARTLANG.pagetitle AS pagetitle, ARTLANG.summary AS summary, ARTLANG.idart AS id, ARTLANG.lastmodified AS lastmodified, ARTLANG.created AS created, ARTLANG.published AS published, CATLANG.name AS category, ARTLANG.idartlang AS idartlang, CATART.idcat AS idcat, CATART.idcatart AS idcatart
FROM con1_cat_art AS CATART, con1_art_lang AS ARTLANG, con1_cat_lang AS CATLANG, con1_content AS tblData
WHERE CATART.idcat
IN (
'80', '84', '41', '80'
)
AND ARTLANG.idlang = '1'
AND tblData.idartlang = ARTLANG.idartlang
AND CATLANG.idlang = ARTLANG.idlang
AND CATLANG.idcat = CATART.idcat
AND ARTLANG.idart = CATART.idart
AND tblData.idartlang != CATLANG.startidartlang
AND ARTLANG.online = '1'
AND tblData.idtype = '1'
AND tblData.typeid = '1'
ORDER BY RAND( ) ASC
LIMIT 0 , 5
Der einzige Unterschied in dem SQL-Statement ist in der 6. Zeile von unten (2. Codelisting) wo das Statement AND tblData.idartlang != CATLANG.startidartlang hinzukommt.


Der Quelltext im Modul, der die SQL-Abfrage gestaltet ist dieser:

Code: Alles auswählen


   $sql  = "SELECT tblData.value AS headline, ARTLANG.pagetitle AS pagetitle, ARTLANG.summary AS summary, ARTLANG.idart AS id, ARTLANG.lastmodified AS lastmodified, " ;
   $sql .= "ARTLANG.created AS created, ARTLANG.published AS published, CATLANG.name AS category, ";
   $sql .= "ARTLANG.idartlang AS idartlang, CATART.idcat AS idcat, CATART.idcatart AS idcatart FROM ";
   $sql .= $cfg["tab"]["cat_art"]." AS CATART, ";
   $sql .= $cfg["tab"]["art_lang"]." AS ARTLANG, ";
   $sql .= $cfg["tab"]["cat_lang"]." AS CATLANG, ";
   $sql .= $cfg["tab"]["content"]." AS tblData ";

   $sql .= "WHERE CATART.idcat IN (".$sSelCats.") AND ARTLANG.idlang = '".$lang."' ";
   $sql .= "AND tblData.idartlang = ARTLANG.idartlang ";
   $sql .= "AND CATLANG.idlang = ARTLANG.idlang ";
   $sql .= "AND CATLANG.idcat = CATART.idcat ";
   $sql .= "AND ARTLANG.idart = CATART.idart ";

   if ($aSettings["ShowStart"] != "enabled") {
      if ($cfg["is_start_compatible"] == true) {
         $sql .= "AND CATART.is_start = '0' ";
      } else {
         $sql .= "AND tblData.idartlang != CATLANG.startidartlang ";
      }
   }

   $sql .= "AND ARTLANG.online = '1' ";
   $sql .= "AND ".$aSettings["HeadlineIdentifier"]." ";

   // Sort by
   $sql .= "ORDER BY ";
   $sql .= $aSettings["SortBy"]." ".$aSettings["SortDir"]." ";

   // LIMIT
   if ($aSettings["ArticleCount"] > 0) {
      $sql .= "LIMIT 0, ".$aSettings["ArticleCount"];
   }
Wie muss das SQL-Statement aussehen, damit NUR Artikel angezeigt werden, die Startartikel sind?

Verfasst: Sa 16. Jun 2007, 06:48
von emergence
ich würd sagen den teil hier

Code: Alles auswählen

   if ($aSettings["ShowStart"] != "enabled") { 
      if ($cfg["is_start_compatible"] == true) { 
         $sql .= "AND CATART.is_start = '0' "; 
      } else { 
         $sql .= "AND tblData.idartlang != CATLANG.startidartlang "; 
      } 
   } 
durch

Code: Alles auswählen

   if ($aSettings["ShowStart"] != "enabled") { 
      if ($cfg["is_start_compatible"] == true) { 
         $sql .= "AND CATART.is_start = '1' "; 
      } else { 
         $sql .= "AND tblData.idartlang == CATLANG.startidartlang "; 
      } 
   } 
ersetzen, sollte den job erledigen... (nicht getestet...)

Verfasst: Do 7. Feb 2008, 16:58
von jestmo
Hallo, ich habe im Moment das gleiche Problem.

Ich nutze die Version: Article List Advanced V4.6.x V1.4

Den Vorschlag von emergence bewirkt leider nichts. kann mir jemand bei dem Problem helfen?

//edit
ERLEDIGT

Verfasst: So 10. Feb 2008, 01:39
von HerrB
Hast Du auch bei der Konfiguration des Artikels/der Kategorie die Checkbox "Startartikel" aktiviert?

Gruß
HerrB

Verfasst: Mo 11. Feb 2008, 07:46
von jestmo
ja, hat sich aber schon erledigt. musste nur eine zeile code

Code: Alles auswählen

$sql .= "AND CATLANG.startidartlang = ARTLANG.idartlang "; 
vor dem hier einfügen:

Code: Alles auswählen

if ($aSettings["ShowStart"] != "enabled") {
      if ($cfg["is_start_compatible"] == true) {
         $sql .= "AND CATART.is_start = '0' ";
      } else {
         $sql .= "AND tblData.idartlang != CATLANG.startidartlang ";
      }
   }
schon habe ich nur startartikel.

Verfasst: Mo 11. Feb 2008, 21:54
von HerrB
Da tblData.idartlang = ARTLANG.idartlang entspricht das emergence' Lösung (nur hartcodiert und mit dem = weniger, welches zuviel war).

Gruß
HerrB