Cart Products 

Cart Products - extend EXT:cart with products 

Extension key

cart_products

Package name

extcode/cart-products

Version

main

Language

en

Author

Daniel Gohlke & Contributors

License

This document is published under the Open Publication License.

Rendered

Fri, 24 Apr 2026 18:59:32 +0000


Cart Products needs to be used together with EXT:cart.

  • EXT:cart itself is only the base for a webshop.
  • EXT:cart_products provides products which can be created in the TYPO3 backend.

    • Those products fit many use cases for "usual products" (no books, no events).
    • The products can be displayed on the website with a list view and a detail view.
    • As said does it extend EXT:cart so those products can be purchased with the cart of EXT:cart.

Introduction 

Introduction to the extension, general information.

For Administrators 

Install the extension and configure it correctly.

For Editors 

Information about how to use this extension in the backend.

For Developers 

Information about existing events to extend functionality.

Tutorials 

Tutorials for a smooth setup of the extension.

Changelog 

Changes of this extension during updates.

Introduction 

EXT:cart_products needs to be used together with EXT:cart.

EXT:cart itself is only the base for a webshop.

Only using EXT:cart does not allow to sell anything because there are no products.

Therefore EXT:cart needs other extensions. One of those other extensions is EXT:cart_products.

Features:

  • It provides products which can be created in the TYPO3 backend.
  • The data for those products are stored in own data tables.
  • The data fields of the products fit many use cases for "usual products" (no books, no events).
  • The products can be displayed on the website with a list view and a detail view.
  • As it extends EXT:cart are the products compatible with EXT:cart and can therefore be be purchased with the cart functionality of EXT:cart.

Further pages:

Sponsoring 

If there is a feature that has not yet been implemented in Cart, you can contact me at any time.

There is also the possibility to support the further development independently of new functions.

Installation 

The installation consists of adding the extension and including the TypoScript. To get a working cart you need to setup EXT:cart before.

Install the extension 

Depending on your needs you have three options to install the extension.

Installation using composer 

The recommended way to install the extension is by using Composer.

In your composer-based TYPO3 project root, just do

composer require extcode/cart-products
Copied!

Installation from TYPO3 Extension Repository (TER) 

Download and install the extension with the extension manager module.

Latest version from git 

You can get the latest version from git by using the git command:

git clone git@github.com:extcode/cart_products.git
Copied!

Include TypoScript 

The extension ships some TypoScript code which needs to be included. There are two valid ways to do this:

Include TypoScript via TYPO3 backend 

. Switch to the root page of your site.

  1. Switch to the Template module and select Info/Modify.
  2. Press the link Edit the whole template record and switch to the tab Includes.
  3. Select Shopping Cart - Cart Products at the field Include static (from extensions):

Include TypoScript via SitePackage 

This way is preferred because the configuration is under version control.

  1. Add @import 'EXT:cart_products/Configuration/TypoScript/setup.typoscript' to your e.g. sitepackage/Configuration/TypoScript/setup.typoscript
  2. Add @import 'EXT:cart_products/Configuration/TypoScript/constants.typoscript' to your e.g. sitepackage/Configuration/TypoScript/constants.typoscript

TypoScript 

The following snippet shows how to set the needed TypoScript parameter by mostly reusing the parameter that already were set as TypoScript constants format EXT:cart.

e.g. EXT:sitepackage/Configuration/TypoScript/setup.typoscript
plugin.tx_cartproducts {
    settings {
        cart {
            pid = {$plugin.tx_cart.settings.cart.pid}
            isNetCart = {$plugin.tx_cart.settings.cart.isNetCart}
        }

        order {
            pid = {$plugin.tx_cart.settings.order.pid}
        }

        format.currency < plugin.tx_cart.settings.format.currency

        itemsPerPage = 9
        maximumNumberOfLinks = 0
    }
}
Copied!

plugin.tx_cartproducts.settings 

The most parameter are described in the documentation of EXT:cart, so here only the individual parameter are described.

