Mit Hilfe der Action ist es möglich, Artikel in der Struktur verschieben zu lassen (als Beispiel: hier wurde es für ein Newsarchiv verwendet).
Benötigt wird dazu ein Modul und eine Action. Alternativ zum Modul kann auch ein Metainfoeintrag zur Steuerung des Archivflags verwendet werden.
Im Modul muss dazu folgendes eingetragen sein (Beispielhaft):
Eingabe
<strong>Archiviert</strong>:
<input type="checkbox" name="VALUE[6]" value="1" <?php if ("REX_VALUE[6]" == 1) echo ' checked'; ?> />
Ausgabe
$ArchivFlag = (isset ($ArchivFlag) AND $ArchivFlag == 1) ? 1 : 0;
if ($REX['REDAXO']) {
if ($ArchivFlag == 1) {
$backendzeilentrenner .= '<i><h2>========= archiviert =========</h2></i>';
} else {
$backendzeilentrenner .= '<h2>============================</h2>';
}
echo $backendzeilentrenner;
...
}
In der Action ist anzugeben, von welcher Kategorie zu welcher der Artikel verschoben werden soll. Das ganze funktioniert dann auch rückwärts. Nach dem Verschieben wird automatisch umgeleitet; entweder zum verschobenen Artikel oder in die Kategorie des Artikels.
Action POSTSAVE mit dem Status ADD und EDIT.
<?php
/******* EINSTELLUNGEN BEGIN *******/
// Kategorie aus der der Artikel verschoben werden soll
$category_id_ist = 1;
// Kategorie in der der Artikel eingefügt werden soll
$category_id_soll = 69;
// wohin soll umgeleitet werden
// 1 = direkt zum Artikel
// 2 = zur Kategorie
$umleitung = 1;
/******* EINSTELLUNGEN ENDE *******/
$_clang = $REX['CUR_CLANG'];
$_article_id = array_keys($REX['ART']);
$_article_id = $_article_id[0];
$IST_status = $REX['ART'][$_article_id]['status'][0];
$path = $REX['ART'][$_article_id]['path'][0];
$artPath = explode('|', $path);
if (in_array($category_id_ist, $artPath)) {
$gehezu_categorie = $category_id_soll;
} else {
$gehezu_categorie = $category_id_ist;
}
$statusAnpassen = false;
if ($REX_ACTION['VALUE'][6] == 1 and in_array($category_id_ist, $artPath)) {
//echo 'ab ins Archiv';
if (rex_moveArticle($_article_id, $category_id_ist, $category_id_soll)) {
$statusAnpassen = true;
} else {
$REX_ACTION['SAVE'] = true;
$REX_ACTION['MSG'] = "Es trat ein Fehler auf.<br />Der Artikel konnte nicht in das Archiv verschoben werden.<br />Bitte wenden sie sich an ihren Administrator.";
}
} else if ($REX_ACTION['VALUE'][6] == 0 and in_array($category_id_soll, $artPath)) {
// echo 'zurueck ins Main';
if (rex_moveArticle($_article_id, $category_id_soll, $category_id_ist)) {
$statusAnpassen = true;
} else {
$REX_ACTION['SAVE'] = true;
$REX_ACTION['MSG'] = "Es trat ein Fehler auf.<br />Der Artikel konnte nicht verschoben werden.<br />Bitte wenden sie sich an ihren Administrator.";
}
}
// wenn Artikel verschoben werden konnte, setze den Status
// auf letzten Stand und gehe zum Artikel
if ($statusAnpassen) {
$EA = new sql;
//$EA->debugsql = true;
$EA->setTable($REX['TABLE_PREFIX']."article");
$EA->where("id='$_article_id' and clang=$_clang");
$EA->setValue("status", $IST_status);
$EA->setValue("updatedate", time());
$EA->setValue("updateuser", $REX_USER->getValue("login"));
$EA->update();
rex_generateArticle($_article_id);
$host = $_SERVER['HTTP_HOST'];
$uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
if ($umleitung == 1) {
header ('Location: http://'.$host.$uri.'/index.php?page=content&article_id='.$_article_id.'&category_id='.$gehezu_categorie.'&mode=edit&clang='.$_clang.'');
} else {
header ('Location: http://'.$host.$uri.'/index.php?page=structure&category_id='.$gehezu_categorie.'&clang='.$_clang.'');
}
exit;
}
?>