[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
REDAXO Forum • [gelöst] Weiterleitung auf Artikel mit nächst höheren Prio
Seite 1 von 1

[gelöst] Weiterleitung auf Artikel mit nächst höheren Prio

Verfasst: 12. Mär 2010, 22:54
von Surkan
Hallo
ich habe ein Problem bei dem ich nicht so ganz weiterkomme:

Ich habe eine "Projekt" Kategorie in der alle 2-3 Monate ein neuer Artikel hinzukommt. Von der Startseite wird gibt es einen direkten Link zu dem Startartikel (Aktuell Projekt-1) der "Projekt"Kategorie.
Nun möchte ich aber - wenn es ein neues Projekt gibt - einen neuen Artikel erstellen (Projekt-2). Dieser soll dann auch über den direkten Link erreicht werden können (und nicht mehr der Artikel von Projekt-1).

Nun habe ich dafür zwei Ansätze:

1. Ich baue den Link von der Startseite so um, dass er immer nur auf die Kategorie verweist (und sich somit den Startartikel selber sucht). Ich müsste dann immer nur den Startartikel ändern sodass der Artikel mit dem aktuellen Projekt der Startartikel ist.
Diese Lösung finde ich nicht so toll, da es auch andere einsetzen sollen (ich glaube ich muss nicht weiter reden...)

2. Ich lasse den direkten Link von der Sartseite auf den Startartikel der "Projekt"Kategorie so wie er ist.
In den Startartikel der "Projekt"Kategorie baue ich aber Weiterleitung ein, die automatisch auf den Artikel weiterleitet der die nächst höhere Prio hat.
Sprich:
Startartikel : Prio 1
Projekt-2 : Prio 2
Projekt-1 : Prio 3
usw.
Das heißt ich müsste nur in die Prio der Artikel eingreifen um die Reihenfolge der Artikel zu bestimmen. Das halte ich für den besseren Weg. Auch um es anderen Leuten zu erklären damit die das anwenden können.

Nur:
Wo finde ich denn eine solche Weiterleitung??? Bzw. geht das überhaupt??? Und wie sieht das ganze dann aus??? Hat jemand vielleicht schon so was???

Surkan

Edit:
Ich nutze Redaxo 4.2.1

Verfasst: 13. Mär 2010, 15:12
von Goldfisch
Weiterleitung auf den Artikel einer Kategorie mit niedrigster Prio ausser Startartikel


Ein Ansatz sowas auf redaxo.de (Doku & Downloads) zu finden:


Weiterleitung
Download - Module - Suchbegriff: Weiterleitung

http://www.redaxo.de/165-0-moduldetails ... dule_id=92


Code: Alles auswählen

if (!$REX["REDAXO"])
{
ob_end_clean();
header("Location: ".rex_getUrl("REX_LINK_ID[1]"));
exit;
}





Artikel in Kategorie, ausser Startartikel

Doku - Entwickler & Admin - 3.6 Object Oriented Framework - 3.6.1 Category - getCategoryById()
http://www.redaxo.de/350-0-getcategorybyid.html


OOCategory::getCategoryById($category_id = false, $clang = false)

$category = OOCategory::getCategoryById(2, 1)



oder


Download - Module - Artikelliste
http://www.redaxo.de/165-0-moduldetails ... dule_id=20


<?php

Code: Alles auswählen

$cat = OOCategory::getCategoryById( 5); // hier die ID der Kategorie

$articles = $cat->getArticles( true); // Alle Artikel der Kategorie auslesen, die Online sind

if ( is_array( $articles) && count( $articles) > 0) {
  echo '<ul class="article-list">';
  foreach ( $articles as $article) {
    // Den aktuellen Artikel nicht verlinken
    if ( $article->getId() == REX_ARTICLE_ID) continue;

    // Startartikel ausblenden
    if ( $article->isStartPage()) continue;

    echo '<li><a href="'.$article->getUrl().'">'.$article->getName().'</a></li>';
   
  }
  echo '</ul>';
} 
?>


damit hat man eigentlich alles beisammen

Code: Alles auswählen

<?php

$cat = OOCategory::getCategoryById($this->getValue("category_id"));
$articles = $cat->getArticles( true); 


if ( is_array( $articles) && count( $articles) > 0) {
  foreach ( $articles as $article) {
    // Den aktuellen Artikel nicht verlinken
    if ( $article->getId() == REX_ARTICLE_ID) continue;
    elseif ( $article->isStartPage()) continue;
    else {
    	$url = $article->getUrl();
    	break;
    }
  }
} 


if (!$REX["REDAXO"] && isset($url))
{
	ob_end_clean();
	header("Location: ".$url);
	exit;
}

?>

Das kann bestimmt noch eleganter machen, aber ist Weg eine Lösung hier zu finden.

Verfasst: 14. Mär 2010, 15:23
von Surkan
Super - das funktioniert ohne ein Problem...

Jetzt hab ich aber ein anderes :-(

Und zwar wird jetzt von dem Startartikel auf den zweiten Artikel weiter geleitet. In dem zweiten (sowie in allen nachfolgenden Artikeln) hab ich ein Modul, mit dem ich jeweils eine Artikel vor und zurück blättern kann (in der aktuellen Kategorie).
Das Problem ist nun, dass das Modul nun auch den Startartikel auflistet der aber nur die Weiterleitung beinhaltet.

Wie kann ich denn in folgenden Code einbauen, dass der Startartikel nicht mir angezeigt wird.

Hier das Modul: http://www.redaxo.de/165-0-moduldetails ... ule_id=321

Ich denke, dass es irgendwo in dem Abschnitt eingebaut werden muss:

Code: Alles auswählen

foreach(OOArticle::getArticlesOfCategory($REX_CAT_ID,TRUE) as $a) { 
    if($a !== NULL) { 

        $id = $a->getId(); 
        $locs2[$id] = $a->getName(); 

        if($id == $REX_ARTIC_ID) { 
          $prev = $last; 
        } 
        if($last == $REX_ARTIC_ID) { 
          $next = $id; 
          //$locs2[] = $a->getName(); 
          break; 
        } 
        $last = $id; 
    } 
} 
Leider hab ich keine Ahnung davon, wie man einen Startartikel ausmacht.
Kann jemand helfen???

Danke

Verfasst: 15. Mär 2010, 18:57
von Goldfisch
stand auch in meiner antwort

$article->isStartPage()

Verfasst: 15. Mär 2010, 21:17
von Surkan
Sorry wenn ich mich zu doof anstelle, aber wenn ich in mein BlätterModul

folgenden Code einbaue,

Code: Alles auswählen

if ($a->isStartPage()) { 
   exit;
   }
dann zeigt er gar nichts an. Weder einen Artikel vor noch einen Artikel zurück.
Ich hab leider nicht so viel Ahnung, aber wo in dem Modul muss ich den Code einbauen???

Hier mal der komplette Modul Code

Code: Alles auswählen

<?php 
$REX_CAT_ID = $this->getValue('category_id'); 
$REX_ARTIC_ID = $this->getValue('article_id'); 
$modVariante = 2; // 1 = Ausgabe Standardtext ; 2 = Ausgabe Artikelname;
// Bezeichnung für Vor- bzw. zurück kann geändert werden
$locs1 = array('vorheriger Artikel','n&auml;chster Artikel');
// ####### Ab hier keine &Auml;nderung notwendig  ####### //
$locs2 = array(); 
$deli = ''; 
$prev = 0; 
$next = 0; 
$last = 0; 

foreach(OOArticle::getArticlesOfCategory($REX_CAT_ID,TRUE) as $a) { 

    if($a !== NULL) { 
        $id = $a->getId(); 
        $locs2[$id] = $a->getName(); 

        if($id == $REX_ARTIC_ID) { 
          $prev = $last; 
          } 
        if($last == $REX_ARTIC_ID) { 
          $next = $id; 
          //$locs2[] = $a->getName(); 
          break; 
          } 
        $last = $id; 
    } 
} 

if ($modVariante == 1) {
  $prevVariante = $locs1[0];
  $nextVariante = $locs1[1];
  }
elseif ($modVariante == 2) {
  $prevVariante = '&nbsp;<img src="'.$REX[HTDOCS_PATH].'/files/back.gif" width="7" alt="<" border="0" height="11"/>&nbsp;'.$locs2[$prev].'&nbsp;';
  $nextVariante = '&nbsp;'.$locs2[$next].'&nbsp;<img src="'.$REX[HTDOCS_PATH].'/files/next.gif" width="7" alt=">" border="0" height="11"/>&nbsp;';

}
if($prev != 0) 
  printf('<div class="back"><br/><a id="back" href="%s">%s</a></div>',rex_getUrl($prev),$prevVariante); 
if($next != 0) { 
  if($prev != 0) echo $deli; 
  printf('<div class="next"><br/><a id="next" href="%s">%s</a></div>',rex_getUrl($next),$nextVariante);  
} 

unset($id,$a,$last,$next,$prev,$deli,$locs1,$locs2); 
?>
Thx

Verfasst: 16. Mär 2010, 12:04
von Surkan
Danke - gelöst

Code: Alles auswählen

    if($a !== NULL && !$a->isStartPage() ) {
Surkan