Problem mit Artikelliste für 4.5.2 ALPHA

Gesperrt
Andreas
Beiträge: 254
Registriert: So 16. Nov 2003, 14:48
Wohnort: Reichshof
Kontaktdaten:

Problem mit Artikelliste für 4.5.2 ALPHA

Beitrag von Andreas »

Hallo zusammen,
ich habe folgendes Problem:
Für ein neues Projekt habe ich die 4.5.2 ALPHA Version installiert (nebenbei bemerkt: wirklich klasse!).
Es funktioniert alles nahezu perfekt. Allerdings habe ich ein altbekanntes Problem mit der Artikelliste (Output siehe unten). Leider wird der Startartikel der Kategorie in der Liste wieder angezeigt. Das Problem ist für die 4.4.x Version ja bereits im Forum gelöst worden. In der 4.5 ist es nun wieder da...

Hat jemand eine Idee? Liegt es an der 4.5 oder habe ich was übersehen?
Hier der verwendete "Output" (wie gesagt: mit 4.4.x funktioniert es einwandfrei):

Code: Alles auswählen

<?php
$anzahl = "CMS_VALUE[8]";
if($anzahl<1) {$anzahl=10;}
$laenge = "CMS_VALUE[9]";
if($laenge<1) {$laenge=100;}
$sql = "SELECT ARTLANG.idart, ARTLANG.title, CATART.idcat, ARTLANG.created, CONTENT.value, CONTENT.idtype, CONTENT.typeid
 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<=2 AND CONTENT.typeid<=2 AND CAT.idcat='$idcat' AND ARTLANG.idlang = '$lang' AND ARTLANG.online = '1' AND CATART.is_start='0'
 ORDER BY ARTLANG.artsort ASC,ARTLANG.created DESC";
