Problem Modulausgabe im BE > Blöcke nach Editieren weg
Verfasst: 27. Apr 2016, 13:41
Hey liebe Community,
ich hab einen seltsamen Bug und bräuchte hier mal eure Unterstützung...
Folgendes Verhalten:
Ich habe ein Modul in dessen Ausgabe ich via if ($REX['REDAXO'] == true) für Backend und Frontend unterscheide. Klappt auch einwandfrei. Zumindest, bis ich einen vorhandenen Block innerhalb der Artikelblöcke editiere (egal welchen). Speichere ich den geänderten Block, so sind alle anderen Blöcke in der Backenddarstellung auf einmal weg. Die Spaltenanzeige und auch die Funktionen, Metadaten etc. rechts verschwinden. Neu anlegen & Block löschen = Geht alles fehlerfrei.
Gehe ich dann erneut auf den Artikelinhalt (über die Struktur), so sind die Blöcke wieder da. Das betrifft also nur den unmittelbaren Zustand nach dem edit (redaxo/index.php#sliceXXXX).
Innerhalb der Modulausgabe für das Frontend habe ich eine php-Funktion drin, um mir die Slices des aktuellen Artikels auszulesen (getSortedSlices). Diese Funktion funktioniert im FE einwandfrei. Ich habe auch zum Testen die Funktion sowohl in der Modulausgabe selbst, als auch in einem weiteren Versuch über nen include so reingesetzt, dass die Funktion definitiv vorhanden ist. Egal ob FE oder BE. Nichts hilft...
Habe auch testweise sowohl im BE als auch im FE die Listenausgabe reingesetzt, gleiches Verhalten...
Hier meine Modulausgabe (Eingabe ist leer):
Könnt ihr mir sagen, wieso während der Situation – "Block editiert > Speichern / übernehmen" > Feedback, dass Block editiert worden ist – die Modulausgabe scheinbar nicht korrekt zwischen FE und BE unterscheidet? Leider hat das zur Verfügung stellen der Funktion selbst sowohl in BE und FE nicht geholfen...
hier noch die Funktion, die in der Ausgabe aufgerufen wird (und im FE & BE in allen anderen Zuständen fehlerfrei funktioniert):
Hatte auch die Vermutung, dass es doch nicht mit diesem Modul zusammenhängt, aber der Fehler verschwindet, wenn ich die Ausgabe leere, den Block entferne oder auch nur den Kram im else-Bereich raus nehme...
Interessanter Weise kann ich das nur bei "alten" Artikel beobachten. Wenn ich einen neuen Artikel anlege, dann habe ich den Fehler nicht... Habt ihr noch Ideen, wo ich suchen kann?
Hüülfe... *-*
ich hab einen seltsamen Bug und bräuchte hier mal eure Unterstützung...
Folgendes Verhalten:
Ich habe ein Modul in dessen Ausgabe ich via if ($REX['REDAXO'] == true) für Backend und Frontend unterscheide. Klappt auch einwandfrei. Zumindest, bis ich einen vorhandenen Block innerhalb der Artikelblöcke editiere (egal welchen). Speichere ich den geänderten Block, so sind alle anderen Blöcke in der Backenddarstellung auf einmal weg. Die Spaltenanzeige und auch die Funktionen, Metadaten etc. rechts verschwinden. Neu anlegen & Block löschen = Geht alles fehlerfrei.
Gehe ich dann erneut auf den Artikelinhalt (über die Struktur), so sind die Blöcke wieder da. Das betrifft also nur den unmittelbaren Zustand nach dem edit (redaxo/index.php#sliceXXXX).
Innerhalb der Modulausgabe für das Frontend habe ich eine php-Funktion drin, um mir die Slices des aktuellen Artikels auszulesen (getSortedSlices). Diese Funktion funktioniert im FE einwandfrei. Ich habe auch zum Testen die Funktion sowohl in der Modulausgabe selbst, als auch in einem weiteren Versuch über nen include so reingesetzt, dass die Funktion definitiv vorhanden ist. Egal ob FE oder BE. Nichts hilft...
Habe auch testweise sowohl im BE als auch im FE die Listenausgabe reingesetzt, gleiches Verhalten...
Hier meine Modulausgabe (Eingabe ist leer):
Code: Alles auswählen
<?php
if ($REX['REDAXO'] == true) {
echo '<p>Dynamische Ausgabe</p>';
}else{
$article_id = $this->getValue('article_id');
$allSlicesSorted = getSortedSlices($article_id, 0, 12);
echo '<div id="specsubnav"><ul>';
foreach($allSlicesSorted as $slice){
echo '<li><a href="'.rex_getUrl($article_id).'#'.$slice->getValue('id').'">';
echo $slice->getValue(1);
echo '</a></li>';
}
echo '</ul></div>';
}
?>
hier noch die Funktion, die in der Ausgabe aufgerufen wird (und im FE & BE in allen anderen Zuständen fehlerfrei funktioniert):
Code: Alles auswählen
function getSortedSlices($articleId, $clang = false, $moduleId = 0) {
$slices = array();
$slicesTmp = OOArticleSlice::getSlicesForArticle($articleId, $clang);
if ($slicesTmp) {
if (is_array($slicesTmp)) {
$sliceMap = array();
$sliceRefMap = array();
foreach ($slicesTmp as $slice) {
$sliceMap[$slice->getId()] = $slice;
$sliceRefMap[$slice->_re_article_slice_id] = $slice->getId();
}
$nextSlice = $sliceMap[$sliceRefMap[0]];
while ($nextSlice) {
$slices[] = $nextSlice;
if (!isset($sliceRefMap[$nextSlice->getId()])) {
break;
}
$nextSlice = $sliceMap[$sliceRefMap[$nextSlice->getId()]];
}
} else {
$slices = array($slicesTmp);
}
}
if ($moduleId > 0) {
$moduleSlices = array();
foreach($slices as $slice) {
if ($slice->getModuleId() == $moduleId) {
$moduleSlices[] = $slice;
}
}
return $moduleSlices;
} else {
return $slices;
}
}
Interessanter Weise kann ich das nur bei "alten" Artikel beobachten. Wenn ich einen neuen Artikel anlege, dann habe ich den Fehler nicht... Habt ihr noch Ideen, wo ich suchen kann?
Hüülfe... *-*