nicht bös sein leute, aber auf bestimmte technische fragen hier und in anderen threads mit "sehe das problem nicht/wozu brauchtsn das" zu antworten ist entbehrlich. ein shopbetreiber wird gründe haben dafür, dass sein unternehmen bestimmte funktionen braucht, und das gilt auch für andere die das lesen und sich brauchbare lösungvorschläge erhoffen. auch diese hier angefragte funktion ist mehr als sinnvoll, wird in vielen betrieben notwendig sein und hat dazu vor jahren schon ein gewisser
// Hendrik - 15.07.2010 - exlusion config for shipping modules
ein snippet geschrieben und ich meine auch, hier veröffentlicht. bin selbst grad am modified1.06 update, habe die halbe nacht verbracht es zu suchen weil auch ich seinerzeit den programmiererfehler no1 begangen habe: nicht selbst dokumentiert. kann es sein, dass mit der seinerzeitigen forenumstellung gutes altwissen verloren ging oder hab ich das von wo anders?
egal, meine alte shopversion archäologisch untersucht (textsuche alle files:-), und die lösung herausextrahiert. frage noch an das entwicklerteam: meinem bescheidenem verständnis nach ist dieses snippet wirklich elegant und sauber. könnte man es nicht zum standard in modified machen? angekündigt war diese funktion doch mal, glaub ich. genug geschwafelt, hier die lösung von "hendrik":
=======================
IM SHOPADMIN einstellen, dass eine bezahlart im checkout nicht angeboten wird wenn kunde davor bestimmte versandarten gewählt hat, hier am beispiel "Nachnahme" (cod):
im file /shop/includes/modules/payment/cod.php
1. Schritt: in der function update_status() suchen:
if ($_SESSION['shipping']['id'] == 'selfpickup_selfpickup') {
$this->enabled = false;
}
Dieser code ist bereits eine hart codierte, also vom shop vorgegebene ausschließung dieser bezahlart für den fall "selbstabholung". der wird nun ersetzt mit
// BOF - Hendrik - 15.07.2010 - exlusion config for shipping modules if( MODULE_PAYMENT_COD_NEG_SHIPPING
!= '' ) { $neg_shpmod_arr = explode(',',MODULE_PAYMENT_COD_NEG_SHIPPING
); foreach( $neg_shpmod_arr as $neg_shpmod ) { $nd=$neg_shpmod.'_'.$neg_shpmod; if( $_SESSION['shipping']['id']==$nd || $_SESSION['shipping']['id']==$neg_shpmod ) { $this->enabled = false; break; } } } // if ($_SESSION['shipping']['id'] == 'selfpickup_selfpickup') { // $this->enabled = false; // } // EOF - Hendrik - 15.07.2010 - exlusion config for shipping modules 2. Schritt: in der function install() vor der schließenden "}" einfügen:
// Hendrik - 15.07.2010 - exlusion config for shipping modules
xtc_db_query("insert into ".TABLE_CONFIGURATION." ( configuration_key, configuration_value, configuration_group_id, sort_order, date_added) values ('MODULE_PAYMENT_COD_NEG_SHIPPING', 'selfpickup', '6', '0', now())");
Diese Zeile bewirkt den richtigen Datenbankeintrag für das Backend. Daher muss die bezahlart nach ende dieser arbeiten deinstalliert und wieder installiert werden. die technisch versierten können aus diesem codestück aber auch das SQL-statement herauskopieren und direkt mit dem richtigen tabellenanamen z.b. in phpMyAdmin absetzen.
3. Schritt: in der function keys() vor der schließenden "}" die beiden schlusszeichen ");" (klammer+strichpunkt) ersetzen mit
, 'MODULE_PAYMENT_COD_NEG_SHIPPING' ); // Hendrik - 15.07.2010 - exlusion config for shipping modules
Achtung, hier wirklich sauber arbeiten, auch geübten programmieren passieren hier abstürze, weil einfach mal ein beistrich vergessen wird: es wird einem array ein weiteres element hinzugefügt, also beginnt dieses snippet mit einen beistrich, dann dem neuen variablennamen, das array wird wieder mit ); geschlossen, dann folgt der urheberkommentar.
technik fertig, jetzt noch die sprachsteuerung:
4. Schritt: im file /shop/lang/german/modules/payment/cod.php vor dem programmende (das sind die zeichen "?>") einfügen
// Hendrik - 15.07.2010 - exlusion config for shipping modules define('MODULE_PAYMENT_COD_NEG_SHIPPING_TITLE', 'Ausschluß bei Versandmodulen'); define('MODULE_PAYMENT_COD_NEG_SHIPPING_DESC', 'Dieses Zahlungsmodul deaktivieren wenn Versandmodul gewählt (Komma separierte Liste)'); 5. Schritt das ganze für englisch: im file /shop/lang/english/modules/payment/cod.php vor dem programmende (das sind die zeichen "?>") einfügen
// Hendrik - 15.07.2010 - exlusion config for shipping modules define('MODULE_PAYMENT_COD_NEG_SHIPPING_TITLE', 'Exclusion in case of shipping'); define('MODULE_PAYMENT_COD_NEG_SHIPPING_DESC', 'deactivate this payment if one of these shippingtypes are selected (list separated by commas)'); usw. mit jeder sprache die es sonst noch braucht. fertig.
========================
Im Shop-Admin (Backend) können jetzt als Liste mit "," getrennt alle Versandarten eingegeben werden, für die diese Bezahlmethode nicht angeboten wird, siehe screenshot:
[ Für Gäste sind keine Dateianhänge sichtbar ]
im beispiel wird die bezahlart "barzahlung" für die versandarten österreichische Post (ap), versand nach zonen (zones) und GLS (gls) ausgeschlossen. wird also in meinem fall nur noch bei selbstabholung angezeigt. es müssen die modulnamen der versandarten eingegeben werden (siehe spalte "Modulname (für internen Gebrauch)" im shopadmin.
hab das mit cod (nachname) und cash (barzahlung) im modified1.06 erfolgreich implementiert. sollte im prinzip mit allen bezahlarten gehen, man muss nur im jeweiligen modul-file schritt 1-3 sinngemäß nachvollziehen, es könnte aber bei komplexeren modulen (kreditkarten) kniffliger sein, den einhängepunkt (=schritt 1) zu finden (ob das gewährleistungsfolgen des payment-providers haben kann, betrachte ich hier nicht).
[
EDIT Tomcraft 01.12.2014: Beitrag leserlich formatiert.]