diff options
| author | daniel <noreply@maennchen1.de> | 2026-09-24 11:24:12 +0200 |
|---|---|---|
| committer | daniel <noreply@maennchen1.de> | 2026-09-24 11:24:12 +0200 |
| commit | a95de0fa4cd3c617ef08a9679a6c32ae5f676fda (patch) | |
| tree | b78bd9fa23550e7dfd03cc693032cce5e9048236 /views/mods | |
| parent | 19a8938fa3b41a6c6ed1e15c20586f860f4a637b (diff) | |
- Feature: PHP 8.3 Kompatibilität
- Feature: SmartCheckout - Ersatz für EinSeitenCheckout
- Feature: Optik im Frontend an moderne Themes angepasst
Diffstat (limited to 'views/mods')
| -rw-r--r-- | views/mods/mod_basketteaser/smartcheckout.phtml | 44 | ||||
| -rw-r--r-- | views/mods/mod_orderupload/smartcheckout_checkout.phtml | 77 | ||||
| -rw-r--r-- | views/mods/mod_orderupload/smartcheckout_row.phtml | 21 | ||||
| -rw-r--r-- | views/mods/mod_paypalapi/overview_preauth_button.phtml | 15 | ||||
| -rw-r--r-- | views/mods/mod_productvars/smartcheckout_row.phtml | 57 |
5 files changed, 214 insertions, 0 deletions
diff --git a/views/mods/mod_basketteaser/smartcheckout.phtml b/views/mods/mod_basketteaser/smartcheckout.phtml new file mode 100644 index 0000000..712098c --- /dev/null +++ b/views/mods/mod_basketteaser/smartcheckout.phtml @@ -0,0 +1,44 @@ +<?php + + /** + * Template für die Warenkorbteaserprodukte im SmartCheckout + * + * Das Mengenfeld hat bewusst keinen Namen: es wird so bei den Aktualisierungen des + * Checkouts nicht mitgeschickt. Erst der Button überträgt die Menge unter + * wpsg_mod_basketteaser_row[ID] (siehe onModuleClick in smartcheckout.js). + */ + +?> +<div class="sc_teaser"> + + <div class="sc_teaser_title"><?php echo esc_html__('Das könnte Sie auch interessieren', 'wpsg'); ?></div> + + <?php foreach ($this->view['wpsg_mod_basketteaser']['products'] as $p) { ?> + <div class="sc_teaser_item" data-sc-item> + + <?php if ($p['image'] !== '') { ?> + <div class="sc_teaser_image"> + <img src="<?php echo esc_url($p['image']); ?>" alt="<?php echo esc_attr($p['name']); ?>" loading="lazy" /> + </div> + <?php } ?> + + <div class="sc_teaser_body"> + <div class="sc_teaser_name"> + <?php if ($p['link'] !== '') { ?> + <a href="<?php echo esc_url($p['link']); ?>"><?php echo esc_html($p['name']); ?></a> + <?php } else { ?> + <?php echo esc_html($p['name']); ?> + <?php } ?> + </div> + <div class="sc_teaser_price"><?php echo esc_html($p['price']); ?></div> + </div> + + <div class="sc_teaser_action"> + <input type="text" inputmode="numeric" class="sc_teaser_amount" value="1" data-sc-amount aria-label="<?php echo esc_attr__('Menge', 'wpsg'); ?>" /> + <button type="button" class="sc_button sc_button_secondary" data-sc-send="wpsg_mod_basketteaser_row[<?php echo intval($p['id']); ?>]"><?php echo esc_html__('Hinzufügen', 'wpsg'); ?></button> + </div> + + </div> + <?php } ?> + +</div> diff --git a/views/mods/mod_orderupload/smartcheckout_checkout.phtml b/views/mods/mod_orderupload/smartcheckout_checkout.phtml new file mode 100644 index 0000000..7da51cb --- /dev/null +++ b/views/mods/mod_orderupload/smartcheckout_checkout.phtml @@ -0,0 +1,77 @@ +<?php + + /** + * Template für den Bestellupload im SmartCheckout + * + * Aufbau und Verhalten wie beim Upload zum Produkt (smartcheckout_row.phtml): Dateiliste mit Größe und + * Löschen, darunter die Dateiauswahl. Die Datei wird direkt nach der Auswahl hochgeladen (data-sc-upload, + * siehe smartcheckout.js), entfernt wird über data-sc-send, beides landet in + * wpsg_mod_orderupload::smartcheckout_ajax(). Der Block wird bei jeder Antwort neu geliefert. + */ + + $arUploads = (array)($_SESSION['wpsg']['wpsg_mod_orderupload'] ?? []); + $uploadsum = floatval($this->view['wpsg_mod_orderupload']['uploadsum'] ?? 0); + $maxweight = (string)($this->view['wpsg_mod_orderupload']['maxweight'] ?? ''); + $bRequired = ($this->get_option('wpsg_mod_orderupload_optional') != '1'); + $bMulti = ($this->get_option('wpsg_mod_orderupload_multifiles') == '1'); + $arMessages = (array)($this->view['wpsg_mod_orderupload']['messages'] ?? []); + $arAllowed = (array)($this->view['wpsg_mod_orderupload']['allowedext'] ?? []); + $strAccept = implode(',', array_map(function($ext) { return '.'.$ext; }, $arAllowed)); + +?> +<div class="sc_orderupload"> + + <h2 class="sc_title"><?php echo esc_html__('Dateiupload', 'wpsg'); ?><?php if ($bRequired) { ?><span class="sc_required" aria-hidden="true">*</span><?php } ?></h2> + + <div class="sc_upload"> + + <div class="sc_upload_label"><?php echo esc_html__('Upload zur Bestellung', 'wpsg'); ?></div> + + <div class="sc_upload_target"> + + <?php /* Meldungen des letzten Uploads bzw. Entfernens, wie beim Upload zum Produkt direkt am Block */ ?> + <?php foreach ($arMessages as $message) { ?> + <div class="sc_upload_message sc_upload_message_<?php echo esc_attr($message['type']); ?>"><?php echo wp_kses_post($message['text']); ?></div> + <?php } ?> + + <?php if (wpsg_isSizedArray($arUploads)) { ?> + <ul> + <?php foreach ($arUploads as $ou_index => $ou) { ?> + <li> + <a href="<?php echo esc_url($ou[2]); ?>" target="_blank" rel="noopener"><?php echo wpsg_hspc($ou[0]); ?> <span class="size">(<?php echo esc_html(wpsg_formatSize($ou[3])); ?>)</span></a> + <a + href="#" + class="removeLink" + role="button" + data-sc-send="wpsg_mod_orderupload_remove" + data-sc-value="<?php echo intval($ou_index); ?>" + data-sc-confirm="<?php echo esc_attr__('Sind Sie sich sicher, dass Sie dieses Dokument aus der Bestellung entfernen möchten?', 'wpsg'); ?>" + title="<?php echo esc_attr__('Upload entfernen.', 'wpsg'); ?>" + ><img src="<?php echo esc_url(WPSG_URL.'views/gfx/bin_x.png'); ?>" alt="<?php echo esc_attr__('Löschen', 'wpsg'); ?>" /></a> + </li> + <?php } ?> + </ul> + <?php } ?> + + <?php if ($uploadsum > 0) { ?> + <input + type="file" + name="wpsg_mod_orderupload_file<?php echo (($bMulti)?'[]':''); ?>" + data-sc-upload="1" + data-sc-upload-wait="<?php echo esc_attr__('Bitte warten ', 'wpsg'); ?>" + <?php if ($strAccept !== '') { ?>accept="<?php echo esc_attr($strAccept); ?>"<?php } ?> + <?php echo (($bMulti)?'multiple="multiple"':''); ?> + aria-label="<?php echo esc_attr__('Upload zur Bestellung', 'wpsg'); ?>" + /> + <?php } ?> + + </div> + + <div class="sc_hint"><?php echo esc_html(wpsg_translate(__('Es stehen Ihnen #1# Mb von #2# Mb für den Upload zur Verfügung', 'wpsg'), $uploadsum, $maxweight)); ?></div> + <?php if (wpsg_isSizedArray($arAllowed)) { ?> + <div class="sc_hint"><?php echo esc_html(wpsg_translate(__('Erlaubte Dateiendungen: #1#', 'wpsg'), implode(', ', $arAllowed))); ?></div> + <?php } ?> + + </div> + +</div> diff --git a/views/mods/mod_orderupload/smartcheckout_row.phtml b/views/mods/mod_orderupload/smartcheckout_row.phtml new file mode 100644 index 0000000..66986f9 --- /dev/null +++ b/views/mods/mod_orderupload/smartcheckout_row.phtml @@ -0,0 +1,21 @@ +<?php + + /** + * Template für den Upload zum Produkt an einer Warenkorbposition im SmartCheckout + * + * Das Ziel trägt dieselbe ID wie im klassischen Warenkorb, die Scripte aus basket_after.phtml + * ersetzen seinen Inhalt nach dem Hochladen bzw. Löschen. + */ + + $product_index = $this->view['wpsg_mod_orderupload']['product_index']; + +?> +<div class="sc_upload"> + + <div class="sc_upload_label"><?php echo esc_html__('Upload zum Produkt', 'wpsg'); ?></div> + + <div id="wpsg_mod_orderupload_<?php echo intval($product_index); ?>_target" class="wpsg_mod_orderupload_target sc_upload_target"> + <?php echo $this->view['wpsg_mod_orderupload']['strHTMLTarget']; ?> + </div> + +</div> diff --git a/views/mods/mod_paypalapi/overview_preauth_button.phtml b/views/mods/mod_paypalapi/overview_preauth_button.phtml new file mode 100644 index 0000000..9fd775a --- /dev/null +++ b/views/mods/mod_paypalapi/overview_preauth_button.phtml @@ -0,0 +1,15 @@ +<?php + + /** + * Ersetzt in der Bestellübersicht den Button "zahlungspflichtig bestellen", solange die Zahlung noch nicht bei PayPal autorisiert wurde + */ + +?> + +<?php if (($this->view['wpsg_mod_paypalapi']['preauth_changed']??false) === true) { ?> +<div class="wpsg_mod_paypalapi_preauth_hint"> + <p><?php echo esc_html__('Ihre Bestellung hat sich seit der Autorisierung geändert. Bitte autorisieren Sie die Zahlung erneut bei PayPal.', 'wpsg'); ?></p> +</div> +<?php } ?> + +<input type="submit" class="wpsg_orderbutton wpsg_mod_paypalapi_preauth_button" value="<?php echo esc_attr__('Mit PayPal bezahlen', 'wpsg'); ?>" name="wpsg_order" /> diff --git a/views/mods/mod_productvars/smartcheckout_row.phtml b/views/mods/mod_productvars/smartcheckout_row.phtml new file mode 100644 index 0000000..b5845b5 --- /dev/null +++ b/views/mods/mod_productvars/smartcheckout_row.phtml @@ -0,0 +1,57 @@ +<?php + + /** + * Template für die Produktvariablen an einer Warenkorbposition im SmartCheckout + * + * Die Feldnamen entsprechen denen aus basket_row.phtml, gespeichert wird über + * wpsg_mod_productvars::basket_preUpdate(). Pflichtfelder tragen required, der leere + * Platzhalter der Auswahl wird serverseitig zu not_set. + */ + + $p = $this->view['wpsg_mod_productvars']['p']; + $product_index = $p['product_index']; + $arError = (array)$this->view['error']; + +?> +<div class="sc_pvars"> + + <?php foreach ($this->view['wpsg_mod_productvars']['data'] as $pv) { ?> + <?php + + $field_name = 'wpsg_mod_productvars['.$pv['id'].']['.$product_index.']'; + $field_id = 'wpsg_sc_pvar_'.$pv['id'].'_'.$product_index; + $value = wpsg_getStr($p['wpsg_mod_productvars'][$pv['id']]); + $bError = in_array('wpsg_mod_productvars_'.$pv['id'].'_'.$product_index, $arError); + $bRequired = ($pv['pflicht'] == '1'); + $strRequired = (($bRequired)?'<span class="sc_required" aria-hidden="true">*</span>':''); + + ?> + <div class="sc_pvar sc_pvar_typ<?php echo intval($pv['typ']); ?><?php echo (($bError)?' sc_invalid':''); ?>"> + + <?php if ($pv['typ'] == '3') { // Checkbox ?> + <label class="sc_pvar_check"> + <input type="hidden" value="0" name="<?php echo esc_attr($field_name); ?>" /> + <input type="checkbox" value="1" name="<?php echo esc_attr($field_name); ?>" <?php echo (($value === '1')?'checked="checked"':''); ?><?php echo (($bRequired)?' required':''); ?> /> + <span><?php echo wpsg_hspc(__($pv['name'], 'wpsg')); ?><?php echo $strRequired; ?></span> + </label> + <?php } else { ?> + <label class="sc_pvar_label" for="<?php echo esc_attr($field_id); ?>"><?php echo wpsg_hspc(__($pv['name'], 'wpsg')); ?><?php echo $strRequired; ?></label> + + <?php if ($pv['typ'] == '1') { // Auswahlfeld ?> + <select class="sc_pvar_input" id="<?php echo esc_attr($field_id); ?>" name="<?php echo esc_attr($field_name); ?>"<?php echo (($bRequired)?' required':''); ?>> + <option value=""><?php echo __('Bitte wählen', 'wpsg'); ?></option> + <?php foreach ((array)$pv['auswahl'] as $option) { ?> + <option <?php echo ((wpsg_hspc($value) === wpsg_hspc($option))?'selected="selected"':''); ?> value="<?php echo wpsg_hspc($option); ?>"><?php echo wpsg_hspc($option); ?></option> + <?php } ?> + </select> + <?php } else if ($pv['typ'] == '4') { // Textfeld mehrzeilig ?> + <textarea class="sc_pvar_input" id="<?php echo esc_attr($field_id); ?>" name="<?php echo esc_attr($field_name); ?>" rows="3"<?php echo (($bRequired)?' required':''); ?>><?php echo wpsg_hspc($value); ?></textarea> + <?php } else { // Textfeld ?> + <input class="sc_pvar_input" type="text" id="<?php echo esc_attr($field_id); ?>" name="<?php echo esc_attr($field_name); ?>" value="<?php echo wpsg_hspc($value); ?>"<?php echo (($bRequired)?' required':''); ?> /> + <?php } ?> + <?php } ?> + + </div> + <?php } ?> + +</div> |
