[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Sortieren funktioniert nur im Home-Verzeichnis - 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/
derruben
Beiträge: 6
Registriert: 28. Mär 2011, 13:40

Sortieren funktioniert nur im Home-Verzeichnis

9. Okt 2013, 14:43

Hallo Forum,

eigentlich findet sich fast immer eine Antwort im Forum. Heute muss ich mal eine Frage beisteuern:

Ich habe in einer Redaxo 4.1 Installation eine Artikelliste mit Sortierung gebastelt, die aber nur funktioniert, wenn der Artikel mit der Liste im Home-Verzeichnis liegt?!

Grundlage ist das multilist-Modul von Dennis Wenger. Dazu habe ich einen Code-Snipsel aus dem Forum, dass nach einem Value[1] des ersten Moduls (hier liegt ein Datum) sortiert wird.

Das Modul funktioniert prima, wenn ich im Home-Verzeichnis bin. Sobald ich in einer Kategorie bin, wird nicht sortiert.

Danke für Hilfe und Grüße
Ruben

... und hier der Ausgabe-Code:

Code: Alles auswählen

<?php

//### Functions ###

// Filtern
if(!function_exists("filterArticles")){
function filterArticles($artarr, $withstartpage='0', $onlyteaser='0', $metatime='0'){
   $show_articles = array();
   foreach ($artarr as $thearticle){
      if(REX_ARTICLE_ID != $thearticle->getValue('id')){ //Selbstauflistung unterbinden
           //Startartikel
           if($withstartpage == '1' || $thearticle->getValue('startpage') != '1'){
              //Teaser
         if(($onlyteaser != '1' && $onlyteaser != '3') || $thearticle->getValue('teaser') == '1'){
            //Datum: online_from / online_to
            if($metatime != '1' || ($thearticle->getValue('online_from') <= date('U') && $thearticle->getValue('online_to') >= date('U'))){
               $show_articles[] = $thearticle;
            }
         }
           }
      }
   }
   return $show_articles;
}
}

// Sortierfunktion
if(!function_exists("nachDatumsortierenREX_VALUE[6]")){
function nachDatumsortierenREX_VALUE[6]( $artA, $artB) {


      $sliceArtA = OOArticleSlice::getFirstSliceForArticle( $artA->getId() );
      $sliceArtB = OOArticleSlice::getFirstSliceForArticle( $artB->getId() );
       
       
        // REX_VALUE[1] abfragen
        $updateA = $sliceArtA->getValue(1);
        $updateB = $sliceArtB->getValue(1);
       
   $updateA = ereg_replace("\.","",$updateA);
   $Tag = substr($updateA,0, -6);
   $Monat = substr($updateA,2, -4);
   $Jahr = substr($updateA,4, 4);
   $updateA = $Jahr.$Monat.$Tag;

   $updateB = ereg_replace("\.","",$updateB);
   $Tag = substr($updateB,0, -6);
   $Monat = substr($updateB,2, -4);
   $Jahr = substr($updateB,4, 4);
   $updateB = $Jahr.$Monat.$Tag;

        // Werte vergleichen
        if($updateA == $updateB)
          return 0;
  

  if('REX_VALUE[6]') return $updateA > $updateB ? -1 : 1;
   else  return $updateA < $updateB ? -1 : 1;


}
}



if(!function_exists("generatePagination")){
function generatePagination($articles, $listpage='0', $itemsperpage, $listnum){

   $GETPARAMS = $_GET;
   unset($GETPARAMS['list'.$listnum.'page']);

   if($itemsperpage > 0){
   $prevtext = "&larr;";
   $nexttext = "&rarr;";
   
   $itemcount = count($articles);
   $output = '';
   $pagecount = ceil($itemcount / $itemsperpage);
   if($pagecount > 1){
      if($listpage > $pagecount) $listpage = $pagecount;
      
      $prevpagenum = -1;
      $nextpagenum = -1;
      if($listpage > 0) $prevpagenum = $listpage-1;
      if($listpage < ($pagecount-1)) $nextpagenum = $listpage+1;
      
      
      $output = '<div id="pagination">';
      if($prevpagenum >= 0) $output .= '<a href="'.rex_getUrl(REX_ARTICLE_ID).'?list'.$listnum.'page='.$prevpagenum.'&'.http_build_query($GETPARAMS).'" id="prevlink">'.$prevtext.'</a>&nbsp;&nbsp;';
      for($pagenum = 0; $pagenum < $pagecount; $pagenum++){
         if($pagenum == $listpage){
            $output .= '<b>'.($pagenum+1).'</b>&nbsp;&nbsp;';
         }
         else{
            $output .= '<a href="'.rex_getUrl(REX_ARTICLE_ID).'?list'.$listnum.'page='.$pagenum.'&'.http_build_query($GETPARAMS).'">'.($pagenum+1).'</a>&nbsp;&nbsp;';
         }
      }
      if($nextpagenum > 0) $output .= '<a href="'.rex_getUrl(REX_ARTICLE_ID).'?list'.$listnum.'page='.$nextpagenum.'&'.http_build_query($GETPARAMS).'" id="nextlink">'.$nexttext.'</a>';
      $output .= '</div>';
   }
   return $output;

   }
   else{
      return "";
   }
}
}


if(!function_exists("limitArticles")){
function limitArticles($articles, $listpage = '0', $itemsperpage){

   if($itemsperpage){
   $itemcount = count($articles);
   $pagecount = ($itemcount / $itemsperpage);
   if($listpage > $pagecount) $listpage = $pagecount;
   $offset = $listpage*$itemsperpage;
   return array_slice ($articles, $offset ,$itemsperpage);
   }
   return $articles;
}
}


if(!function_exists("createArticleOutput")){
function createArticleOutput($article, $thumbsize, $fromMetadata, $withmorelink){

         global $REX;
    $articleId = $article->getId();
    if($fromMetadata != '1'){ // from Metadata
       $headline = $article->getValue('name');
      $newstext = $article->getValue('description');
      $image = $article->getValue('file');
    }
    else{ // from first Slice
        if($firstSlice = OOArticleSlice::getFirstSliceForArticle($articleId)){
           $headline = $firstSlice->getValue(3);
           $newstext = $firstSlice->getValue(1);

if ($firstSlice->getValue(2) != "") {
           $newstext .= ' – '.$firstSlice->getValue(2);
}

           $image = $firstSlice->getFile(1);
        }
   }
      $output .= '<div>';
      if($thumbsize != '0'){
         $output .= '<div class="newsimage">';
         if($image != ''){
            $output .= '<a href="'.rex_getUrl($articleId).'"><img src="'.$REX[HTDOCS_PATH].'index.php?rex_resize='.$thumbsize.'a__'.$image.'"></a>';
         }
         $output .= '</div>';
      }
      $output .= '<div class="newstext"><b>'.$headline.$updateA.'</b><br>';
      $output .= $newstext;
      if($withmorelink<2) $output .= '<br><a class="more" title="Den gesamten Text anzeigen" href="'.rex_getUrl($articleId).'">&raquo; anzeigen</a>';
       $output .= '</p></div></div>';

   return $output;
}
}

// Ausgabe-Code erzeugen

//nummerierung für GET
if($MLnum <0) $MLnum = 1;
else $MLnum ++;

$articles = OOArticle::getArticlesOfCategory('REX_VALUE[1]', true);
if (is_array($articles))
{
   //Filtern
   $articles = filterArticles($articles, 'REX_VALUE[2]', 'REX_VALUE[3]', 'REX_VALUE[4]');
}
if (count($articles) > 0)
{   //sortieren   



   if('REX_VALUE[5]'){
      usort($articles, 'nachDatumsortierenREX_VALUE[6]');
   }

   //generate Pagination
   $pagination = "";
   if('REX_VALUE[9]' > 0){
      $listpage = !empty($_GET['list'.$MLnum.'page']) ? (int) $_GET['list'.$MLnum.'page'] : 0;
      if('REX_VALUE[10]' == '1'){
         $pagination = generatePagination($articles, $listpage, 'REX_VALUE[9]', $MLnum);
      }
      //Limit
      $articles = limitArticles($articles, $listpage, 'REX_VALUE[9]');
   }
   if(count($articles) > 0){
      $output = '<div class="newslist">';
      foreach ($articles as $var)
      {
         $output .= createArticleOutput($var, REX_VALUE[8], 'REX_VALUE[7]', 'REX_VALUE[3]');
      }
      $output .= '</div>';
      
      echo $output.'<br>'.$pagination;
      
   }
}

?>
P.S. REX_VALUE[6] ist die Variable für auf- bzw. absteigende Sortierung.

Benutzeravatar
runstop64
Beiträge: 369
Registriert: 23. Okt 2012, 21:34
Wohnort: Hamburg
Kontaktdaten: Website Facebook Twitter

Re: Sortieren funktioniert nur im Home-Verzeichnis

9. Okt 2013, 20:17

Hi derruben,

poste doch auch mal die Moduleingabe bitte, damit nachvollziehbar ist, welche Werte die REX_VALUEs annehmen können.
Viele Grüße,
Daniel


studio-ahoi.de | Referenzen | Friends Of REDAXO

derruben
Beiträge: 6
Registriert: 28. Mär 2011, 13:40

Re: Sortieren funktioniert nur im Home-Verzeichnis

10. Okt 2013, 12:13

Hallo Daniel,

vielen Dank für deine Hilfe! Was wie?!
Ja, während ich so die Moduleingabe mit Kommentaren versehe, fällt mir auf, dass ich eine nicht mehr benötigte Variable rausgeschmissen habe, die ich aber in der -ausgabe noch abfrage. Warum es an manchen Stellen trotzdem funktionierte, weiß ich nicht, aber jetzt geht's!

Danke an alle, deren Gedankengut hier eingeflossen ist.

Hier der vollständige Code für Ein- und Ausgabe einer einfachen Artikelliste, die nach einem Datum sortiert wird, welches man nicht per Meta-Daten, sondern per Modul angeben kann.
(Sortiert wird nach Datum aus Rex_Value[1] der einzelnen Artikel. Alle nicht benötigten Variablen habe ich per input-type hidden festgelegt - so lassen sie sich einfach wieder beleben lassen.):

Code: Alles auswählen

<?php
//Funktionen

function PrintCategorieOptions($cat = null) {
   $selectCats = null;
   if ( is_int( $cat)) {
      $selectCats = array( OOCategory::getCategoryById( $cat));
   } else {
      $selectCats = OOCategory::getRootCategories();
   }

   foreach ( $selectCats as $selectCat) {
      add_cat_option( $selectCat);
   }
}


function add_cat_option( &$cat, $groupName = '') {
   if( empty( $cat)) {
      return;
   }

   print_link($cat->getName(), $cat->getId(), $groupName);

   if ( $cat->getChildren()) {
      $childs = $cat->getChildren();
      
      foreach ( $childs as $child) {
         if ($child->getChildren()) {
            add_cat_option( $child, $groupName."&nbsp;&nbsp;");
         } else {
            add_cat_option( $child, $groupName."&nbsp;&nbsp;");
         }
      }
   }
}

function print_link($catName, $catId, $groupName) {
   global $selectedCat;
   if ( "REX_VALUE[1]" == $catId) {
      // selected
      echo "<option value=\"" . $catId . "\" selected>" . $groupName.$catName . "</option>\n";
   } else {
      echo "<option value=\"" . $catId . "\">" . $groupName.$catName . "</option>\n";
   }
}

?>

<?php

$thumbsize = 0;
if("REX_VALUE[8]" && !is_nan("REX_VALUE[8]")) $thumbsize = "REX_VALUE[8]";

?>

<table border="0">

<tr>
   <td>&nbsp;</td>
   <td>Kategorie:</td>
   <td><select name="VALUE[1]">
   <?php PrintCategorieOptions(); ?>
   </select></td>
</tr>

<tr>
     <td><input type="hidden" name="VALUE[2]" value="0"></td> <!-- Startartikel mit auflisten? -->
</tr>

<tr>
    <td><input type="hidden" name="VALUE[3]" value="0"></td> <!-- Alle (mit mehr-Link) -->
</tr>

<tr>
      <td><input type="hidden" name="VALUE[4]" value="0"></td> <!-- Nur im Metadaten-Zeiraum anzeigen? -->
</tr>

<tr>
   <td>&nbsp;</td>
   <td>Sortieren:</td>
   <td>
   <select  name="VALUE[6]">
   <option value="0" <?php if("REX_VALUE[6]" == "0") echo  'selected'; ?>>aufsteigend</option>
   <option value="1" <?php if("REX_VALUE[6]" == "1") echo  'selected'; ?>>absteigend</option>
   </select></td>
</tr>

<tr>
    <td><input type="hidden" name="VALUE[7]" value="1"></td> <!-- first Slice -->
</tr>

<tr>
   <td><input type="hidden" name="VALUE[8]" value="0"></td> <!-- Thumbnail-Gr&ouml;&szlig;e (0 f&uuml;r nicht anz.) -->
</tr>

<tr>
   <td>&nbsp;</td>
   <td>Anzahl an Einträgen (leer f&uuml;r alle): </td>
   <td><input type="text" length="3" name="VALUE[9]" value="REX_VALUE[9]"></td>
</tr>

<tr>
   <td><input type="hidden"name="VALUE[10]" value="0"></td> <!-- Blätterbar -->
</tr>

</table>

Code: Alles auswählen

<?php

//### Functions ###

// Filtern
if(!function_exists("filterArticles")){
function filterArticles($artarr, $withstartpage='0', $onlyteaser='0', $metatime='0'){
   $show_articles = array();
   foreach ($artarr as $thearticle){
      if(REX_ARTICLE_ID != $thearticle->getValue('id')){ //Selbstauflistung unterbinden
           //Startartikel
           if($withstartpage == '1' || $thearticle->getValue('startpage') != '1'){
              //Teaser
         if(($onlyteaser != '1' && $onlyteaser != '3') || $thearticle->getValue('teaser') == '1'){
            //Datum: online_from / online_to
            if($metatime != '1' || ($thearticle->getValue('online_from') <= date('U') && $thearticle->getValue('online_to') >= date('U'))){
               $show_articles[] = $thearticle;
            }
         }
           }
      }
   }
   return $show_articles;
}
}

// Sortierfunktion
if(!function_exists("nachDatumsortierenREX_VALUE[6]")){
function nachDatumsortierenREX_VALUE[6]( $artA, $artB) {


      $sliceArtA = OOArticleSlice::getFirstSliceForArticle( $artA->getId() );
      $sliceArtB = OOArticleSlice::getFirstSliceForArticle( $artB->getId() );
       
       
        // REX_VALUE[1] abfragen
        $updateA = $sliceArtA->getValue(1);
        $updateB = $sliceArtB->getValue(1);
       
   $updateA = ereg_replace("\.","",$updateA);
   $Tag = substr($updateA,0, -6);
   $Monat = substr($updateA,2, -4);
   $Jahr = substr($updateA,4, 4);
   $updateA = $Jahr.$Monat.$Tag;

   $updateB = ereg_replace("\.","",$updateB);
   $Tag = substr($updateB,0, -6);
   $Monat = substr($updateB,2, -4);
   $Jahr = substr($updateB,4, 4);
   $updateB = $Jahr.$Monat.$Tag;

        // Werte vergleichen
        if($updateA == $updateB)
          return 0;
  

  if('REX_VALUE[6]') return $updateA > $updateB ? -1 : 1;
   else  return $updateA < $updateB ? -1 : 1;


}
}



if(!function_exists("generatePagination")){
function generatePagination($articles, $listpage='0', $itemsperpage, $listnum){

   $GETPARAMS = $_GET;
   unset($GETPARAMS['list'.$listnum.'page']);

   if($itemsperpage > 0){
   $prevtext = "&larr;";
   $nexttext = "&rarr;";
   
   $itemcount = count($articles);
   $output = '';
   $pagecount = ceil($itemcount / $itemsperpage);
   if($pagecount > 1){
      if($listpage > $pagecount) $listpage = $pagecount;
      
      $prevpagenum = -1;
      $nextpagenum = -1;
      if($listpage > 0) $prevpagenum = $listpage-1;
      if($listpage < ($pagecount-1)) $nextpagenum = $listpage+1;
      
      
      $output = '<div id="pagination">';
      if($prevpagenum >= 0) $output .= '<a href="'.rex_getUrl(REX_ARTICLE_ID).'?list'.$listnum.'page='.$prevpagenum.'&'.http_build_query($GETPARAMS).'" id="prevlink">'.$prevtext.'</a>&nbsp;&nbsp;';
      for($pagenum = 0; $pagenum < $pagecount; $pagenum++){
         if($pagenum == $listpage){
            $output .= '<b>'.($pagenum+1).'</b>&nbsp;&nbsp;';
         }
         else{
            $output .= '<a href="'.rex_getUrl(REX_ARTICLE_ID).'?list'.$listnum.'page='.$pagenum.'&'.http_build_query($GETPARAMS).'">'.($pagenum+1).'</a>&nbsp;&nbsp;';
         }
      }
      if($nextpagenum > 0) $output .= '<a href="'.rex_getUrl(REX_ARTICLE_ID).'?list'.$listnum.'page='.$nextpagenum.'&'.http_build_query($GETPARAMS).'" id="nextlink">'.$nexttext.'</a>';
      $output .= '</div>';
   }
   return $output;

   }
   else{
      return "";
   }
}
}


if(!function_exists("limitArticles")){
function limitArticles($articles, $listpage = '0', $itemsperpage){

   if($itemsperpage){
   $itemcount = count($articles);
   $pagecount = ($itemcount / $itemsperpage);
   if($listpage > $pagecount) $listpage = $pagecount;
   $offset = $listpage*$itemsperpage;
   return array_slice ($articles, $offset ,$itemsperpage);
   }
   return $articles;
}
}


if(!function_exists("createArticleOutput")){
function createArticleOutput($article, $thumbsize, $fromMetadata, $withmorelink){

         global $REX;
    $articleId = $article->getId();
    if($fromMetadata != '1'){ // from Metadata
       $headline = $article->getValue('name');
      $newstext = $article->getValue('description');
      $image = $article->getValue('file');
    }
    else{ // from first Slice
        if($firstSlice = OOArticleSlice::getFirstSliceForArticle($articleId)){
           $headline = $firstSlice->getValue(3);
           $newstext = $firstSlice->getValue(1);

if ($firstSlice->getValue(2) != "") {
           $newstext .= ' – '.$firstSlice->getValue(2);
}

           $image = $firstSlice->getFile(1);
        }
   }
      $output .= '<div>';
      if($thumbsize != '0'){
         $output .= '<div class="newsimage">';
         if($image != ''){
            $output .= '<a href="'.rex_getUrl($articleId).'"><img src="'.$REX[HTDOCS_PATH].'index.php?rex_resize='.$thumbsize.'a__'.$image.'"></a>';
         }
         $output .= '</div>';
      }
      $output .= '<div class="newstext"><b>'.$headline.$updateA.'</b><br>';
      $output .= $newstext;
      if($withmorelink<2) $output .= '<br><a class="more" title="Den gesamten Text anzeigen" href="'.rex_getUrl($articleId).'">&raquo; anzeigen</a>';
       $output .= '</p></div></div>';

   return $output;
}
}

// Ausgabe-Code erzeugen

//nummerierung für GET
if($MLnum <0) $MLnum = 1;
else $MLnum ++;

$articles = OOArticle::getArticlesOfCategory('REX_VALUE[1]', true);
if (is_array($articles))
{
   //Filtern
   $articles = filterArticles($articles, 'REX_VALUE[2]', 'REX_VALUE[3]', 'REX_VALUE[4]');
}
if (count($articles) > 0)
{   //sortieren   

      usort($articles, 'nachDatumsortierenREX_VALUE[6]');

   //generate Pagination
   $pagination = "";
   if('REX_VALUE[9]' > 0){
      $listpage = !empty($_GET['list'.$MLnum.'page']) ? (int) $_GET['list'.$MLnum.'page'] : 0;
      if('REX_VALUE[10]' == '1'){
         $pagination = generatePagination($articles, $listpage, 'REX_VALUE[9]', $MLnum);
      }
      //Limit
      $articles = limitArticles($articles, $listpage, 'REX_VALUE[9]');
   }
   if(count($articles) > 0){
      $output = '<div class="newslist">';
      foreach ($articles as $var)
      {
         $output .= createArticleOutput($var, REX_VALUE[8], 'REX_VALUE[7]', 'REX_VALUE[3]');
      }
      $output .= '</div>';
      
      echo $output.'<br>'.$pagination;
      
   }
}

?>
Werde es mal weiter testen, aber offenbar war es das! :)

Viele Grüße
Ruben

Zurück zu „Allgemeines [R4]“