Also bei mir funktioniert es mit der Version 3.1.2 immer noch nicht. Das Problem ist, dass die SESSION Variable ['wpsg']['checkout']['diff_shippingadress'] nicht korrekt gespeichert wird. Ich habe mir das nun mal etwas näher angeschaut und meine den Fehler gefunden zu haben:
Der Wert für ['wpsg']['checkout']['diff_shippingadress'] wird als Checkbox Wert gesendet. Dieser Wert wird anscheinend vom Shop Controller nicht korrekt ausgewertet.
LÖSUNG:
Ich habe in der Datei "checkout_shippingadress.phtml" ein zusätzliches Feld (input type="hidden") für die diff_shippingadress Variable eingebaut, deren Wert per jQuery auf '1' bzw. '0' gesetzt wird. Und siehe da, alles funktioniert wunderbar !!!
DETAILS ZUR LÖSUNG:
(Alles in der Datei 'checkout_shippingadress.phtml')
Ganz oben folgendes rein:
Code: Alles auswählen
<?php
$diff_shippingadress = ( $_SESSION['wpsg']['checkout']['diff_shippingadress'] == '1' ) ? true : false;
$checkbox_checked = ( $diff_shippingadress ) ? 'checked="checked"' : '';
$checkbox_value = ( $diff_shippingadress ) ? '1' : '0';
?>
Die Checkbox:
Input name und value sind dann hier eigentlich egal.
Code: Alles auswählen
<input id="act_checkout_shippingadress" class="wpsg_checkout formfield_checkbox" type="checkbox" name="diff_shippingadress" value="diff_shippingadress" <?php echo $checkbox_checked; ?> onclick="view_checkout_shippingadresss()" />
Das Hidden Field, einfach direkt unter die Checkbox oder drüber, egal:
Code: Alles auswählen
<input id="val_checkout_shippingadress" type="hidden" name="wpsg[checkout][diff_shippingadress]" value="<?php echo $checkbox_value; ?>" />
Dann ganz unten die jQuery Funktion anpassen:
Code: Alles auswählen
<script type="text/javascript">
/* <![CDATA[ */
jQuery(document).ready(function()
{
view_checkout_shippingadresss();
});
function view_checkout_shippingadresss()
{
if (jQuery('#act_checkout_shippingadress').attr('checked') != 'checked')
{
jQuery('.checkout_shippingadress').hide();
jQuery('#val_checkout_shippingadress').val('0');
}
else
{
jQuery('.checkout_shippingadress').show();
jQuery('#val_checkout_shippingadress').val('1');
}
return false;
}
/* ]]> */
</script>
Bei mir funktioniert jetzt alles einwandfrei, könnte also die Lösung des Problems sein
Auf Wunsch eines Einzelnen hier nochmal der komplette Code meiner "checkout_shippingadress.phtml"
(Ich habe den Code noch ein bischen angepasst, also die jQuery Funktion vereinfacht und das onclick Event aus der Checkbox rausgenommen.
):
Code: Alles auswählen
<?php
$diff_shippingadress = ( $_SESSION['wpsg']['checkout']['diff_shippingadress'] == '1' ) ? true : false;
$checkbox_checked = ( $diff_shippingadress ) ? 'checked="checked"' : '';
$checkbox_value = ( $diff_shippingadress ) ? '1' : '0';
$display = ( $diff_shippingadress ) ? 'block' : 'none';
?>
<div class="act_checkout_shippingadress">
<input id="act_checkout_shippingadress" class="wpsg_checkout formfield_checkbox" type="checkbox" name="diff_shippingadress" value="diff_shippingadress" <?php echo $checkbox_checked; ?> />
<label for="act_checkout_shippingadress"><?php echo __('Die Bestellung soll an eine andere Adresse geliefert werden.', 'wpsg') ?></label>
<input id="val_checkout_shippingadress" type="hidden" name="wpsg[checkout][diff_shippingadress]" value="<?php echo $checkbox_value; ?>" />
</div>
<div class="checkout_shippingadress" style="display:<?php echo $display; ?>;">
<div class="wpsg_checkoutblock">
<label for="firma" class="wpsg_checkout"><?php echo __("Firma:", "wpsg"); ?>
</label>
<input class="wpsg_checkout <?php echo ((in_array("name", (array)$this->view['error']))?'wpsg_error':''); ?>" type="text" id="name" name="wpsg[checkout][shipping_firma]" value="<?php echo htmlspecialchars($this->view['basket']['checkout']['shipping_firma']); ?>" />
</div>
<div class="wpsg_checkoutblock">
<label for="title" class="wpsg_checkout"><?php echo __("Anrede:", "wpsg"); ?>
<span class="wpsg_required">*</span>
</label>
<select class="wpsg_checkout <?php echo ((in_array("title", (array)$this->view['error']))?'wpsg_error':''); ?>" type="select" name="wpsg[checkout][shipping_title]" id="title" >
<?php foreach (explode("|", $this->view['pflicht']['anrede_auswahl']) as $t) { ?>
<option value="<?php echo $t; ?>" <?php echo (($this->view['basket']['checkout']['shipping_title'] == $t)?'selected="selected"':''); ?>><?php echo $t; ?></option>
<?php } ?>
</select>
</div>
<div class="wpsg_checkoutblock">
<label for="vname" class="wpsg_checkout"><?php echo __("Vorname:", "wpsg"); ?>
<span class="wpsg_required">*</span>
</label>
<input class="wpsg_checkout <?php echo ((in_array("shipping_vname", (array)$this->view['error']))?'wpsg_error':''); ?>" type="text" id="vname" name="wpsg[checkout][shipping_vname]" value="<?php echo htmlspecialchars($this->view['basket']['checkout']['shipping_vname']); ?>" />
</div>
<div class="wpsg_checkoutblock">
<label for="name" class="wpsg_checkout"><?php echo __("Name:", "wpsg"); ?>
<span class="wpsg_required">*</span>
</label>
<input class="wpsg_checkout <?php echo ((in_array("shipping_name", (array)$this->view['error']))?'wpsg_error':''); ?>" type="text" id="name" name="wpsg[checkout][shipping_name]" value="<?php echo htmlspecialchars($this->view['basket']['checkout']['shipping_name']); ?>" />
</div>
<div class="wpsg_checkoutblock">
<label for="strasse" class="wpsg_checkout"><?php echo __("Strasse, Nr.:", "wpsg"); ?>
<span class="wpsg_required">*</span>
</label>
<input class="wpsg_checkout <?php echo ((in_array("shipping_strasse", (array)$this->view['error']))?'wpsg_error':''); ?>" type="text" id="strasse" name="wpsg[checkout][shipping_strasse]" value="<?php echo htmlspecialchars($this->view['basket']['checkout']['shipping_strasse']); ?>" />
</div>
<div class="wpsg_checkoutblock">
<label for="plz" class="wpsg_checkout"><?php echo __("Postleitzahl:", "wpsg"); ?>
<span class="wpsg_required">*</span>
</label>
<input class="wpsg_checkout <?php echo ((in_array("shipping_plz", (array)$this->view['error']))?'wpsg_error':''); ?>" type="text" id="plz" name="wpsg[checkout][shipping_plz]" value="<?php echo htmlspecialchars($this->view['basket']['checkout']['shipping_plz']); ?>" />
</div>
<div class="wpsg_checkoutblock">
<label for="ort" class="wpshopgermany_checkout"><?php echo __("Ort:", "wpsg"); ?>
<span class="wpsg_required">*</span>
</label>
<input class="wpsg_checkout <?php echo ((in_array("shipping_ort", (array)$this->view['error']))?'wpsg_error':''); ?>" type="text" id="ort" name="wpsg[checkout][shipping_ort]" value="<?php echo htmlspecialchars($this->view['basket']['checkout']['shipping_ort']); ?>" />
</div>
<div class="wpsg_checkoutblock">
<label for="wpsg_land" class="wpsg_checkout"><?php echo __("Land:", "wpsg"); ?>
</label>
<select name="wpsg[checkout][shipping_land]" class="wpsg_checkout <?php echo ((in_array("land", (array)$this->view['error']))?'wpsg_error':''); ?>" id="wpsg_land">
<option value="-1"><?php echo __('Bitte auswählen', 'wpsg'); ?></option>
<?php foreach ($this->view['laender'] as $l) { ?>
<option value="<?php echo $l['id']; ?>" <?php echo (($l['id'] == $this->view['basket']['checkout']['shipping_land'])?'selected="selected"':''); ?>><?php echo wpsg_hspc($l['name']); ?></option>
<?php } ?>
</select>
</div>
<br />
<script type="text/javascript">
/* <![CDATA[ */
jQuery(document).ready(function()
{
jQuery('#act_checkout_shippingadress').change(function()
{
if ( this.checked )
{
jQuery('.checkout_shippingadress').show();
jQuery('#val_checkout_shippingadress').val('1');
}
else
{
jQuery('.checkout_shippingadress').hide();
jQuery('#val_checkout_shippingadress').val('0');
}
});
});
/* ]]> */
</script>
</div>