$db->query($sql);
if ($db->num_rows() != 0)
{
 echo "<br><table border=0 cellspacing=0 cellpadding=0 class=\"text\">";

$artikel = array(array());
$j=0;
 $db->next_record();
 $idart_last=$db->f("idart");
for ($i=0; $i<$db->num_rows(); $i++)
{
 $artikel[$j][0] = $db->f("idart");
 $artikel[$j][1] = $db->f("idcat");
 $artikel[$j][2] = substr($db->f("created"),8,2).".".substr($db->f("created"),5,2).".";
 while ( $idart_last==$db->f("idart") )
 {
  if ( $db->f("idtype") == 2 && $db->f("typeid") == 1 )
  {
   $html_text = strip_tags(urldecode($db->f("value")));
   $array = array ("&auml;" => "ä", "&ouml;" => "ö", "&uuml;" => "ü", "&szlig;" => "ß", "&Auml;" => "Ä", "&Ouml;" => "Ö", "&Uuml;" => "ü", "&nbsp;" => " ", """ => "\"", "<" => "<", ">" => ">", "&" => "&");
   $html_text = strtr($html_text, $array);
   $artikel[$j][5] = htmlentities(substr($html_text,0,$laenge))."...";
  } elseif ( $db->f("idtype") == 1 && $db->f("typeid") == 1 )
  {
   $artikel[$j][3] = strip_tags(urldecode($db->f("value")));
  } elseif ( $db->f("idtype") == 1 && $db->f("typeid") == 2 )
  {
   $artikel[$j][4] = strip_tags(urldecode($db->f("value")));
  }
  $idart_last=$db->f("idart");
  $db->next_record();
  $i++;
 }
 $idart_last=$db->f("idart");
 $j++;
 $i--;
}

if($blatt=="") {$blatt=0;}
$blattmax=ceil($j/$anzahl)-1;
$blatt1 = $blatt+1;
$blattmax1 = $blattmax+1;
if ($j>$anzahl)
{
 echo " <tr>
  <td class=\"artikelliste\" colspan=3  align=\"right\">Seite <b>".$blatt1."</b> von ".$blattmax1."&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;";
 for ($i=0; $i<=$blattmax; $i++)
 {
  $k = $i+1;
  if($i==$blatt) {
   echo " ".$k." | ";
  } else {
   $navmod_link ="front_content.php?client=$client&lang=$lang&idcat=$idcat&blatt=".$i."";
   echo ' <a href="'.$sess->url("$navmod_link").'" class="artikelliste"><u>'.$k.'</u><br></a> ';
  }
 }
 echo "</td>
 </tr>";
}

for ($i=$anzahl*$blatt; $i < min($j,$anzahl*$blatt+$anzahl); $i++)
{
 $k = $i-1;
 $navmod_link ="front_content.php?client=$client&lang=$lang&idcat=".$artikel[$i][1]."&idart=".$artikel[$i][0]."";
 echo '<tr>';
 if ( $i>0 && $artikel[$i][2] == $artikel[$k][2] )
 {
  echo '<td class=\"newsbox\"> </td>';
 } else
 {
  echo '<td class=\"newsbox\" valign="top"></td>';
 }
 echo '<td class=\"newsbox\"><b><a href="'.$sess->url("$navmod_link").'" id="font">'.$artikel[$i][3].'</a></b><img src="upload/layout/dot_red.gif" width="100%" height="1" vspace="1"><br> '.$artikel[$i][5].' <a href="'.$sess->url("$navmod_link").'" id="link_klein"><img src="upload/layout/pfeil_mehr.gif" width="14" height="10" border="0"> &nbsp;mehr</a><br><br></td>
</tr>';
}

if ($j>$anzahl)
{
 echo " <tr>
  <td class=\"artikelliste\"  colspan=3 align=\"right\"><br>Seite <b>".$blatt1."</b> von ".$blattmax1."&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;";
 for ($i=0; $i<=$blattmax; $i++)
 {
  $k = $i+1;
  if($i==$blatt) {
   echo " ".$k." |";
  } else {
   $navmod_link ="front_content.php?client=$client&lang=$lang&idcat=$idcat&blatt=".$i."";
   echo ' <a href="'.$sess->url("$navmod_link").'" class="artikelliste"><u>'.$k.'</u></a> ';
  }
 }
 echo "</td>
 </tr>";
}

 echo '</table>';

}
?>

Wäre klasse, wenn mir jemand helfen könnte.

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

Beitrag von Halchteranerin »

aehm ... ich habe bei mir auch gerade die 4.5.2alpha installiert, und ich habe in der dort mitgelieferten Artikelliste beim SQL-Query
AND CATART.is_start='0'
ergaenzt. Bei mir funktioniert's, keine Ahnung, woran das bei Dir liegt.

Gruss
Christa
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

das Verhalten der Startartikel wurde geändert, deshalb wird so gut wie kein Navigationsmodul laufen, es sei denn, man aktiviert den Kompatibilitätsmodus (siehe Readme).
Andreas
Beiträge: 254
Registriert: So 16. Nov 2003, 14:48
Wohnort: Reichshof
Kontaktdaten:

Beitrag von Andreas »

timo hat geschrieben:das Verhalten der Startartikel wurde geändert, deshalb wird so gut wie kein Navigationsmodul laufen, es sei denn, man aktiviert den Kompatibilitätsmodus (siehe Readme).
Uups.
O.K. Werde ich mir mal ansehen.
Danke für das schnelle Feedback.

Sicher werde ich mich zum Problem noch mal melden (müssen)...

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

Beitrag von Halchteranerin »

timo hat geschrieben:das Verhalten der Startartikel wurde geändert
aehm, kannst Du vielleicht kurz sagen, was geaendert wurde, oder laesst sich das nicht in 2 Saetzen beschreiben? :-)

Ich habe gerade eine andere komische Erscheinung bezueglich Startartikel gehabt. Ich hatte 4.5.2ALPHA mit Beispielen installiert, und als ich die Sache mit der Artikelliste testen wollte, habe ich einfach einen der Artikel unter News als Startartikel definiert. Ich wollte das nach dem Testen rueckgaengig machen, aber das ging nicht mehr. Jetzt habe ich unter 4.4.4 nachgeschaut, und das ist dort genauso. Ist das Absicht? Ein Artikel ist nur dann (nachdem er einmal Startartikel war) kein Startartikel mehr, wenn man einen anderen Artikel in derselben Kategorie zum Startartikel macht.

Aber wenn man eine Kategorie anlegt und dann nacheinander darin die Artikel, ist es moeglich, dass kein Startartikel dabei ist, daher waere es schoen, wenn man diesen Zustand auch wiederherstellen koennte. :)
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

die Startartikel sind jetzt Sprachabhängig. weitere Doku ist schwierig, weil das etwas komplexer zum erklären ist...
Andreas
Beiträge: 254
Registriert: So 16. Nov 2003, 14:48
Wohnort: Reichshof
Kontaktdaten:

Beitrag von Andreas »

Hallo Timo,
ich habe mir die "Sache" mal angeschaut.
In der Readme steht ja:
Die Startartikel-Funktionalität wurde geändert. Standardmäßig
wird bei einem Setup die neue Funktionsweise verwendet - soll
jedoch die alte Funktionsweise weiter bestehen bleiben, so ist
die Direktive "$cfg["is_start_compatible"]" in der config.php
auf "true" zu setzen.
In der config.php steht dieser Befehl nicht.
Also habe ich ihn eingesetzt. Erfolg gleich null, außer das der Artikel im Backend-Editor "zerschossen" wird.
Irgendwie verstehe ich das nicht. Oder muss das ganze im Zuge des Setup gemacht werden? Wenn ja, kann man das nachträglich noch machen?

Danke im voraus.
Andreas
marco.jahn_4fb
Beiträge: 9
Registriert: Do 11. Sep 2003, 14:56
Kontaktdaten:

Beitrag von marco.jahn_4fb »

sollte in der config.misc.php stehen

gruss
m.wohlers
Beiträge: 93
Registriert: Di 25. Mai 2004, 16:11
Wohnort: Bad Aibling
Kontaktdaten:

Beitrag von m.wohlers »

Hallo!
timo hat geschrieben:die Startartikel sind jetzt Sprachabhängig. weitere Doku ist schwierig, weil das etwas komplexer zum erklären ist...
Sooo kompliziert ist es nun auch wieder nicht... ich habe mir die Sache wegen Eigenbedarf mal etwas genauer angesehen, und die Sache ist wie folgt:

Das Update-Skript unter \contenido\tools\convert_startarticles.php macht folgendes: es selektiert alle Startartikel und fügt die id vom Startartikel in der Tabelle $cfg["tab"]["cat_lang"] in die Spalte startidartlang ein.

Code: Alles auswählen

$sql = "SELECT * FROM ".$cfg["tab"]["cat_art"]." WHERE is_start='1'";
und

Code: Alles auswählen

$sql = "UPDATE ".$cfg["tab"]["cat_lang"]." SET startidartlang='$idartlang' WHERE idcat='$idcat' AND idlang='$vlang'";
Das Auslesen der Startartikel-Eigenschaft geht also auf dem umgekehrten Weg:

Man liest zuerst aus $cfg["tab"]["cat_lang"] die id vom Startartikel der gewünschten Kategorie aus und muß diese Information dann entsprechend nutzen.

In der Artikelliste sieht das folgendermaßen aus (Modul-Output):

Code: Alles auswählen

<?
/***********************************************
* 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
* Modified    :     22-07-2004 for Contenido 4.5.2 alpha
************************************************/

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

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

// find start article

$query = "SELECT startidartlang FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='$selcat' AND idlang='$lang'";

$db->query($query); 

if ($db->next_record()) { 
  $startidartlang = $db->f("startidartlang"); 
} 

// select all articles in category without 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.idartlang != '$startidartlang' 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 

// Table header
echo ' 
<table width="75%" border="0" cellspacing="0" cellpadding="0"> 
<tr><td height="30" colspan="2" ></td></tr> 
<tr><td height="21" width="22" style="border: 0px; border-top:1px; border-bottom:1px; border-color: #F7C473; border-style: solid; background-color: #FCF2D5"><img src="images/wuerfel.gif" width="22" height="21" border="0"></td> 
<td width="143" style="border: 1px; border-left:0px; border-color: #F7C473; border-style: dashed; background-color: #FCF2D5; padding-left:10px" class="punkte">CMS_VALUE[2]</td></tr>'; 

// Loop through articles 
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(); 
          $headline = urldecode($db->f("value")); 

          if (strlen($headline) > CMS_VALUE[3]) { 
            $headline = substr($headline, 0, CMS_VALUE[3]); 
            $headline .= '..'; 
          } 

          // 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: 1px; border-top:0px; border-color: #F7C473; border-style: dashed; background-color: #FCF2D5; padding-left:10px"><a href="'.$link.'">'.$headline.'</a></td></tr>'; 
          
    } // end while 
        unset($headline); 
    } // end foreach 
} // end if (is_array) 
echo '</table><br>'; 
?>
Änderungen sind:

Auslesen der Startartikel-ID mit

Code: Alles auswählen

// find start article

$query = "SELECT startidartlang FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='$selcat' AND idlang='$lang'";

$db->query($query); 

if ($db->next_record()) { 
  $startidartlang = $db->f("startidartlang"); 
} 
und Ändern der SQL-Abfrage für die Artikelauswahl in

Code: Alles auswählen

// select all articles in category without 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.idartlang != '$startidartlang' AND ARTLANG.online = '1' ORDER BY CATART.idart DESC";
wobei also aus "CATART.is_start = '0'" ein "ARTLANG.idartlang != '$startidartlang'" geworden ist.

Ich hoffe, so ist das für alle verständlich. Die Erkenntnisse aus diesem Posting lassen sich also in alle Module, die die Startartikeleigenschaft brauchen, einpflegen.

@timo: das Artikellisten-Modul im Beispielmandanten sollte analog umgebaut werden für die 4.5.x/4.6.x
Michael Wohlers
Gesperrt