Seite 1 von 1

Header Location im Backend Artikel Edit

Verfasst: Mi 11. Sep 2013, 14:56
von qualtext
Hallo Gemeinde,

für ein paar Artikel habe ich bestimmt Module programmiert, die nach bestimmten Aktionen, die Komplette Seite neu laden.
Das funktioniert super im Frontend.

Sobald ich die Umleitungen aber im Backend Artikel Edit nutzen will, bekomme ich die Headers-already-sent Problematik.
Das liegt wohl daran, das Contenido bereits die Header abgesendet hat, bevor die Module im Edit-Modus geladen werden.

Die Header werden in der include.con_editcontent.php (Zeile 635) abgesendet:

Code: Alles auswählen

eval("?>\n".$code."\n<?php\n");
Hat jemande eine Idee, wie ich in einem Modul im Backend-Artikel-Edit den Artikel nach paar Zeilen PHP neu laden kann?
Irgend ein Workarround eventuell in include.con_editcontent.php (auf mein Modul warten bevor er den eval Code erzeugt) oder in der external/backendedit/front_content.php?
Wie gesagt, im Frontend funktioniert das.

Hat jemand eine Idee?

Meine Headerlocations erzeuge ich mit

Code: Alles auswählen

$aParams = array (
		'idart' => $idart, 'lang' => $lang
	);
	$url = Contenido_Url::getInstance()->buildRedirect($aParams);
	header('LOCATION:' .$url);
Vielen Dank,
Qualtext

Re: Header Location im Backend Artikel Edit

Verfasst: Mi 11. Sep 2013, 17:45
von xmurrix
Hallo qualtext,

eigentlich sollten sich Module im Backend genauso verhalten wie im Frontend, anscheinend findet bei dir eine Ausgabe statt, bevor die Module die die header-Direktive aufrufen.

Falls du deine front_content.php im Mandantenverzeichnis diesbezüglich modifiziert hast, z. B. mit dem Puffern der Ausgabe mittels ob_start(), dann solltest du die gleichen Änderungen auch in der front_content.php im Verzeichnis contenido/external/backendedit/front_content.php machen.

Ist es aber nicht besser, wenn die Module im Backend keinen redirect machen? Du möchtest in Seite A den Text editieren, aber irgendein Modul macht den Redirect auf Seite B, so kannst du nie die Seite A editieren...

Vielleicht ist es sinnvoller, dass das Modul im Backend keine Redirects macht, sondern einen Hinweistext ausgibt, wie z. B.:

Code: Alles auswählen

$aParams = array (
   'idart' => $idart, 'lang' => $lang
);
$url = Contenido_Url::getInstance()->buildRedirect($aParams);

if (!$contenido) {
    header('LOCATION:' .$url);
} else {
    echo '<div style="color:red;border:1px solid red">Redirect to ' . $url . '</div>';
}
Gruß
xmurrix

Re: Header Location im Backend Artikel Edit

Verfasst: Do 12. Sep 2013, 08:24
von Spider IT
Hallo Qualtext,
qualtext hat geschrieben:

Code: Alles auswählen

$aParams = array (
		'idart' => $idart, 'lang' => $lang
	);
	$url = Contenido_Url::getInstance()->buildRedirect($aParams);
	header('LOCATION:' .$url);
du kannst hier per headers_sent() abfragen, ob bereits Header ausgegeben wurden:

Code: Alles auswählen

if (!headers_sent()) {
    header('LOCATION:' .$url);
}
Und um dann trotzdem einen Redirect hinzubekommen, musst du diesen per Javascript auslösen:

Code: Alles auswählen

if (!headers_sent()) {
    header('LOCATION:' .$url);
} else {
    die('<script type="text/javascript">document.location.href = "' . $url . '";</script>');
}
Gruß
René

Re: Header Location im Backend Artikel Edit

Verfasst: Do 12. Sep 2013, 10:49
von qualtext
Hallo und danke für die Antworten.

Ich habe es gestern dann auch mit javascript gelöst, mag es aber eigentlich nicht, mit php javascript abzufeuern.
An den front_contents hatte ich nicht geändert. Der Editor sendet nur leider die Headers schon, im Reiter Vorschau jedoch nicht. Daher dachte ich an eine Lösung, die Contenido erst die Headers senden lässt, nachdem mein Modul "bearbeitet" wurde.

Trotzdem erstmal danke,
Qualtext.