Header Location im Backend Artikel Edit

Gesperrt
qualtext
Beiträge: 17
Registriert: Di 19. Jun 2012, 10:04
Kontaktdaten:

Header Location im Backend Artikel Edit

Beitrag von qualtext » Mi 11. Sep 2013, 14:56

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

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Header Location im Backend Artikel Edit

Beitrag von xmurrix » Mi 11. Sep 2013, 17:45

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
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Header Location im Backend Artikel Edit

Beitrag von Spider IT » Do 12. Sep 2013, 08:24

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é

qualtext
Beiträge: 17
Registriert: Di 19. Jun 2012, 10:04
Kontaktdaten:

Re: Header Location im Backend Artikel Edit

Beitrag von qualtext » Do 12. Sep 2013, 10:49

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.

Gesperrt