Dokumentation REDAXO

R3 /

Beispiel 4: Einen Artikel verschieben

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):

Modul

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

Action-Einstellungen

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.

Aktion

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;
}
?>
Page last modified on 12.06.2010 22:26 Uhr