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?
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/
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/
-
- Beiträge: 148
- Registriert: 1. Jul 2007, 13:27
- Wohnort: Hamburg / Berlin / Neubrandenburg
- Kontaktdaten: Website
Code
Das Ausgangsmodul wurde nur leicht von mir modifiziert
Eingabe:
Ausgabe
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
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>
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> ... <a href="'.rex_getUrl($articleId, $REX['CUR_CLANG'], array('goback' => "REX_ARTICLE_ID")).'" title="'. $moreLink_text .'">'. $moreLink_text .' »</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, '« '.$backLink_text);
}
// Nächste Seite
if ( $nextStart !== '') {
$nextLink = sprintf( $link_format, $nextStart, $nextLink_text.' »');
}
if ($backLink != "" AND $nextLink != "") {
print '<p>'.$backLink.' | '.$nextLink.'</p>';
}
elseif ($nextLink != "") {
print '<p>'.$nextLink.'</p>';
}
elseif ($backLink != "") {
print '<p>'.$backLink.'</p>';
}
//endif;
?>
</td></tr></table />
Redaxo 3.1
Im Backend korrekt nach Prio sortiert
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.
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.
-
- Beiträge: 148
- Registriert: 1. Jul 2007, 13:27
- Wohnort: Hamburg / Berlin / Neubrandenburg
- Kontaktdaten: Website
bringt nix
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
die anderen sortiermöglichkeiten sind aufgelistet, da diese zur wahl stehen sollen. hab diese aber auch mal entfernt und hat sich nichts geändert
-
- Beiträge: 148
- Registriert: 1. Jul 2007, 13:27
- Wohnort: Hamburg / Berlin / Neubrandenburg
- Kontaktdaten: Website
Lösung
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
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");
}
}