[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Schlauer Teaser. Wie kann man das realisieren - 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/
Benutzeravatar
Cabby
Beiträge: 104
Registriert: 21. Sep 2006, 13:24
Wohnort: Bad Salzuflen
Kontaktdaten: Website

Schlauer Teaser. Wie kann man das realisieren

16. Okt 2009, 14:06

Hallo,

ich habe ein kleines Problem bezüglich einer Artikelliste.

Ich möchte eine Liste mit allen Artikeln darstellen ( bis dahin kein Problem) und wenn ein Artikel dann angezeigt wird, unterhalb des Artikels die nächsten 4 Artikel anzeigen lassen. ( Auch das klappt)

Nun aber zu meinem Problem:

Ich habe das Skript so modifiziert, dass immer nur die nächsten Artikel anteast werden. Allerdings möchte unser Kunde, dass immer die 4 nächsten Artikel angezeigt werden - auch wenn man beispielsweise gerade den vorletzten Artikel geöffnet hat.

Wir kann ich es realisieren, dass wenn nicht genug nachfolgende Artikel zum anteasen bereitstehen, einfach wieder vorne in der Liste angefangen wird?

Beispiel:

Ich habe 10 Artikel

Wenn Artikel 5 gelesen wird, werden die Artikel 6,7,8,9 angeteast.

Wenn aber Artikel 8 gelesen wird, sollen die Artikel 9,10,1,2 angeteast werden.

Hier mein bisheriger Code:


Code: Alles auswählen

<div class="linie"></div>
<div class="second_content">

<?php

if (!function_exists('truncate'))
{
 function truncate($string, $length = 80, $etc = '...', $break_words = false)
 {
    if ($length == 0)
       return '';
    if (strlen($string) > $length)
    {
       $length -= strlen($etc);
       if (!$break_words)
          $string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $length +1));
       return substr($string, 0, $length).$etc;
    }
    else
       return $string;
 }
}


// 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;
 }
}

// 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;
 }
}

$catId = 'REX_VALUE[1]';
$lettersPerArticle = 'REX_VALUE[2]';
$sorting_order = 'CreateDate';
$mediaOut = '';

$itemsPerSide = "REX_VALUE[4]"; // Anzahl der News die gezeigt werden sollen

$cat = OOCategory::getCategoryById($catId);
$childs = $cat->getArticles( true);

if ( is_array( $childs)) {
 if('REX_VALUE[5]') {
    usort($childs, 'sortArticlesBy'.$sorting_order);
 }

  $counter = 1;
  foreach ( $childs as $child)
      {

    $id = $child->getId();

    // FILTER

    // Startartikel ausblenden
    if ( $id == REX_VALUE[1]) continue;

    // Den aktuellen Artikel nicht verlinken
    if ($id == REX_ARTICLE_ID) continue;

    // Ältere Artikel nicht anzeigen
    if ($id < REX_ARTICLE_ID) continue;


    $article = new article( $id);
    $name = $child->getName();         // Artikel Name
    $date = $child->getCreateDate();  // Erstellungs Datum
    $metadesc = $child->getDescription();  // Artikel Beschreibung
    $metapic = $child->getFile();  // Meta Bild


    // Ausgabe $out fuellen
    if($counter <= $itemsPerSide)
      {

print '<div class="infobox">';
print '<a href="'.$child->getUrl().'"><img src="files/'.$metapic .'" title="'.$name.' - Mehr erfahren &raquo;" alt="'.$name.' Vorschaubild"/></a>';
print '<h2><a href="'.$child->getUrl().'" title="'.$name.' - Mehr erfahren &raquo;">'.$name.'</a></h2>';
print '<p>'.$metadesc.'</p></div>';
 }

 $counter++;

  }
}
?>
</div><!-- Ende 2nd_content -->
Wäre super, wenn jemand einen Ansatz hätte.

Viele Grüße
Cabby
<love>redaxo</love>
Twitter @tobias_gerlach

Benutzeravatar
joachim123
Beiträge: 73
Registriert: 5. Feb 2007, 21:41
Wohnort: München
Kontaktdaten: Website

17. Okt 2009, 02:28

Moin,

vielleicht hilft Dir sowas:

Code: Alles auswählen

<?php
    function get_next_articles($arr, $start = 0) {
    
        // artikel sammeln
        $articles_sel  =  array();        
        for ($i = $start; $i < count($arr); $i++) {
        
            // filtern...
            // ..........
            
            $articles_sel[] =  $arr[$i];
            if(count($articles_sel) == 4) break;        
            
            if ($i + 1 == count($arr)) $i = -1;            
        }         
        return $articles_sel;
    }

    // nehmen wir an, in Deinem Array sind 10 Artikel:
    $articles_all =  array("a1","a2","a3","a4","a5","a6","a7","a8","a9","a10");
    
    // nehmen wir an, Du willst alles ab 4 sehen:
    echo "<pre>";
    print_r(get_next_articles($articles_all, 4));
    echo "</pre>";

    // nehmen wir an, Du willst alles ab 8 sehen:
    echo "<pre>";
    print_r(get_next_articles($articles_all, 8));
    echo "</pre>";
?>
Grüsse, Joachim
am Ende wird alles gut.

Benutzeravatar
Cabby
Beiträge: 104
Registriert: 21. Sep 2006, 13:24
Wohnort: Bad Salzuflen
Kontaktdaten: Website

20. Okt 2009, 13:12

Vielen Dank. Ich werde das einmal testen.

Grüße
Cabby
<love>redaxo</love>
Twitter @tobias_gerlach

Zurück zu „Allgemeines [R4]“