[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
automatisch artikel verschieben - 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/
matthias.benz
Beiträge: 3
Registriert: 23. Nov 2007, 11:15

automatisch artikel verschieben

27. Nov 2007, 09:51

hallo,

ich habe da mal eine frage, das forum habe ich schon durchsucht, bin aber nicht wirklich weiter gekommen.
mein anliegen ist folgendes, ich habe ein "presse" bereich, in dem liegen artikel aus diesem jahr. nach aublauf der gültigkeit,z.b. der 31.12.2007, sollen diese artikel in eine bestimmte kategorie verschoben werden. also alle artikel aus dem jahr 2007 sollen nach ablauf der zeitscheibe, 31.12.2007, in die kategorie archiv->presse->2007 verschobenwerden. das ganze soll natürlich automatisch laufen.
ich habe im forum ein beitrag gefunden der eine methode vorstellt, movearticle() (oder so), weiss aber nicht wie und wo ich einbinden kann.
kann mir jemand mit diesem problem helfen?
grüße

zehbaeh
Beiträge: 556
Registriert: 17. Okt 2006, 11:52
Wohnort: Solingen

27. Nov 2007, 16:01

Was Du suchst ist die Funktion rex_moveArticle aus functions_rex_generate.inc.php

Allerdings ist damit alleine nur mit Vorarbeit (sprich Anlegen) aller möglichen Zielarchive was anzufangen, also nicht wirklich automatisch.

Eine theo. Funktion dazu könnte wie unten angegeben aussehen.
Theo. deswegen, weil diese Funktionen nicht vorhandene oder nicht implementierte Funktionen zur Verarbeitung verwendet. Diese müsstest Du daher selber implementieren.

Im einzelnen sind dies:
1. rex_CopyCategory (ist vorhanden aber lediglich ein Dummy, daher ohne Funktion)
2. rex_renameCategory (nicht vorhanden)
3. rex_deleteCategory (nicht vorhanden)
4. rex_setArticleTemplateId (nicht vorhanden, der entsprechene Part könnte auch entfallen wenn die Funktionalität nicht benötigt wird).

Eine mögliche Implementierung:

Code: Alles auswählen

/**
 * Artikel archivieren "on the fly"
 *
 * @param rex_article $article
 * @param integer $arcCatId Id der Archiv-Kategorie
 * @param integer $arcCatYearTplId Id der Vorlage für ein Jahresarchiv
 * @param integer $arcArtTplId Id des Templates des archivierten Artikels
 * @return array (boolean,integer) umleitung ins archiv,fehlercode
 */
function archiveCheckIn($article, $arcCatId, $arcCatYearTplId, $arcArtTplId=0)
{
    global $REX;
    
    // Datum des Artikels im aktuellen Jahr?
    $today   = getdate();
    $artDate = getdate($article->getValue('createdate'));
    if($today['year'] == $artDate['year'])
        // Ja, keine weiteren Aktionen. Artikel anzeigen.
        return array(FALSE, 0);
    
    // Artikel bereits archiviert?
	$artPath = explode('|', $article->getValue('path'));
	if(in_array($arcCatId, $artPath)) 
	    // Ja, keine weiteren aktionen. Artikel anzeigen.
	    return array(FALSE, 0);
	    
    // Nein, Artikel verschieben
    $arcYear   = (string)$artDate['year'];
    $clang     = $REX['CUR_CLANG'];
    $artId     = $article->getValue('article_id');
    $artCatId  = $article->getValue('category_id');
    $arcChilds = OOCategory::getChildrenById($arcCatId, FALSE, $clang);
	$yearCatId = 0;
	
	// Zum Jahr passende Archiv-Kategorie suchen
	foreach($arcChilds as $arcCat) 
	    if($arcCat->getName() == $arcYear) {
	        // Passende Kategorie gefunden
	        $yearCatId = $arcCat->getId();
	        break;
	    }

	// Jahreskategorie vorhanden?
	if($yearCatId == 0) {
	    // Nein, erstellen aus Vorlage!

	    // Archiv - arcCatId überhaupt gültig?
	    $result = OOCategory::getCategoryById($arcCatId, $clang);
	    if($result === NULL)
	        // Nein, abbrechen!
	        return array(FALSE, 1);
	        
	    // Ja, Kategorienvorlage ins Archiv kopieren 
	    $yearCatId = rex_copyCategory($arcCatYearTplId, $arcCatId);
	    if($yearCatId === FALSE)
            // Kopieren hat nicht funktioniert, abbrechen!
            return array(FALSE, 2);
            
        // Kopierte Kategorie in Jahreszahl umbenennen (-1 = alle Sprachen)
        $result = rex_renameCategory($yearCatId, $arcYear, -1);
	    if(!$result) {
            // Umbenennen hat nicht funktioniert!
            // Kategory wieder entfernen und abbrechen.
            $result = rex_deleteCategory($yearCatId);
            return array(FALSE, 3 + $result? 0 : 1);
         }
	}
	// Artikel verschieben
	$result = rex_moveArticle($artId, $artCatId, $yearCatId);
	if($result === FALSE)
	    // Hat nicht funktioniert, abbrechen!
	    return array(FALSE, 5);
	
	// Umleitung auf den Artikel im Archiv in den Header schreiben
	rex_redirect($artId, $clang);
	
	// Template des Artikels wenn archiviert ändern?
	if($arcArtTplId) {
	    // Ja, neue TemplateId zuweisen

	    // ggf. sprachspez. Templates wenn negativ!?
	    list($arcArtTplId, $arcArtTplLng) = ($arcArtTplId < 0)
	        ? array(abs($arcArtTplId) + $clang, $clang)
	        : array($arcArtTplId, -1);
	        
	    $result = rex_setArticleTemplateId($artId, $arcArtTplId, $arcArtTplLng);
	    if(!$result)
	        // Hat nicht funktioniert, trotzdem umleitung signalisieren
	        // aber Fehlercode setzen.
	        return array(TRUE, 6);
	}
	// Alles Ok, umleitung signalisieren
	return array(TRUE, 0);
}
Verwendung in einem Template:

list($redirect, $errorCode) = archiveCheckIn($this, 100, 200, 10);
----FEHLERBEHANDLUNG---
if(!$redirect) {
----TEMPLATE--- wie gehabt
} else
----NICHTS WEITER ANZEIGEN, DA UMGELEITET

100 wäre bsp. die Id der Oberkategorie des Archiv (bei dir archiv->presse)
200 wäre bsp. die Id einer Vorlage für ein neues Jahresarchiv
10 wäre bsp. die TemplateId die der archivierte Artikel benutzen soll (optional). Mit negativer Angabe würde basierend auf der Sprachid ein entsprechendes (10...) für die jeweilige Sprache Template verwendet.
Daher TemplateId = 10 Vorlage Template für Sprache mit Id = 0,
11 Vorlage Template für Sprache mit Id = 1, etc..pp

Aemilia
Beiträge: 136
Registriert: 6. Jul 2007, 12:14
Wohnort: Friedrichsdorf
Kontaktdaten: Website Facebook

21. Okt 2008, 11:59

Hat sich in dieser Hinsicht etwas getan? Hat das funktioniert?

Ich benötige ebenfalls eine Art Archivierungstool. Am besten so, dass immer nur die 10 aktuellsten Artikel in der Übersicht dargestellt werden, und alles, was nach dem 10. Artikel kommt wird archiviert.

Hat da jemand nen Tip?

Danke!
lg
aemilia

Benutzeravatar
Niki
Beiträge: 249
Registriert: 24. Aug 2004, 22:11
Wohnort: Frankfurt Main

1. Nov 2008, 12:17

Ich wäre für einen Tip auch dankbar. Ich suche nämlich dasselbe. :)

