führt dazu dass Produkte, welche in der (versteckten) Kategorie noinvoice liegen,
wenn eines davon im Warenkorb liegt, die Zahlart oxidinvoice , also Rechnung ausblenden bei payment …
das definierende Array kann beliebige erweitert werden, und kann natürlich auch dann mal später im backend behandelt werden …
<?php
/**
*
* disable payment for articles assigned to specific category
*/
class htr_payment extends htr_payment_parent
{
protected $_aCatDiasallowPayment = array ('noinvoice'=>'oxidinvoice');
public function getPaymentList()
{
if (is_null($this->_oPaymentList)) {
$oBasket = $this->getSession()->getBasket();
$oPaymentList = parent::getPaymentList();
$oCategory = new oxCategory();
foreach($oBasket->getBasketArticles() as $key=>$oArticle){
$aCatIds = $oArticle->getCategoryIds();
foreach ($aCatIds as $sId){
$oCategory->load($sId);
$title = $oCategory->getTitle();
if (array_key_exists($title, $this->_aCatDiasallowPayment)){
//disallow
foreach ($oPaymentList as $key=>$oPayment){
$sOxid = $oPayment->_sOXID;
if ($sOxid == $this->_aCatDiasallowPayment[$title]){
unset ($this->_oPaymentList[$this->_aCatDiasallowPayment[$title]]);
}
}
//disallow
}
}
}
#$this->_oPaymentList=$oPaymentList;
}
return $this->_oPaymentList;
}
}
Ah OK, gut, mit 4.5.3 hatte ich das getestet, aber nicht mit 4.4, artet ja schnell aus.
Bezüglich Updatefähigkeit sollte man jedoch statt direkt in core/oxcategory.php zu patchen,
lieber das im Modul machen.
Also für <4.5:
$title = $oCategory->getTitle();
ändern in
$title = $oCategory->oxcategories__oxtitle->getRawValue();
das geht nebenbei auch in 4.5x, aber wo es da ja eine Funktion gibt, die besser nehmen ?
Naja letztlich macht die auch nichts anderes …
Ich habe quasi das gleiche Problem, nur würde ich gern alle Versandarten bis auf eine ausschließen.
Heisst: Es gibt ein paar Artikel, die nur als Paket versendet werden da ziemlich groß. Lege ich einen kleinen Artikel dazu, geht es plötzlich auch als Brief. Sämtliche Sortierreihenfolgen und keine weitere Regel berücksichtigen und so weiter sollten richtig gesetzt sein. Kann ich das ähnlich ausschließen?
Das Problem mit mehreren Zahlarten kann so gelöst werden:
protected $_aCatDiasallowPayment = array (‘nopaypal’ => ‘oxidpaypal’, ‘nosofortueberweisung’ => ‘d3sofortueberweisung’);
Dafür müssen aber auch die Kategorien nopaypal und nosofortueberweisung angelegt werden.
erstmal danke für das Modul!
Klingt sehr vielversprechend und bietet eine Lösung für genau unser Problem!
Ich bin der Anleitung gefolgt, wir sind auf Version 4.4.8. (Update klappt leider nicht)!
Aber wenn ich nun eine Bestellung ausführe, dann gelange ich bei Punkt 3 des Vorgangs (Versand- und Zahlungsart) wieder auf die Homepage des Shops und kann die Bestellung nicht abschließen.
Ich habe lediglich die PHP Datei in den Ordner “Module” kopiert, das Modul im backend aktiviert, eine versteckte Kategorie hinzugefügt und dieser Kategorie das entsprechende Produkt hinzugefügt.
Der Fehler tritt übrigens bei allen Produkten auf!
Entferne ich die PHP Datei wieder und lösche das Modul, ist alles beim Alten.
Ich dachte, dass sei hinfällig, weil die Zeile von ‘holgt’ doch schon in seinem Modul geändert wurde?
Falls nicht, kannst du mir sagen, an welcher Stelle in der /core/oxcategory.php die Funktion eingebaut werden muss?
Ist diese Funktionalität “Zahlart für bestimmte Artikel ausschließen” eigentlich schon in die Wishlist von Oxid aufgenommen? (Finde gerade nicht den Link zu dieser Abstimmungsseite, ist offenbar ziemlich versteckt …)