format.currency

format.currency
Type

array

Default

The TypoScript template use the setting defined by the constant of the cart extension.

Configures how prices should be formated in frontend. The ExtcodeCartViewHelpersFormatCurrencyViewHelper uses this global setting.

itemsPerPage

itemsPerPage
Type

int

Default

The default value is 20 if there is no TypoScript configuration.

Defines how many records should be displayed per page in the list action.

General 

Language 

Display the language of the product which is currently edited.

Type 

Products can have 4 different types:

Type Description
simple The default value, no special meaning.
configurable Allows to create BE variants for the product.
virtual Shipping costs in EXT:cart can be configured to not be calculated for virtual products, e.g. with plugin.tx_cart.shipping.countries.de.options.1.extra = by_number_of_physical_products. Individual handling for other use cases can be implemented by listening to Events during the order process.
downloadable Same behaviour as above described in 'virtual'. There is no implemented process for this type as the process can be highly individual: Show a download link on the 'Thank you' page or in an email. Another process could be to provide a link for logged-in FE users in their user account. Another implementation could need a watersign process which individualizes a PDF. Such processes can be implemented by listening to Events during the order process.

SKU (Stock Keeping Unit) 

The product identifier, when using Variants the resulting identifier will be this base with trailed SKUs of the chosen variants.

Title 

Title of the product

URL segment 

The url segment which is used in the URL when RouteEnhancers are defined.

Description 

Teaser 

A shorter description of the product. By default this will be displayed on the detail page below the title. In individualized implementations it could be shown in the list view or in the search results when using a page search.

Description 

A longer description of the product. This is limited to text, for further options the below descriped 'Content' can be used.

Content 

Allows to add further descriptions with any available content record ('CType'). This makes it possible to add content like it's possible on usual pages in the backend. Longer descriptions with e.g. images and videos are possible with this feature.

Images / Files 

Images 

Add images to the product which will be displayed in detail view and list view.

Files 

Add files to the product. The default implementation does not render the files. To display for example download links it would be an idea to overwrite /Resources/Private/Template/Product/Show.html.

Prices 

Minimum numbers of product items per order 

Defines the minimal number that needs to be in the cart to buy this product.

It is possible to add less articles into the cart but a warning message will be displayed in the cart itself and it's not possible to finish the order.

Maximum numbers of product items per order 

Defines the maximal number that are allowed to be in the cart to buy this product.

It is possible to add more articles into the cart but a warning message will be displayed in the cart itself and it's not possible to finish the order.

Is Net Price 

Decides whether the price entered in the backend is net or gross.

Price 

The price of the product. When using BE variants this price will be part of the price calculation or might be ignored at all.

Tax class 

The tax class of the product. Tax classes are defined in EXT:cart.

Special Prices 

Allows to add prices for logged-in FE users. This can also be limited to FE user with a certain user group which allows to offer different prices depending on the user group.

If multiple special prices exist the best special price will be applied.

When using BE variants this field will be ignored as the special price needs to be defined for every single BE variant.

Quantity discount 

Allows to offer better prices when the amount of products in the cart exceeds a certain limit.

Measures 

Concept of Measures 

When selling products in different quantities (e.g. 0.5 kg, 1 kg, 5 kg) it can be a legal demand to indicate the base price to make it possible for customers to compare the different quantities ('value-for-money ratio').

The three fields in this group are used together. The following example shows the usage. To stay with the example from above you might enter:

  • Price = 10 € (defined in the tab Prices).
  • Price Measure = 200
  • Price Measure Unit = g
  • Base Price Measure Unit = kg

Which will result in 50 €/kg.

Concept of Service Attributes 

Entering something in the service attribute fields does not have any effect by default. These fields provide a base to implement individual functionality. An example might be the best way to show the potential:

Example 'Output weight and dimensions' 

Simply display the weight and the dimensions of the product in the frontend.

  • Use field Service Attribute 1 and overwrite its label with 'Weight'.
  • Use field Service Attribute 2 and overwrite its label with 'Dimensions'
  • Suppress the output of Service Attribute 2 to not confuse editors.
  • Output the weight and dimensions in the detail view (/Resources/Private/Templates/Product/Show.html) with {product.serviceAttribute1} and {product.serviceAttribute2}.

Example 'Shipping costs depending on total weight of order' 

The shipping costs shall depend on the weight of the sum of all products in the order.

  • Use field Service Attribute 1 and overwrite its label with 'Weight'.
  • Suppress the output of the other two fields to not confuse editors.
  • Set in TypoScript (here for Germany (de)) plugin.tx_cart.shipping.countries.de.options.1.extra = by_service_attribute_1_sum
  • Set the child values (see EXT:cart documentation, section 'Flexible prices for shipping').

More advanced scenarios are possible by adding an own ServiceInterface (see EXT:cart documentation, section 'Flexible prices for shipping').

Stock 

Stock Handling 

Stock handling allows to limit the available amount of products. Customers can not buy more products than the available amount.

Stock Handling in variants 

When a product uses BE variants it is possible to activate "Stock handling in variants". In this case it is needed to set the available amount for every BE variant that exists for the product.

Variants 

Cart comes with two types of variants for products: Frontend Variants and Backend Variants.

Difference between Frontend Variants and Backend Variants 

Backend Variants can influence the price of a product while Frontend Variants foremost are used to get additional data from the customer.

The following example uses a T-shirt asBE variant product to illustrates the difference of both variants.

  • Frontend Variant

    • The customer is able to enter a text which will be printed on the T-shirt. Therefore the product has an input field.
    • This does not influence the price of the product but just enables the customer to add additional information.
  • Backend Variant

    • The shop owner sells the T-Shirt in different sizes S, M, L.
    • The available options are stored as BE variants in the product with different prices.
    • The customer can choose one of the options from a select list.
    • The choice of the customer changes the price of the T-Shirt.

Create Backend Variants 

It requires multiple steps to create Backend Variants. Which can be quite overwhelming at the beginning offers maximum flexibility and is logical once you get used to it.

  1. Create a Backend Variant Attribute

    A Backend Variant Attribute determines the type of variant.

    An example is Size for a T-shirt.

    The record for a Backend Variant Attribute is created directly within a TYPO3 page.

    Backend Variant Attributes
  2. Create Backend Variant Attribute Options

    A Backend Variant Attribute Options is one certain instance of a Backend Variant Attribute which will be an option for the customer.

    An example is XXL as Size of a T-shirt.

    Such an attribute is created within a Backend Variant Attribute.

    Backend Variant Attributes Options
  3. Set Backend Variant Attributes within Product

    The above defined Backend Variants Attribute is chosen within the product in the Tab "Variants".

    It is possible to define up to 3 different Backend Variants Attributes within a product, e.g. size, color and cut. The available combinations are defined in the next step.

    Backend Variant Attributes
  4. Create final Backend Variants within Product

    Create a new Backend Variant.

    A single Backend Variant select for every above defined a Backend Variant Attribute an Backend Variant Attribute Option (as defined in step 2).

    Backend Variant Attributes
  5. Set further values for the variant

    Set which price this variant shall have (as described below), additionally it is possible to set stock and price measures.

Price calculation for Backend Variants 

Backend Variant Attributes

The price calculation for a Backend Variant can be set with multiple options:

Selection Description
1: Product Price Use price of product itself.
2: Variant Price Use price of variant itself.
3: Product Price - Variant Price Subtract variant price from product price.
4: Product Price - (Variant Price %) Subtract variant as percentual amount of product price.
5: Product Price + Variant Price Add variant price from product price.
6: Product Price + (Variant Price %) Add variant as percentual amount of product price.

Create Frontend Variants 

A Frontend Variant is created directly within the product in the tab Variants.

Backend Variant Attributes

Tags and Categories 

Tag 

Add one or multiple tags to the product. By default the tag will simply be rendered in the detail view. Page with a page search (e.g. solr) could use tags as filter.

Main Category 

Within a category it is possible to define the list view PID and detail view PID for products which have this category. This is the category which determines which page the product uses as detail view if the teaser plugin is set and when the detail view PID was set within the category.

Furthermore it is possible to define one or more categories in the list view plugin of EXT:cart_products so that only products with this/these categories are shown.

Associated Categories 

This field can be used if a product shall be shown in multiple list view.

Access 

Default TYPO3 access fields which allow to control the visibility and publishing dates.

Plugins 

Plugin "Cart: Products" 

This plugin shows a list of products and / or the detail view of product.

Usage:

  • You MUST add a Record Storage Page.
  • You CAN add categories to only show products of one or multiple specific categories which are on the chosen record storage page.
  • When using another detail page you MUST set a Product Detail Page.

Plugin "Cart: selected Products" (also known as Teaser plugin) 

This plugin shows specific products which are chosen by the editor in the Backend.

You do not need to set a detail page if every product has a category and you set a detail page for every category.

You can set detail view for a category by opening the edit view of a system category and then

OptionsCart: Page for the detail view of Products of this category.

For Developers 

Information for developer how to extend the extension.

Events 

The extcode/cart_products extension uses events in some places, especially to integrate custom requirements in the ordering process.

You can register your own EventListener for the following Events:

\Extcode\CartProducts\Event\RetrieveProductsFromRequestEvent

\Extcode\CartProducts\Event\RetrieveProductsFromRequestEvent

Triggered when the customer adds a product to the cart. It is already heavily used by the extension itself. The ProductProduct is the object of EXT:cart_products while CartProduct is an object of EXT:cart. The already registered EventListener care about transferring the needed information from ProductProduct to CartProduct. A custom EventListener can e.g. add further information.

Images of products in cart product list 

Usually the cart of online shops shows a small image in the product list. EXT:cart does this not by default because the use cases for the extension can be quite diverse and a standard might not fit everyone.

It's easy to implement this functionality with an EventListener and a customized partial.

Integration 

The following snippets show an example where the first image of a product is used:

EXT:cartintegration/Classes/EventListener/ExtendCartProduct.php
<?php

declare(strict_types=1);

namespace Vendor\Cartintegration\EventListener\Cart\Create;

use Extcode\CartProducts\Event\RetrieveProductsFromRequestEvent;

class ExtendCartProduct
{
    public function __invoke(RetrieveProductsFromRequestEvent $event): void
    {
        $productProduct = $event->getProductProduct();
        $cartProduct = $event->getCartProduct();

        // Using null safe operator to avoid errors
        $imageUid = $productProduct?->getFirstImage()?->getOriginalResource()?->getOriginalFile()?->getUid() ?? null;

        if ($imageUid) {
            $cartProduct->setAdditional(
                'previewImage',
                $imageUid
            );
        }
    }
}
Copied!
EXT:cartintegration/Configuration/Services.yaml
services:
  _defaults:
    autowire: true
    autoconfigure: true
    public: false

  Vendor\Cartintegration\:
    resource: '../Classes/*'
    exclude: '../Classes/Domain/Model/*'

  Vendor\Cartintegration\EventListener\Cart\ExtendCartProduct:
    tags:
      - name: event.listener
Copied!
EXT:cartintegration/Resources/Private/Plugins/Cart/Partials/Cart/ProductForm/ProductList.html
// This snippet is simplified and needs adaption for your styling!

<f:section name="withoutVariant">

    ...

    <f:if condition="{product.additionalArray.previewImage}">
        <f:image src="{product.additionalArray.previewImage}"/>
    </f:if>

...

<f:section name="withVariant">

    ...

    <f:for each="{product.beVariants}" as="variant">
        <f:if condition="{product.additionalArray.previewImage}">
            <f:image src="{product.additionalArray.previewImage}"/>
        </f:if>

...
Copied!

Route Enhancers 

To get speaking URLs it's necessary to add a Route Enhancer for the detail view.

Be aware that you need to adapt the limitToPages entry.

config/sites/<your-site>/config.yaml
routeEnhancers:
  CartProducts:
    type: Extbase
    limitToPages:
      - 123
    extension: CartProducts
    plugin: ShowProduct
    routes:
      - routePath: '/{product-title}'
        _controller: 'Product::show'
        _arguments:
          product-title: product
    defaultController: 'Product::show'
    aspects:
      product-title:
        type: PersistedAliasMapper
        tableName: tx_cartproducts_domain_model_product_product
        routeFieldName: path_segment
Copied!

Multiple selectors for backend variants 

When using multiple backend variants (for a t-shirt: size and color) the default output in the frontend is not really user friendly because all available combinations are rendered in a single selector field as shown in the following image:

Backend Variants in Single Selector

Default: Single selector for all available combinations.

By including some JavaScript that comes with EXT:cart_product you can enable a more user-friendly version where every BackendVariant has its own selector field. The JavaScript ensures that only available combinations can be chosen by the customer.

Backend Variants in Different Selectors

Adapted: Every BackendVariant has its own selector field.

Integration 

Create in your extension (e.g. your EXT:sitepackage) an overwrite of EXT:cart_products/Resources/Private/Partials/Products/CartForm.html.

Then you add the snippet as shown below:

EXT:sitepackage/Resources/Private/Cart/Partials/Products/CartForm.html
...

<f:if condition="{product.beVariants}">
    <f:asset.script identifier="multi-selector" src="EXT:cart_products/Resources/Public/JavaScripts/cart.js" />

    ...
Copied!

Add products to the cart within the list view 

In some cases you don't need a detail page for the products and want to allow adding products to the shopping cart within the list view.

Integration 

Create in your extension (e.g. your EXT:sitepackage) an overwrite of EXT:cart_products/Resources/Private/Partials/Products/List/Grid.html or EXT:cart_products/Resources/Private/Partials/Products/List/Table.html.

Then you add the snippet as shown below:

EXT:sitepackage/Resources/Private/Cart/Partials/Products/List/Grid.html
...
<f:cObject typoscriptObjectPath="lib.cartProduct.showForm" data="{productUid: '{product.uid}'}"/>
...
Copied!

ChangeLog 

8.0 Changes 

Table of contents

Feature: #274 - Add WatchlistItemHandler 

See Issue 274

Description 

After the release of the werkraummedia/watchlist extension for TYPO3 v13 the WatchlistItemHandler for extcode/cart-products can be added again. This allows products to be added to the watchlist.

Feature: #259 - Replace SimplePagination with SlidingWindowPagination 

See Issue 259

Description 

If you have a long list of products, you would like to display them in a pagination with a defined number of products per page. This is already possible with the TypoScript configuration itemsPerPage. With a large number of products, the display of all page links may not work well, especially when it comes to the display on mobile devices. The TYPO3 core offers the SlidingWindowPagination since TYPO3 v12. This is compatible with the previously used SimplePagination if you pass the value 0 for the number of links.

Integration 

Set the new TypoScript configuration variable plugin.tx_cartproducts.maximumNumberOfLinks to a value greater than 0. If you use an own template file for Resources/Private/Partials/Utility/Paginator.html you have to adapt the changes to your file.

7.0 Changes 

Table of contents

6.0 Changes 

Table of contents

Breaking: #135 - Add JS files with AssetViewHelper 

See Issue 135

Description 

