[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Fehlerhafte Sortierung nach Priorität im Teaser - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Goldacker
Beiträge: 148
Registriert: 1. Jul 2007, 13:27
Wohnort: Hamburg / Berlin / Neubrandenburg
Kontaktdaten: Website

Fehlerhafte Sortierung nach Priorität im Teaser

27. Nov 2007, 15:00

Hallo,
ich verwende in Redaxo 3.1 einen Teaser für Artikel (nicht Kategorien) und dort dann die Sortierung nach Priorität. Jedoch weicht die Ausgabe von der Prio ab - es ist eher durcheinander.
Andere Sortierungen nach CreateDate oder Update oder Name funktionieren korrekt.
Die Sortierfunktion aus dem Wiki ist identisch mit meiner im Teaser.
Ich weiß nicht woran es liegt. Im Backend sind die Artikel richtig sortiert nach Prio, aber im Frontend nicht.

Kann mir jemand helfen?

Chriz
Beiträge: 47
Registriert: 24. Nov 2006, 17:22

27. Nov 2007, 17:47

Poste doch mal das Modul

Goldacker
Beiträge: 148
Registriert: 1. Jul 2007, 13:27
Wohnort: Hamburg / Berlin / Neubrandenburg
Kontaktdaten: Website

Code

27. Nov 2007, 18:54

Das Ausgangsmodul wurde nur leicht von mir modifiziert

Eingabe:

Code: Alles auswählen

<?php
//---MODULE MODIFIED BY------------------
//-- a-concept internet.studio
//-- Sven Albert-Pedersen
//-- www.a-concept.de / www.svenalbert.de
//-----------------------------------------------
//-- version 1.24
//-- date 30-may-2007
//-----------------------------------------------
?>

<strong>Anzahl der Artikel pro Seite</strong><br />
<input name="VALUE[1]" value="REX_VALUE[1]" class="inp100" /><br />
<br />
<strong>Anzahl der Wörter pro Artikel</strong><br />
<input name="VALUE[2]" value="REX_VALUE[2]" class="inp100" /><br />
<br />
<strong>Sortierung nach</strong><br />
<select name="VALUE[3]" ><?
  foreach (array("prio","updatedate","createdate","name") as $value) {
    echo '<option value="'.$value.'" ';
    if ( "REX_VALUE[3]"=="$value" ) {
      echo 'selected="selected" ';
    }
    echo '>'.$value.'</option>';
  }
?></select>
Ausgabe

Code: Alles auswählen

<table width="100%" />
<?php
//---MODULE MODIFIED BY--------------------------
//-- a-concept internet.studio
//-- Sven Albert-Pedersen
//-- www.a-concept.de / www.svenalbert.de
//-----------------------------------------------
//-- version 1.24
//-- date 30-may-2007
//-----------------------------------------------
//-- Nachträglich eingefügt:
//-- 
//-- * Zählen und Schließen von DIVs & SPANs
//-- * Auswahl der Sortierung nach Prio
//-- * Ausblendung eines Bildes im Artikel
//-- * Funktionalität mit mehrsprachigen Webseiten
//-- * Zurück-Link, wenn Seite über den Teaser aufgerufen wurde
//-- * v1.24 Texte für $nextLink und $backLink im oberen Bereich der Datei
//--
//-- Bugfixes:
//-- v1.23 Moduleingabe: Select hatte falschen Variablennamen
//-----------------------------------------------

//---BEZEICHNUNG DER BLÄTTER- und WEITER-LINKS---
//--
//--
$backLink_text = 'vorige Seite';
$nextLink_text = 'nächste Seite';
$moreLink_text = 'weiterlesen';
//--
//--
//-----------------------------------------------


$itemsPerSide = "REX_VALUE[1]";
$wordsPerArticle = "REX_VALUE[2]";
$sorting_order = "REX_VALUE[3]";

//echo $sorting_order;

// Nur im Frontend
//if (!$REX['REDAXO']):

// Sortierfunktionen

// Sortierfunktion by Name 
// siehe http://wiki3.redaxo.de?n=R3.Sortiermöglichkeiten 
if(!function_exists('sortArticlesByName')) { function sortArticlesByName( $artA, $artB) { $nameA = $artA->getName(); $nameB = $artB->getName(); if ( $nameA == $nameB) { return 0; } $names = array($nameA,$nameB); sort( $names, SORT_STRING); return $names[0] == $nameA ? -1 : 1; } }

// Sortierfunktion by Prio 
// siehe http://wiki3.redaxo.de?n=R3.Sortiermöglichkeiten 
if (!function_exists('sortArticlesByPrio')) { function sortArticlesByPrio( $artA, $artB) { $prioA = $artA->getPriority(); $prioB = $artB->getPriority(); if ( $prioA == $prioB) { return 0; } return $prioA > $prioB ? +1 : 1; } }

// Sortierfunktion by CreateDate 
// siehe http://wiki3.redaxo.de?n=R3.Sortiermöglichkeiten 
if(!function_exists('sortArticlesByCreateDate')) { function sortArticlesByCreateDate( $artA, $artB) { $createA = $artA->getCreateDate(); $createB = $artB->getCreateDate(); if ( $createA == $createB) { return 0; } return $createA > $createB ? -1 : 1; } }

// Sortierfunktion by UpdateDate 
// siehe http://wiki3.redaxo.de?n=R3.Sortiermöglichkeiten 
if(!function_exists('sortArticlesByUpdateDate')) { function sortArticlesByUpdateDate( $artA, $artB) { $updateA = $artA->getUpdateDate(); $updateB = $artB->getUpdateDate(); if ( $updateA == $updateB) { return 0; } return $updateA > $updateB ? -1 : 1; } }



$start = !empty($_GET['start']) ? (int) $_GET['start'] : 0; // Startitem
$offset = $itemsPerSide; // 10 Items pro Seite
$cats = array( REX_CATEGORY_ID); // alle Kategorien die Du "indizieren" willst REX_CATEGORY_ID

$articles = array();

foreach ( $cats as $catId) {
  $cat = OOCategory::getCategoryById( $catId);
 
  // CatIds die nicht funktionieren aussortieren
  if( $cat === null) {
     continue;
  }

  $cat_articles = $cat->getArticles( true);

  foreach ( $cat_articles as $ooarticle) {
     // keine Startartikel anzeigen
    if ( $ooarticle->isStartPage()) {
       continue;
     }

     // Damit keine Endlosschleife passiert, den Artikel der die Pagination setzt überspringen
     if ( $ooarticle->getId() == REX_ARTICLE_ID) {
        continue;
     }
     $articles[] = $ooarticle;
  }
}

$articles_length = count( $articles);

// Sortieren
if ( $articles_length > 0) {

  if ($sorting_order == "updatedate") {
    usort( $articles, "sortArticlesByUpdateDate");
  }
  elseif ($sorting_order == "prio") {
    usort( $articles, "sortArticlesByPrio");
  }
  elseif ($sorting_order == "name") {
    usort( $articles, "sortArticlesByName");
  }
  elseif ($sorting_order == "createdate") {
    usort( $articles, "sortArticlesByCreateDate");
  }

}

$article_list = array_slice( $articles, $start, $offset);

foreach ( $article_list as $ooarticle) {
	
	if ($ooarticle->isOnline(true)) {
		$articleId = $ooarticle->getId();

		$article = new article();
    $article->setClang($REX['CUR_CLANG']); // lt. Kommentar, openmind, 01-feb-2007
		$article->setArticleId( $articleId);
		$articleContent = $article->getArticle();
		
                // DIV-Container mit Bildern entfernen
#                $articleContent = preg_replace('//', "",$articleContent);
                $articleContent = preg_replace('/<div style=\".*?<\/div>/', "",$articleContent);

// Überschriften zentrieren
$articleContent = str_replace("<h1>", "<tr><td colspan=\"2\"><h1>" , $articleContent);

// Überschriften abschließen
$articleContent = str_replace("</h1>", "</h1></td></tr>", $articleContent);

// Bild durch css die größe ändern lassen 
$articleContent = str_replace("<img", "<tr><td ><img class=\"teaserpic2\" ", $articleContent);


// Absätze in Nachbarzelle legen 
$articleContent = str_replace("<!--Textmodul-->
<p", "</td><td><p align=\"justify\" ", $articleContent);

	

		// Leerzeichen entfernen am Anfang und Ende des Strings
		$articleContent = trim($articleContent);
		
		// Leerzeichen vor </p> einfuegen.
		// Sonst wird das letzte Wort eines Absatzes und das erste Wort 
		// des nachfolgenden Absatzes als ein Wort erkannt
		$articleContent = str_replace("</p>", " </p></td></tr><tr><td colspan=\"2\"><hr noshade size=\"1\"></td></tr>", $articleContent);
		
		// Leerzeichen vor <br /> einfuegen.
		// Sonst wird das letzte Wort einer Zeile und das erste Wort 
		// des nachfolgenden Zeile als ein Wort erkannt
		$articleContent = str_replace("<br />", " <br />", $articleContent);


		$output = "";
		$words = explode(" ",$articleContent);
		$wordsCount = count($words);
    
    if ($wordsCount < $wordsPerArticle) {
      $wEnd = $wordsCount;
      $link = '';
      }
    else {
      $wEnd = $wordsPerArticle;
      $link = '<p>&nbsp;... <a href="'.rex_getUrl($articleId, $REX['CUR_CLANG'], array('goback' => "REX_ARTICLE_ID")).'" title="'. $moreLink_text .'">'. $moreLink_text .'&nbsp;»</a></p></td></tr><tr><td colspan="2"><hr noshade size="1"></td></tr>';
      }
    
    for ($w=0;$w<$wEnd;$w++) {
      $output .= $words[$w]." ";
      }
    
    // Leerzeichen entfernen am Anfang und Ende des Strings
    $output = trim($output);
    
    $isCloseParagraph = substr($output,-4);
    $newString = $link.'</p>';

		if ($isCloseParagraph == '</p>') {
			$output = substr_replace($output,$newString,-4);
		}
		else {
			$output .= $newString;
		}
	
      // opened & closed DIVs/SPANs zählen und ggf. closing Tags ergänzen
      // ----------------------------------------------------------
      // MODIFIED by Sven Albert-Pedersen * alfa-x (at) web (dot) de

      $openedSPANs = substr_count($output, '<span');
      $closedSPANs = substr_count($output, '</span>');
      $countmissingSPANs = $openedSPANs - $closedSPANs;
      
      if ($openedSPANs > $closedSPANs) {
          while ($countmissingSPANs > 0):
              $output .= "</span>";
              $countmissingSPANs = $countmissingSPANs - 1;
          endwhile;
      }

      $openedDIVs = substr_count($output, '<div');
      $closedDIVs = substr_count($output, '</div>');
      $countmissingDIVs = $openedDIVs - $closedDIVs;
      
      if ($openedDIVs > $closedDIVs) {
          while ($countmissingDIVs > 0):
              $output .= "</div>";
              $countmissingDIVs = $countmissingDIVs - 1;
          endwhile;
      }
      // ----------------------------------------------------------
      // END MODIFICATION

		print ''.$output.'';
	}
}

$prevStart = $start - $offset;
if ( $prevStart < 0)
{
   $prevStart = '';
}

$nextStart = $start + $offset;
if ( $nextStart >= $articles_length)
{
   $nextStart = '';
}

print '<tr><td colspan="2">';

$link_format = '<a href="'.rex_getUrl("REX_ARTICLE_ID", $REX['CUR_CLANG'], array('start'=>'%s')).'">%s</a>';

// Vorherige Seite Link
if ( $prevStart !== '') {
  $backLink = sprintf( $link_format, $prevStart, '«&nbsp;'.$backLink_text);
}

// Nächste Seite
if ( $nextStart !== '') {
  $nextLink = sprintf( $link_format, $nextStart, $nextLink_text.'&nbsp;»');
}

if ($backLink != "" AND $nextLink != "") {
	print '<p>'.$backLink.'&nbsp;|&nbsp;'.$nextLink.'</p>';
}
elseif ($nextLink != "") {
	print '<p>'.$nextLink.'</p>';
}
elseif ($backLink != "") {
	print '<p>'.$backLink.'</p>';
}

//endif;

?>
</td></tr></table />
Die zu sortierenden und anzuteasenden Artikel liegen in einer Unterkategorie und der Teaser in der gleichen Unterkategorie mit letzter Prio.

Redaxo 3.1

Im Backend korrekt nach Prio sortiert

Chriz
Beiträge: 47
Registriert: 24. Nov 2006, 17:22

27. Nov 2007, 19:11

Mhh also als ich nach Prio sortiert habe war mein Teaser im Startartikel enthalten.

Wieso sind denn beim Ausgabemodul alle Sortiermöglichkeiten aufgelistet?

Ich bin zwar nicht so der PHP Fachmann, aber lösch doch mal alle anderen Sortiermöglichkeiten und setzt das Teasermodul in den Startartikel der Kategorie.

Goldacker
Beiträge: 148
Registriert: 1. Jul 2007, 13:27
Wohnort: Hamburg / Berlin / Neubrandenburg
Kontaktdaten: Website

bringt nix

27. Nov 2007, 19:30

mein teaser ist auch im startartikel enthalten

die anderen sortiermöglichkeiten sind aufgelistet, da diese zur wahl stehen sollen. hab diese aber auch mal entfernt und hat sich nichts geändert

Goldacker
Beiträge: 148
Registriert: 1. Jul 2007, 13:27
Wohnort: Hamburg / Berlin / Neubrandenburg
Kontaktdaten: Website

Lösung

27. Nov 2007, 21:20

okay also die Prio-sortierfunktion scheint fehler zu haben, denn in der Datenbank sind die Prios auch richtig gesetzt

ich habe nun einfach folgendes entfernt mit erfolg. Zwar nicht schön für die Auswahl von Sortierungen, aber anders gehts wohl nicht

Code: Alles auswählen

// Sortieren
if ( $articles_length > 0) {

  if ($sorting_order == "updatedate") {
    usort( $articles, "sortArticlesByUpdateDate");
  }
  elseif ($sorting_order == "prio") {
    usort( $articles, "sortArticlesByPrio");
  }
  elseif ($sorting_order == "name") {
    usort( $articles, "sortArticlesByName");
  }
  elseif ($sorting_order == "createdate") {
    usort( $articles, "sortArticlesByCreateDate");
  }

}

Zurück zu „Allgemeines [R3]“