[gelöst] Inhalte kopieren von einer Sprache zur anderen

Bei Problemen/Anregungen mehrsprachiger Webseiten.

[gelöst] Inhalte kopieren von einer Sprache zur anderen

Beitragvon Koala » 18. Nov 2010, 14:15

In dem Metadaten/Sonstiges gibt es die Möglichkeit, Inhalte von einer Sprache in eine andere zu kopieren.
Ich hätte erwartet, dass es sich dabei wirklich um eine Kopie handelt. Stattdessen wird der Inhalt von Sprache 1 an die bestehenden Slices von Sprache 2 angehangen. Wenn man da nicht aufpasst, hat man auf einmal eine sehr lange Seite :)

Ich habe mir da eine kleine Aktion gebastelt, die mir unter Bedingung X automatisch Sprache 1 nach 2 kopieren sollte.
Aufgrund des oben beschriebenen Verhaltens, muss ich da wohl noch etwas anderes mit einbauen.
Hier mal die bisherige Action:
Code: Alles auswählen
<?php
// Einstellungen

$sprache_von = 0; // de
$sprache_zu = 1; // en

if (!$REX_ACTION[VALUE][8]) {
  if (rex_copyContent($REX_ACTION['ARTICLE_ID'], $REX_ACTION['ARTICLE_ID'], $sprache_von, $sprache_zu, 0)) {
    $REX_ACTION['MSG'] = '<br />Artikel wurde erfolgreich in andere Sprache kopiert.';
  }
}
?>

Value 8 ist eine einfache Checkbox. Wenn nicht gesetzt, dann kopiere den Inhalt von A nach B.

Redaxo 4.3.1
Zuletzt geändert von Koala am 28. Nov 2010, 20:39, insgesamt 1-mal geändert.
.
<?php print $Footer; ?>

Sven

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


REX_DOKU :: REX_WIKI :: REX_FAQ :: REX_WIKIPEDIA
Benutzeravatar
Koala
 
Beiträge: 1529
Registriert: 3. Okt 2005, 12:20
Wohnort: Cottbus

Beitragvon Koala » 18. Nov 2010, 20:36

Bei genauerer Betrachtung macht das natürlich schon Sinn, dass eine Inhaltskopie keine Ersetzung vornimmt.
Was ich suche/brauche ist also eher eine Artikelinhaltskopie/ersetzung auf Sprachebene. Inkl. Übernahme aller Einstellungen (z.B. online/offline-Status).
Damich, das sah vorher so einfach aus und jetzt wirds doch ne größere Sache :roll:
.
<?php print $Footer; ?>

Sven

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


REX_DOKU :: REX_WIKI :: REX_FAQ :: REX_WIKIPEDIA
Benutzeravatar
Koala
 
Beiträge: 1529
Registriert: 3. Okt 2005, 12:20
Wohnort: Cottbus

Beitragvon Koala » 18. Nov 2010, 22:05

Aktueller Stand:
Code: Alles auswählen
<?php
// Einstellungen

$sprache_von = 0; // de
$sprache_zu = 1; // en

if (!$REX_ACTION[VALUE][8]) {
  // loesche kompletten Inhalt der zweiten Sprache
  $sql = rex_sql::factory();
  $sql->setTable($REX['TABLE_PREFIX'].'article_slice');
  $sql->setWhere('article_id = "'.$REX_ACTION['ARTICLE_ID'].'" AND clang="1"');

  if ($sql->delete()) {
//    $REX_ACTION['MSG'] = "<br /> clang 1 geleert.";
    // kopiere Inhalt von Sprache eins zu zwei
    if (rex_copyContent($REX_ACTION['ARTICLE_ID'], $REX_ACTION['ARTICLE_ID'], $sprache_von, $sprache_zu, 0)) {
//      $REX_ACTION['MSG'] .= "\n".'<br />ID: '.$REX_ACTION['ARTICLE_ID']. ' - von clang: '. $sprache_von .' zu clang: '. $sprache_zu;
    }
 
    // ermittle den Status des aktuellen Artikels und schreibe ihn in Sprache zwei
    $from_sql = rex_sql::factory();
    $qry = 'SELECT status FROM '.$REX['TABLE_PREFIX'].'article WHERE clang="'.$sprache_von.'" and id="'.$REX_ACTION['ARTICLE_ID'].'"';
    $from_sql->setQuery($qry);
    if ($from_sql->getRows() == 1) {
      $from_status = $from_sql->getValue("status");
      $sql = rex_sql::factory();
      $sql->setTable($REX['TABLE_PREFIX'].'article');
      $sql->setValue('status', $from_status); //
      $sql->setWhere('id = "'.$REX_ACTION['ARTICLE_ID'].'" AND clang="'.$sprache_zu.'"');
      if (!$sql->update()) {
        $REX_ACTION['SAVE'] = FALSE;
        $REX_ACTION['MSG'] = "<br /> Es trat ein Fehler auf.<br />Konnte Artikelstatus nicht schreiben!";
      }
    } else {
      $REX_ACTION['SAVE'] = FALSE;
      $REX_ACTION['MSG'] = "<br /> Es trat ein Fehler auf.<br />Konnte Artikelstatus nicht auslesen!";
    }
  } else { // if ($sql->delete())
    $REX_ACTION['SAVE'] = FALSE;
    $REX_ACTION['MSG'] = "<br /> Es trat ein Fehler auf.<br />Konnte Artikelinhalt der zweiten Sprache nicht löschen!";

  } // if ($sql->delete())
}  // if (!$REX_ACTION[VALUE][8])

?>


Falls jemand ne einfachere Lösung hat, immer her damit.
.
<?php print $Footer; ?>

Sven

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


REX_DOKU :: REX_WIKI :: REX_FAQ :: REX_WIKIPEDIA
Benutzeravatar
Koala
 
Beiträge: 1529
Registriert: 3. Okt 2005, 12:20
Wohnort: Cottbus

als Addon

Beitragvon Koala » 28. Nov 2010, 20:43

Ich habe das nun komplett als Addon gelöst.
Nur allein mit der Action sind die Nebenaufgaben nicht mehr zu bewältigen gewesen. Das betraf u.a. die Änderung der Prio und des Artikelnamens.
.
<?php print $Footer; ?>

Sven

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


REX_DOKU :: REX_WIKI :: REX_FAQ :: REX_WIKIPEDIA
Benutzeravatar
Koala
 
Beiträge: 1529
Registriert: 3. Okt 2005, 12:20
Wohnort: Cottbus


Zurück zu Mehrsprachigkeit [R4]

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast