Bitte beachte, dass sich diese Dokumentation auf die neuste Version dieser Erweiterung bezieht. Wenn eine ältere Version eingesetzt wird, kann diese abweichen. Die jeweils passende Dokumentation befindet sich im Dokumentation-Verzeichnis der Erweiterung.
Shop Migration
Attention:
If you've an weird behaviour in checkout during or after migrations and updates, please flush all caches and delete all frontend sessions!
Version 5.xx
- We've extended the subscription table, so that it's now possible to enable the 'disallow-multiple-subscriptions' option. That means, a user is only able to subscribe to one of your products at a time, if this setting is enabled.
- Add a notice about trial-period-days in subscription-table (Templates/Subscription/SubscriptionTable.html)
Version 5.2.0
We've migrated the PayPal-Plus into the new PayPal-Checkout. That means generally, that payPalPlus
has been changed to payPalCheckout
in files, pat and configuration.
Changed TypoScript-Configuration
Renamed TypoScript-Constants:
themes.configuration.extension.shop.email.templates.payPalPlus.subjectCustomerConfirmation
->themes.configuration.extension.shop.email.templates.payPalCheckout.subjectCustomerConfirmation
themes.configuration.extension.shop.email.templates.payPalPlus.subjectOrder
->themes.configuration.extension.shop.email.templates.payPalCheckout.subjectOrder
themes.configuration.extension.shop.checkout.payPalPlus.payPalPlusClientId
->themes.configuration.extension.shop.checkout.payPalCheckout.payPalCheckoutClientId
themes.configuration.extension.shop.checkout.payPalPlus.payPalPlusSecret
->themes.configuration.extension.shop.checkout.payPalCheckout.payPalCheckoutSecret
Added TypoScript-Constants:
themes.configuration.extension.shop.checkout.payPalCheckout.payPalPlusLayout
themes.configuration.extension.shop.checkout.payPalCheckout.payPalPlusColor
themes.configuration.extension.shop.checkout.payPalCheckout.payPalPlusShape
themes.configuration.extension.shop.checkout.payPalCheckout.payPalPlusLabel
Removed TypoScript-Constants:
themes.configuration.pages.shop.payPalPlusSuccessRedirectPid
themes.configuration.extension.shop.checkout.payPalPlus.webhookID
If you have changed Setup-TypoScript, you must basically replace Plus
by Checkout
in your configuration.
Changed Fluid-Templates
- Templates/BasketOrder/ConfigrmOrder.html
- Templates/Pdf/CreateInvoicePdf.html
- Templates/Email/PayPalPlus/ has been moved to Templates/Email/PayPalCheckout/
Changed Events
- If an PayPayPlusPaid-Event is registrated, it must be moved into PayPalCheckoutPaid-Event
Discounts
- If you've discounts configured, which are only intended for PayPal-Plus, you need to reconfigure them with PayPal-Checkout.
Version 4.8.0 || Version 5.2.0
Introduction of a selectable delivery-address, based on frontend-user addresses, which are provided by EXT:modules
If you have overridden the BasketOrder/Checkout
Template, you need to sync the logic in order to us the new feature of selectable delivery-addresses. Additionally you need to configure the new checkout-fields - see documentation.
Version 4.5.0
- Change the default shipping-costs/tax-rates, into ones which are used with unknown delivery-country only! You might need to counfigure the default values for the respective countries!
Version 4.0.0
Attention:
Please execute all upgrade wizards in install tool!
- Sizes will be converted to sizes-relation-records
- Colors will be converted to colors-relation-records
- If you have overridden the invoice PDF template, it's necessary to sync them with the recent one, in order to ensure to have proper prices in there.
Shipping cost
The shipping costs are migrated into weight-based shipping costs. This requires every product has a weight.
Migration of email templates
The email templates must be migrated to HTMLFluid-Mails.
- Override the email template paths:
$GLOBALS['TYPO3_CONF_VARS']['MAIL']['layoutRootPaths'][1676624511] = 'EXT:your_extension/Resources/Private/Templates/Email/';
$GLOBALS['TYPO3_CONF_VARS']['MAIL']['templateRootPaths'][1676624511] = 'EXT:your_extension/Resources/Private/Templates/Email/';
$GLOBALS['TYPO3_CONF_VARS']['MAIL']['partialRootPaths'][1676624511] = 'EXT:your_extension/Resources/Private/Partials/Email/';
- Divide the templates into two. One for html and the other for plain text. For example:
From customerConfirmation.html
:
<div xmlns="http://www.w3.org/1999/xhtml" lang="en"
xmlns:f="http://typo3.org/ns/fluid/ViewHelpers"
xmlns:shop="http://typo3.org/ns/CodingMs/Shop/ViewHelpers">
<f:layout name="Email"/>
<f:section name="Subject">Shop Product OnInvoice</f:section>
<f:section name="BodyHtml">
<p style="{paragraphStyles}">
Dear {basketOrder.name}, thanks for your order.
</p>
<f:variable name="type" value="Order" />
<f:render partial="Email/OrderSummary" arguments="{_all}"/>
</f:section>
<f:section name="Body">
Dear {basketOrder.name}, thanks for your order.
<f:variable name="type" value="Order" />
<f:render partial="Email/OrderSummaryPlain" arguments="{_all}"/>
</f:section>
</div>
To: customerConfirmation.html
and customerConfirmation.txt
:
<div xmlns="http://www.w3.org/1999/xhtml" lang="en"
xmlns:f="http://typo3.org/ns/fluid/ViewHelpers"
xmlns:shop="http://typo3.org/ns/CodingMs/Shop/ViewHelpers">
<f:layout name="SystemEmail"/>
<f:section name="Main">
<p>
Dear {basketOrder.name}, thanks for your order.
</p>
<f:variable name="type" value="Order" />
<f:render partial="OrderSummary" arguments="{_all}"/>
</f:section>
</div>
Dear {basketOrder.name}, thanks for your order.
<f:variable name="type" value="Order" />
<f:render partial="OrderSummaryPlain" arguments="{_all}"/>
Attention:
If you've overridden the Checkout Service, you have to add constants
CUSTOMER_CONFIRMATION_EMAIL_TEMPLATE
andORDER_EMAIL_TEMPLATE
to your service class.
Clean up
In order to clean your system up, follow the next steps:
# Remove TypoScript constant
themes.configuration.extension.shop.email.contentType = …
themes.configuration.extension.shop.email.templates.onInvoice.customerConfirmation = …
themes.configuration.extension.shop.email.templates.onInvoice.order = …
themes.configuration.extension.shop.email.templates.prePayment.customerConfirmation = …
themes.configuration.extension.shop.email.templates.prePayment.order = …
themes.configuration.extension.shop.email.templates.request.customerConfirmation = …
themes.configuration.extension.shop.email.templates.request.request = …
themes.configuration.extension.shop.email.templates.payPal.customerConfirmation = …
themes.configuration.extension.shop.email.templates.payPal.order = …
themes.configuration.extension.shop.email.templates.payPalPlus.customerConfirmation = …
themes.configuration.extension.shop.email.templates.payPalPlus.order = …
themes.configuration.extension.shop.email.templates.klarna.customerConfirmation = …
themes.configuration.extension.shop.email.templates.klarna.order = …
themes.configuration.extension.shop.email.templates.stripe.customerConfirmation = …
themes.configuration.extension.shop.email.templates.stripe.order = …
# Remove TypoScript setup
plugin.tx_shop.settings {
email {
contentType = {$themes.configuration.extension.shop.email.contentType}
}
orderOptions {
onInvoice.email.customerConfirmation.template = {$themes.configuration.extension.shop.email.templates.onInvoice.customerConfirmation}
onInvoice.email.order.template = {$themes.configuration.extension.shop.email.templates.onInvoice.customerConfirmation}
prePayment.email.customerConfirmation.template = {$themes.configuration.extension.shop.email.templates.onInvoice.customerConfirmation}
prePayment.email.order.template = {$themes.configuration.extension.shop.email.templates.onInvoice.customerConfirmation}
request.email.customerConfirmation.template = {$themes.configuration.extension.shop.email.templates.onInvoice.customerConfirmation}
request.email.request.template = {$themes.configuration.extension.shop.email.templates.onInvoice.customerConfirmation}
payPal.email.customerConfirmation.template = {$themes.configuration.extension.shop.email.templates.onInvoice.customerConfirmation}
payPal.email.order.template = {$themes.configuration.extension.shop.email.templates.onInvoice.customerConfirmation}
payPalPlus.email.customerConfirmation.template = {$themes.configuration.extension.shop.email.templates.onInvoice.customerConfirmation}
payPalPlus.email.order.template = {$themes.configuration.extension.shop.email.templates.onInvoice.customerConfirmation}
klarna.email.customerConfirmation.template = {$themes.configuration.extension.shop.email.templates.onInvoice.customerConfirmation}
klarna.email.order.template = {$themes.configuration.extension.shop.email.templates.onInvoice.customerConfirmation}
stripe.email.customerConfirmation.template = {$themes.configuration.extension.shop.email.templates.onInvoice.customerConfirmation}
stripe.email.order.template = {$themes.configuration.extension.shop.email.templates.onInvoice.customerConfirmation}
}
}
Attention:
PHP 7.4 or higher required!
- If you're using own Fluid-Templates, you might to add
readonly="{fieldData.readonly}"
attributes on each Checkout.html form field. There are some more changes in this Template, please compare and check if they are important for you.
Version 3.3.0
IMPORTANT: To migrate the order_date, paid_date, and send_date fields in the tx_shop_domain_model_basketorder table from DATETIME to TIMESTAMP, use the SQL statements documented below.
What it does in detail:
Converts the
order_date
,paid_date
andsend_date
intx_shop_domain_model_basketorder
from type DATETIME to TIMESTAMP in database.UPDATE tx_shop_domain_model_basketorder SET order_date = 0 WHERE order_date IS NULL; UPDATE tx_shop_domain_model_basketorder SET paid_date = 0 WHERE paid_date IS NULL; UPDATE tx_shop_domain_model_basketorder SET send_date = 0 WHERE send_date IS NULL; ALTER TABLE tx_shop_domain_model_basketorder MODIFY COLUMN order_date varchar(32) DEFAULT '0' NOT NULL; ALTER TABLE tx_shop_domain_model_basketorder MODIFY COLUMN paid_date varchar(32) DEFAULT '0' NOT NULL; ALTER TABLE tx_shop_domain_model_basketorder MODIFY COLUMN send_date varchar(32) DEFAULT '0' NOT NULL; UPDATE tx_shop_domain_model_basketorder SET order_date = UNIX_TIMESTAMP(order_date) WHERE order_date != '0000-00-00 00:00:00'; UPDATE tx_shop_domain_model_basketorder SET order_date = '0' WHERE order_date = '0000-00-00 00:00:00'; UPDATE tx_shop_domain_model_basketorder SET paid_date = UNIX_TIMESTAMP(paid_date) WHERE paid_date != '0000-00-00 00:00:00'; UPDATE tx_shop_domain_model_basketorder SET paid_date = '0' WHERE paid_date = '0000-00-00 00:00:00'; UPDATE tx_shop_domain_model_basketorder SET send_date = UNIX_TIMESTAMP(send_date) WHERE send_date != '0000-00-00 00:00:00'; UPDATE tx_shop_domain_model_basketorder SET send_date = '0' WHERE send_date = '0000-00-00 00:00:00'; ALTER TABLE tx_shop_domain_model_basketorder MODIFY COLUMN order_date int(11) DEFAULT '0' NOT NULL; ALTER TABLE tx_shop_domain_model_basketorder MODIFY COLUMN paid_date int(11) DEFAULT '0' NOT NULL; ALTER TABLE tx_shop_domain_model_basketorder MODIFY COLUMN send_date int(11) DEFAULT '0' NOT NULL;
OPTIONAL: You might need to execute the Attach frontend user to basket order install tool upgrade wizard in order to assign frontend user (identified by email) to existing basket orders.
What it does in detail:
Fetch all basket orders and search for frontend user with the same email. If a match is found, the frontend user will be inserted as an owner in the basket order.
IMPORTANT: You need to execute the Migrate tax values of products to new relations with tax records install tool upgrade wizard in order to migrate your tax rates into tax-rate-records.
What it does in detail:
Fetch all products and identify the tax value in product record. Afterwards for each unique tax value a tax record is created in the same container as the product, and assigned to the product record.
IMPORTANT: You need to execute the Migrate net gross prices install tool upgrade wizard in order to migrate your prices information into the new rudimentary format.
What it does in detail:
Fetch all products and identify if the products-container/page-tree is configured as
b2b
orb2c
. This is usually defined by TypoScript constantthemes.configuration.extension.shop.basket.displayType = b2c
. This information will be transferred into theprice_type
field in the product. Depending on this value, the only remainingprice
field (theprice_with_tax
field will be removed) will be filled with price with or without taxes.New behaviour:
Since this version of the Shop, the TypoScript constant
themes.configuration.extension.shop.basket.displayType = b2c
is only for choosing the display type of the prices in the list view, detail view and basket. Each product owns now aprice_type
which defines if the giving price is net or gross - there's no need to have net+gross prices in the database.IMPORTANT for Stripe users: After switching from Charge API to Payment Intent API in Stripe checkout the changes in
EXT:shop_pro/Resources/Templates/BasketOrder/List.html
template have to be respectedIf you're using own Fluid-Templates, you need to add a
<f:flashMessages />
in theEXT:shop/Resources/Templates/Product/List.html
in order to display important messages.
Version 3.2.0
- To select a product image for the preview in the product list, you have to upload an image and check the
Show in preview
checkbox. The first image is no longer automatically displayed as a preview image.
Version 3.0.0
- If you're using own Fluid-Templates, you might need to remove the parameter
noCacheHash="1"
.
Version 2.10.0
- We have move the PayPal-Checkout JavaScript file from TypoScript into CheckoutOrder.html Fluid-Template, because otherwise it will be always loaded. If you've overridden this Template and you're using PayPal-Checkout, you need to add the required script-Tag:
<f:if condition="{configuration.type} == 'payPalPlus'"> <script src="https://www.paypalobjects.com/webstatic/ppplus/ppplus.min.js" type="text/javascript"></script> </f:if>
- Additionally we've added some Fluid lines in
BasketOrder/ConfirmOrder
template, in order to provide Klarna payment.
Version 2.0.0
Attention:
PHP 7.1 or higher required!
Migration steps
- Remove Meta-Tag and Title ViewHelper in Fluid-Templates.
- Products now have record types, which have optionally downloads or questions. After updating you have set the required record type within your products.
- Price and offer_rebate_value is changed from varchar to int (in cent) - this values needs to be converted.
- Tax is changed to new percent TCA/form engine field - this value might needs to be converted.
- Some TypoScript identifier were renamed:
- Old:
settings.show.pageUid
-> New:settings.detail.defaultPid
- ATTENTION: In case of your details-links won't work, try to replace your plugin content-element with a new one! It might be, that the Flex form still contain an old setting for
settings.detail.defaultPid
!
- Old:
- The partial
Product/AddToBasket
is moved toProduct/Buttons/AddToBasket
- you need to modify your f:render usages. - TypoScript filter setting
filter.concatenateMultipleTagsBy
has been renamed tofilter.tag.concatenate