Hallo, nach dem ich im Internet keine passende Antwort gefunden habe, hab ich eben selber den Code Untersucht. Zum einen ist es offenar nichterlaubt, diese Felder zu nutzen wenn man keinen Standartversand nutzt.
$statements = $this->db->fetchPairs("
SELECT id, bind_sql
FROM s_premium_dispatch
WHERE active = 1 AND type IN (0)
AND bind_sql IS NOT NULL AND bind_sql != ''
");
Dies halte ich erstmal für einen Fehler. hiervon steht zumindest in der Dokumentation nichts.
Mit den eigenen Bedingungen und eigenen Berechnungen im Versandkosten-Modul, können auch sehr komplexe Anforderungen und Berechnungen abgebildet werden. In diesem Artikel findest du einige Beispiele aufgeführt. Beide Optionen findest du in den Versandkosten im Reiter "Erweiterte Einstellungen".
Mit der eigenen Bedingung kann einen Versandart optional aktiviert oder deaktiviert werden. Die eigene Berechnung ignoriert die automatische Berechnung der Versandkosten. Zur Versandkosten-Ermittlung wird nur noch das Feld eigene Berechnung herangezogen.
Es können grundsätzlich alle Variablen der abgefragten Tabellen innerhalb der Funktionen sGetPremiumDispatches und sGetPremiumShippingcosts genutzt werden. Die jeweiligen Funktionen findest du in der Datei /engine/core/class/sAdmin.php. Die Bereiche sind wie folgt unterteilt: s_order_basket -> b
s_articles -> a
s_articles_details -> d
s_articles_attributes -> at
s_core_tax -> t
s_user -> u
s_user_billingaddress -> ub
s_user_shippingaddress -> us
Diese Aussage ist einfach verwirrend. Es wird von “eigene Bedingung” & “eigene Berrechung” gesprochen. So heißen die Felder im Versandmodul nun einmal.
Nutzen kann man diese Kürzel aber dort überhaupt nicht. Gemeint ist, dass man diese Kürzel in der erweiterten SQL-Abfrage unter Grundeinstellungen->Storefront->Versandkosten-Modul verwenden kann.
Damit geht, was ich mir vorstelle musste dieser Query einfach folgender Maßen erweitert werden:
MAX(a.topseller) as has_topseller, MAX(at.attr3) as has_comment, MAX(b.esdarticle) as has_esd, b.ordernumber as orderNr
Außerdem musste ich natürlich in der sAdmin.php in
**_sGetPremiumDispatches_**
$statements = $this->db->fetchPairs("
SELECT id, bind_sql
FROM s_premium_dispatch
WHERE active = 1 AND type IN (0,2)
AND bind_sql IS NOT NULL AND bind_sql != ''
");
und
$sql = "
SELECT
d.id as `key`,
d.id, d.name,
d.description,
d.calculation,
d.status_link,
b.*
FROM s_premium_dispatch d
JOIN ( SELECT $sql_basket ) b
JOIN s_premium_dispatch_countries dc
ON d.id = dc.dispatchID
AND dc.countryID=b.countryID
JOIN s_premium_dispatch_paymentmeans dp
ON d.id = dp.dispatchID
AND dp.paymentID=b.paymentID
LEFT JOIN s_premium_holidays h
ON h.date = CURDATE()
LEFT JOIN s_premium_dispatch_holidays dh
ON d.id=dh.dispatchID
AND h.id=dh.holidayID
LEFT JOIN (
SELECT dc.dispatchID
FROM s_order_basket b
JOIN s_articles_categories_ro ac
ON ac.articleID=b.articleID
JOIN s_premium_dispatch_categories dc
ON dc.categoryID=ac.categoryID
WHERE b.modus=0
AND b.sessionID='{$this->session->offsetGet('sessionId')}'
GROUP BY dc.dispatchID
) as dk
ON dk.dispatchID=d.id
LEFT JOIN s_user u
ON u.id=b.userID
AND u.active=1
LEFT JOIN (
SELECT *, user_id as userID, country_id as countryID, state_id as stateID
FROM s_user_addresses a
WHERE a.user_id = :userId
AND a.id = :billingAddressId
) as ub
ON ub.userID = u.id
LEFT JOIN (
SELECT *, user_id as userID, country_id as countryID, state_id as stateID
FROM s_user_addresses a
WHERE a.user_id = :userId
AND a.id = :shippingAddressId
) as us
ON us.userID = u.id
WHERE d.active=1
AND (
(bind_time_from IS NULL AND bind_time_to IS NULL)
OR
(IFNULL(bind_time_from,0) <= IFNULL(bind_time_to,86400) AND TIME_TO_SEC(DATE_FORMAT(NOW(),'%H:%i:00')) BETWEEN IFNULL(bind_time_from,0) AND IFNULL(bind_time_to,86400))
OR
(bind_time_from > bind_time_to AND TIME_TO_SEC(DATE_FORMAT(NOW(),'%H:%i:00')) NOT BETWEEN bind_time_to AND bind_time_from)
)
AND (
(bind_weekday_from IS NULL AND bind_weekday_to IS NULL)
OR
(IFNULL(bind_weekday_from,1) <= IFNULL(bind_weekday_to,7) AND WEEKDAY(NOW())+1 BETWEEN IFNULL(bind_weekday_from,1) AND IFNULL(bind_weekday_to,7))
OR
(bind_weekday_from > bind_weekday_to AND WEEKDAY(NOW())+1 NOT BETWEEN bind_weekday_to AND bind_weekday_from)
)
AND (bind_weight_from IS NULL OR bind_weight_from <= b.weight)
AND (bind_weight_to IS NULL OR bind_weight_to >= b.weight)
AND (bind_price_from IS NULL OR bind_price_from <= b.amount)
AND (bind_price_to IS NULL OR bind_price_to >= b.amount)
AND (bind_instock=0 OR bind_instock IS NULL OR (bind_instock=1 AND b.instock) OR (bind_instock=2 AND b.stockmin))
AND (bind_laststock=0 OR (bind_laststock=1 AND b.laststock))
AND (bind_shippingfree!=1 OR NOT b.shippingfree)
AND dh.holidayID IS NULL
AND (d.multishopID IS NULL OR d.multishopID=b.multishopID)
AND (d.customergroupID IS NULL OR d.customergroupID=b.customergroupID)
AND dk.dispatchID IS NULL
AND d.type IN (0,2)
$sql_where
GROUP BY d.id
ORDER BY d.position, d.name
";
eintragen nun gehts.
Lange Rede kurzer Sinn meine Bitte an ShopWare. Bitte lasst dort mehr Typen als nur 0 zu. Damit ich auch noch in Zukunft ein Update machen kann.