individuelle Versandkosten Berechnung mit TWIG Vorlagen
Beschreibung
Highlights
Features
Über die Erweiterung
Nutzung des Plugins
Das Plugin fügt die Möglichkeit hinzu, den Versand manuell zu berechnen. Mithilfe von lineitems vom Warenkorb können Sie diese zur Berechnung des Versands verwenden. Das Feld "Versandberechnung" basiert auf der Twig-Vorlage und die Twig-Funktionen sollten in Operationen mit Daten aufgerufen werden.
In "lineItems" sind alle Produkte aus dem Warenkorb. Und dort sind aktuelle "salesChannel" Daten hinzugefügt.
Ermöglicht somit komplexeste Versandkostenermittlung mit relativ einfachen Mitteln (TWIG) via Shopware Admin Oberfläche.
Funktionsweise
- Es ist möglich, die Versandberechnung auf der Detailseite der Versandart manuell hinzuzufügen.
- Standardwerte hinzugefügt:
- Vertriebskanal
- LineItems (lineItem funktioniert nur bei foreach-Schleife).
- Wenn kein Float-Wert zurückgegeben werden kann, wird der nächste Matrixpreis (falls vorhanden) oder der Standardpreis verwendet.
Manuelle Berechnung der Versandkosten
Im
Bereich Einstellungen -> Shop-> Versand -> Versandart anlegen oder bearbeiten
Hier ist es möglich über eine Preismatrix, den Versand manuell berechnen zu lassen.
Sie haben hier lineItems vom Warenkorb und können diese zur Berechnung des Versands verwenden.
Beispiel #1: (Versandkosten fix auf 10 ohne weiterer Regeln)
{% set shipping = 10 %}{{ shipping }}
Beispiel #2: (Versandkosten erhöhen sich um einen Wert, abhängig davon ob ein Artikel mit dem CustomField im Warenkorb liegt)
{% set shipping = 10 %}
{% for lineItem in lineItems %}
{% if lineItem.payload.customFields.custom_sw4_attributes_attr7 == "1" %}
{% set shipping = shipping + 1 %}
{% endif %}
{% endfor %}
{{ shipping }}
Wichtig: Bei der Konfiguration der Zusatzfelder im Admin unter Einstellungen > System > Zusatzfelder muss „Verfügbar in Warenkörben“ bei den jeweiligen Zusatzfeldern aktiviert sein.
Beispiel #3: (Versandkosten je nachdem in welchen Kategorien sich die Produkte Warenkorb befinden)
{% set numberProductsInsideCategory1 = 0 %}
{% set numberProductsInsideCategory2 = 0 %}
{% for lineItem in lineItems %}
{% if lineItem.payload.categoryIds %}
{% for categoryId in lineItem.payload.categoryIds %}
{# Is product inside category 1 - we check it by the UUID #}
{% if categoryId == '21b199946c884aa294b409f135963880' %}
{% set numberProductsInsideCategory1 = numberProductsInsideCategory1 + 1 %}
{% endif %}
{# Is product inside category 2 - we check it by the UUID? #}
{% if categoryId == '0b5e8204e7034c2ca17a3899274874a4' %}
{% set numberProductsInsideCategory2 = numberProductsInsideCategory2 + 1 %}
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}
{# Now we can do something with the variables numberProductsInsideCategory1 and numberProductsInsideCategory2 #}
{% if numberProductsInsideCategory1 > 0 and numberProductsInsideCategory2 > 0 %}
19.90
{% elseif numberProductsInsideCategory1 > 0 %}
14.90
{% elseif numberProductsInsideCategory2 > 0 %}
12.90
{% else %}
9.90
{% endif %}
Hinweis: Es sind im Warenkorb nur die UUIDs der Kategorien (einmalige ID in der Datenbank) verfügbar. Die UUID kannst du sehr einfach über das Plugin https://store.shopware.com/acris28622190382f/acris-kategorie-id-anzeigen.html auslesen und kopieren.
Beispiel #4: Mengen Ermittlung
{% set quantity = 0 %}{% for lineItem in lineItems %}
{% if lineItem.quantity %}
{% set quantity = quantity + lineItem.quantity %}
{% endif %}
{% endfor %}
{{ quantity }}
Beispiel #5: Kunden Freitextfeld Freihausgrenze
{% set customerShippingFreeLimit = false %}
{% if customer.customFields is not empty and customer.customFields.custom_customer_shipping_free_limit > 0 %}
{% set customerShippingFreeLimit = customer.customFields.custom_customer_shipping_free_limit %}
{% endif %}
{% set shippingCosts = 9.95 %}
{% if customerShippingFreeLimit > 0 and cart.price.totalPrice >= customerShippingFreeLimit %}
{% set shippingCosts = 0 %}
{% endif %}
{{ shippingCosts }}
Beispiel #6: Hinzufügen der Mehrwertsteuer je nach Lieferland und Warenkorbinhalt zum Nettopreis der Versandkosten
{% set shippingNet = 100 %}
{% if context.taxState == 'gross' and matchingTaxRules and matchingTaxRules.highestRate() %}
{% set shippingNet = shippingNet / 100 * matchingTaxRules.highestRate().getPercentage() %}
{% set shipping = shippingNet * (1 + (matchingTaxRules.highestRate().getTaxRate() / 100)) %}
{% else %}
{% set shipping = shippingNet %}
{% endif %}
{{ shipping }}
Beispiel #7: Berechnung der Versandkosten abhängig von Brutto / Netto im Warenkorb
{% if context.taxState == 'gross' %}
{# do smth if tax state is gross #}
{% else %}
{# do smth if tax state is net #}
{% endif %}
Beispiel #8: Wenn mindestens ein Produkt nicht lagernd ist, dann Versandkosten 10 €, ansonsten 5 €
{% set oneProductOutOfStock = false %}
{% for lineItem in lineItems %}
{% if lineItem.deliveryInformation and lineItem.deliveryInformation.stock <= 0 %}
{% set oneProductOutOfStock = true %}
{% endif %}
{% endfor %}
{% if oneProductOutOfStock %}
10
{% else %}
5
{% endif %}
---
Folgende Variablen sind aktuell verfügbar - wenn sie weiter Variablen benötigen, dann bitte eine Supportanfrage über den Shopware Account an uns stellen.
Auflistung der möglichen Variablen
matchingTaxRules (Steuern, die für die Versandart relevant sind, ermittelt über Steuer-Typ - PHP-Klasse TaxRuleCollection)
- matchingTaxRules.highestRate().getTaxRate()
currency
- currency.isoCode
- currency.factor
- currency.symbol
- currency.shortName
- currency.name
- currency.position
- currency.translations
- currency.orders
- currency.salesChannels
- currency.salesChannelDefaultAssignments
- currency.salesChannelDomains
- currency.shippingMethodPrices
- currency.promotionDiscountPrices
- currency.isSystemDefault
- currency.productExports
- currency.countryRoundings
- currency.itemRounding
- currency.totalRounding
- currency.taxFreeFrom
- currency.translated.customFields
context
- context.languageIdChain
- context.versionId
- context.currencyId
- context.currencyFactor
- context.scope
- context.ruleIds
- context.source
- context.considerInheritance
- context.taxState
- context.rounding
ruleIds - array with active rule ids
customer
- customer.groupId
- customer.defaultPaymentMethodId
- customer.salesChannelId
- customer.languageId
- customer.lastPaymentMethodId
- customer.defaultBillingAddressId
- customer.defaultShippingAddressId
- customer.customerNumber
- customer.salutationId
- customer.firstName
- customer.lastName
- customer.company
- customer.password
- customer.email
- customer.title
- customer.vatIds
- customer.affiliateCode
- customer.campaignCode
- customer.active
- customer.doubleOptInRegistration
- customer.doubleOptInEmailSentDate
- customer.doubleOptInConfirmDate
- customer.hash
- customer.guest
- customer.firstLogin
- customer.lastLogin
- customer.newsletter
- customer.birthday
- customer.lastOrderDate
- customer.orderCount
- customer.orderTotalAmount
- customer.createdAt
- customer.updatedAt
- customer.legacyEncoder
- customer.legacyPassword
- customer.group
- customer.defaultPaymentMethod
- customer.salesChannel
- customer.language
- customer.lastPaymentMethod
- customer.salutation
- customer.defaultBillingAddress
- customer.defaultShippingAddress
- customer.activeBillingAddress
- customer.activeShippingAddress
- customer.addresses
- customer.orderCustomers
- customer.autoIncrement
- customer.tags
- customer.tagIds
- customer.promotions
- customer.recoveryCustomer
- customer.productReviews
- customer.remoteAddress
- customer.requestedGroupId
- customer.requestedGroup
- customer.boundSalesChannelId
- customer.boundSalesChannel
- customer.wishlists
- customer.customFields
cart
- cart.name
- cart.token
- cart.price.netPrice
- cart.price.totalPrice
- cart.price.calculatedTaxes
- cart.price.taxRules
- cart.price.positionPrice
- cart.price.taxStatus
- cart.price.rawTotal
- cart.lineItems
- cart.errors
- cart.deliveries
- cart.transactions
- cart.modified
- cart.customerComment
- cart.affiliateCode
- cart.campaignCode
- cart.data
- cart.ruleIds
lineItems - array with line item
lineItem
- lineItem.id
- lineItem.referencedId
- lineItem.label
- lineItem.quantity
- lineItem.type
- lineItem.priceDefinition
- lineItem.price
- lineItem.good
- lineItem.description
- lineItem.cover
- lineItem.deliveryInformation
- lineItem.deliveryInformation.stock
- lineItem.deliveryInformation.weight
- lineItem.deliveryInformation.freeDelivery
- lineItem.deliveryInformation.restockTime
- lineItem.deliveryInformation.deliveryTime
- lineItem.deliveryInformation.height
- lineItem.deliveryInformation.width
- lineItem.deliveryInformation.length
- lineItem.children
- lineItem.requirement
- lineItem.removable
- lineItem.stackable
- lineItem.quantityInformation
- lineItem.modified
- lineItem.dataTimestamp
- lineItem.dataContextHash
- lineItem.payload
- lineItem.payload.isCloseout
- lineItem.payload.customFields
- lineItem.payload.createdAt
- lineItem.payload.releaseDate
- lineItem.payload.isNew
- lineItem.payload.markAsTopseller
- lineItem.payload.purchasePrices
- lineItem.payload.productNumber
- lineItem.payload.manufacturerId
- lineItem.payload.taxId
- lineItem.payload.tagIds
- lineItem.payload.categoryIds
- lineItem.payload.propertyIds
- lineItem.payload.optionIds
- lineItem.payload.options
- lineItem.payload.length
- lineItem.payload.height
- lineItem.payload.width
- lineItem.payload.deliveryTime
- lineItem.payload.features
- lineItem.deliveryInformation.weight
salesChannel
- salesChannel.typeId
- salesChannel.languageId
- salesChannel.currencyId
- salesChannel.paymentMethodId
- salesChannel.shippingMethodId
- salesChannel.countryId
- salesChannel.navigationCategoryId
- salesChannel.navigationCategoryDepth
- salesChannel.homeSlotConfig
- salesChannel.homeCmsPageId
- salesChannel.homeCmsPage
- salesChannel.homeEnabled
- salesChannel.homeName
- salesChannel.homeMetaTitle
- salesChannel.homeMetaDescription
- salesChannel.homeKeywords
- salesChannel.footerCategoryId
- salesChannel.serviceCategoryId
- salesChannel.name
- salesChannel.shortName
- salesChannel.accessKey
- salesChannel.currencies
- salesChannel.languages
- salesChannel.configuration
- salesChannel.active
- salesChannel.maintenance
- salesChannel.maintenanceIpWhitelist
- salesChannel.taxCalculationType
- salesChannel.type
- salesChannel.currency
- salesChannel.language
- salesChannel.paymentMethod
- salesChannel.shippingMethod
- salesChannel.country
- salesChannel.orders
- salesChannel.customers
- salesChannel.countries
- salesChannel.paymentMethods
- salesChannel.shippingMethods
- salesChannel.translations
- salesChannel.domains
- salesChannel.systemConfigs
- salesChannel.navigationCategory
- salesChannel.footerCategory
- salesChannel.serviceCategory
- salesChannel.productVisibilities
- salesChannel.mailHeaderFooterId
- salesChannel.numberRangeSalesChannels
- salesChannel.mailHeaderFooter
- salesChannel.customerGroupId
- salesChannel.customerGroup
- salesChannel.newsletterRecipients
- salesChannel.promotionSalesChannels
- salesChannel.documentBaseConfigSalesChannels
- salesChannel.productReviews
- salesChannel.seoUrls
- salesChannel.seoUrlTemplates
- salesChannel.mainCategories
- salesChannel.paymentMethodIds
- salesChannel.productExports
- salesChannel.hreflangActive
- salesChannel.hreflangDefaultDomainId
- salesChannel.hreflangDefaultDomain
- salesChannel.analyticsId
- salesChannel.analytics
- salesChannel.customerGroupsRegistrations
- salesChannel.eventActions
- salesChannel.boundCustomers
- salesChannel.wishlists
- salesChannel.landingPages
- salesChannel.translated.customFields
shippingMethod
- shippingMethod.translated.name
- shippingMethod.active
- shippingMethod.description
- shippingMethod.trackingUrl
- shippingMethod.deliveryTimeId
- shippingMethod.deliveryTime
- shippingMethod.translations
- shippingMethod.orderDeliveries
- shippingMethod.salesChannelDefaultAssignments
- shippingMethod.salesChannels
- shippingMethod.availabilityRule
- shippingMethod.availabilityRuleId
- shippingMethod.prices
- shippingMethod.mediaId
- shippingMethod.taxId
- shippingMethod.media
- shippingMethod.tags
- shippingMethod.taxType
- shippingMethod.tax
- shippingMethod.translated.customFields
paymentMethod
- paymentMethod.pluginId
- paymentMethod.handlerIdentifier
- paymentMethod.translated.name
- paymentMethod.distinguishableName
- paymentMethod.description
- paymentMethod.position
- paymentMethod.active
- paymentMethod.afterOrderEnabled
- paymentMethod.plugin
- paymentMethod.translations
- paymentMethod.orderTransactions
- paymentMethod.customers
- paymentMethod.salesChannelDefaultAssignments
- paymentMethod.salesChannels
- paymentMethod.availabilityRule
- paymentMethod.availabilityRuleId
- paymentMethod.mediaId
- paymentMethod.media
- paymentMethod.formattedHandlerIdentifier
- paymentMethod.shortName
- paymentMethod.appPaymentMethod
- paymentMethod.translated.customFields
customerGroup
- customerGroup.name
- customerGroup.translated.name
- customerGroup.displayGross
- customerGroup.translations
- customerGroup.customers
- customerGroup.salesChannels
- customerGroup.registrationActive
- customerGroup.registrationTitle
- customerGroup.registrationIntroduction
- customerGroup.registrationOnlyCompanyRegistration
- customerGroup.registrationSeoMetaDescription
- customerGroup.registrationSalesChannels
- customerGroup.translated.customFields
taxRules (Auflistung der im Shop verfügbaren Steuern - PHP-Klasse TaxCollection)
- taxRules.ids
- taxRules.elements
Erweiterung ab Pluginversion 2.2.0 - Ermittlung des Steuersatzes
Der für die Versandart relevante Steuersatz wird in Shopware über den "Steuer-Typ" (Auto, Höchster Satz oder Fester Satz) ermittelt. Das Ergebnis daraus speichern wir ab sofort in der Variablen "matchingTaxRules", diese entspricht der PHP-Klasse https://github.com/shopware/platform/blob/trunk/src/Core/Checkout/Cart/Tax/Struct/TaxRuleCollection.php.
Sie können somit den aktuell höchsten Steuersatz im Warenkorb über die folgende Twig-Variable auslesen: {{ matchingTaxRules.highestRate().getTaxRate() }} Mit diesem Steuersatz können Sie nun rechnen.
Details
- Verfügbar in: Englisch, Deutsch
- Zuletzt aktualisiert: 19. September 2024
- Veröffentlicht: 19. März 2021
- Version: 4.0.3
- Kategorie: Checkout / Bestellprozess
Ressourcen
Bewertungen (9)
Exemplary support
Essenzielle Erweiterung
Mächtiges, gut funktionierendes Werkzeug
Der Acris-Support, wenn man ihn mal benötigt, ist schnell und kompetent und hilft ersichtlich gerne.
Leider ist die Erweiterung überhaupt erst nötig, weil Shopware in SW6 keine Auf- und Abschlagsversandarten mehr bietet und eigene Regeln und Bedingungen ebenfalls nicht mehr möglich sind.
In SW5 konnte man unsere Anforderungen noch mit Hausmittel darstellen!
Tut was es soll
Hatte einige Probleme und Fragen zum Versand, die alle schnell und erfolgreich gelöst werden konnten.
Produkt und Service sind erstklassig
Endlich die Erweiterung nach der man sucht wenn man komplexen Versand berechnen will.
Acris = Erweiterung und Support 1+
Der Support ist Weltklasse, antwortet schnell und präzise und hilft auch darüber hinaus, wo sie können.
Ein muss für jeden Shop mit komplexeren Versandlogiken. Top!
Endlich wieder individuelle Berechnungen
Mit diesem Plugin lassen sich eigentlich simple Berechnungen auch wieder simpel durchführen.
Beispielsweise Versandgewicht bis 5 kg = Preis x
Für jedes hinzu kommende KG zahlt der Kunde y, addieert auf x.
Kein Problem mit diesem Plugin.
P.S.: Schade, dass derartig nötige Funktionen nicht Standard sind.
Über den Extension Partner
ACRIS E-Commerce GmbH
Partner Status
Gold Partner
Premium Extension Partner
Details
- Bewertung: 4.9
- Partner seit: 2015
- Erweiterungen: 121
- Land: Austria
Support
- Support Sprachen: Deutsch, Englisch
- Support Reaktionszeit: Sehr schnell