feat(warenkorb): ein Formular fuer Mengen, Anmerkung und Weiterleitung; Anmerkung in der Kasse editierbar

Vorher: Anmerkung in eigenem Formular mit 'Text speichern', 'Zur Kasse' als reiner Link
(ungespeicherte Mengen/Anmerkung gingen verloren), in der Kasse readonly mit dem Hinweis
'kann nur im Warenkorb bearbeitet werden' -- ohne technischen Grund, die Kasse postete das
Feld ohnehin mit. Jetzt: cart_goto ('kasse' | 'express:<modul>') im Warenkorb-Modul,
Kasse uebernimmt POST customer_info in die Session, Texte auf Deutsch geglaettet.
This commit is contained in:
Thomas Bartelt
2026-09-18 19:38:02 +02:00
parent dec101f0cb
commit dc57c725f6
4 changed files with 257 additions and 282 deletions
+5 -1
View File
@@ -345,7 +345,11 @@ class website_cashdesk {
$this->manage_errors();
$this->manage_data_persistence();
// customer info
// customer info -- 18.09.2026: in der Kasse editierbar, ein POST (auch bei
// Fehlern im Formular) aktualisiert die Session, die Bestellung nimmt $_POST (s.u.)
if (isset($_POST['customer_info'])) {
$_SESSION['customer_info'] = trim((string)$_POST['customer_info']);
}
if (isset($_SESSION['customer_info']) && $_SESSION['customer_info']) {
$this->layout_object->assign('customer_info', $_SESSION['customer_info']);
}
+15 -1
View File
@@ -48,7 +48,21 @@ class website_shoppingcart {
private function show_shoppingcart() {
if (isset($_POST['customer_info'])) {
$_SESSION['customer_info'] = $_POST['customer_info'];
$_SESSION['customer_info'] = trim((string)$_POST['customer_info']);
}
// 18.09.2026 -- Warenkorb ist EIN Formular: "Zur Kasse" und die Express-Knoepfe schicken
// es ab (Mengen + Anmerkung werden so mitgespeichert) und das Ziel steht in cart_goto.
if (isset($_POST['cart_goto']) && $_POST['cart_goto'] !== '') {
$goto = (string)$_POST['cart_goto'];
if ($goto === 'kasse') {
header('Location: /Kasse/');
exit;
}
if (preg_match('/^express:([a-z0-9_]{1,40})$/', $goto, $m)) {
header('Location: /Kasse/?payment_express_start='.$m[1]);
exit;
}
}
if (isset($_SESSION['customer_info']) && $_SESSION['customer_info']) {
@@ -1,14 +1,12 @@
<!-- content_cash_desk/payments.tpl -->
<div class="full_box purple_box">
<!-- content_cash_desk/customer_info.tpl -- 18.09.2026: editierbar (vorher readonly mit "nur im Warenkorb") -->
<div class="full_box purple_box">
<div class="title_wrapper">
<div class="title"><h2>Anmerkung zu dieser Bestellung</h2></div>
<div class="title"><h2>Anmerkung zu dieser Bestellung <span style="font-weight:normal;font-size:80%;">(optional)</span></h2></div>
<div class="clear"></div>
</div>
<div class="box_padder" style="margin:20px;">
Sie haben folgenden Nachrichtentext an uns zu dieser Bestellung hinzuf&uuml;gt.<br />
<b>ACHTUNG: Der Text kann nur im <a href="/Warenkorb/">Warenkorb</a> bearbeitet werden!!!.</b><br />
<textarea style="width:680px; height:200px;border:1px solid #555555;" name="customer_info" readonly>{$customer_info}</textarea>
</div>
<div class="box_padder" style="margin:20px;">
<div style="color:#777;margin-bottom:6px;">Zum Beispiel Ger&auml;tetyp, Farbe oder ein Hinweis f&uuml;r den Versand.</div>
<textarea id="customer_info" name="customer_info" rows="4" style="width:100%;box-sizing:border-box;border:1px solid #555555;padding:6px;">{if isset($customer_info)}{$customer_info|escape}{/if}</textarea>
</div>
</div>
@@ -1,271 +1,230 @@
{if $system_configuration.shoppingcart_quickbuy == 1}
<div class="full_box">
<div class="title_wrapper">
<div class="title">
<h2>Schnelleinkauf</h2>
</div>
</div>
<div class="box_content">
<div class="box_padder">
Suche Sie hier nach Artikel und legen diese direkt in den Warenkorb.<br />
<input type="text" id="shoppingcart_search_item" name="search_item" autocomplete="off" value="Suchartikel hier eingeben" style="border:1px solid #555555;width:680px;" />
<div id="shoppingcart_search_result" style="position:relative;z-index:999999;"></div>
</div>
</div>
</div>
{/if}
<div class="full_box">
<div class="title_wrapper">
<div class="title">
<h2>Warenkorb</h2>
</div>
</div>
<div class="box_content">
<div class="box_padder">
{if $shoppingcart.items}
<form method="post" action="" id="cart_form">
<table class="cart_table" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr class="cart_head">
<td class="alcenter">Pos.</td>
<td class="alcenter">Bild</td>
<td>Beschreibung</td>
<td class="alright">St&uuml;ckpreis</td>
<td class="alcenter">Anzahl*</td>
<td class="alcenter">l&ouml;schen</td>
<td class="alright">Gesamtpreis</td>
</tr>
{foreach from=$shoppingcart.items item=item name=items_loop}
{if $item->short_uri}
{assign var=itemSuri value="/`$item->short_uri`.html"}
{else}
{assign var=itemSuri value="/index.php?item_id=`$item->id`"}
{/if}
<tr class="cart_row">
<td class="alcenter">{$smarty.foreach.items_loop.iteration}</td>
<td class="alcenter"><img src="{$SHOP_DIR}images/article/thumb_{if $item->default_image_file_name}{$item->default_image_file_name}{else}default_image.png{/if}" /></td>
<td>
<a href="{$serverProtocol}://{$servername}{$itemSuri}"><strong>{$item->name}</strong></a><br />
{if $item->variant_1 || $item->variant_2}
{$item->variant_1} {$item->variant_2}<br />
{/if}
{if ($item->variant_1 || $item->variant_2) && $item->item_number}
<span>Art.-Nr. {$item->item_number}</span>
{else}
{if $item->attribute_7 && $item->number != $item->attribute_7}
<span>Art.-Nr. {$item->attribute_7}&nbsp;&nbsp;&nbsp;({$template_text.item_details.old_item_number_title} {$item->number})</span>
{else}
<span>Art.-Nr. {$item->number}</span>
{/if}
{/if}
</td>
<td class="alright">{$item->calculatedPrices.shownPrice|number_format:"2":",":"."} &euro;</td>
<td class="alcenter item_container" buy_quantity="{$item->buy_quantity}" min_quantity="{$item->min_quantity}">
<div style="position:relative;">
<div id="scart_error_message_one" class="message_min_quantity">
<div class="close_message_box">x</div>
<div class="content">Mindestabnahmemenge von {$item->min_quantity} St&uuml;ck nicht erreicht!</div>
</div>
<div id="scart_error_message_two" class="message_wrong_quantity">
<div class="close_message_box">x</div>
<div class="content">Sie haben eine ung&uuml;ltige St&uuml;ckzahl eingegeben! Die Abnahmest&uuml;ckzahl ist in {$item->buy_quantity}er Schritten gestaffelt!</div>
</div>
<input type="text" name="update_item[{$item->shopping_cart_item_id}]" class="input_quantity" value="{$item->quantity}" />
</div>
</td>
<td class="alcenter item_container" buy_quantity="{$item->buy_quantity}" min_quantity="{$item->min_quantity}">
<a href="#" class="item_delete" title="löschen" style="text-decoration:none;font-family: Arial;font-size:14px;font-weight:bold;color:#ff0000;">x</a>
</td>
<td class="alright">
<strong>{($item->calculatedPrices.shownPrice * $item->quantity)|number_format:"2":",":"."} &euro;</strong>
</td>
</tr>
{/foreach}
<tr class="cart_footer_first">
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>Summe aller Artikel</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td class="alright">{$shoppingcart.shown_price_sum|number_format:"2":",":"."} &euro;</td>
</tr>
{foreach $shoppingcart.tax_values as $taxRate => $taxData}
<tr class="cart_footer_vat">
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>
{if $shoppingcartVATUsage}
Darin enthaltene MwSt.
{else}
Zzgl. MwSt.
{/if}
</td>
<td>{$taxRate} %</td>
<td>&nbsp;</td>
<td class="alright">
{$taxData['vat']|number_format:"2":",":"."} &euro;
</td>
</tr>
{/foreach}
<tr class="cart_footer_sum">
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>
F&auml;lliger Betrag
</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td class="alright">
{$shoppingcart.price_sum_gross|number_format:"2":",":"."} &euro;
</td>
</tr>
<tr class="cart_footer_sum">
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td colspan="4" class="alright">
{$shoppingcart.price_tax_text|replace:'[tax]%':''}
</td>
</tr>
</table>
<br /><br />
<div style="float:left;">
<input type="button" id="update_cart" name="shoppingcart_update" class="button" value="&gt;&gt; Aktualisieren" />
<div style="color:#959595;">
*Um Artikel zu entfernen, Anzahl <strong>0</strong> eingeben
</div>
</div>
<div style="float:right; text-align:right;">
<input id="cashdesk_button" type="button" class="button" value="&gt;&gt; Zur Kasse" />
{if isset($express_providers) && $express_providers}
{foreach from=$express_providers item=xp}
{if $xp.module == 'paypal_v2'}
<div style="margin-top:10px;">
<a href="/Kasse/?payment_express_start={$xp.module}" class="ppbutton" title="Direkt mit PayPal bezahlen &ndash; Adresse kommt von PayPal, Sie pr&uuml;fen die Bestellung danach in der Kasse">
<img src="https://www.paypalobjects.com/webstatic/de_DE/i/de-pp-logo-100px.png" alt="PayPal">Direkt bezahlen
</a>
</div>
{else}
<div style="margin-top:10px;">
<a href="/Kasse/?payment_express_start={$xp.module}" class="ppbutton">Direkt mit {$xp.label|escape} bezahlen</a>
</div>
{/if}
{/foreach}
{/if}
</div>
<br style="clear:both;" />
</form>
{else}
Es befinden sich keine Artikel in Ihrem Warenkorb
{/if}
</div>
</div>
</div>
{if $shoppingcart.items && $system_configuration.shoppingcart_ordertext == 1}
<br /><br />
<div class="full_box">
<div class="title_wrapper">
<div class="title">
<h2>Anmerkung zu dieser Bestellung</h2>
</div>
</div>
<div class="box_content">
<div class="box_padder">
<form method="post">
Sie können hier einen Nachrichtentext an uns zu dieser Bestellung hinzuf&uuml;gen.<br />
<textarea style="width:100%; height:200px;border:1px solid #555555;" name="customer_info">{if isset($customer_info)}{$customer_info}{/if}</textarea>
<input type="submit" name="order_text" class="button" value="Text speichern" />
</form>
</div>
</div>
</div>
{/if}
{literal}
<style>
/* Express-Button der Zahlungsanbieter (eigene Klasse, damit nicht .button greift) */
a.ppbutton, a.ppbutton:visited {
display: inline-flex; align-items: center; justify-content: center; gap: 8px;
min-width: 200px; padding: 10px 18px; box-sizing: border-box;
background: #ffc439; color: #003087; font-weight: 700; font-size: 15px;
text-decoration: none; border: 0; border-radius: 22px; line-height: 1.2;
box-shadow: 0 1px 2px rgba(0,0,0,.15); cursor: pointer;
}
a.ppbutton:hover, a.ppbutton:focus { background: #f2ba36; color: #003087; text-decoration: none; }
a.ppbutton img { height: 22px; width: auto; vertical-align: middle; }
</style>
<script type="text/javascript">
$(document).ready(function() {
$('#cashdesk_button').click(function(e) {
e.preventDefault();
window.location.href = '/Kasse/';
});
$('.item_delete').click(function(e) {
e.preventDefault();
//$(this).prev('.input_quantity').val(0);
$('.input_quantity', $(this).parents('tr.cart_row')).val(0);
$('#update_cart').trigger('click');
});
$('#update_cart').click(function(e) {
e.preventDefault();
var amount_ok = 1;
$('.item_container').each(function() {
var buy_quantity = $(this).attr('buy_quantity');
var min_quantity = $(this).attr('min_quantity');
var quantity = $('.input_quantity', this).val();
if (parseInt(quantity) != 0) {
if (parseInt(min_quantity) <= 1 || parseInt(quantity) >= parseInt(min_quantity)) {
if (parseInt(buy_quantity) <= 1 || (parseInt(quantity) % parseInt(buy_quantity)) == 0) {
$('.message_min_quantity', this).css({'display': 'none'});
$('.message_wrong_quantity', this).css({'display': 'none'});
}
else {
$('.message_min_quantity', this).css({'display': 'none'});
$('.message_wrong_quantity', this).css({'display': 'block'});
amount_ok = 0;
}
}
else {
$('.message_min_quantity', this).css({'display': 'block'});
$('.message_wrong_quantity', this).css({'display': 'none'});
amount_ok = 0;
}
}
});
if(amount_ok == 1) {
$('#cart_form').submit();
}
});
$('.close_message_box').click(function(e) {
e.preventDefault();
$('#scart_error_message_two').css({'display': 'none'});
$('#scart_error_message_one').css({'display': 'none'});
});
});
</script>
{/literal}
{* =====================================================================================
Warenkorb (theme2) -- ueberarbeitet 18.09.2026.
Aufbau: EIN Formular (#cart_form) fuer Mengen, Anmerkung und Weiterleitung. Vorher lag
die Anmerkung in einem zweiten Formular mit eigenem "Text speichern"-Knopf, und "Zur
Kasse" war ein reiner Link -- ungespeicherte Mengen und Anmerkungen gingen verloren.
Jetzt schickt jeder Weg (Aktualisieren, Zur Kasse, Express) das Formular ab; das Modul
website_shoppingcart.php speichert und leitet per cart_goto weiter.
Feldnamen sind Vertrag mit dem Modul: update_item[<cart_item_id>], customer_info,
cart_goto ('' | 'kasse' | 'express:<modul>'). IDs/Klassen fuer das JS unten und das
Theme-CSS (cart_table, cart_head, cart_row, cart_footer_*, input_quantity,
item_container, message_*) bleiben unveraendert.
===================================================================================== *}
{if $system_configuration.shoppingcart_quickbuy == 1}
<div class="full_box">
<div class="title_wrapper">
<div class="title">
<h2>Schnelleinkauf</h2>
</div>
</div>
<div class="box_content">
<div class="box_padder">
Artikelnummer oder Bezeichnung eingeben und den Artikel direkt in den Warenkorb legen.<br />
<input type="text" id="shoppingcart_search_item" name="search_item" autocomplete="off" placeholder="Artikel suchen &hellip;" style="border:1px solid #555555;width:100%;max-width:680px;box-sizing:border-box;" />
<div id="shoppingcart_search_result" style="position:relative;z-index:999999;"></div>
</div>
</div>
</div>
{/if}
<div class="full_box">
<div class="title_wrapper">
<div class="title">
<h2>Warenkorb</h2>
</div>
</div>
<div class="box_content">
<div class="box_padder">
{if $shoppingcart.items}
<form method="post" action="" id="cart_form">
<input type="hidden" name="cart_goto" id="cart_goto" value="" />
<table class="cart_table" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr class="cart_head">
<td class="alcenter">Pos.</td>
<td class="alcenter">Bild</td>
<td>Artikel</td>
<td class="alright">Einzelpreis</td>
<td class="alcenter">Anzahl</td>
<td class="alcenter">Entfernen</td>
<td class="alright">Gesamt</td>
</tr>
{foreach from=$shoppingcart.items item=item name=items_loop}
{if $item->short_uri}
{assign var=itemSuri value="/`$item->short_uri`.html"}
{else}
{assign var=itemSuri value="/index.php?item_id=`$item->id`"}
{/if}
<tr class="cart_row">
<td class="alcenter">{$smarty.foreach.items_loop.iteration}</td>
<td class="alcenter">
<a href="{$serverProtocol}://{$servername}{$itemSuri}"><img src="{$SHOP_DIR}images/article/thumb_{if $item->default_image_file_name}{$item->default_image_file_name}{else}default_image.png{/if}" alt="{$item->name|escape}" /></a>
</td>
<td>
<a href="{$serverProtocol}://{$servername}{$itemSuri}"><strong>{$item->name}</strong></a><br />
{if $item->variant_1 || $item->variant_2}
{$item->variant_1} {$item->variant_2}<br />
{/if}
{if ($item->variant_1 || $item->variant_2) && $item->item_number}
<span class="cart_item_number">Art.-Nr. {$item->item_number}</span>
{elseif $item->attribute_7 && $item->number != $item->attribute_7}
<span class="cart_item_number">Art.-Nr. {$item->attribute_7}</span>
<span class="cart_item_number_old" style="color:#777;">({$template_text.item_details.old_item_number_title} {$item->number})</span>
{else}
<span class="cart_item_number">Art.-Nr. {$item->number}</span>
{/if}
</td>
<td class="alright">{$item->calculatedPrices.shownPrice|number_format:"2":",":"."} &euro;</td>
<td class="alcenter item_container" buy_quantity="{$item->buy_quantity}" min_quantity="{$item->min_quantity}">
<div style="position:relative;">
<div id="scart_error_message_one" class="message_min_quantity">
<div class="close_message_box">x</div>
<div class="content">Mindestabnahme: {$item->min_quantity} St&uuml;ck.</div>
</div>
<div id="scart_error_message_two" class="message_wrong_quantity">
<div class="close_message_box">x</div>
<div class="content">Dieser Artikel ist nur in {$item->buy_quantity}er Schritten bestellbar.</div>
</div>
<input type="text" name="update_item[{$item->shopping_cart_item_id}]" class="input_quantity" value="{$item->quantity}" inputmode="numeric" aria-label="Anzahl {$item->name|escape}" />
</div>
</td>
<td class="alcenter item_container" buy_quantity="{$item->buy_quantity}" min_quantity="{$item->min_quantity}">
<a href="#" class="item_delete" title="Artikel aus dem Warenkorb entfernen" aria-label="Artikel entfernen" style="text-decoration:none;font-family:Arial;font-size:16px;font-weight:bold;color:#ff0000;">&times;</a>
</td>
<td class="alright">
<strong>{($item->calculatedPrices.shownPrice * $item->quantity)|number_format:"2":",":"."} &euro;</strong>
</td>
</tr>
{/foreach}
<tr class="cart_footer_first">
<td colspan="3">&nbsp;</td>
<td colspan="3">Zwischensumme</td>
<td class="alright">{$shoppingcart.shown_price_sum|number_format:"2":",":"."} &euro;</td>
</tr>
{foreach $shoppingcart.tax_values as $taxRate => $taxData}
<tr class="cart_footer_vat">
<td colspan="3">&nbsp;</td>
<td colspan="2">{if $shoppingcartVATUsage}Darin enthaltene MwSt.{else}Zzgl. MwSt.{/if} {$taxRate} %</td>
<td>&nbsp;</td>
<td class="alright">{$taxData['vat']|number_format:"2":",":"."} &euro;</td>
</tr>
{/foreach}
<tr class="cart_footer_sum">
<td colspan="3">&nbsp;</td>
<td colspan="3">Gesamtbetrag</td>
<td class="alright">{$shoppingcart.price_sum_gross|number_format:"2":",":"."} &euro;</td>
</tr>
<tr class="cart_footer_sum">
<td colspan="3">&nbsp;</td>
<td colspan="4" class="alright" style="font-weight:normal;">{$shoppingcart.price_tax_text|replace:'[tax]%':''}</td>
</tr>
</table>
{if $system_configuration.shoppingcart_ordertext == 1}
<div class="cart_note" style="margin-top:24px;">
<label for="customer_info" style="font-weight:bold;">Anmerkung zu dieser Bestellung <span style="font-weight:normal;color:#777;">(optional)</span></label><br />
<div style="color:#777;margin:4px 0 6px;">Zum Beispiel Ger&auml;tetyp, Farbe oder ein Hinweis f&uuml;r den Versand. Sie k&ouml;nnen den Text auch in der Kasse noch &auml;ndern.</div>
<textarea id="customer_info" name="customer_info" rows="4" style="width:100%;box-sizing:border-box;border:1px solid #555555;padding:6px;">{if isset($customer_info)}{$customer_info|escape}{/if}</textarea>
</div>
{/if}
<div class="cart_actions" style="margin-top:24px;overflow:hidden;">
<div style="float:left;">
<input type="button" id="update_cart" name="shoppingcart_update" class="button" value="Warenkorb aktualisieren" />
<div style="color:#959595;margin-top:6px;">Zum Entfernen die Anzahl auf <strong>0</strong> setzen oder &times; anklicken.</div>
</div>
<div style="float:right;text-align:right;">
<input id="cashdesk_button" type="button" class="button" value="Zur Kasse" />
{if isset($express_providers) && $express_providers}
{foreach from=$express_providers item=xp}
<div style="margin-top:10px;">
{if $xp.module == 'paypal_v2'}
<a href="/Kasse/?payment_express_start={$xp.module}" class="ppbutton express_start" data-module="{$xp.module}" title="Direkt mit PayPal bezahlen &ndash; Adresse kommt von PayPal, Sie pr&uuml;fen die Bestellung danach in der Kasse">
<img src="https://www.paypalobjects.com/webstatic/de_DE/i/de-pp-logo-100px.png" alt="PayPal">Direkt bezahlen
</a>
{else}
<a href="/Kasse/?payment_express_start={$xp.module}" class="ppbutton express_start" data-module="{$xp.module}">Direkt mit {$xp.label|escape} bezahlen</a>
{/if}
</div>
{/foreach}
{/if}
</div>
</div>
</form>
{else}
<p>Ihr Warenkorb ist leer.</p>
<p><a href="/" class="button">Weiter einkaufen</a></p>
{/if}
</div>
</div>
</div>
{literal}
<style>
/* Express-Button der Zahlungsanbieter (eigene Klasse, damit nicht .button greift) */
a.ppbutton, a.ppbutton:visited {
display: inline-flex; align-items: center; justify-content: center; gap: 8px;
min-width: 200px; padding: 10px 18px; box-sizing: border-box;
background: #ffc439; color: #003087; font-weight: 700; font-size: 15px;
text-decoration: none; border: 0; border-radius: 22px; line-height: 1.2;
box-shadow: 0 1px 2px rgba(0,0,0,.15); cursor: pointer;
}
a.ppbutton:hover, a.ppbutton:focus { background: #f2ba36; color: #003087; text-decoration: none; }
a.ppbutton img { height: 22px; width: auto; vertical-align: middle; }
.cart_table .cart_item_number { color: #444; }
</style>
<script type="text/javascript">
$(document).ready(function() {
// Mengen pruefen (Mindestabnahme, Staffel). true = alles in Ordnung.
function mengenOk() {
var ok = true;
$('.item_container').each(function() {
var buy_quantity = parseInt($(this).attr('buy_quantity'));
var min_quantity = parseInt($(this).attr('min_quantity'));
var quantity = parseInt($('.input_quantity', this).val());
if (isNaN(quantity) || quantity == 0) { return; }
if (min_quantity > 1 && quantity < min_quantity) {
$('.message_min_quantity', this).css({'display': 'block'});
$('.message_wrong_quantity', this).css({'display': 'none'});
ok = false;
} else if (buy_quantity > 1 && (quantity % buy_quantity) != 0) {
$('.message_min_quantity', this).css({'display': 'none'});
$('.message_wrong_quantity', this).css({'display': 'block'});
ok = false;
} else {
$('.message_min_quantity', this).css({'display': 'none'});
$('.message_wrong_quantity', this).css({'display': 'none'});
}
});
return ok;
}
// Ein Weg fuer alles: Formular abschicken, das Modul speichert und leitet weiter.
function absenden(ziel) {
if (!mengenOk()) { return; }
$('#cart_goto').val(ziel);
$('#cart_form').submit();
}
$('#update_cart').click(function(e) { e.preventDefault(); absenden(''); });
$('#cashdesk_button').click(function(e) { e.preventDefault(); absenden('kasse'); });
$('.express_start').click(function(e) { e.preventDefault(); absenden('express:' + $(this).data('module')); });
$('.item_delete').click(function(e) {
e.preventDefault();
$('.input_quantity', $(this).parents('tr.cart_row')).val(0);
absenden('');
});
$('.close_message_box').click(function(e) {
e.preventDefault();
$(this).parent().css({'display': 'none'});
});
});
</script>
{/literal}