EXT:cart v9 uses modularized JavaScript without jQuery (see [TASK] Switch from jQuery to vanilla JavaScript #438 <https://github.com/extcode/cart/pull/438>).

This allows to add the JavaScript only on pages where it's really needed which is good for performance. The JavaScript is for detail pages is now loaded with the TYPO3 Asset.script ViewHelper <https://docs.typo3.org/other/typo3/view-helper-reference/12.4/en-us/typo3/fluid/latest/Asset/Script.html>.

Affected Installations 

All installations which overwrite Resources/Private/Partials/Product/CartForm.html are affected. When using the CartForm.html which comes with this extension it will work without any changes.

Migration 

The JavaScript in EXT:cart is no longer added via TypoScript. All JavaScript files are now added via ViewHelper.

Two ViewHelpers needs to be added in Resources/Private/Partials/Product/CartForm.html:
  • <f:asset.script identifier="add-to-cart" src="EXT:cart/Resources/Public/JavaScript/add_to_cart.js" />
  • <f:asset.script identifier="change-be-variant" src="EXT:cart/Resources/Public/JavaScript/change_be_variant.js" /> (only when working with BE Variants).

Breaking: #186 - Changed key for image reference 

See :Issue 186 <https://github.com/extcode/cart_products/issues/186>`

Description 

With the version for TYPO3 v12 the references uses the key 'images' in column fieldname of table sys_file_reference. Before the key was 'image' (singular). Due to this the images are no longer shown, neither in the backend nor in the frontend.

Affected Installations 

All installations which are not set up with version 5 of EXT:cart_products (before TYPO3 v12).

Migration 

Run the UpdateWizard "Updates image references for EXT:cart_products".

Breaking: #200 - Frontend user removed from detail view 

See Issue 200

Description 

The view for detail pages (/Resources/Private/Template/Show.html) got the Frontend user from the controller which was never used. Due to missing usage the user is no longer given.

Affected Installations 

All existing installations that uses the Frontend user in customized templates.

Breaking: #204 - Migrate switchableControllerActions 

See :Issue 204 <https://github.com/extcode/cart_products/issues/204>`

Description 

Switchable Controller Actions are removed in TYPO3 v12. The existing plugin "Cart: Products" was split into to plugins. A upgrade wizard cares about the updating. Important: Due to the changed pluginName you will need to adapt your RouteEnhancers in your SiteConfiguration.

Affected Installations 

All installations which are not set up with version 5 of EXT:cart_products (before TYPO3 v12).

Migration 

1. Run the UpdateWizard "Migrates plugins of existing cart_produts plugins using switchableControllerActions". 2. Adapt the value of plugin from Products to ShowProduct in your site configuration (config/sites/<your-site>/config.yaml):

BEFORE:

config/sites/<your-site>/config.yaml
routeEnhancers:
  CartProducts:
    type: Extbase
    limitToPages:
      - 123
    extension: CartProducts
    plugin: Products
    routes:
    ...
Copied!

AFTER:

config/sites/<your-site>/config.yaml
routeEnhancers:
  CartProducts:
    type: Extbase
    limitToPages:
      - 123
    extension: CartProducts
    plugin: ShowProduct
    routes:
    ...
Copied!

Breaking: #138 - Listen to ProcessOrderCheckStockEvent 

See :Issue 138 <https://github.com/extcode/cart_products/issues/138>`

Description 

EXT:cart v9 has an extended \Extcode\Cart\Domain\Model\Cart\Cart\ProcessOrderCheckStockEvent. This allows product extensions as EXT:cart_product to set a flag if any product of an order is not available in sufficient amount (means: less articles in stock than what a customer wants to order).

The new Event Listener \Extcode\CartProducts\EventListener\Order\Stock\CheckStock checks whether the stock of any article is lower than what a customer wants to order. This situation can happen when customer B ordered the same product after customer A put the article into the cart. Customer A will get in this case a message that the article is no longer available in the desired amount and the order can not be finished until customer A adapts the amount.

This prevents a TYPO3 Exception "[..] Out of range value for column 'stock' [...]".

Impact 

Negative effects are not expected. This feature works out of the box when stock handling is activated. As long as flash messages are shown in the order form it's not necessary to adapt anything.

It is of course possible to override the displayed message which has the key tx_cart.error.stock_handling.order (in EXT:cart).

Breaking: #145 - Display available stock 

See forge#145

Description 

Render the available stock for a product if stock handling is activated. Together with an updated JS within EXT:cart this works even for BE variants.

Integration 

An example was implemented in the detail view for a product. See /Resources/Private/Partials/Product/Price.html

Breaking: #99 - Move Fluid Pagination to Controller 

See Issue 99

Description 

In TYPO3 v11 <f:paginate> has been removed and is implemented via the controller.

Affected Installations 

All installations are affected by this change.

Migration 

If the templates for the lists of products in the frontend has been overwritten, then these templates must also be adapted. If pagination is not desired, a custom template must be used for the product list.

Breaking: #99 - Add Pagination to Controller 

See Issue 99

Description 

Because in TYPO3 v11 no pagination in the frontend is possible without an own ViewHelper or an extension, the list action in the ProductController was extended by the pagination. Via TypoScript it can be defined how many products should be displayed per page.

Integration 

An example was implemented in the list action template.

Breaking: #288 - Removal of the Unfinished Backend Module 

See Issue 288

Description 

The backend module didn't offer much more than a customized list view so far. The detail view did not contain a ready template and did not offer a representation like in the frontend. The list view can also be done via the List Module.

Impact 

Editors must resort to the list module.

Note 

If someone cannot do without this backend module, the code can be outsourced to a separate extension. As an alternative to this module, dashboard widgets are planned, which offer the editor the possibility to see all products whose stock is very low or which are no longer available.

Feature: #71 - Allow to Render Backend Variants in Different Selectors 

See Issue 71

Description 

In many cases the selection of backend variants in the frontend is not so user-friendly, especially if a product has more than one backend variant. In this case, every available combination is displayed as one entry in a selector. This version extends the selector with additional data attributes that are used to resolve this one selector into multiple selectors for each backend variant.

Backend Variants in Single Selector

Before: each backend variant is an option in a single selector

Backend Variants in Different Selectors

After: backend variants were split into several selectors

The redesign is done via JavaScript, so that only a selector is displayed when JavaScript is deactivated. The JavaScript then also ensures that only available options can be selected.

Integration 

Since this change in the view must first be adapted for the customer project, the necessary JavaScript is not included by default. This will probably be done in the upcoming major version.

::
page.includeJSFooter.tx_cartproducts = EXT:cart_products/Resources/Public/JavaScripts/cart.js

Attention 

The JavaScript is not yet finalized. There might be some changes in the coming minor versions. For this reason you should either include a copy via your own site package or check the behaviour in the page after each update.

Feature: #70 - Add Products from Cart in List View 

See Issue 70

Description 

In some cases you don't need a detail page for the products and want to allow adding products to the shopping cart in the list view. Diese Änderung erlaubt es, der showForm Action das Produkt als Parameter mitzugeben.

Integration 

To display the form in list view, you have to insert the following snippet in your own template.

<f:cObject typoscriptObjectPath="lib.cartProduct.showForm" data="{productUid: '{product.uid}'}"/>
Copied!

Feature: #58 - Declare extension compatible with PHP 7.4 

See Issue 58

Description 

Declare extension compatible with PHP 7.4. Set state of cart extension to stable.

Important: #46 - Exclude Stock Handling from Translation 

See Issue 46

Description 

For each product you can activate the stock management in the backend. Up to now, stock management was carried out independently for each language. The online shops implemented with the extension sell products with translated product titles and descriptions, but not translated products. Therefore there should be a collective stock for all translations of a product.

Important: #47 - Exclude Product Type from Translation 

See Issue 47

Description 

For each product you can select a type such as simple or configurable. The product must of course have the same type in all languages.

Therefore, this change will remove the product type in the translations and take the type of the original language.

2.0 Changes 

The version 2.0.0 is a release for TYPO3 v9.5 only. This version is compatible to Cart v6.0+.

1.0 Changes 

The version 1.0.0 is a release for TYPO3 v8.7 only and skipped for TYPO3 v9.5. This version is compatible to Cart v5.0+.