Gruß,
Niki

Aemilia
Beiträge: 136
Registriert: 6. Jul 2007, 12:14
Wohnort: Friedrichsdorf
Kontaktdaten: Website Facebook

2. Nov 2008, 16:01

Hallo Niki,

ich habe es jetzt so gelöst:

Startartikel: Hier habe ich ein Teasermodul eingebaut, welches immer die letzten 10 Artikel der Kategorie anzeigt.

Archiv: Das Archiv ist ein offline-gestellter Unterartikel im gleichen Verzeichnis, in dem auch der Startartikel liegt. hier habe ich auch das Teasermodul eingebaut, welches aber alle Artikel aus der Kategorie anteasert.

So funktioniert es sehr gut. Das Archiv habe ich dann einfach über die ID des Archiv-Artikels im Startartikel verlinkt. fertig.

Beispiel: www.stefanwinter.com --> Arbeiten oder --> freie Arbeiten

einmal anlegen, aber aktualisiert sich selbst. :-)

Hoffe, dies hilft dir auch weiter?

lg aemilia

Benutzeravatar
Koala
Beiträge: 1612
Registriert: 3. Okt 2005, 13:20

Artikel archivieren "on the fly"

18. Dez 2010, 16:32

Artikel archivieren "on the fly" sieht schon mal ganz gut aus.
Hat das zufällig schon mal jemand für das Cronjob-Addon angepasst, so das die Archivierung nicht "on the fly" sondern nur einmal täglich durchgeführt wird?
<?php print $Footer; ?>

Sven

Ich würde ja die Welt verändern,
doch der Quellcode ist mir zu absurd!


REX 5 :: Tricks und Tipps
REX 5 :: Modulesammlung

Wiki zu Redaxo 3 und 4 (!nur noch im Webarchiv!)

Zurück zu „Allgemeines [R4]“