Sooo, ich hab's!
Das Problem betrifft nicht nur die "Gastbestellung", sondern auch die Anzeige-Einstellungen für den "Facebook Likebutton", "PDF Download Katalog" und die "Durchschnittsbewertung aller Artikel". Reproduzieren lässt sich das, wenn man im Backend auf
"Artikel" -> "Einstellungen" geht, wo die Tabs für Gebindepreise, Sortierung und Facettensuche sind. Sobald man hier auf Speichern klickt, die Checkbox ändert oder sogar nur einen anderen Tab wählt (das löst ebenfalls einen Speichervorgang aus), werden die Einstellungen der oben genannten Features mit einem leeren Wert überschrieben. Sprich: Sie werden im Frontend nicht mehr angezeigt. Diese 5 Einstellungen (inkl. Anzeige der Gebindepreise) gehören in der DB-Tabelle "randshop_einstellungen" zur group "artikel". Bevor nun eine Einstellung eines Werts dieser Gruppe geändert wird, löscht die Shop-Software pauschal alle values, die zur group "artikel" gehören mit dem Statement
- Code: Alles auswählen
UPDATE randshop_einstellungen SET randshop_einstellungen.value = '' WHERE randshop_einstellungen.group = 'artikel'
und trägt alle Werte neu ein. Das klappt aber nur, wenn in dem Formular alle Einstellungen dieser Gruppe vorhanden sind. Doch das ist hier nicht der Fall.
Der Übeltäter ist
admin/artikel/einstellungen_gebindepreise.php.
Um das Problem zu lösen, müssen alle Einstellungen der Gruppe "artikel" (bislang war das nur "gebindepreise_aktiv") an die Speicher-Funktion übergeben werden.
Und so wird's gemacht:Die beiden Zeilen (73/74)
- Code: Alles auswählen
$einstellungen = GetEinstellungen('', 'artikel');
$tpl_einstellungen = $einstellungen->artikel;
kopieren und löschen.
Die kopierten Zeilen dann weiter oben in der Datei, am Besten direkt
nach $tabReiter->setActiveID('gebindepreise'); (Zeile 31) einfügen.
Dann den Funktionsaufruf
- Code: Alles auswählen
SaveGroupEinstellungen('artikel',
array(
'gebindepreise_aktiv' => $_POST['gebindepreise_aktiv'],
)
);
löschen und durch
- Code: Alles auswählen
$tpl_einstellungen->gebindepreise_aktiv = $_POST['gebindepreise_aktiv'];
SaveGroupEinstellungen('artikel', $tpl_einstellungen);
ersetzen.
Das Objekt $tpl_einstellungen enthält alle gespeicherten Werte der Gruppe "artikel". Nachdem darin der Wert für "gebindepreise_aktiv" aktualisiert wurde, werden alle an SaveGroupEinstellungen() übergeben.
Der komplette PHP-Block oberhalb von <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> sollte dann so aussehen:
- Code: Alles auswählen
<?php
/**
*
* Copyright (C) Die Randgruppe GmbH
*
* http://www.randshop.com
* http://www.dierandgruppe.com
*
* Unter der Lizenz von Die Randgruppe GmbH:
* http://www.randshop.com/Lizenz
*
* $Author: $
* $Date: $
* $Revision: $
*
*/
session_start();
// PHP-Includes
include_once("../../conf/config.inc.php");
include_once(DATEIPFAD . "conf/db.inc.php");
include_once("../global_off.inc.php");
include_once(DATEIPFAD . "includes/language/langu_" . LANGU_ADMIN . ".inc.php");
include_once(DATEIPFAD . "includes/language/langu_admin_" . LANGU_ADMIN . ".inc.php");
include_once(DATEIPFAD . "includes/functions.shopeinstellung.inc.php");
include_once(DATEIPFAD . "includes/functions.menue.inc.php");
include_once(DATEIPFAD . "includes/functions.language.inc.php");
include_once("einstellungen_reiter.inc.php");
$tabReiter->setActiveID('gebindepreise');
$einstellungen = GetEinstellungen('', 'artikel');
$tpl_einstellungen = $einstellungen->artikel;
if($_POST['formaction'] == 'delete')
{
unset($_POST['gebinde'][$_POST['deleteIndex']]);
}
if($_POST['formaction'] == 'save' || $_POST['formaction'] == 'delete')
{
$tpl_einstellungen->gebindepreise_aktiv = $_POST['gebindepreise_aktiv'];
SaveGroupEinstellungen('artikel', $tpl_einstellungen);
$gebindeEinstellungenString = "";
if($_POST['gebinde'])
{
foreach($_POST['gebinde'] as $gebinde)
{
if($gebinde['einheit'])
{
if($trenner)
$gebindeEinstellungenString .= ";";
else
$trenner = true;
$gebindeEinstellungenString .= $gebinde['groesse'] . '_' . $gebinde['einheit'];
}
}
}
SaveGroupEinstellungen('artikel_gebinde',
array(
'gebinde' => $gebindeEinstellungenString
)
);
}
if($_POST['reiter'])
{
$tabReiter->redirect($_POST['reiter']);
}
$einstellungen = GetEinstellungen('', 'artikel_gebinde');
$gebindeArray = explode(';', $einstellungen->artikel_gebinde->gebinde);
foreach($gebindeArray as $gebinde)
{
$gebindeWerte = explode('_', $gebinde);
if($gebindeWerte[0] && $gebindeWerte[1])
$tpl_gebinde[$gebindeWerte[1]] = $gebindeWerte[0];
if($gebindegroesse_vergleich) {
if($gebindegroesse_vergleich != $gebindeWerte[0]) {
$tpl_warnmeldung = $lang_warnung_gebindegroessen_unterschiedlich;
}
} else {
$gebindegroesse_vergleich = $gebindeWerte[0];
}
}
?>
Viele Grüße
Martin