From c2c1407c93ff8ed669b4560d0a763227cd674175 Mon Sep 17 00:00:00 2001 From: LApple Date: Wed, 11 Mar 2026 18:40:27 +0100 Subject: [PATCH 01/22] chore: creates new folders and moves pages --- .gitbook.yaml | 21 ++++++++- guides/development/index.md | 10 ++-- .../dal-reference/aggregations-reference.md | 0 .../fields-reference/enum-field.md | 0 .../dal-reference/fields-reference/index.md | 0 .../dal-reference/filters-reference.md | 0 .../dal-reference/flags-reference.md | 0 .../troubleshooting}/dal-reference/index.md | 0 .../troubleshooting}/flow-reference.md | 0 guides/development/troubleshooting/index.md | 16 +++++++ .../troubleshooting}/rules-reference.md | 0 .../installation-updates/deployments/index.md | 46 ++++++++++++++++++- ...n-managment.md => extension-management.md} | 0 .../apps/gateways/context/context-gateway.md | 9 ++-- .../administration-reference/directives.md | 8 ++-- .../administration-reference/index.md | 22 +++++++++ .../administration-reference/mixins.md | 4 +- .../administration-reference/utils.md | 6 ++- .../plugins/architecture/cart-process.md | 16 +++++++ .../context-rules-rule-systems.md | 0 ...ependency-injection-dependency-handling.md | 0 .../plugins/plugins/architecture}/events.md | 0 guides/plugins/plugins/architecture/index.md | 22 +++++++++ .../plugins/architecture}/pageloader.md | 2 +- resources/guidelines/code/cart-process.md | 14 ------ .../administration-reference/index.md | 10 ---- resources/references/api-reference/index.md | 18 -------- 27 files changed, 162 insertions(+), 62 deletions(-) rename {resources/references/core-reference => guides/development/troubleshooting}/dal-reference/aggregations-reference.md (100%) rename {resources/references/core-reference => guides/development/troubleshooting}/dal-reference/fields-reference/enum-field.md (100%) rename {resources/references/core-reference => guides/development/troubleshooting}/dal-reference/fields-reference/index.md (100%) rename {resources/references/core-reference => guides/development/troubleshooting}/dal-reference/filters-reference.md (100%) rename {resources/references/core-reference => guides/development/troubleshooting}/dal-reference/flags-reference.md (100%) rename {resources/references/core-reference => guides/development/troubleshooting}/dal-reference/index.md (100%) rename {resources/references/core-reference => guides/development/troubleshooting}/flow-reference.md (100%) create mode 100644 guides/development/troubleshooting/index.md rename {resources/references/core-reference => guides/development/troubleshooting}/rules-reference.md (100%) rename guides/hosting/installation-updates/{extension-managment.md => extension-management.md} (100%) rename {resources/references => guides/plugins/plugins/administration}/administration-reference/directives.md (65%) create mode 100644 guides/plugins/plugins/administration/administration-reference/index.md rename {resources/references => guides/plugins/plugins/administration}/administration-reference/mixins.md (93%) rename {resources/references => guides/plugins/plugins/administration}/administration-reference/utils.md (94%) create mode 100644 guides/plugins/plugins/architecture/cart-process.md rename {resources/guidelines/code => guides/plugins/plugins/architecture}/context-rules-rule-systems.md (100%) rename {resources/guidelines/code => guides/plugins/plugins/architecture}/dependency-injection-dependency-handling.md (100%) rename {resources/guidelines/code => guides/plugins/plugins/architecture}/events.md (100%) create mode 100644 guides/plugins/plugins/architecture/index.md rename {resources/guidelines/code => guides/plugins/plugins/architecture}/pageloader.md (82%) delete mode 100644 resources/guidelines/code/cart-process.md delete mode 100644 resources/references/administration-reference/index.md delete mode 100644 resources/references/api-reference/index.md diff --git a/.gitbook.yaml b/.gitbook.yaml index b736f7ccfb..5218a4fd3f 100644 --- a/.gitbook.yaml +++ b/.gitbook.yaml @@ -160,4 +160,23 @@ redirects: guides/plugins/plugins/api/: guides/plugins/plugins/integrations/commercial/ guides/plugins/plugins/api/customer-specific-pricing.html: guides/plugins/plugins/integrations/commercial/customer-specific-pricing.html guides/plugins/plugins/api/multi-inventory.html: guides/plugins/plugins/integrations/commercial/multi-inventory.html - plugins/plugins/api/index.html: concepts/api/index.html \ No newline at end of file + plugins/plugins/api/index.html: concepts/api/index.html + resources/guidelines/code/cart-process.html: guides/plugins/plugins/architecture/cart-process.html + resources/guidelines/code/context-rules-rule-systems.html: guides/plugins/plugins/architecture/context-rules-rule-systems.html + resources/guidelines/code/dependency-injection-dependency-handling.html: guides/plugins/plugins/architecture/dependency-injection-dependency-handling.html + resources/guidelines/code/events.html: guides/plugins/plugins/architecture/events.html + resources/guidelines/code/pageloader.html: guides/plugins/plugins/architecture/pageloader.html + resources/references/administration-reference/directives.html: guides/plugins/plugins/administration/administration-reference/directives.html + resources/references/administration-reference/index.html: guides/plugins/plugins/administration/administration-reference/index.html + resources/references/administration-reference/mixins.html: guides/plugins/plugins/administration/administration-reference/mixins.html + resources/references/administration-reference/utils.html: guides/plugins/plugins/administration/administration-reference/utils.html + resources/references/api-reference/index.html: guides/development/troubleshooting/index.html + resources/references/core-reference/dal-reference/aggregations-reference.html: guides/development/troubleshooting/dal-reference/aggregations-reference.html + resources/references/core-reference/dal-reference/fields-reference/enum-field.html: guides/development/troubleshooting/dal-reference/fields-reference/enum-field.html + resources/references/core-reference/dal-reference/fields-reference/index.html: guides/development/troubleshooting/dal-reference/fields-reference/index.html + resources/references/core-reference/dal-reference/filters-reference.html: guides/development/troubleshooting/dal-reference/filters-reference.html + resources/references/core-reference/dal-reference/flags-reference.html: guides/development/troubleshooting/dal-reference/flags-reference.html + resources/references/core-reference/dal-reference/index.html: guides/development/troubleshooting/dal-reference/index.html + resources/references/core-reference/flow-reference.html: guides/development/troubleshooting/flow-reference.html + resources/references/core-reference/rules-reference.html: guides/development/troubleshooting/rules-reference.html + guides/hosting/installation-updates/extension-managment.html: guides/hosting/installation-updates/extension-management.html \ No newline at end of file diff --git a/guides/development/index.md b/guides/development/index.md index 98436e7c47..2e1658d5cd 100644 --- a/guides/development/index.md +++ b/guides/development/index.md @@ -82,7 +82,11 @@ The Administration is part of the runtime environment and will be used throughou ### Development tooling -* `bin/console`: Shopware's built-in CLI, used for installing and activating plugins, running database migrations, clearing caches, executing scheduled tasks, and inspecting system state. See [command reference guide](resources/references/core-reference/commands-reference.html). -* The standalone [Shopware CLI](https://developer.shopware.com/docs/products/cli/installation.html) supports project scaffolding, CI/CD workflows, automation tasks, and more. See the [helper commands guide](products/cli/project-commands/helper-commands.html). +* `bin/console`: Shopware's built-in CLI, used for installing and activating plugins, running database migrations, clearing caches, executing scheduled tasks, and inspecting system state. See [command reference guide](../../resources/references/core-reference/commands-reference.html). +* The standalone [Shopware CLI](https://developer.shopware.com/docs/products/cli/installation.html) supports project scaffolding, CI/CD workflows, automation tasks, and more. See the [helper commands guide](../../products/cli/project-commands/helper-commands.html). * IDE support: Shopware provides a [PHPStorm plugin](/tooling/shopware-toolbox.md) and [VS Code extension](https://marketplace.visualstudio.com/items?itemName=shopware.shopware-lsp). -*[Deployment Helper](guides/hosting/deployment-helper/): Supports database and maintenance operations for deployments (e.g., migrations, cache handling). +* [Deployment Helper](../hosting/installation-updates/deployments/deployment-helper.md): Supports database and maintenance operations for deployments (e.g., migrations, cache handling). + +### Troubleshooting + +The [troubleshooting](/troubleshooting) guides provide reference information about the data abstraction layer (DAL), flow, and rules. diff --git a/resources/references/core-reference/dal-reference/aggregations-reference.md b/guides/development/troubleshooting/dal-reference/aggregations-reference.md similarity index 100% rename from resources/references/core-reference/dal-reference/aggregations-reference.md rename to guides/development/troubleshooting/dal-reference/aggregations-reference.md diff --git a/resources/references/core-reference/dal-reference/fields-reference/enum-field.md b/guides/development/troubleshooting/dal-reference/fields-reference/enum-field.md similarity index 100% rename from resources/references/core-reference/dal-reference/fields-reference/enum-field.md rename to guides/development/troubleshooting/dal-reference/fields-reference/enum-field.md diff --git a/resources/references/core-reference/dal-reference/fields-reference/index.md b/guides/development/troubleshooting/dal-reference/fields-reference/index.md similarity index 100% rename from resources/references/core-reference/dal-reference/fields-reference/index.md rename to guides/development/troubleshooting/dal-reference/fields-reference/index.md diff --git a/resources/references/core-reference/dal-reference/filters-reference.md b/guides/development/troubleshooting/dal-reference/filters-reference.md similarity index 100% rename from resources/references/core-reference/dal-reference/filters-reference.md rename to guides/development/troubleshooting/dal-reference/filters-reference.md diff --git a/resources/references/core-reference/dal-reference/flags-reference.md b/guides/development/troubleshooting/dal-reference/flags-reference.md similarity index 100% rename from resources/references/core-reference/dal-reference/flags-reference.md rename to guides/development/troubleshooting/dal-reference/flags-reference.md diff --git a/resources/references/core-reference/dal-reference/index.md b/guides/development/troubleshooting/dal-reference/index.md similarity index 100% rename from resources/references/core-reference/dal-reference/index.md rename to guides/development/troubleshooting/dal-reference/index.md diff --git a/resources/references/core-reference/flow-reference.md b/guides/development/troubleshooting/flow-reference.md similarity index 100% rename from resources/references/core-reference/flow-reference.md rename to guides/development/troubleshooting/flow-reference.md diff --git a/guides/development/troubleshooting/index.md b/guides/development/troubleshooting/index.md new file mode 100644 index 0000000000..600366a4ab --- /dev/null +++ b/guides/development/troubleshooting/index.md @@ -0,0 +1,16 @@ +--- +nav: + title: Troubleshooting + position: 10 +--- + +# Troubleshooting + +Quick, targeted troubleshooting resources for common runtime, data, and integration issues. + +Sections: + +* [DAL Reference](dal-reference): documents fields, flags, filters, and aggregations for effective data management and querying within the platform. + * [Fields Reference](dal-reference/fields-reference/index.md): field types, flags, enum fields. +* [Rules Reference](rules-reference.md) +* [Flow Reference](flow-reference.md) diff --git a/resources/references/core-reference/rules-reference.md b/guides/development/troubleshooting/rules-reference.md similarity index 100% rename from resources/references/core-reference/rules-reference.md rename to guides/development/troubleshooting/rules-reference.md diff --git a/guides/hosting/installation-updates/deployments/index.md b/guides/hosting/installation-updates/deployments/index.md index 39e95f5e1a..18308c14e5 100644 --- a/guides/hosting/installation-updates/deployments/index.md +++ b/guides/hosting/installation-updates/deployments/index.md @@ -7,4 +7,48 @@ nav: # Deployments -The following guide explains the fundamental steps to deploy Shopware 6 to a specific infrastructure and how to build assets for Shopware's Administration and Storefront without a database. +The following guides outline the core principles and practical steps for deploying Shopware 6 to your infrastructure. They also explain how to build assets for the Administration and Storefront independently of a database, enabling reliable CI/CD pipelines and repeatable releases. + +# Deployment best practices + +Successful deployments are predictable, repeatable, and reversible: + +- Build artifacts once in CI and deploy those artifacts. +- Keep configuration and secrets outside the codebase. +- Make database changes predictable. +- Wherever possible, clearly separate build-time concerns from runtime concerns to ensure consistency across environments. + +## Cross-cutting practices + +Across project types and deployment models, apply the following principles to maintain a stable foundation: + +- Roll forward by default. +- Keep rollbacks minimal, database-aware, and version-pinned, and rehearse them regularly. +- Enable maintenance mode for schema-changing releases; to validate the system state, add health checks and smoke tests post-deploy before exiting maintenance. +- Tag releases consistently across source code, build artifacts, and Store metadata. +- Retain build logs and deploymrny reports for traceability and audits. + +## Custom projects + +Apply this approach to keep deployments deterministic and reduce environment-specific drift: + +- Follow the structured flow provided by the [Deployment helper](deployment-helper.md) to keep steps ordered and reversible. +- Adopt a repeatable deployment strategy (for example, by integrating the [Deployment helper](deployment-helper.md) into your automation pipeline) and keep environment configuration and secrets outside the repository. + +## Custom/Store plugins + +Treat plugins as versioned deliverables that integrate cleanly into your deployment workflow: + +- Ship plugins as versioned ZIPs from CI using the [Extension build command](../../../../products/cli/extension-commands/build.md). Install and activate them via CLI or deployment automation. +- Execute plugin migrations as part of deployment and ensure update steps are idempotent so that retries remain safe. +- For Store plugins in particular, avoid post-deployment manual tweaks. + +## Apps + +Apps introduce an additional operational dimension because they rely on external backends and webhooks: + +- Deploy app backends with the same rigor as any web service. +- Use blue/green or canary strategies to ensure that webhook handling continues uninterrupted during updates. +- Keep manifest versions aligned with deployed code. +- When introducing new events, register webhooks before emitting them to avoid delivery gaps. +- Externalize credentials and endpoints, and design webhook handlers to be retry-safe and suitable for multi-tenant environments. diff --git a/guides/hosting/installation-updates/extension-managment.md b/guides/hosting/installation-updates/extension-management.md similarity index 100% rename from guides/hosting/installation-updates/extension-managment.md rename to guides/hosting/installation-updates/extension-management.md diff --git a/guides/plugins/apps/gateways/context/context-gateway.md b/guides/plugins/apps/gateways/context/context-gateway.md index c10b82d54b..a0364707ea 100644 --- a/guides/plugins/apps/gateways/context/context-gateway.md +++ b/guides/plugins/apps/gateways/context/context-gateway.md @@ -4,6 +4,7 @@ **Security and privacy** With the Context Gateway, Shopware allows your app to manipulate the customer context, which includes sensitive information like customer addresses, payment methods, and more. + It is your responsibility to ensure that the commands are valid and do not compromise the security or privacy of customers. Due to the powerful nature of this feature, it should only be used if your app server is properly secured and the commands it sends are fully trusted and validated. @@ -12,10 +13,7 @@ Due to the powerful nature of this feature, it should only be used if your app s ## Context -As of Shopware version 6.7.1.0, the Context Gateway has been introduced. - -The Context Gateway is a powerful feature that enables apps to securely access and interact with the customer context — based on the current cart and sales channel — allowing for more informed decision-making on the app server. -This enhancement empowers app developers to dynamically tailor the shopping experience by manipulating the customer context. +Introduced in Shopware version 6.7.1.0, the Context Gateway is a powerful feature that enables apps to securely access and interact with the customer context — based on the current cart and sales channel — allowing for more informed decision-making on the app server. This enhancement empowers app developers to dynamically tailor the shopping experience by manipulating the customer context. It serves as the bridge between your app’s JavaScript and your app server. @@ -25,8 +23,7 @@ You should be familiar with the concept of Apps, their registration flow as well -Your app server must also be accessible to the Shopware server. -You can use a tunneling service like [ngrok](https://ngrok.com/) for development. +Your app server must also be accessible to the Shopware server. You can use a tunneling service like [ngrok](https://ngrok.com/) for development. ## Manifest configuration diff --git a/resources/references/administration-reference/directives.md b/guides/plugins/plugins/administration/administration-reference/directives.md similarity index 65% rename from resources/references/administration-reference/directives.md rename to guides/plugins/plugins/administration/administration-reference/directives.md index 0f5adce440..b8db81dc97 100644 --- a/resources/references/administration-reference/directives.md +++ b/guides/plugins/plugins/administration/administration-reference/directives.md @@ -1,15 +1,15 @@ --- nav: title: Directives - position: 30 + position: 20 --- # Directives reference -This is an overview of all the directives registered globally to Vue. -Directives are the same as normally in Vue. Checkout the [Using directives](../../../guides/plugins/plugins/administration/mixins-directives/adding-directives.md) article -or refer to the [directives](https://github.com/shopware/shopware/tree/trunk/src/Administration/Resources/app/administration/src/app/directive) folder in the GIT repository. +This is an overview of all the directives registered globally to Vue.Directives are the same as normally in Vue. + +Check out the [Using directives](../mixins-directives/adding-directives.md) guide or refer to the [directives](https://github.com/shopware/shopware/tree/trunk/src/Administration/Resources/app/administration/src/app/directive) folder in the Git repository. ## Overview of directives diff --git a/guides/plugins/plugins/administration/administration-reference/index.md b/guides/plugins/plugins/administration/administration-reference/index.md new file mode 100644 index 0000000000..b2264768d3 --- /dev/null +++ b/guides/plugins/plugins/administration/administration-reference/index.md @@ -0,0 +1,22 @@ +--- +nav: + title: Administration Reference + position: 10 + +--- + +# Administration Reference + +Plugins extend the Administration by integrating directly into the Vue-based admin framework. Use these guides when building custom admin modules, components, or extending existing ones. + +## Core Concepts + +* [Directives](directives): Globally registered Vue directives. +* [Mixins](mixins): Shared Vue mixins used across the Administration. +* [Utils](utils): Global utility functions available on the `Shopware` object. + +Use these guides to: + +* Reuse core functionality instead of implementing it again +* Follow Administration extension conventions +* Build extensions that integrate cleanly into the Admin UI diff --git a/resources/references/administration-reference/mixins.md b/guides/plugins/plugins/administration/administration-reference/mixins.md similarity index 93% rename from resources/references/administration-reference/mixins.md rename to guides/plugins/plugins/administration/administration-reference/mixins.md index b61b3c444a..127ad86450 100644 --- a/resources/references/administration-reference/mixins.md +++ b/guides/plugins/plugins/administration/administration-reference/mixins.md @@ -1,7 +1,7 @@ --- nav: title: Mixins - position: 20 + position: 30 --- @@ -9,7 +9,7 @@ nav: This is an overview of all the mixins provided by the Shopware 6 Administration. Mixins in the Shopware 6 Administration are essentially the same in default Vue. They behave generally the same as they do in Vue normally, differing only in the registration and the way mixins are included in a component. Learn more about them in the official [Vue documentation](https://vuejs.org/v2/guide/mixins.html). -Also take a look at [how to use them in your plugin](../../../guides/plugins/plugins/administration/mixins-directives/using-mixins.md) and [how to register your own mixin](../../../guides/plugins/plugins/administration/mixins-directives/add-mixins.md). +Also take a look at [how to use them in plugins](../mixins-directives/using-mixins.md) and [how to register mixins](../mixins-directives/add-mixins.md). ## Overview of all the mixins diff --git a/resources/references/administration-reference/utils.md b/guides/plugins/plugins/administration/administration-reference/utils.md similarity index 94% rename from resources/references/administration-reference/utils.md rename to guides/plugins/plugins/administration/administration-reference/utils.md index 674890d691..3f90a19a50 100644 --- a/resources/references/administration-reference/utils.md +++ b/guides/plugins/plugins/administration/administration-reference/utils.md @@ -1,13 +1,15 @@ --- nav: title: Utils - position: 10 + position: 40 --- # Utils -This is an overview of all the utility functions bound to the shopware global object. Utility functions provide many useful shortcuts for common tasks, see how to use them in your plugin [here](../../../guides/plugins/plugins/administration/services-utilities/using-utils.md). Or see the code that registers them [here](https://github.com/shopware/shopware/blob/v6.3.4.1/src/Administration/Resources/app/administration/src/core/service/util.service.js) +This guide provides an overview of utility functions bound to the Shopware global object. + +Utility functions provide many useful shortcuts for common tasks. For additional information, review our [usage guide](../services-utilities/using-utils.md) and review the [code that registers them](https://github.com/shopware/shopware/blob/v6.3.4.1/src/Administration/Resources/app/administration/src/core/service/util.service.js). ## General functions diff --git a/guides/plugins/plugins/architecture/cart-process.md b/guides/plugins/plugins/architecture/cart-process.md new file mode 100644 index 0000000000..ba7de3d93c --- /dev/null +++ b/guides/plugins/plugins/architecture/cart-process.md @@ -0,0 +1,16 @@ +--- +nav: + title: Cart Extension Architecture + position: 30 + +--- + +# Cart Extension Architecture + +## Extension guidelines + +* `CartProcessorInterface::process()` must not execute queries, as it runs multiple times per request to resolve the dependencies of the elements in the shopping cart. +* The `\Shopware\Core\Checkout\Cart\CartDataCollectorInterface::collect()` method must check whether required data was already loaded. This is to avoid having to unnecessarily execute many queries on the database. loaded data will be appended to `CartDataCollection`. +* Line items must be created via a `LineItemFactoryHandler` class. +* All price calculations and adjustments must take place via an appropriate `PriceCalculator`, which are stored inside the `Shopware\Core\Checkout\Cart\Price` class. +* Cart-related functions must be mapped via corresponding Store API routes in the `Shopware\Core\Checkout\Cart\SalesChannel` namespace. diff --git a/resources/guidelines/code/context-rules-rule-systems.md b/guides/plugins/plugins/architecture/context-rules-rule-systems.md similarity index 100% rename from resources/guidelines/code/context-rules-rule-systems.md rename to guides/plugins/plugins/architecture/context-rules-rule-systems.md diff --git a/resources/guidelines/code/dependency-injection-dependency-handling.md b/guides/plugins/plugins/architecture/dependency-injection-dependency-handling.md similarity index 100% rename from resources/guidelines/code/dependency-injection-dependency-handling.md rename to guides/plugins/plugins/architecture/dependency-injection-dependency-handling.md diff --git a/resources/guidelines/code/events.md b/guides/plugins/plugins/architecture/events.md similarity index 100% rename from resources/guidelines/code/events.md rename to guides/plugins/plugins/architecture/events.md diff --git a/guides/plugins/plugins/architecture/index.md b/guides/plugins/plugins/architecture/index.md new file mode 100644 index 0000000000..45c536da38 --- /dev/null +++ b/guides/plugins/plugins/architecture/index.md @@ -0,0 +1,22 @@ +--- +nav: + title: Plugin Architecture + position: 10 + +--- + +# Plugin Architecture + +This section defines the architectural rules and extension contracts for core subsystems. + +These documents describe how to safely extend Shopware without breaking determinism, performance, or system boundaries. + +## Subsystems + +* [Cart Extension Architecture](cart-process.md) +* [Rule System Extension Architecture](context-rules-rule-systems.md) +* [Page Loader Extension Architecture](pageloader.md) +* [Event Extension Architecture](events.md) +* [Dependency Injection and Dependency Handling](dependency-injection-dependency-handling.md) + +These guidelines are mandatory for plugin developers extending core functionality. diff --git a/resources/guidelines/code/pageloader.md b/guides/plugins/plugins/architecture/pageloader.md similarity index 82% rename from resources/guidelines/code/pageloader.md rename to guides/plugins/plugins/architecture/pageloader.md index c81e1bd530..f046e415b2 100644 --- a/resources/guidelines/code/pageloader.md +++ b/guides/plugins/plugins/architecture/pageloader.md @@ -8,7 +8,7 @@ nav: # Page Loader * Pageloaders must be divided into appropriate domains that represent the different sections of the Storefront - "products", "account", etc. -* Each page loader must have an abstract class from which it derives ( See [decoration pattern](../../references/adr/2020-11-25-decoration-pattern.md)). This pattern can be used to completely replace the page loader in a project. +* Each page loader must have an abstract class from which it derives (See [decoration pattern](../../../../resources/references/adr/2020-11-25-decoration-pattern.md)). This pattern can be used to completely replace the page loader in a project. * Each page loader has a page object to return, in which all the necessary information for the page is present. * At the end of each pageloader, an individual `PageLoaded` event is thrown. This event can be used to provide further data by third-party developers. * Page loaders are not allowed to work directly with repositories but are only allowed to load data via the Store API. This is to ensure that all storefront functionalities can also be accessed via the Store API. diff --git a/resources/guidelines/code/cart-process.md b/resources/guidelines/code/cart-process.md deleted file mode 100644 index 46fd86c351..0000000000 --- a/resources/guidelines/code/cart-process.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -nav: - title: Cart Process - position: 30 - ---- - -# Cart Process - -* Within `\Shopware\Core\Checkout\Cart\CartProcessorInterface::process`, no queries may be executed because this method is executed several times in a row to resolve the dependencies of the elements in the shopping cart. -* The `\Shopware\Core\Checkout\Cart\CartDataCollectorInterface::collect` method must always check if the required data has already been loaded. This is to avoid having to execute unnecessarily many queries on the database. The loaded data will be appended to the passed *CartDataCollection*. -* The creation of line items must always take place via a `LineItemFactoryHandler` class. -* All price calculations must take place via an appropriate `PriceCalculator`. All price calculators are stored inside the `Shopware\Core\Checkout\Cart\Price` class. -* All shopping cart functions must be mapped via a corresponding store API route. The routes are located in the `Shopware\Core\Checkout\Cart\SalesChannel` namespace. diff --git a/resources/references/administration-reference/index.md b/resources/references/administration-reference/index.md deleted file mode 100644 index 48b54480c4..0000000000 --- a/resources/references/administration-reference/index.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -nav: - title: Administration Reference - position: 50 - ---- - -# Administration Reference - -This section covers concepts on Utils, Mixins and Directives. diff --git a/resources/references/api-reference/index.md b/resources/references/api-reference/index.md deleted file mode 100644 index 0c108436a1..0000000000 --- a/resources/references/api-reference/index.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -nav: - title: API Reference - position: 10 - ---- - -# API Reference - -The API references provide detailed information about the available endpoints, methods, parameters, request and response formats, and authentication mechanisms of an API. It provides essential information on how to interact with the API, what data can be sent or received, and how to handle different API responses. - -These references guide you to use the correct syntax, understand the expected input and output formats, implement the necessary authentication mechanisms and successful API requests and effectively utilize the functionality provided by the API in your applications. - -There are two dedicated API reference documents for your reference: - -* [Store API reference](https://shopware.stoplight.io/docs/store-api/38777d33d92dc-quick-start-guide) - Focused on customer-facing aspects, the Store API allows you to access and manipulate data related to products, customer interactions, shopping carts, and others that significantly impact the frontend user experience. It caters to both anonymous and authenticated users. - -* [Admin API reference](https://shopware.stoplight.io/docs/admin-api/twpxvnspkg3yu-quick-start-guide) - Primarily for backend and administrative functions, the Admin API enables structured data exchanges, bulk operations, data synchronization, and import-export tasks, addressing the backend needs of the Shopware platform. From 653b3549a9941c6a19f43fa7c7e3d97a3a700e23 Mon Sep 17 00:00:00 2001 From: somethings Date: Wed, 11 Mar 2026 18:49:04 +0100 Subject: [PATCH 02/22] Update index.md --- guides/hosting/installation-updates/deployments/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/guides/hosting/installation-updates/deployments/index.md b/guides/hosting/installation-updates/deployments/index.md index 18308c14e5..1aec675528 100644 --- a/guides/hosting/installation-updates/deployments/index.md +++ b/guides/hosting/installation-updates/deployments/index.md @@ -9,7 +9,7 @@ nav: The following guides outline the core principles and practical steps for deploying Shopware 6 to your infrastructure. They also explain how to build assets for the Administration and Storefront independently of a database, enabling reliable CI/CD pipelines and repeatable releases. -# Deployment best practices +## Best practices Successful deployments are predictable, repeatable, and reversible: @@ -49,6 +49,6 @@ Apps introduce an additional operational dimension because they rely on external - Deploy app backends with the same rigor as any web service. - Use blue/green or canary strategies to ensure that webhook handling continues uninterrupted during updates. -- Keep manifest versions aligned with deployed code. +- Keep manifest versions aligned with deployed code. - When introducing new events, register webhooks before emitting them to avoid delivery gaps. - Externalize credentials and endpoints, and design webhook handlers to be retry-safe and suitable for multi-tenant environments. From 2eb6a94f74fff6f284bc7b1277770d563462a8b6 Mon Sep 17 00:00:00 2001 From: somethings Date: Wed, 11 Mar 2026 18:50:04 +0100 Subject: [PATCH 03/22] Update directives.md --- .../administration/administration-reference/directives.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guides/plugins/plugins/administration/administration-reference/directives.md b/guides/plugins/plugins/administration/administration-reference/directives.md index b8db81dc97..4144785e80 100644 --- a/guides/plugins/plugins/administration/administration-reference/directives.md +++ b/guides/plugins/plugins/administration/administration-reference/directives.md @@ -7,7 +7,7 @@ nav: # Directives reference -This is an overview of all the directives registered globally to Vue.Directives are the same as normally in Vue. +This is an overview of all the directives registered globally to Vue.Directives are the same as normally in Vue. Check out the [Using directives](../mixins-directives/adding-directives.md) guide or refer to the [directives](https://github.com/shopware/shopware/tree/trunk/src/Administration/Resources/app/administration/src/app/directive) folder in the Git repository. From 581e3882a4674942dc43e8b0b0a55aa53690b515 Mon Sep 17 00:00:00 2001 From: somethings Date: Wed, 11 Mar 2026 18:50:31 +0100 Subject: [PATCH 04/22] Update utils.md --- .../plugins/administration/administration-reference/utils.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guides/plugins/plugins/administration/administration-reference/utils.md b/guides/plugins/plugins/administration/administration-reference/utils.md index 3f90a19a50..63b02a9fb4 100644 --- a/guides/plugins/plugins/administration/administration-reference/utils.md +++ b/guides/plugins/plugins/administration/administration-reference/utils.md @@ -7,7 +7,7 @@ nav: # Utils -This guide provides an overview of utility functions bound to the Shopware global object. +This guide provides an overview of utility functions bound to the Shopware global object. Utility functions provide many useful shortcuts for common tasks. For additional information, review our [usage guide](../services-utilities/using-utils.md) and review the [code that registers them](https://github.com/shopware/shopware/blob/v6.3.4.1/src/Administration/Resources/app/administration/src/core/service/util.service.js). From b99b766c59cf9c11a53702d4dfef7dc4914051a1 Mon Sep 17 00:00:00 2001 From: somethings Date: Wed, 11 Mar 2026 18:59:11 +0100 Subject: [PATCH 05/22] Update index.md --- guides/hosting/installation-updates/deployments/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/guides/hosting/installation-updates/deployments/index.md b/guides/hosting/installation-updates/deployments/index.md index 1aec675528..585c6380ba 100644 --- a/guides/hosting/installation-updates/deployments/index.md +++ b/guides/hosting/installation-updates/deployments/index.md @@ -26,7 +26,7 @@ Across project types and deployment models, apply the following principles to ma - Keep rollbacks minimal, database-aware, and version-pinned, and rehearse them regularly. - Enable maintenance mode for schema-changing releases; to validate the system state, add health checks and smoke tests post-deploy before exiting maintenance. - Tag releases consistently across source code, build artifacts, and Store metadata. -- Retain build logs and deploymrny reports for traceability and audits. +- Retain build logs and deployment reports for traceability and audits. ## Custom projects @@ -39,7 +39,7 @@ Apply this approach to keep deployments deterministic and reduce environment-spe Treat plugins as versioned deliverables that integrate cleanly into your deployment workflow: -- Ship plugins as versioned ZIPs from CI using the [Extension build command](../../../../products/cli/extension-commands/build.md). Install and activate them via CLI or deployment automation. +- Ship plugins as versioned ZIP files from CI using the [Extension build command](../../../../products/cli/extension-commands/build.md). Install and activate them via CLI or deployment automation. - Execute plugin migrations as part of deployment and ensure update steps are idempotent so that retries remain safe. - For Store plugins in particular, avoid post-deployment manual tweaks. From 6d228e7c6b54e33f6688a4f1ed0498e1955c7cc9 Mon Sep 17 00:00:00 2001 From: somethings Date: Wed, 11 Mar 2026 20:41:16 +0100 Subject: [PATCH 06/22] Update index.md --- .../troubleshooting/dal-reference/fields-reference/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guides/development/troubleshooting/dal-reference/fields-reference/index.md b/guides/development/troubleshooting/dal-reference/fields-reference/index.md index 84c38e6cd5..9ec65074b7 100644 --- a/guides/development/troubleshooting/dal-reference/fields-reference/index.md +++ b/guides/development/troubleshooting/dal-reference/fields-reference/index.md @@ -27,7 +27,7 @@ nav: | DateIntervalField | Stores a dateinterval value | Field | x | | DateTimeField | Stores a datetime value | Field | x | | EmailField | Stores a string value | StringField | | -| [EnumField](enum-field) | Stores a enum value | Field | x | +| [EnumField](enum-field.md) | Stores a enum value | Field | x | | Field | Stores a value | Struct | | | FkField | Stores a fk value | Field | x | | FloatField | Stores a float value | Field | x | From 56370b244ac454d865676f3cbf5b99e1b8f939b1 Mon Sep 17 00:00:00 2001 From: somethings Date: Wed, 11 Mar 2026 20:45:02 +0100 Subject: [PATCH 07/22] Update index.md --- guides/development/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guides/development/index.md b/guides/development/index.md index 2e1658d5cd..1cbc930af6 100644 --- a/guides/development/index.md +++ b/guides/development/index.md @@ -35,7 +35,7 @@ To build an [Extensions](extensions/index.md), first choose the correct type: Each extension guide walks you through the full development flow: creation → lifecycle → implementation → testing. -To sell an extension or offer paid features, see the [Monetization guide](./monetization) for available models such as paid extensions, In-App Purchases, and commission-based integrations. +To sell an extension or offer paid features, see the [Monetization guide](monetization/index.md) for available models such as paid extensions, In-App Purchases, and commission-based integrations. ## Typical development workflow From 1d9fa6bf26d5be5e43f3aab0f46073d2580672be Mon Sep 17 00:00:00 2001 From: somethings Date: Wed, 11 Mar 2026 20:47:07 +0100 Subject: [PATCH 08/22] Update index.md --- guides/development/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guides/development/index.md b/guides/development/index.md index 1cbc930af6..e06e9f3933 100644 --- a/guides/development/index.md +++ b/guides/development/index.md @@ -82,7 +82,7 @@ The Administration is part of the runtime environment and will be used throughou ### Development tooling -* `bin/console`: Shopware's built-in CLI, used for installing and activating plugins, running database migrations, clearing caches, executing scheduled tasks, and inspecting system state. See [command reference guide](../../resources/references/core-reference/commands-reference.html). +* `bin/console`: Shopware's built-in CLI, used for installing and activating plugins, running database migrations, clearing caches, executing scheduled tasks, and inspecting system state. See [command reference guide](../../resources/references/core-reference/commands-reference.md). * The standalone [Shopware CLI](https://developer.shopware.com/docs/products/cli/installation.html) supports project scaffolding, CI/CD workflows, automation tasks, and more. See the [helper commands guide](../../products/cli/project-commands/helper-commands.html). * IDE support: Shopware provides a [PHPStorm plugin](/tooling/shopware-toolbox.md) and [VS Code extension](https://marketplace.visualstudio.com/items?itemName=shopware.shopware-lsp). * [Deployment Helper](../hosting/installation-updates/deployments/deployment-helper.md): Supports database and maintenance operations for deployments (e.g., migrations, cache handling). From 25d32f5890bdccaa086d9a1e4046798424a327ad Mon Sep 17 00:00:00 2001 From: somethings Date: Wed, 11 Mar 2026 20:50:43 +0100 Subject: [PATCH 09/22] Update index.md --- guides/development/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/guides/development/index.md b/guides/development/index.md index e06e9f3933..3b65c795ca 100644 --- a/guides/development/index.md +++ b/guides/development/index.md @@ -83,10 +83,10 @@ The Administration is part of the runtime environment and will be used throughou ### Development tooling * `bin/console`: Shopware's built-in CLI, used for installing and activating plugins, running database migrations, clearing caches, executing scheduled tasks, and inspecting system state. See [command reference guide](../../resources/references/core-reference/commands-reference.md). -* The standalone [Shopware CLI](https://developer.shopware.com/docs/products/cli/installation.html) supports project scaffolding, CI/CD workflows, automation tasks, and more. See the [helper commands guide](../../products/cli/project-commands/helper-commands.html). -* IDE support: Shopware provides a [PHPStorm plugin](/tooling/shopware-toolbox.md) and [VS Code extension](https://marketplace.visualstudio.com/items?itemName=shopware.shopware-lsp). +* The standalone [Shopware CLI](../../products/cli/installation.md) supports project scaffolding, CI/CD workflows, automation tasks, and more. See the [helper commands guide](../../products/.../helper-commands.md). +* IDE support: Shopware provides a [PHPStorm plugin](tooling/shopware-toolbox.md) and [VS Code extension](https://marketplace.visualstudio.com/items?itemName=shopware.shopware-lsp). * [Deployment Helper](../hosting/installation-updates/deployments/deployment-helper.md): Supports database and maintenance operations for deployments (e.g., migrations, cache handling). ### Troubleshooting -The [troubleshooting](/troubleshooting) guides provide reference information about the data abstraction layer (DAL), flow, and rules. +The [troubleshooting](troubleshooting/index.md) guides provide reference information about the data abstraction layer (DAL), flow, and rules. From 76fa7e084bc63b49457562693a03ec04067acaa3 Mon Sep 17 00:00:00 2001 From: somethings Date: Wed, 11 Mar 2026 20:54:03 +0100 Subject: [PATCH 10/22] Update context-gateway.md --- guides/plugins/apps/gateways/context/context-gateway.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guides/plugins/apps/gateways/context/context-gateway.md b/guides/plugins/apps/gateways/context/context-gateway.md index a0364707ea..5672390f01 100644 --- a/guides/plugins/apps/gateways/context/context-gateway.md +++ b/guides/plugins/apps/gateways/context/context-gateway.md @@ -62,7 +62,7 @@ Your app server will receive the following payload: - The URL of the Shopware shop - The Shop ID - The app version - - Any active [in-app purchase](../../in-app-purchases). + - Any active [in-app purchase](../../../../development/monetization/in-app-purchases.md). - The current `SalesChannelContext` - The current `Cart` - Any custom data you include in the request body From f6aadd22f97af4042b445376e11ccb97ed0aceda Mon Sep 17 00:00:00 2001 From: somethings Date: Wed, 11 Mar 2026 20:55:00 +0100 Subject: [PATCH 11/22] Update context-gateway.md --- guides/plugins/apps/gateways/context/context-gateway.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guides/plugins/apps/gateways/context/context-gateway.md b/guides/plugins/apps/gateways/context/context-gateway.md index 5672390f01..b4739c7c25 100644 --- a/guides/plugins/apps/gateways/context/context-gateway.md +++ b/guides/plugins/apps/gateways/context/context-gateway.md @@ -69,7 +69,7 @@ Your app server will receive the following payload: ::: info -Communication between Shopware and your app server is secured via the [app signature verification mechanism](../../app-signature-verification), ensuring that only your app server can respond to context gateway requests. +Communication between Shopware and your app server is secured via the [app signature verification mechanism](../../app-signature-verification.md), ensuring that only your app server can respond to context gateway requests. ::: From 1daca203662e2a831e59a33900c5c91f0d250575 Mon Sep 17 00:00:00 2001 From: somethings Date: Wed, 11 Mar 2026 20:56:03 +0100 Subject: [PATCH 12/22] Update index.md --- .../administration/administration-reference/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/guides/plugins/plugins/administration/administration-reference/index.md b/guides/plugins/plugins/administration/administration-reference/index.md index b2264768d3..8d707d4b8a 100644 --- a/guides/plugins/plugins/administration/administration-reference/index.md +++ b/guides/plugins/plugins/administration/administration-reference/index.md @@ -11,9 +11,9 @@ Plugins extend the Administration by integrating directly into the Vue-based adm ## Core Concepts -* [Directives](directives): Globally registered Vue directives. -* [Mixins](mixins): Shared Vue mixins used across the Administration. -* [Utils](utils): Global utility functions available on the `Shopware` object. +* [Directives](directives.md): Globally registered Vue directives. +* [Mixins](mixins.md): Shared Vue mixins used across the Administration. +* [Utils](utils.md): Global utility functions available on the `Shopware` object. Use these guides to: From a1715feec7d45c72e181c13e7b67ef8329f577a6 Mon Sep 17 00:00:00 2001 From: somethings Date: Wed, 11 Mar 2026 20:58:29 +0100 Subject: [PATCH 13/22] Update index.md --- guides/development/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guides/development/index.md b/guides/development/index.md index 3b65c795ca..6b283303fd 100644 --- a/guides/development/index.md +++ b/guides/development/index.md @@ -83,7 +83,7 @@ The Administration is part of the runtime environment and will be used throughou ### Development tooling * `bin/console`: Shopware's built-in CLI, used for installing and activating plugins, running database migrations, clearing caches, executing scheduled tasks, and inspecting system state. See [command reference guide](../../resources/references/core-reference/commands-reference.md). -* The standalone [Shopware CLI](../../products/cli/installation.md) supports project scaffolding, CI/CD workflows, automation tasks, and more. See the [helper commands guide](../../products/.../helper-commands.md). +* The standalone [Shopware CLI](../../products/cli/installation.md) supports project scaffolding, CI/CD workflows, automation tasks, and more. See the [helper commands guide](../../products/cli/project-commands/helper-commands.md). * IDE support: Shopware provides a [PHPStorm plugin](tooling/shopware-toolbox.md) and [VS Code extension](https://marketplace.visualstudio.com/items?itemName=shopware.shopware-lsp). * [Deployment Helper](../hosting/installation-updates/deployments/deployment-helper.md): Supports database and maintenance operations for deployments (e.g., migrations, cache handling). From b632509a610eda2cbd0aeb02ce909a480e0cd70c Mon Sep 17 00:00:00 2001 From: somethings Date: Wed, 11 Mar 2026 21:05:34 +0100 Subject: [PATCH 14/22] Update index.md --- .../troubleshooting/dal-reference/fields-reference/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guides/development/troubleshooting/dal-reference/fields-reference/index.md b/guides/development/troubleshooting/dal-reference/fields-reference/index.md index 9ec65074b7..713e984fa9 100644 --- a/guides/development/troubleshooting/dal-reference/fields-reference/index.md +++ b/guides/development/troubleshooting/dal-reference/fields-reference/index.md @@ -27,7 +27,7 @@ nav: | DateIntervalField | Stores a dateinterval value | Field | x | | DateTimeField | Stores a datetime value | Field | x | | EmailField | Stores a string value | StringField | | -| [EnumField](enum-field.md) | Stores a enum value | Field | x | +| [EnumField](enum-field.md) | Stores an enum value | Field | x | | Field | Stores a value | Struct | | | FkField | Stores a fk value | Field | x | | FloatField | Stores a float value | Field | x | From 88a90923acfb37e03eaca6e2e30c1c33cb0025c1 Mon Sep 17 00:00:00 2001 From: somethings Date: Wed, 11 Mar 2026 21:14:16 +0100 Subject: [PATCH 15/22] Update directives.md --- .../administration/administration-reference/directives.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guides/plugins/plugins/administration/administration-reference/directives.md b/guides/plugins/plugins/administration/administration-reference/directives.md index 4144785e80..c56269cb39 100644 --- a/guides/plugins/plugins/administration/administration-reference/directives.md +++ b/guides/plugins/plugins/administration/administration-reference/directives.md @@ -7,7 +7,7 @@ nav: # Directives reference -This is an overview of all the directives registered globally to Vue.Directives are the same as normally in Vue. +This is an overview of all the directives registered globally to Vue. Directives are the same as normally in Vue. Check out the [Using directives](../mixins-directives/adding-directives.md) guide or refer to the [directives](https://github.com/shopware/shopware/tree/trunk/src/Administration/Resources/app/administration/src/app/directive) folder in the Git repository. From ff4a1e241f150b917a01bb83868668cbc6e798a3 Mon Sep 17 00:00:00 2001 From: somethings Date: Thu, 12 Mar 2026 14:59:00 +0100 Subject: [PATCH 16/22] Update index.md --- guides/hosting/installation-updates/deployments/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guides/hosting/installation-updates/deployments/index.md b/guides/hosting/installation-updates/deployments/index.md index 585c6380ba..7786e6e369 100644 --- a/guides/hosting/installation-updates/deployments/index.md +++ b/guides/hosting/installation-updates/deployments/index.md @@ -37,7 +37,7 @@ Apply this approach to keep deployments deterministic and reduce environment-spe ## Custom/Store plugins -Treat plugins as versioned deliverables that integrate cleanly into your deployment workflow: +Treat plugins as versioned deliverables that integrate cleanly into your deployment workflow (for example via the [Deployment helper](deployment-helper.md): - Ship plugins as versioned ZIP files from CI using the [Extension build command](../../../../products/cli/extension-commands/build.md). Install and activate them via CLI or deployment automation. - Execute plugin migrations as part of deployment and ensure update steps are idempotent so that retries remain safe. From 94971f728760c83782b30f0a9feb5049b25be46d Mon Sep 17 00:00:00 2001 From: somethings Date: Thu, 12 Mar 2026 14:59:48 +0100 Subject: [PATCH 17/22] Update index.md --- guides/hosting/installation-updates/deployments/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guides/hosting/installation-updates/deployments/index.md b/guides/hosting/installation-updates/deployments/index.md index 7786e6e369..31207c4c41 100644 --- a/guides/hosting/installation-updates/deployments/index.md +++ b/guides/hosting/installation-updates/deployments/index.md @@ -37,7 +37,7 @@ Apply this approach to keep deployments deterministic and reduce environment-spe ## Custom/Store plugins -Treat plugins as versioned deliverables that integrate cleanly into your deployment workflow (for example via the [Deployment helper](deployment-helper.md): +Treat plugins as versioned deliverables that integrate cleanly into your deployment workflow (for example via the [Deployment helper](deployment-helper.md)): - Ship plugins as versioned ZIP files from CI using the [Extension build command](../../../../products/cli/extension-commands/build.md). Install and activate them via CLI or deployment automation. - Execute plugin migrations as part of deployment and ensure update steps are idempotent so that retries remain safe. From 1e3b1e8bf39936a2c6f54fc75f2c96e4ad136002 Mon Sep 17 00:00:00 2001 From: somethings Date: Thu, 12 Mar 2026 15:02:33 +0100 Subject: [PATCH 18/22] Update index.md --- guides/hosting/installation-updates/deployments/index.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/guides/hosting/installation-updates/deployments/index.md b/guides/hosting/installation-updates/deployments/index.md index 31207c4c41..cdf6647209 100644 --- a/guides/hosting/installation-updates/deployments/index.md +++ b/guides/hosting/installation-updates/deployments/index.md @@ -39,7 +39,8 @@ Apply this approach to keep deployments deterministic and reduce environment-spe Treat plugins as versioned deliverables that integrate cleanly into your deployment workflow (for example via the [Deployment helper](deployment-helper.md)): -- Ship plugins as versioned ZIP files from CI using the [Extension build command](../../../../products/cli/extension-commands/build.md). Install and activate them via CLI or deployment automation. +- Manage extensions via Composer whenever possible. Composer ensures versioned, reproducible installs and automatically downloads the correct package versions during deployment. +- If distributing custom builds or Store packages outside of Composer, ship plugins as versioned ZIP files from CI using the [Extension build command](../../../../products/cli/extension-commands/build.md). Install and activate them via CLI or deployment automation. - Execute plugin migrations as part of deployment and ensure update steps are idempotent so that retries remain safe. - For Store plugins in particular, avoid post-deployment manual tweaks. From 8ac08a80fe9708b59bb57e7eac1488acd06b2c39 Mon Sep 17 00:00:00 2001 From: somethings Date: Thu, 12 Mar 2026 15:09:17 +0100 Subject: [PATCH 19/22] Update index.md --- guides/hosting/installation-updates/deployments/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/guides/hosting/installation-updates/deployments/index.md b/guides/hosting/installation-updates/deployments/index.md index cdf6647209..0547cbc4c6 100644 --- a/guides/hosting/installation-updates/deployments/index.md +++ b/guides/hosting/installation-updates/deployments/index.md @@ -39,8 +39,8 @@ Apply this approach to keep deployments deterministic and reduce environment-spe Treat plugins as versioned deliverables that integrate cleanly into your deployment workflow (for example via the [Deployment helper](deployment-helper.md)): -- Manage extensions via Composer whenever possible. Composer ensures versioned, reproducible installs and automatically downloads the correct package versions during deployment. -- If distributing custom builds or Store packages outside of Composer, ship plugins as versioned ZIP files from CI using the [Extension build command](../../../../products/cli/extension-commands/build.md). Install and activate them via CLI or deployment automation. +- Manage extensions via Composer whenever possible. Composer ensures versioned, reproducible installs during deployment. +- For Store submission or custom distribution workflows, build versioned ZIP artifacts from CI using the [Extension build command](../../../../products/cli/extension-commands/build.md). Install and activate them via CLI or deployment automation. - Execute plugin migrations as part of deployment and ensure update steps are idempotent so that retries remain safe. - For Store plugins in particular, avoid post-deployment manual tweaks. From 9c213452401d1ec3f1f9b5ae649a88b7ddcbb9cb Mon Sep 17 00:00:00 2001 From: sushmangupta Date: Thu, 12 Mar 2026 19:27:33 +0100 Subject: [PATCH 20/22] Update text and links --- guides/development/index.md | 2 +- .../dal-reference/aggregations-reference.md | 348 +++++++++--------- .../dal-reference/filters-reference.md | 82 ++--- .../dal-reference/flags-reference.md | 18 +- .../troubleshooting/flow-reference.md | 30 +- .../troubleshooting/rules-reference.md | 92 ++--- .../installation-updates/deployments/index.md | 2 +- .../extension-management.md | 30 +- .../gateways/checkout/checkout-gateway.md | 55 +-- .../gateways/checkout/command-reference.md | 7 + .../gateways/context/command-reference.md | 89 ++--- .../apps/gateways/context/context-gateway.md | 72 ++-- .../administration-reference/directives.md | 12 +- .../administration-reference/index.md | 2 +- .../administration-reference/mixins.md | 19 +- .../administration-reference/utils.md | 16 +- .../plugins/architecture/cart-process.md | 4 +- .../context-rules-rule-systems.md | 2 +- guides/plugins/plugins/architecture/events.md | 2 +- .../plugins/architecture/pageloader.md | 4 +- 20 files changed, 458 insertions(+), 430 deletions(-) diff --git a/guides/development/index.md b/guides/development/index.md index 6b283303fd..e038cc7ff3 100644 --- a/guides/development/index.md +++ b/guides/development/index.md @@ -57,7 +57,7 @@ Before starting new development, review the [Upgrades and Migrations](../upgrade Upgrade complexity depends on the installation: * Heavy custom code increases migration effort. -* No custom code but 60 Store plugins can be equally complex. +* No custom code, but 60 Store plugins can be equally complex. * Most real-world projects fall somewhere in between. A consistent architecture, centralized CI, and controlled extension strategy help you get ahead of upgrade pain. diff --git a/guides/development/troubleshooting/dal-reference/aggregations-reference.md b/guides/development/troubleshooting/dal-reference/aggregations-reference.md index 82b6ed4ed5..56e8da01b6 100644 --- a/guides/development/troubleshooting/dal-reference/aggregations-reference.md +++ b/guides/development/troubleshooting/dal-reference/aggregations-reference.md @@ -30,7 +30,7 @@ The DAL knows two types of aggregations: ## Avg aggregation -The `Avg` aggregation makes it possible to calculate the average value for a field. The following SQL statement is executed in the background: `AVG(price)`. +The `Avg` aggregation calculates the average value for a field. The following SQL statement is executed in the background: `AVG(price)`. @@ -61,14 +61,14 @@ Request "limit": 1, "includes": { "product": ["id", "name"] - }, + }, "aggregations": [ - { + { "name": "avg-price", "type": "avg", "field": "price" - } - ] + } + ] } ``` @@ -78,18 +78,18 @@ Response { "total": 1, "data": [ - { + { "name": "Gorgeous Cotton Magellanic Penguin", "id": "0402ca6a746b41458fd000124c308cc8", "apiAlias": "product" - } - ], + } + ], "aggregations": { "avg-price": { "avg": 505.73333333333335, "extensions": [] - } - } + } + } } ``` @@ -98,7 +98,7 @@ Response ## Count aggregation -The `count` aggregation makes it possible to determine the number of entries for a field that are filled with a value. The following SQL statement is executed in the background: `COUNT(DISTINCT(manufacturerId))`. +The `count` aggregation allows you to determine the number of entries in a field that contain a value. The following SQL statement is executed in the background: `COUNT(DISTINCT(manufacturerId))`. @@ -129,14 +129,14 @@ Request "limit": 1, "includes": { "product": ["id", "name"] - }, + }, "aggregations": [ - { + { "name": "count-manufacturers", "type": "count", "field": "manufacturerId" - } - ] + } + ] } ``` @@ -146,18 +146,18 @@ Response { "total": 1, "data": [ - { + { "name": "Gorgeous Cotton Magellanic Penguin", "id": "0402ca6a746b41458fd000124c308cc8", "apiAlias": "product" - } - ], + } + ], "aggregations": { "count-manufacturers": { "count": 44, "extensions": [] - } - } + } + } } ``` @@ -166,7 +166,7 @@ Response ## Max aggregation -The `max` aggregation allows you to determine the maximum value of a field. The following SQL statement is executed in the background: `MAX(price)`. +The `max` aggregation returns the maximum value of a field. The following SQL statement is executed in the background: `MAX(price)`. @@ -197,14 +197,14 @@ Request "limit": 1, "includes": { "product": ["id", "name"] - }, + }, "aggregations": [ - { + { "name": "max-price", "type": "max", "field": "price" - } - ] + } + ] } ``` @@ -214,18 +214,18 @@ Response { "total": 1, "data": [ - { + { "name": "Gorgeous Cotton Magellanic Penguin", "id": "0402ca6a746b41458fd000124c308cc8", "apiAlias": "product" - } - ], + } + ], "aggregations": { "max-price": { "max": "979", "extensions": [] - } - } + } + } } ``` @@ -234,7 +234,7 @@ Response ## Min aggregation -The `min` aggregation makes it possible to determine the minimum value of a field. The following SQL statement is executed in the background: `MIN(price)`. +The `min` aggregation returns the minimum value of a field. The following SQL statement is executed in the background: `MIN(price)`. @@ -265,14 +265,14 @@ Request "limit": 1, "includes": { "product": ["id", "name"] - }, + }, "aggregations": [ - { + { "name": "min-price", "type": "min", "field": "price" - } - ] + } + ] } ``` @@ -282,18 +282,18 @@ Response { "total": 1, "data": [ - { + { "name": "Gorgeous Cotton Magellanic Penguin", "id": "0402ca6a746b41458fd000124c308cc8", "apiAlias": "product" - } - ], + } + ], "aggregations": { "min-price": { "min": "5", "extensions": [] - } - } + } + } } ``` @@ -302,7 +302,7 @@ Response ## Sum aggregation -The `sum` aggregation makes it possible to determine the total of a field. The following SQL statement is executed in the background: `SUM(price)`. +The `sum` aggregation allows you to compute the total of a field. The following SQL statement is executed in the background: `SUM(price)`. @@ -333,14 +333,14 @@ Request "limit": 1, "includes": { "product": ["id", "name"] - }, + }, "aggregations": [ - { + { "name": "sum-price", "type": "sum", "field": "price" - } - ] + } + ] } ``` @@ -350,18 +350,18 @@ Response { "total": 1, "data": [ - { + { "name": "Gorgeous Cotton Magellanic Penguin", "id": "0402ca6a746b41458fd000124c308cc8", "apiAlias": "product" - } - ], + } + ], "aggregations": { "sum-price": { "sum": 30344, "extensions": [] - } - } + } + } } ``` @@ -370,7 +370,7 @@ Response ## Stats aggregation -The `stats` aggregation makes it possible to calculate several values at once for a field. This includes the previous `max`, `min`, `avg` and `sum` aggregation. The following SQL statement is executed in the background: `SELECT MAX(price), MIN(price), AVG(price), SUM(price)`. +The `stats` aggregation allows you to calculate multiple values for a field at once. This includes the previous `max`, `min`, `avg`, and `sum` aggregations. The following SQL statement is executed in the background: `SELECT MAX(price), MIN(price), AVG(price), SUM(price)`. @@ -404,14 +404,14 @@ Request "limit": 1, "includes": { "product": ["id", "name"] - }, + }, "aggregations": [ - { + { "name": "stats-price", "type": "stats", "field": "price" - } - ] + } + ] } ``` @@ -421,12 +421,12 @@ Response { "total": 1, "data": [ - { + { "name": "Gorgeous Cotton Magellanic Penguin", "id": "0402ca6a746b41458fd000124c308cc8", "apiAlias": "product" - } - ], + } + ], "aggregations": { "stats-price": { "min": "5", @@ -434,8 +434,8 @@ Response "avg": 505.73333333333335, "sum": 30344, "extensions": [] - } - } + } + } } ``` @@ -444,7 +444,7 @@ Response ## Terms aggregation -The `terms` aggregation belongs to the bucket aggregations. This allows you to determine the values of a field. The result contains each value once and how often this value occurs in the result. The `terms` aggregation also supports the following parameters: +The `terms` aggregation belongs to the bucket aggregations. This allows you to determine the values of a field. The result contains each value once, along with how often it occurs. The `terms` aggregation also supports the following parameters: * `limit` - Defines a maximum number of entries to be returned \(default: zero\) * `sort` - Defines the order of the entries. By default, the following is not sorted @@ -489,16 +489,16 @@ Request "limit": 1, "includes": { "product": ["id", "name"] - }, + }, "aggregations": [ - { + { "name": "manufacturer-ids", "type": "terms", "limit": 3, "sort": { "field": "manufacturer.name", "order": "DESC" }, "field": "manufacturerId" - } - ] + } + ] } ``` @@ -508,34 +508,34 @@ Response { "total": 1, "data": [ - { + { "name": "Gorgeous Cotton Magellanic Penguin", "id": "0402ca6a746b41458fd000124c308cc8", "apiAlias": "product" - } - ], + } + ], "aggregations": { "manufacturer-ids": { "buckets": [ - { + { "key": "7af1534f96604744a4bc16e713550107", "count": 1, "extensions": [] - }, - { + }, + { "key": "32d5c55f960b409ab209fe25c88a6676", "count": 1, "extensions": [] - }, - { + }, + { "key": "935ceec182714a8da48227d4772628a4", "count": 1, "extensions": [] - } - ], + } + ], "extensions": [] - } - } + } + } } ``` @@ -544,7 +544,7 @@ Response ## Filter aggregation -The `filter` aggregation belongs to the bucket aggregations. Unlike all other aggregations, this aggregation does not determine any result. It can't be used alone. It is only used to further restrict the result of an aggregation in a criterion. Filters defined inside the `filter` property of this aggregation type are only used when calculating this aggregation. The filters have no effect on other aggregations or on the result of the search. +The `filter` aggregation belongs to the bucket aggregations. Unlike all other aggregations, this one does not produce a result. It can't be used alone. It is used only further to restrict the result of an aggregation in a criterion. Filters defined inside the `filter` property of this aggregation type are only used when calculating this aggregation. The filters have no effect on other aggregations or on the search results. @@ -581,25 +581,25 @@ Request "limit": 1, "includes": { "product": ["id", "name"] - }, + }, "aggregations": [ - { + { "name": "active-price-avg", "type": "filter", "filter": [ - { + { "type": "equals", "field": "active", "value": true - } - ], + } + ], "aggregation": { "name": "avg-price", "type": "avg", "field": "price" - } - } - ] + } + } + ] } ``` @@ -609,18 +609,18 @@ Response { "total": 1, "data": [ - { + { "name": "Awesome Granite HelpingHand", "id": "000bba26e2044b98a3ee4a84b03f9551", "apiAlias": "product" - } - ], + } + ], "aggregations": { "avg-price": { "avg": 517.5898195488719, "extensions": [] - } - } + } + } } ``` @@ -629,7 +629,7 @@ Response ## Entity aggregation -The `entity` aggregation is similar to the `terms` aggregation. It belongs to the bucket aggregations. As with `terms` aggregation, all unique values are determined for a field. The aggregation then uses the determined keys to load the defined entity. The keys are used here as ids. +The `entity` aggregation is similar to the `terms` aggregation. It belongs to the bucket aggregations. As with `terms` aggregation, all unique values are determined for a field. The aggregation then uses the determined keys to load the defined entity. The keys are used here as IDs. @@ -664,15 +664,15 @@ Request "includes": { "product": ["id", "name"], "product_manufacturer": ["id", "name"] - }, + }, "aggregations": [ - { + { "name": "manufacturers", "type": "entity", "definition": "product_manufacturer", "field": "manufacturerId" - } - ] + } + ] } ``` @@ -682,29 +682,29 @@ Response { "total": 1, "data": [ - { + { "name": "Gorgeous Cotton Magellanic Penguin", "id": "0402ca6a746b41458fd000124c308cc8", "apiAlias": "product" - } - ], + } + ], "aggregations": { "manufacturers": { "entities": [ - { + { "name": "Kris, Thiel and Tillman", "id": "0055fe4c16ac4d34a57b460d225682cb", "apiAlias": "product_manufacturer" - }, - { + }, + { "name": "Beier Group", "id": "073e354c7a854287ac8c084cd70ebf90", "apiAlias": "product_manufacturer" - } - ], + } + ], "apiAlias": "manufacturers_aggregation" - } - } + } + } } ``` @@ -713,7 +713,7 @@ Response ## Histogram aggregation -The histogram aggregation is used as soon as the data to be determined refers to a date field. With the histogram aggregation, one of the following date intervals can be given: `minute`, `hour`, `day`, `week`, `month`, `quarter`, `year`, `day`. This interval groups the result and calculates the corresponding count of hits. +The histogram aggregation is used as soon as the data to be determined refers to a date field. For histogram aggregation, one of the following date intervals can be specified: `minute`, `hour`, `day`, `week`, `month`, `quarter`, `year`, `day`. This interval groups the results and calculates the corresponding count of hits. @@ -751,15 +751,15 @@ Request "limit": 1, "includes": { "product": ["id", "name"] - }, + }, "aggregations": [ - { + { "name": "release-dates", "type": "histogram", "field": "releaseDate", "interval": "month" - } - ] + } + ] } ``` @@ -769,34 +769,34 @@ Response { "total": 1, "data": [ - { + { "name": "Gorgeous Cotton Magellanic Penguin", "id": "0402ca6a746b41458fd000124c308cc8", "apiAlias": "product" - } - ], + } + ], "aggregations": { "release-dates": { "buckets": [ - { + { "key": "2020-04-01 00:00:00", "count": 50, "extensions": [] - }, - { + }, + { "key": "2020-03-01 00:00:00", "count": 4, "extensions": [] - }, - { + }, + { "key": "2020-04-01 00:00:00", "count": 6, "extensions": [] - } - ], + } + ], "apiAlias": "release-dates_aggregation" - } - } + } + } } ``` @@ -805,7 +805,7 @@ Response ## Range aggregations -Allows to aggregate data on a predefined range of values for more flexibility in the DAL - for example, it provides faceted filters on a predefined range. +Allows for aggregation of data on a predefined range of values for more flexibility in the DAL - for example, it provides faceted filters on a predefined range. Bound are computed in SQL as in the Elasticsearch native range aggregation: @@ -852,13 +852,13 @@ Request "range": { "field": "products.price", "ranges": [ - { "to": 100.0 }, - { "from": 100.0, "to": 200.0 }, - { "from": 200.0 } - ] - } - } - } + { "to": 100.0 }, + { "from": 100.0, "to": 200.0 }, + { "from": 200.0 } + ] + } + } + } } ``` @@ -870,25 +870,25 @@ Response "aggregations": { "price_ranges": { "buckets": [ - { + { "key": "*-100.0", "to": 100.0, "doc_count": 2 - }, - { + }, + { "key": "100.0-200.0", "from": 100.0, "to": 200.0, "doc_count": 2 - }, - { + }, + { "key": "200.0-*", "from": 200.0, "doc_count": 3 - } - ] - } - } + } + ] + } + } } ``` @@ -897,9 +897,9 @@ Response ## Nesting aggregations -A metric aggregation calculates the value for a specific field. This can be a total or, for example, a minimum or maximum value of the field. Bucket aggregations are different. This determines how often a value occurs in a search result and returns it together with the count. The special thing about bucket aggregation is that it can contain further aggregations. This allows the API to perform complex queries like, for example: +A metric aggregation calculates the value for a specific field. This can be a total or, for example, a minimum or maximum value of the field. Bucket aggregations are different. This determines how often a value occurs in a search result and returns the count along with it. The special thing about bucket aggregation is that it can contain further aggregations. This allows the API to perform complex queries, like, for example: -* Calculate the number of manufacturers per category that have a price over 500 Euro. \* +* Calculate the number of manufacturers per category that have a price over 500 euros. \* @@ -914,8 +914,8 @@ $criteria->addAggregation( new TermsAggregation( 'per-category', 'categories.id', - null, - null, + null, + null, new TermsAggregation( 'manufacturer-ids', 'manufacturerId' @@ -954,20 +954,20 @@ Request "limit": 1, "includes": { "product": ["id", "name"] - }, + }, "aggregations": [ - { + { "name": "my-filter", "type": "filter", "filter": [ - { + { "type": "range", "field": "price", "parameters": { "gte": 500 - } - } - ], + } + } + ], "aggregation": { "name": "per-category", "type": "terms", @@ -976,10 +976,10 @@ Request "name": "manufacturer-ids", "type": "terms", "field": "manufacturerId" - } - } - } - ] + } + } + } + ] } ``` @@ -989,54 +989,54 @@ Response { "total": 1, "data": [ - { + { "name": "Gorgeous Cotton Magellanic Penguin", "id": "0402ca6a746b41458fd000124c308cc8", "apiAlias": "product" - } - ], + } + ], "aggregations": { "per-category": { "buckets": [ - { + { "key": "25fb912226fa48c2a5c9f4788f1f552d", "count": 1, "extensions": [], "manufacturer-ids": { "buckets": [ - { + { "key": "715901f2b5864181a777d1a1b912d9a2", "count": 1, "extensions": [] - } - ], + } + ], "extensions": [] - } - }, - { + } + }, + { "key": "59b38c960597446e8c7bb76593ff7043", "count": 2, "extensions": [], "manufacturer-ids": { "buckets": [ - { + { "key": "98e53a711d8549059325da044da2951d", "count": 1, "extensions": [] - }, - { + }, + { "key": "ee8b37324c5a4c32962367146be4d7b4", "count": 1, "extensions": [] - } - ], + } + ], "extensions": [] - } - } - ], + } + } + ], "apiAlias": "per-category_aggregation" - } - } + } + } } ``` diff --git a/guides/development/troubleshooting/dal-reference/filters-reference.md b/guides/development/troubleshooting/dal-reference/filters-reference.md index 31c2dfb136..6f2b68f8a5 100644 --- a/guides/development/troubleshooting/dal-reference/filters-reference.md +++ b/guides/development/troubleshooting/dal-reference/filters-reference.md @@ -37,11 +37,11 @@ $criteria->addFilter(new EqualsFilter('stock', 10)); ```javascript { "filter": [ - { + { "type": "equals", "field": "stock", "value": 10 - } + } ] } ``` @@ -70,15 +70,15 @@ $criteria->addFilter( ```json { "filter": [ - { + { "type": "equalsAny", "field": "productNumber", "value": [ "3fed029475fa4d4585f3a119886e0eb1", "77d26d011d914c3aa2c197c81241a45b" - ] - } - ] + ] + } + ] } ``` @@ -104,12 +104,12 @@ $criteria->addFilter(new ContainsFilter('name', 'Lightweight')); ```json { "filter": [ - { + { "type": "contains", "field": "name", "value": "Lightweight" - } - ] + } + ] } ``` @@ -118,7 +118,7 @@ $criteria->addFilter(new ContainsFilter('name', 'Lightweight')); ## Range -The `Range` filter allows you to filter a field to a value space. This can work with date or numerical values. Within the `parameter` property the following values are possible: +The `Range` filter allows you to filter a field to a value space. This can work with date or numerical values. Within the `parameter` property, the following values are possible: * `gte` => Greater than equals * `lte` => Less than equals @@ -147,15 +147,15 @@ $criteria->addFilter( ```json { "filter": [ - { + { "type": "range", "field": "stock", "parameters": { "gte": 20, "lte": 30 - } - } - ] + } + } + ] } ``` @@ -164,7 +164,7 @@ $criteria->addFilter( ## Not -The `Not` Filter is a container which allows to negate any kind of filter. The `operator` allows you to define the combination of queries within the NOT filter \(`OR` and `AND`\). The following SQL statement is executed in the background: `WHERE !(stock = 1 OR availableStock = 1) AND active = 1`: +The `Not` filter is a container that allows negating any filter. The `operator` allows you to define the combination of queries within the NOT filter \(`OR` and `AND`\). The following SQL statement is executed in the background: `WHERE !(stock = 1 OR availableStock = 1) AND active = 1`: @@ -191,28 +191,28 @@ $criteria->addFilter( ```json { "filter": [ - { + { "type": "not", "operator": "or", "queries": [ - { + { "type": "equals", "field": "stock", "value": 1 - }, - { + }, + { "type": "equals", "field": "availableStock", "value": 1 - } - ] - }, - { + } + ] + }, + { "type": "equals", "field": "active", "value": true - } - ] + } + ] } ``` @@ -221,7 +221,7 @@ $criteria->addFilter( ## Multi -The `Multi` Filter is a container, which allows to set logical links between filters. The `operator` allows you to define the links between the queries within the `Multi` filter \(`OR` and `AND`\). The following SQL statement is executed in the background: `WHERE (stock = 1 OR availableStock = 1) AND active = 1`. +The `Multi` filter is a container that allows you to set logical links between filters. The `operator` allows you to define the links between the queries within the `Multi` filter \(`OR` and `AND`\). The following SQL statement is executed in the background: `WHERE (stock = 1 OR availableStock = 1) AND active = 1`. @@ -249,27 +249,27 @@ $criteria->addFilter( ```javascript { "filter": [ - { + { "type": "multi", "operator": "or", "queries": [ - { + { "type": "equals", "field": "stock", "value": 1 - }, - { + }, + { "type": "equals", "field": "availableStock", "value": 1 - } + } ] - }, - { + }, + { "type": "equals", "field": "active", "value": true - } + } ] } ``` @@ -296,12 +296,12 @@ $criteria->addFilter(new PrefixFilter('name', 'Lightweight')); ```json { "filter": [ - { + { "type": "prefix", "field": "name", "value": "Lightweight" - } - ] + } + ] } ``` @@ -327,16 +327,16 @@ $criteria->addFilter(new SuffixFilter('name', 'Lightweight')); ```json { "filter": [ - { + { "type": "suffix", "field": "name", "value": "Lightweight" - } - ] + } + ] } ``` -In general, the storage systems are **case-insensitive**, meaning that when filtering values to search for a string, the casing of the filter values doesn't affect their handling. +In general, storage systems are **case-insensitive**, meaning that when filtering for a string, the casing of the filter values doesn't affect the search. diff --git a/guides/development/troubleshooting/dal-reference/flags-reference.md b/guides/development/troubleshooting/dal-reference/flags-reference.md index 60cde949ac..9c4a12475a 100644 --- a/guides/development/troubleshooting/dal-reference/flags-reference.md +++ b/guides/development/troubleshooting/dal-reference/flags-reference.md @@ -11,19 +11,19 @@ nav: |:-----------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | AllowEmptyString | Flag a text column that an empty string should not be considered as null | | AllowHtml | In case a column is allowed to contain HTML-escaped data. Beware of injection possibilities | -| ApiAware | Makes a field available in the Store or Admin API. If no parameter is passed for the flag, the field will be exposed in the both Store and Admin API. By default, all fields are enabled for the Admin API, as the flag is added in the base Field class. However, the scope can be restricted to `AdminApiSource` and `SalesChannelApiSource`. | -| CascadeDelete | In case the referenced association data will be deleted, the related data will be deleted too | -| Computed | The value is computed by indexer or external systems and cannot be written using the DAL. | +| ApiAware | Makes a field available in the Store or Admin API. If no parameter is passed for the flag, the field will be exposed in both the Store and Admin API. By default, all fields are enabled for the Admin API because the flag is set in the base Field class. However, the scope can be restricted to `AdminApiSource` and `SalesChannelApiSource`. | +| CascadeDelete | In case the referenced association data is deleted, the related data will be deleted too | +| Computed | Indexer or external systems compute the value and cannot be written using the DAL. | | Deprecated | This flag is used to mark the field that has been deprecated and will be removed with the next major version. | -| Extension | Defines that the data of this field is stored in an Entity::$extension and are not part of the struct itself. | +| Extension | Defines that the data of this field is stored in an Entity::$extension and is not part of the struct itself. | | Immutable | By setting the "Immutable" flag, it indicates that the field is write-once and then read-only | -| Inherited | Defines that the data of this field can be inherited by the parent record | +| Inherited | Defines that the parent record can inherit the data of this field | | PrimaryKey | The PrimaryKey flag defines the field as part of the entity's primary key. Usually, this should be the ID field. | -| Required | Fields marked as "Required" must be specified during the create request of an entity. This configuration is only taken into account during the write process. | -| RestrictDelete | Associated data with this flag, restricts the delete of the entity in case that a record with the primary key exists. | +| Required | Fields marked as "Required" must be specified during the creation request of an entity. This configuration is only considered during the write process. | +| RestrictDelete | Associated data with this flag, restricts the deletion of the entity in case a record with the primary key exists. | | ReverseInherited | Flags "ReverseInherited" | | Runtime | Defines that the data of the field will be loaded at runtime by an event subscriber or other class. Used in entity extensions for plugins or not directly fetchable associations. | | SearchRanking | Defines the weight for a search query on the entity for this field | -| SetNullOnDelete | In case the referenced association data will be deleted, the related data will be set to null and an Written event will be thrown | +| SetNullOnDelete | In case the referenced association data will be deleted, the related data will be set to null, and a Written event will be thrown | | Since | The "Since" flag defines since which Shopware version the field is available. | -| WriteProtected | By setting the "WriteProtected" flag, write access via API can be restricted. This flag is mostly used to protect indexed data from direct writing via API. | | +| WriteProtected | By setting the "WriteProtected" flag, write access via API can be restricted. This flag is primarily used to protect indexed data from direct writes via the API. | | diff --git a/guides/development/troubleshooting/flow-reference.md b/guides/development/troubleshooting/flow-reference.md index a85fd849f1..209114d3bb 100644 --- a/guides/development/troubleshooting/flow-reference.md +++ b/guides/development/troubleshooting/flow-reference.md @@ -8,7 +8,7 @@ nav: # Flow Reference ::: info - This functionality is available starting with Shopware 6.4.6.0 + This functionality is available starting with Shopware 6.4.6.0 ::: | Event | Description | @@ -16,25 +16,25 @@ nav: | checkout.customer.before.login | Triggers as soon as a customer logs in | | checkout.customer.deleted | Triggers if a customer gets deleted | | checkout.customer.double_opt_in_guest_order | Triggers as soon as double opt-in is accepted in a guest order | -| checkout.customer.double_opt_in_registration | Triggers when a customer commits to his registration via double opt-in | -| checkout.customer.guest_register | Triggers when a new guest customer was registered | +| checkout.customer.double_opt_in_registration | Triggers when a customer commits to their registration via double opt-in | +| checkout.customer.guest_register | Triggers when a new guest customer is registered | | checkout.customer.login | Triggers as soon as a customer logs in | | checkout.customer.logout | Triggers when a customer logs out | | checkout.customer.register | Triggers when a new customer was registered | -| checkout.order.payment_method.changed | Triggers when a user changed payment method during checkout process | +| checkout.order.payment_method.changed | Triggers when a user changes payment method during checkout process | | checkout.order.placed | Triggers when an order is placed | -| contact_form.send | Triggers when a contact form is send | -| customer.group.registration.accepted | Triggers when admin accepted a user who register to join a customer group | -| customer.group.registration.declined | Triggers when admin declined a user who register to join a customer group | -| customer.recovery.request | Triggers when a customer recovers his password | +| contact_form.send | Triggers when a contact form is sent | +| customer.group.registration.accepted | Triggers when an admin accepts a user who registers to join a customer group | +| customer.group.registration.declined | Triggers when an admin declined a user who registered to join a customer group | +| customer.recovery.request | Triggers when a customer recovers their password | | mail.after.create.message | Triggers when a mail message/ content is created | -| mail.before.send | Triggers before a mail is send | -| mail.sent | Triggers when a mail is send from Shopware | -| newsletter.confirm | Triggers when newsletter was confirmed by a user | -| newsletter.register | Triggers when user registered to subscribe to a sales channel newsletter | -| newsletter.unsubscribe | Triggers when user unsubscribe from a sales channel newsletter | +| mail.before.send | Triggers before a mail is sent | +| mail.sent | Triggers when a mail is sent from Shopware | +| newsletter.confirm | Triggers when a user confirmed the newsletter | +| newsletter.register | Triggers when a user registers to subscribe to a sales channel newsletter | +| newsletter.unsubscribe | Triggers when a user unsubscribes from a sales channel newsletter | | product_export.log | Triggers when product export is executed | -| review_form.send | Triggers when a product review form is submitted by a customer | +| review_form.send | Triggers when a customer submits a product review form | | state_enter.order.state.cancelled | Triggers when an order enters status "Cancelled" | | state_enter.order.state.completed | Triggers when an order enters status "Completed" | | state_enter.order.state.in_progress | Triggers when an order enters status "In progress" | @@ -95,7 +95,7 @@ nav: | state_leave.order_transaction_capture_refund.state.failed | Triggers when a capture refund leaves status "Failed" | | state_leave.order_transaction_capture_refund.state.in_progress | Triggers when a capture refund leaves "In progress" status | | state_leave.order_transaction_capture_refund.state.open | Triggers when a capture refund leaves status "Open" | -| user.recovery.request | Triggers when a user created a password recovery request at admin | +| user.recovery.request | Triggers when a user creates a password recovery request at the admin | ## B2B diff --git a/guides/development/troubleshooting/rules-reference.md b/guides/development/troubleshooting/rules-reference.md index 8431df128b..9cbccab760 100644 --- a/guides/development/troubleshooting/rules-reference.md +++ b/guides/development/troubleshooting/rules-reference.md @@ -13,55 +13,55 @@ List of all rule classes across Shopware 6. | Class | Description | |:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| :--- | -| [Shopware\Core\Checkout\Cart\Rule\AlwaysValidRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/AlwaysValidRule.php) | Matches always | -| [Shopware\Core\Checkout\Cart\Rule\CartAmountRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/CartAmountRule.php) | Matches a specific number to the carts total price. | +| [Shopware\Core\Checkout\Cart\Rule\AlwaysValidRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/AlwaysValidRule.php) | Matches always | +| [Shopware\Core\Checkout\Cart\Rule\CartAmountRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/CartAmountRule.php) | Matches a specific number to the cart's total price. | | [Shopware\Core\Checkout\Cart\Rule\CartHasDeliveryFreeItemRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/CartHasDeliveryFreeItemRule.php) | Matches if the cart has a free delivery item. | -| [Shopware\Core\Checkout\Cart\Rule\CartWeightRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/CartWeightRule.php) | Matches a specific number to the current cart's total weight. | -| [Shopware\Core\Checkout\Cart\Rule\GoodsCountRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/GoodsCountRule.php) | Matches a number to the current cart's line item goods count. | -| [Shopware\Core\Checkout\Cart\Rule\GoodsPriceRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/GoodsPriceRule.php) | Matches a specific number to the carts goods price. | -| [Shopware\Core\Checkout\Cart\Rule\LineItemClearanceSaleRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemClearanceSaleRule.php) | Matches a specific line item which is on clearance sale | -| [Shopware\Core\Checkout\Cart\Rule\LineItemCreationDateRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemCreationDateRule.php) | Matches if a line item has a specific creation date. | -| [Shopware\Core\Checkout\Cart\Rule\LineItemCustomFieldRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemCustomFieldRule.php) | Matches if a line item has a specific custom field. | +| [Shopware\Core\Checkout\Cart\Rule\CartWeightRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/CartWeightRule.php) | Matches a specific number to the current cart's total weight. | +| [Shopware\Core\Checkout\Cart\Rule\GoodsCountRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/GoodsCountRule.php) | Matches a number to the current cart's line item goods count. | +| [Shopware\Core\Checkout\Cart\Rule\GoodsPriceRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/GoodsPriceRule.php) | Matches a specific number to the cart's goods price. | +| [Shopware\Core\Checkout\Cart\Rule\LineItemClearanceSaleRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemClearanceSaleRule.php) | Matches a specific line item which is on clearance sale | +| [Shopware\Core\Checkout\Cart\Rule\LineItemCreationDateRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemCreationDateRule.php) | Matches if a line item has a specific creation date. | +| [Shopware\Core\Checkout\Cart\Rule\LineItemCustomFieldRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemCustomFieldRule.php) | Matches if a line item has a specific custom field. | | [Shopware\Core\Checkout\Cart\Rule\LineItemDimensionHeightRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemDimensionHeightRule.php) | Matches a specific line item's height. | | [Shopware\Core\Checkout\Cart\Rule\LineItemDimensionLengthRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemDimensionLengthRule.php) | Matches a specific line item's length. | | [Shopware\Core\Checkout\Cart\Rule\LineItemDimensionWeightRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemDimensionWeightRule.php) | Matches a specific line item's weight. | -| [Shopware\Core\Checkout\Cart\Rule\LineItemDimensionWidthRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemDimensionWidthRule.php) | Matches a specific line item's width. | -| [Shopware\Core\Checkout\Cart\Rule\LineItemGroupRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemGroupRule.php) | Matches if a line item has a specific group. | -| [Shopware\Core\Checkout\Cart\Rule\LineItemInCategoryRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemInCategoryRule.php) | Matches if a line item is in a specific category. | -| [Shopware\Core\Checkout\Cart\Rule\LineItemIsNewRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemIsNewRule.php) | Matches if a line item is marked as new. | -| [Shopware\Core\Checkout\Cart\Rule\LineItemListPriceRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemListPriceRule.php) | Matches a specific line item has a specific list price. | -| [Shopware\Core\Checkout\Cart\Rule\LineItemOfManufacturerRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemOfManufacturerRule.php) | Matches a specific line item has a specific manufacturer. | -| [Shopware\Core\Checkout\Cart\Rule\LineItemOfTypeRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemOfTypeRule.php) | Matches a specific type name to the line item's type. | -| [Shopware\Core\Checkout\Cart\Rule\LineItemPromotedRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemPromotedRule.php) | Matches if a line item is promoted. | -| [Shopware\Core\Checkout\Cart\Rule\LineItemPropertyRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemPropertyRule.php) | Matches if a line item has a specific property. | -| [Shopware\Core\Checkout\Cart\Rule\LineItemPurchasePriceRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemPurchasePriceRule.php) | Matches if a line item has a specific purchase price. | -| [Shopware\Core\Checkout\Cart\Rule\LineItemReleaseDateRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemReleaseDateRule.php) | Matches a specific line item's release date. | -| [Shopware\Core\Checkout\Cart\Rule\LineItemRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemRule.php) | Matches multiple identifiers to a line item's keys. True if one identifier matches. | -| [Shopware\Core\Checkout\Cart\Rule\LineItemTagRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemTagRule.php) | Matches multiple tags to a line item's tag. True if one tag matches. | -| [Shopware\Core\Checkout\Cart\Rule\LineItemTaxationRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemTaxationRule.php) | Matches if a line item has a specific tax. | -| [Shopware\Core\Checkout\Cart\Rule\LineItemTotalPriceRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemTotalPriceRule.php) | Matches a number to the current cart's line item total price. | -| [Shopware\Core\Checkout\Cart\Rule\LineItemUnitPriceRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemUnitPriceRule.php) | Matches a specific number to a line item's price. | -| [Shopware\Core\Checkout\Cart\Rule\LineItemWithQuantityRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemWithQuantityRule.php) | Matches a specific line item's quantity to the current line item's quantity. | -| [Shopware\Core\Checkout\Cart\Rule\LineItemWrapperRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemWrapperRule.php) | Internally handled scope changes. | -| [Shopware\Core\Checkout\Cart\Rule\LineItemsInCartCountRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemsInCartCountRule.php) | Matches a number to the current cart's line item count. | -| [Shopware\Core\Checkout\Cart\Rule\LineItemsInCartCountRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemsInCartCountRule.php) | Matches multiple identifiers to a carts line item's identifier. True if one identifier matches. | -| [Shopware\Core\Checkout\Cart\Rule\PaymentMethodRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/PaymentMethodRule.php) | Matches if a specific payment method is used | -| [Shopware\Core\Checkout\Cart\Rule\ShippingMethodRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/ShippingMethodRule.php) | Matches if a specific shipping method is used | -| [Shopware\Core\Checkout\Customer\Rule\BillingCountryRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Customer/Rule/BillingCountryRule.php) | Matches multiple countries to the customer's active billing address country. | -| [Shopware\Core\Checkout\Customer\Rule\BillingStreetRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Customer/Rule/BillingStreetRule.php) | Matches multiple street names to the customer's active billing address street name. | -| [Shopware\Core\Checkout\Customer\Rule\BillingZipCodeRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Customer/Rule/BillingZipCodeRule.php) | Matches multiple zip codes to the customer's active billing address zip code. | -| [Shopware\Core\Checkout\Customer\Rule\CustomerGroupRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Customer/Rule/CustomerGroupRule.php) | Matches multiple customer groups to the current customers group. True if one customer group matches. | -| [Shopware\Core\Checkout\Customer\Rule\CustomerNumberRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Customer/Rule/CustomerNumberRule.php) | Matches multiple numbers to the active customers number. | -| [Shopware\Core\Checkout\Customer\Rule\CustomerTagRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Customer/Rule/CustomerTagRule.php) | Matches a tag set to customers | -| [Shopware\Core\Checkout\Customer\Rule\DaysSinceLastOrderRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Customer/Rule/DaysSinceLastOrderRule.php) | Matches a specific number of days to the last order creation date. | -| [Shopware\Core\Checkout\Customer\Rule\DifferentAddressesRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Customer/Rule/DifferentAddressesRule.php) | Matches if active billing address is not the default. | -| [Shopware\Core\Checkout\Customer\Rule\IsCompanyRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Customer/Rule/IsCompanyRule.php) | Matches if the customer is a company | -| [Shopware\Core\Checkout\Customer\Rule\IsNewCustomerRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Customer/Rule/IsNewCustomerRule.php) | Matches if a customer is new, by matching the `firstLogin` property with today. | -| [Shopware\Core\Checkout\Customer\Rule\LastNameRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Customer/Rule/LastNameRule.php) | Exactly matches a string to the customer's last name. | -| [Shopware\Core\Checkout\Customer\Rule\OrderCountRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Customer/Rule/OrderCountRule.php) | Matches a specific number to the number of orders of the current customer. | -| [Shopware\Core\Checkout\Customer\Rule\ShippingCountryRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Customer/Rule/ShippingCountryRule.php) | Matches multiple countries to the customer's active shipping address country. True if one country matches. | -| [Shopware\Core\Checkout\Customer\Rule\ShippingStreetRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Customer/Rule/ShippingStreetRule.php) | Matches multiple street names to the customer's active shipping address street name. True if one street name matches. | -| [Shopware\Core\Checkout\Customer\Rule\ShippingZipCodeRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Customer/Rule/ShippingZipCodeRule.php) | Matches multiple zip codes to the customer's active shipping address zip code. True if one zip code matches. | +| [Shopware\Core\Checkout\Cart\Rule\LineItemDimensionWidthRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemDimensionWidthRule.php) | Matches a specific line item's width. | +| [Shopware\Core\Checkout\Cart\Rule\LineItemGroupRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemGroupRule.php) | Matches if a line item has a specific group. | +| [Shopware\Core\Checkout\Cart\Rule\LineItemInCategoryRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemInCategoryRule.php) | Matches if a line item is in a specific category. | +| [Shopware\Core\Checkout\Cart\Rule\LineItemIsNewRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemIsNewRule.php) | Matches if a line item is marked as new. | +| [Shopware\Core\Checkout\Cart\Rule\LineItemListPriceRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemListPriceRule.php) | Matches a specific line item that has a specific list price. | +| [Shopware\Core\Checkout\Cart\Rule\LineItemOfManufacturerRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemOfManufacturerRule.php) | Matches a specific line item that has a specific manufacturer. | +| [Shopware\Core\Checkout\Cart\Rule\LineItemOfTypeRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemOfTypeRule.php) | Matches a specific type name to the line item's type. | +| [Shopware\Core\Checkout\Cart\Rule\LineItemPromotedRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemPromotedRule.php) | Matches if a line item is promoted. | +| [Shopware\Core\Checkout\Cart\Rule\LineItemPropertyRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemPropertyRule.php) | Matches if a line item has a specific property. | +| [Shopware\Core\Checkout\Cart\Rule\LineItemPurchasePriceRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemPurchasePriceRule.php) | Matches if a line item has a specific purchase price. | +| [Shopware\Core\Checkout\Cart\Rule\LineItemReleaseDateRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemReleaseDateRule.php) | Matches a specific line item's release date. | +| [Shopware\Core\Checkout\Cart\Rule\LineItemRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemRule.php) | Matches multiple identifiers to a line item's keys. True if one identifier matches. | +| [Shopware\Core\Checkout\Cart\Rule\LineItemTagRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemTagRule.php) | Matches multiple tags to a line item's tag. True if one tag matches. | +| [Shopware\Core\Checkout\Cart\Rule\LineItemTaxationRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemTaxationRule.php) | Matches if a line item has a specific tax. | +| [Shopware\Core\Checkout\Cart\Rule\LineItemTotalPriceRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemTotalPriceRule.php) | Matches a number to the current cart's line item total price. | +| [Shopware\Core\Checkout\Cart\Rule\LineItemUnitPriceRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemUnitPriceRule.php) | Matches a specific number to a line item's price. | +| [Shopware\Core\Checkout\Cart\Rule\LineItemWithQuantityRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemWithQuantityRule.php) | Matches a specific line item's quantity to the current line item's quantity. | +| [Shopware\Core\Checkout\Cart\Rule\LineItemWrapperRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemWrapperRule.php) | Internally handled scope changes. | +| [Shopware\Core\Checkout\Cart\Rule\LineItemsInCartCountRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemsInCartCountRule.php) | Matches a number to the current cart's line item count. | +| [Shopware\Core\Checkout\Cart\Rule\LineItemsInCartCountRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/LineItemsInCartCountRule.php) | Matches multiple identifiers to a cart's line item identifier. True if one identifier matches. | +| [Shopware\Core\Checkout\Cart\Rule\PaymentMethodRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/PaymentMethodRule.php) | Matches if a specific payment method is used | +| [Shopware\Core\Checkout\Cart\Rule\ShippingMethodRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Cart/Rule/ShippingMethodRule.php) | Matches if a specific shipping method is used | +| [Shopware\Core\Checkout\Customer\Rule\BillingCountryRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Customer/Rule/BillingCountryRule.php) | Matches multiple countries to the customer's active billing address country. | +| [Shopware\Core\Checkout\Customer\Rule\BillingStreetRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Customer/Rule/BillingStreetRule.php) | Matches multiple street names to the customer's active billing address street name. | +| [Shopware\Core\Checkout\Customer\Rule\BillingZipCodeRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Customer/Rule/BillingZipCodeRule.php) | Matches multiple zip codes to the customer's active billing address zip code. | +| [Shopware\Core\Checkout\Customer\Rule\CustomerGroupRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Customer/Rule/CustomerGroupRule.php) | Matches multiple customer groups to the current customer group. True if one customer group matches. | +| [Shopware\Core\Checkout\Customer\Rule\CustomerNumberRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Customer/Rule/CustomerNumberRule.php) | Matches multiple numbers to the active customer's number. | +| [Shopware\Core\Checkout\Customer\Rule\CustomerTagRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Customer/Rule/CustomerTagRule.php) | Matches a tag set to customers | +| [Shopware\Core\Checkout\Customer\Rule\DaysSinceLastOrderRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Customer/Rule/DaysSinceLastOrderRule.php) | Matches a specific number of days to the last order creation date. | +| [Shopware\Core\Checkout\Customer\Rule\DifferentAddressesRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Customer/Rule/DifferentAddressesRule.php) | Matches if the active billing address is not the default. | +| [Shopware\Core\Checkout\Customer\Rule\IsCompanyRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Customer/Rule/IsCompanyRule.php) | Matches if the customer is a company | +| [Shopware\Core\Checkout\Customer\Rule\IsNewCustomerRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Customer/Rule/IsNewCustomerRule.php) | Matches if a customer is new, by matching the `firstLogin` property with today. | +| [Shopware\Core\Checkout\Customer\Rule\LastNameRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Customer/Rule/LastNameRule.php) | Exactly matches a string to the customer's last name. | +| [Shopware\Core\Checkout\Customer\Rule\OrderCountRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Customer/Rule/OrderCountRule.php) | Matches a specific number to the number of orders of the current customer. | +| [Shopware\Core\Checkout\Customer\Rule\ShippingCountryRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Customer/Rule/ShippingCountryRule.php) | Matches multiple countries to the customer's active shipping address country. True if one country matches. | +| [Shopware\Core\Checkout\Customer\Rule\ShippingStreetRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Customer/Rule/ShippingStreetRule.php) | Matches multiple street names to the customer's active shipping address street name. True if one street name matches. | +| [Shopware\Core\Checkout\Customer\Rule\ShippingZipCodeRule](https://github.com/shopware/shopware/blob/trunk/src/Core/Checkout/Customer/Rule/ShippingZipCodeRule.php) | Matches multiple zip codes to the customer's active shipping address zip code. True if one zip code matches. | ## Framework @@ -89,5 +89,5 @@ List of all rule classes across Shopware 6. | EmployeeOrderRule | Matches if the order was placed by an employee | Employee Management | | EmployeeOfBusinessPartnerRule | Matches if the customer is an employee of a specific business partner | Employee Management | | EmployeeRoleRule | Matches if a specific role is assigned to an employee | Employee Management | -| EmployeeStatusRule | Matches if the employee as a specific status | Employee Management | +| EmployeeStatusRule | Matches if the employee has a specific status | Employee Management | | IsEmployeeRule | Matches if the customer is an employee | Employee Management | diff --git a/guides/hosting/installation-updates/deployments/index.md b/guides/hosting/installation-updates/deployments/index.md index 0547cbc4c6..f02ded2d86 100644 --- a/guides/hosting/installation-updates/deployments/index.md +++ b/guides/hosting/installation-updates/deployments/index.md @@ -37,7 +37,7 @@ Apply this approach to keep deployments deterministic and reduce environment-spe ## Custom/Store plugins -Treat plugins as versioned deliverables that integrate cleanly into your deployment workflow (for example via the [Deployment helper](deployment-helper.md)): +Treat plugins as versioned deliverables that integrate cleanly into your deployment workflow (for e.g., via the [Deployment helper](deployment-helper.md)): - Manage extensions via Composer whenever possible. Composer ensures versioned, reproducible installs during deployment. - For Store submission or custom distribution workflows, build versioned ZIP artifacts from CI using the [Extension build command](../../../../products/cli/extension-commands/build.md). Install and activate them via CLI or deployment automation. diff --git a/guides/hosting/installation-updates/extension-management.md b/guides/hosting/installation-updates/extension-management.md index 6d05d0cadd..e1a1344034 100644 --- a/guides/hosting/installation-updates/extension-management.md +++ b/guides/hosting/installation-updates/extension-management.md @@ -7,7 +7,7 @@ nav: # Extension Management -Normally all extensions installed by the Administration will be stored inside `custom/plugins` or `custom/apps`. When you want to update extensions, you have to re-upload the zip file or download the extension from the store using the Extension manager in the administration. +Normally, all extensions installed by the Administration are stored in `custom/plugins` or `custom/apps`. When you want to update extensions, you have to re-upload the zip file or download the extension from the store using the Extension manager in the administration. This way of extension management brings many problems: @@ -19,7 +19,7 @@ This way of extension management brings many problems: ## Installing extensions with Composer -To solve these problems, it is recommended to install all extensions (plugins and apps) with Composer. This way, you can manage all extensions in one place and update them along with Shopware. To get started with Composer, first, you need to authorize your local project with the Shopware Composer Registry. Below are the steps: +To solve these problems, it is recommended to install all extensions (plugins and apps) with Composer. This way, you can manage all extensions in one place and keep them up to date with Shopware. To get started with Composer, first, you need to authorize your local project with the Shopware Composer Registry. Below are the steps: * Login to [account.shopware.com](https://account.shopware.com) and go to your Shop (in Merchant or Account area) * Click on one extension @@ -34,7 +34,7 @@ composer config repositories.shopware-packages '{"type": "composer", "url": "htt composer config bearer.packages.shopware.com ``` -After that, you should have a newly created file `auth.json`, in your project root. This file contains your token and is used by Composer to authenticate against the Shopware Composer Registry. +After that, you should have a newly created file `auth.json` in your project root. This file contains your token and is used by Composer to authenticate against the Shopware Composer Registry. ::: info The `auth.json` should not be committed to the repository and should be ignored by default with the `.gitignore` file. @@ -64,7 +64,7 @@ composer require store.shopware.com/{extension-name} And then delete the source code from `custom/plugins/{extension-name}` or `custom/apps/{extension-name}`. -After that, you must run the below command for Shopware to detect the installed extensions per Composer. +After that, run the command below to have Shopware detect the installed extensions via Composer. ```bash bin/console plugin:refresh @@ -72,23 +72,23 @@ bin/console plugin:refresh ## Enabling Composer class map authoritative -When all extensions are installed with Composer, you can enable the Composer class map authoritative. This will improve the performance of the class loader and is recommended for production environments. -[The class map authoritative, disables the live class lookup when it cannot find the class in a dumped class map.](https://getcomposer.org/doc/articles/autoloader-optimization.md#optimization-level-2-a-authoritative-class-maps) +When all extensions are installed with Composer, you can enable the Composer class map as authoritative. This will improve the class loader's performance and is recommended for production environments. +[The class map is authoritative, disables the live class lookup when it cannot find the class in a dumped class map.](https://getcomposer.org/doc/articles/autoloader-optimization.md#optimization-level-2-a-authoritative-class-maps) ```diff { - "require": { - "shopware/core": "...", - // ... - }, - "config": { - "optimize-autoloader": true, + "require": { + "shopware/core": "...", + // ... + }, + "config": { + "optimize-autoloader": true, + "classmap-authoritative": true - } + } } ``` -And run the below command to re-generate the class loader. +And run the command below to regenerate the class loader. ```bash composer dump-autoload @@ -106,4 +106,4 @@ shopware: runtime_extension_management: false ``` -Next clear the cache once. After doing this, the Extension Manager in the Administration will become read-only, allowing access only to the extension configuration. Additionally, the First Run Wizard will no longer download extensions such as PayPal or the Shopware Store. +Next, clear the cache once. After doing this, the Extension Manager in the Administration will become read-only, allowing access only to the extension configuration. Additionally, the First Run Wizard will no longer download extensions such as PayPal or the Shopware Store. diff --git a/guides/plugins/apps/gateways/checkout/checkout-gateway.md b/guides/plugins/apps/gateways/checkout/checkout-gateway.md index fe40348df1..f1e6167710 100644 --- a/guides/plugins/apps/gateways/checkout/checkout-gateway.md +++ b/guides/plugins/apps/gateways/checkout/checkout-gateway.md @@ -1,28 +1,35 @@ +--- +nav: + title: Checkout Gateway + position: 10 + +--- + # Checkout Gateway ## Context As of Shopware version 6.6.3.0, the Checkout Gateway was introduced. -The Checkout Gateway aims to allow a streamlined implementation for making informed decisions during the checkout process, based on both the cart contents and the current sales channel context. -In particular, the app system benefits from this solution, enabling seamless communication and decision-making on the app server during the checkout. +The Checkout Gateway aims to enable a streamlined approach to making informed decisions during the checkout process, based on both the cart contents and the current sales channel context. +In particular, the app system benefits from this solution, enabling seamless communication and decision-making on the app server during checkout. While this documentation focuses on the app integration of the Checkout Gateway, the design is intended to allow a custom replacement solution via the plugin system." ## Prerequisites -You should be familiar with the concept of Apps, their registration flow as well as signing and verifying requests and responses between Shopware and the App backend server. +You should be familiar with the concept of Apps, their registration flow, and signing and verifying requests and responses between Shopware and the App backend server. - + -Your app server must be also accessible for the Shopware server. +Your app server must also be accessible for the Shopware server. You can use a tunneling service like [ngrok](https://ngrok.com/) for development. ## Manifest configuration To indicate to Shopware that your app uses the checkout gateway, you must provide a `checkout` property inside a `gateways` parent property of your app's `manifest.xml`. -Below, you can see an example definition of a working checkout gateway configuration. +Below is an example definition of a working checkout gateway configuration. ::: code-group @@ -39,11 +46,11 @@ Below, you can see an example definition of a working checkout gateway configura ::: -After successful installation of your app, the checkout gateway will already be used during checkout. +After your app is successfully installed, the checkout gateway will be used during checkout. ## Checkout gateway endpoint -During checkout, Shopware checks for any active checkout gateways and will call the `checkout` url. +During checkout, Shopware checks for any active checkout gateways and calls the `checkout` URL. The app server will receive the current `SalesChannelContext`, `Cart`, and available payment and shipping methods as part of the payload. ::: warning @@ -55,7 +62,7 @@ Be sure that your checkout gateway implementation on your app server responds in Your app server can then respond with a list of commands to manipulate the cart, payment methods, shipping methods, or add cart errors. -You can find a reference of all currently available commands [here](./command-reference.md). +You can find a reference to all currently [available commands](./command-reference.md). Let's assume that your payment method is not available for carts with a total price above 1000€. @@ -71,23 +78,23 @@ Request content is JSON "url": "http:\/\/localhost:8000", "shopId": "hRCw2xo1EDZnLco4", "appVersion": "1.0.0" - }, + }, "cart": { //... - }, + }, "salesChannelContext": { //... - }, + }, "availablePaymentMethods": [ "payment-method-technical-name-1", "payment-method-technical-name-2", // ... - ], + ], "availableShippingMethods": [ "shipping-method-technical-name-1", "shipping-method-technical-name-2", // ... - ] + ] } ``` @@ -96,21 +103,21 @@ And your response could look like this: ```json5 { "commands": [ - { + { "command": "remove-payment-method", "payload": { "paymentMethodTechnicalName": "payment-myApp-payment-method" - } - }, - { + } + }, + { "command": "add-cart-error", "payload": { "message": "Payment method 'My App Payment Method' is not available for carts > 1000€.", "blocking": false, "level": 10, - } - } - ] + } + } + ] } ``` @@ -137,7 +144,7 @@ use Shopware\App\SDK\Shop\ShopResolver; function gatewayController(RequestInterface $request): ResponseInterface { - // injected or build by yourself + // injected or built by yourself $shopResolver = new ShopResolver($repository); $contextResolver = new ContextResolver(); $signer = new ResponseSigner(); @@ -191,7 +198,7 @@ class GatewayController extends AbstractController ) { } - #[Route('/checkout', name: 'checkout', methods: ['POST'])] + #[Route('/checkout', name: 'checkout', methods: ['POST'])] public function checkout(CheckoutGatewayAction $action): Response { /** @var Collection $commands */ @@ -219,4 +226,4 @@ class GatewayController extends AbstractController Plugins can listen to the `Shopware\Core\Checkout\Gateway\Command\Event\CheckoutGatewayCommandsCollectedEvent`. This event is dispatched after the Checkout Gateway has collected all commands from all app servers. -It allows plugins to manipulate the commands before they are executed, based on the same payload the app servers retrieved. +It allows plugins to manipulate the commands before they are executed, based on the same payload that the app servers retrieved. diff --git a/guides/plugins/apps/gateways/checkout/command-reference.md b/guides/plugins/apps/gateways/checkout/command-reference.md index 80c15cdfd3..8551aecdb2 100644 --- a/guides/plugins/apps/gateways/checkout/command-reference.md +++ b/guides/plugins/apps/gateways/checkout/command-reference.md @@ -1,3 +1,10 @@ +--- +nav: + title: Command Reference + position: 11 + +--- + # Checkout Gateway Command Reference | Command | Description | Payload | Since | diff --git a/guides/plugins/apps/gateways/context/command-reference.md b/guides/plugins/apps/gateways/context/command-reference.md index a10071ca9d..7bf3e6eff5 100644 --- a/guides/plugins/apps/gateways/context/command-reference.md +++ b/guides/plugins/apps/gateways/context/command-reference.md @@ -1,44 +1,51 @@ +--- +nav: + title: Context Gateway Command Reference + position: 11 + +--- + # Context Gateway Command Reference ## Available commands | Command | Description | Payload | Since | |:-----------------------------------|:------------------------------------------------------------------------------------------------------|:--------------------------------------------------------|:--------| -| `context_add-customer-message` | Adds an error message to be displayed to the customer in the Storefront via FlashBag messages. | `{"message": "string"}` | 6.7.1.0 | -| `context_change-billing-address` | Changes the billing address of a customer to the specified address ID. | `{"addressId": "string"}` | 6.7.1.0 | -| `context_change-shipping-address` | Changes the shipping address of a customer to the specified address ID. | `{"addressId": "string"}` | 6.7.1.0 | -| `context_change-currency` | Changes the active currency for a customer to the currency with the specified ISO 4217 currency code. | `{"iso": "string"}` | 6.7.1.0 | -| `context_change-language` | Changes the active language for a customer to the language with the specified BCP 47 language tag. | `{"iso": "string"}` | 6.7.1.0 | -| `context_change-payment-method` | Changes the active payment method for a customer to the method with the specified technical name. | `{"technicalName": "string"}` | 6.7.1.0 | -| `context_change-shipping-method` | Changes the active shipping method for a customer to the method with the specified technical name. | `{"technicalName": "string"}` | 6.7.1.0 | -| `context_change-shipping-location` | Changes the active shipping location for a customer to the specified country / country state. | `{"countryIso": "string", "countryStateIso": "string"}` | 6.7.1.0 | -| `context_login-customer` | Logs in an existing customer with the specified email. | `{"customerEmail": "string"}` | 6.7.1.0 | -| `context_register-customer` | Register a new customer with the specified data and log them in. | `{"data": "object (s. RegisterCustomerCommand)"}` | 6.7.1.0 | +| `context_add-customer-message` | Adds an error message to be displayed to the customer in the Storefront via FlashBag messages. | `{"message": "string"}` | 6.7.1.0 | +| `context_change-billing-address` | Changes the billing address of a customer to the specified address ID. | `{"addressId": "string"}` | 6.7.1.0 | +| `context_change-shipping-address` | Changes the shipping address of a customer to the specified address ID. | `{"addressId": "string"}` | 6.7.1.0 | +| `context_change-currency` | Changes the active currency for a customer to the currency with the specified ISO 4217 currency code. | `{"iso": "string"}` | 6.7.1.0 | +| `context_change-language` | Changes the active language for a customer to the language with the specified BCP 47 language tag. | `{"iso": "string"}` | 6.7.1.0 | +| `context_change-payment-method` | Changes the active payment method for a customer to the method with the specified technical name. | `{"technicalName": "string"}` | 6.7.1.0 | +| `context_change-shipping-method` | Changes the active shipping method for a customer to the method with the specified technical name. | `{"technicalName": "string"}` | 6.7.1.0 | +| `context_change-shipping-location` | Changes the active shipping location for a customer to the specified country/country state. | `{"countryIso": "string", "countryStateIso": "string"}` | 6.7.1.0 | +| `context_login-customer` | Logs in an existing customer with the specified email. | `{"customerEmail": "string"}` | 6.7.1.0 | +| `context_register-customer` | Register a new customer with the specified data and log them in. | `{"data": "object (s. RegisterCustomerCommand)"}` | 6.7.1.0 | ## Available data for RegisterCustomerCommand -These properties are available to set in the custom `data` object of the `context_register-customer` command. +These properties can be set in the custom `data` object of the `context_register-customer` command. | Field | Type | Required | Description | |:-------------------------|:-------|:--------------------------|-------------------------------------------------------------------------------------------------------------------------------| -| `title` | string | | The title of the customer, e.g. "Mr." or "Mrs." | -| `accountType` | string | | The type of account, either "private" or "business" | -| `firstName` | string | Yes | The first name of the customer | -| `lastName` | string | Yes | The last name of the customer | -| `email` | string | Yes | The email address of the customer | -| `salutationId` | string | | The ID of the salutation to use for the customer | -| `guest` | bool | | Whether the customer is a guest (default: true) | -| `storefrontUrl` | string | Yes | The storefront URL of the sales channel (You find available domains in the sales channel context -> sales channel -> domains) | -| `requestedGroupId` | string | | The ID of the customer group to assign to the customer | -| `affiliateCode` | string | | The affiliate code to assign to the customer | -| `campaignCode` | string | | The campaign code to assign to the customer | -| `birthdayDay` | int | | The day of the customer's birthday | -| `birthdayMonth` | int | | The month of the customer's birthday | -| `birthdayYear` | int | | The year of the customer's birthday | -| `password` | string | (for non-guest customers) | The password for the customer (plain text, will be hashed by the shop before stored) | -| `billingAddress` | object | Yes | The billing address of the customer, s. `AddressResponseStruct` for available fields | -| `shippingAddress` | object | | The shipping address of the customer, s. `AddressResponseStruct` for available fields | -| `vatIds` | array | | An array of VAT IDs for the customer | +| `title` | string | | The title of the customer, e.g., "Mr." or "Mrs." | +| `accountType` | string | | The type of account, either "private" or "business" | +| `firstName` | string | Yes | The first name of the customer | +| `lastName` | string | Yes | The last name of the customer | +| `email` | string | Yes | The email address of the customer | +| `salutationId` | string | | The ID of the salutation to use for the customer | +| `guest` | bool | | Whether the customer is a guest (default: true) | +| `storefrontUrl` | string | Yes | The storefront URL of the sales channel (You find available domains in the sales channel context -> sales channel -> domains) | +| `requestedGroupId` | string | | The ID of the customer group to assign to the customer | +| `affiliateCode` | string | | The affiliate code to assign to the customer | +| `campaignCode` | string | | The campaign code to assign to the customer | +| `birthdayDay` | int | | The day of the customer's birthday | +| `birthdayMonth` | int | | The month of the customer's birthday | +| `birthdayYear` | int | | The year of the customer's birthday | +| `password` | string | (for non-guest customers) | The password for the customer (plain text, will be hashed by the shop before being stored) | +| `billingAddress` | object | Yes | The billing address of the customer, s. `AddressResponseStruct` for available fields | +| `shippingAddress` | object | | The shipping address of the customer, s. `AddressResponseStruct` for available fields | +| `vatIds` | array | | An array of VAT IDs for the customer | | `acceptedDataProtection` | bool | | Whether the customer has accepted the data protection policy (default: false) | ### AddressResponseStruct @@ -47,17 +54,17 @@ This structure is used for the `billingAddress` and `shippingAddress` fields in | Field | Type | Required | Description | |:-------------------------|:-------|:---------|:------------------------------------------------------| -| `title` | string | | The title of the address, e.g. "Mr." or "Mrs." | -| `firstName` | string | Yes | The first name of the address owner | -| `lastName` | string | Yes | The last name of the address owner | -| `salutationId` | string | | The ID of the salutation to use for the address owner | -| `street` | string | Yes | The street of the address | -| `zipcode` | string | Yes | The ZIP code of the address | -| `city` | string | Yes | The city of the address | -| `company` | string | | The company name for the address | -| `department` | string | | The department name for the address | -| `countryStateId` | string | | The ID of the country state for the address | -| `countryId` | string | Yes | The ID of the country for the address | +| `title` | string | | The title of the address, e.g., "Mr." or "Mrs." | +| `firstName` | string | Yes | The first name of the address owner | +| `lastName` | string | Yes | The last name of the address owner | +| `salutationId` | string | | The ID of the salutation to use for the address owner | +| `street` | string | Yes | The street of the address | +| `zipcode` | string | Yes | The ZIP code of the address | +| `city` | string | Yes | The city of the address | +| `company` | string | | The company name for the address | +| `department` | string | | The department name for the address | +| `countryStateId` | string | | The ID of the country state for the address | +| `countryId` | string | Yes | The ID of the country for the address | | `additionalAddressLine1` | string | | Additional address line 1 | | `additionalAddressLine2` | string | | Additional address line 2 | -| `phoneNumber` | string | | The phone number for the address | +| `phoneNumber` | string | | The phone number for the address | diff --git a/guides/plugins/apps/gateways/context/context-gateway.md b/guides/plugins/apps/gateways/context/context-gateway.md index b4739c7c25..17cf232b6b 100644 --- a/guides/plugins/apps/gateways/context/context-gateway.md +++ b/guides/plugins/apps/gateways/context/context-gateway.md @@ -1,14 +1,20 @@ +--- +nav: + title: Context Gateway + position: 11 + +--- + # Context Gateway -::: danger +:::danger **Security and privacy** -With the Context Gateway, Shopware allows your app to manipulate the customer context, which includes sensitive information like customer addresses, payment methods, and more. +With the Context Gateway, Shopware enables your app to manipulate the customer context, including sensitive information such as customer addresses, payment methods, and more. -It is your responsibility to ensure that the commands are valid and do not compromise the security or privacy of customers. +It is your responsibility to ensure that the commands are valid and do not compromise customer security or privacy. Due to the powerful nature of this feature, it should only be used if your app server is properly secured and the commands it sends are fully trusted and validated. - ::: ## Context @@ -19,9 +25,9 @@ It serves as the bridge between your app’s JavaScript and your app server. ## Prerequisites -You should be familiar with the concept of Apps, their registration flow as well as signing and verifying requests and responses between Shopware and the App backend server. +You should be familiar with the concept of Apps, their registration flow, and signing and verifying requests and responses between Shopware and the App backend server. - + Your app server must also be accessible to the Shopware server. You can use a tunneling service like [ngrok](https://ngrok.com/) for development. @@ -29,7 +35,7 @@ Your app server must also be accessible to the Shopware server. You can use a tu To indicate to Shopware that your app uses the context gateway, you must provide a `context` property inside a `gateways` parent property of your app's `manifest.xml`. -Below, you can see an example definition of a working checkout gateway configuration. +Below is an example definition of a working checkout gateway configuration. ::: code-group @@ -54,7 +60,7 @@ After the successful installation of your app, the context gateway is ready to b To trigger the context gateway, your integration can call the additional Store API route: `store-api.context.gateway`. This endpoint will forward the request to your app server’s context gateway endpoint, which must be [configured in your app's manifest](#manifest-configuration). -To allow the shop to identify your app, the request must include the `appName`, which is defined in your [app’s `manifest.xml`](../../app-base-guide.md#manifest-file). +To allow the shop to identify your app, the request must include the `appName` field, defined in your [app’s `manifest.xml`](../../app-base-guide.md#manifest-file). Your app server will receive the following payload: @@ -75,9 +81,9 @@ Communication between Shopware and your app server is secured via the [app signa ### Storefront Integration -To trigger the context gateway from the Storefront, use the `frontend.gateway.context` endpoint. This route is automatically registered by Shopware. +To trigger the context gateway from the Storefront, use the `frontend.gateway.context` endpoint. Shopware automatically registers this route. -You can include any custom data in the request body - Shopware will forward this data to your app server. +You can include any custom data in the request body; Shopware will forward it to your app server. To simplify this integration, Shopware provides the `ContextGatewayClient` service. This JavaScript client is intended for use within your app and handles communication with the context gateway endpoint. @@ -97,11 +103,11 @@ import ContextGatewayClient from 'src/service/context-gateway-client.service'; export default class MyPlugin extends Plugin { init() { this._registerEvents(); - } + } _registerEvents() { this.el.addEventListener('click', this._onClick.bind(this)); - } + } async _onClick() { // create client with your app name @@ -111,13 +117,13 @@ export default class MyPlugin extends Plugin { const tokenResponse = await gatewayClient.call({ some: 'data', someMore: 'data' }); // either: you can work with the new token or redirect URL - // this means you have to handle the navigation yourself, e.g. reloading the page or redirecting to the URL + // this means you have to handle the navigation yourself, e.g., reloading the page or redirecting to the URL const token = tokenResponse.token; const redirectUrl = tokenResponse.redirectUrl; - // or: if you want shopware to handle the navigation automatically, even supplying an optional custom target path is possible + // or: if you want shopware to handle the navigation automatically, even supplying an optional custom target path is possible, await gatewayClient.navigate(tokenResponse, '/custom/target/path'); - } + } } ``` @@ -129,7 +135,7 @@ export default class MyPlugin extends Plugin { The `customTarget` parameter allows you to optionally control the redirect path used by the `navigate` method. - If `customTarget` is an **absolute path** (starts with `/`), it completely replaces the path portion of the `redirectUrl`. - This can be used to override sales channel sub-paths in the `redirectUrl`. + This can be used to override sales channel sub-paths in the `redirectUrl`. _Example:_ `https://example.com/en` → `https://example.com/custom/target/path` - If `customTarget` is a **relative path**, it is appended to the existing path of the `redirectUrl`. @@ -175,17 +181,17 @@ Request content is JSON "url": "http:\/\/localhost:8000", "shopId": "hRCw2xo1EDZnLco4", "appVersion": "1.0.0" - }, + }, "cart": { //... - }, + }, "salesChannelContext": { //... - }, + }, "data": { "your": "custom data", "appears": "here" - } + } } ``` @@ -194,19 +200,19 @@ And your response could look like this: ```json5 { "commands": [ - { + { "command": "context_change-currency", "payload": { "iso": "GBP" - } - }, - { + } + }, + { "command": "context_change-language", "payload": { "iso": "en-GB", - } - } - ] + } + } + ] } ``` @@ -233,7 +239,7 @@ use Shopware\App\SDK\Shop\ShopResolver; function gatewayController(RequestInterface $request): ResponseInterface { - // injected or build by yourself + // injected or built by yourself $shopResolver = new ShopResolver($repository); $contextResolver = new ContextResolver(); $signer = new ResponseSigner(); @@ -285,7 +291,7 @@ class GatewayController extends AbstractController ) { } - #[Route('/context', name: 'context', methods: ['POST'])] + #[Route('/context', name: 'context', methods: ['POST'])] public function context(ContextGatewayAction $action): Response { /** @var Collection $commands */ @@ -321,15 +327,15 @@ The following checks are enforced: ## Event Plugins can listen to the `Shopware\Core\Framework\Gateway\Context\Command\Event\ContextGatewayCommandsCollectedEvent`. -This event is dispatched after all commands have been collected from the app server and allow plugins to modify or add commands based on the same payload the app received. +This event is dispatched after all commands have been collected from the app server and allows plugins to modify or add commands based on the same payload the app received. ## Special Considerations - The `context_login-customer` command allows your app to log in a customer **without requiring their password**. - Use this feature with caution to uphold the shop’s security and privacy standards. + Use this feature with caution to uphold the shop’s security and privacy standards. - The `context_register-customer` command will create a new customer account and **automatically log them in**. - Make sure to validate the provided data before issuing this command. - See the [RegisterCustomerCommand reference](./command-reference.md#available-data-for-registercustomercommand) for the list of accepted fields. + Make sure to validate the provided data before issuing this command. + See the [RegisterCustomerCommand reference](./command-reference.md#available-data-for-registercustomercommand) for the list of accepted fields. In both cases, your app must ensure that the customer has **explicitly consented** to be registered or logged in. diff --git a/guides/plugins/plugins/administration/administration-reference/directives.md b/guides/plugins/plugins/administration/administration-reference/directives.md index c56269cb39..728d3f3501 100644 --- a/guides/plugins/plugins/administration/administration-reference/directives.md +++ b/guides/plugins/plugins/administration/administration-reference/directives.md @@ -7,16 +7,16 @@ nav: # Directives reference -This is an overview of all the directives registered globally to Vue. Directives are the same as normally in Vue. +This is an overview of all the directives registered globally to Vue. Directives are the same as in Vue. -Check out the [Using directives](../mixins-directives/adding-directives.md) guide or refer to the [directives](https://github.com/shopware/shopware/tree/trunk/src/Administration/Resources/app/administration/src/app/directive) folder in the Git repository. +Check out the [Using Directives](../mixins-directives/adding-directives.md) guide or refer to the [directive](https://github.com/shopware/shopware/tree/trunk/src/Administration/Resources/app/administration/src/app/directive) folder in the Git repository. ## Overview of directives | Name | Task | |--------------|-------------------------------------------------------------| -| `autofocus` | Focuses an `` in an element on insertion. | -| `dragdrop` | Enables the drag and drop functionality of the CMS. | -| `popover` | Directive for automatic edge detection of the element place | +| `autofocus` | Focuses an `` in an element on insertion. | +| `dragdrop` | Enables the drag and drop functionality of the CMS. | +| `popover` | Directive for automatic edge detection of the element place | | `responsive` | Adds methods to add responsive element classes | -| `tooltip` | Provides utility functions to display tooltips. | +| `tooltip` | Provides utility functions to display tooltips. | diff --git a/guides/plugins/plugins/administration/administration-reference/index.md b/guides/plugins/plugins/administration/administration-reference/index.md index 8d707d4b8a..9dcbe8d91c 100644 --- a/guides/plugins/plugins/administration/administration-reference/index.md +++ b/guides/plugins/plugins/administration/administration-reference/index.md @@ -7,7 +7,7 @@ nav: # Administration Reference -Plugins extend the Administration by integrating directly into the Vue-based admin framework. Use these guides when building custom admin modules, components, or extending existing ones. +Plugins extend the Administration by integrating directly into the Vue-based admin framework. Use these guides when building custom admin modules or components, or when extending existing ones. ## Core Concepts diff --git a/guides/plugins/plugins/administration/administration-reference/mixins.md b/guides/plugins/plugins/administration/administration-reference/mixins.md index 127ad86450..286aeb02ff 100644 --- a/guides/plugins/plugins/administration/administration-reference/mixins.md +++ b/guides/plugins/plugins/administration/administration-reference/mixins.md @@ -7,24 +7,25 @@ nav: # Mixins -This is an overview of all the mixins provided by the Shopware 6 Administration. Mixins in the Shopware 6 Administration are essentially the same in default Vue. They behave generally the same as they do in Vue normally, differing only in the registration and the way mixins are included in a component. Learn more about them in the official [Vue documentation](https://vuejs.org/v2/guide/mixins.html). +This is an overview of all the mixins provided by the Shopware 6 Administration. Mixins in the Shopware 6 Administration are essentially the same as the default Vue. They behave generally the same as in Vue, differing only in registration and the way mixins are included in a component. Learn more about them in the official [Vue documentation](https://vuejs.org/v2/guide/mixins.html). -Also take a look at [how to use them in plugins](../mixins-directives/using-mixins.md) and [how to register mixins](../mixins-directives/add-mixins.md). +Also, take a look at [how to use them in plugins](../mixins-directives/using-mixins.md) and [how to register mixins](../mixins-directives/add-mixins.md). ## Overview of all the mixins | Name | Description | Link | | :--- | :--- | :--- | -| `discard-detail-page-changes` | Mixin which resets entity changes on page leave or if the id of the entity changes. This also affects changes in associations of the entity | [link](https://github.com/shopware/shopware/blob/v6.6.9.0/src/Administration/Resources/app/administration/src/app/mixin/discard-detail-page-changes.mixin.ts) | -| `form-field` | This mixin is used to provide common functionality between form fields | [link](https://github.com/shopware/shopware/blob/v6.6.9.0/src/Administration/Resources/app/administration/src/app/mixin/form-field.mixin.ts) | -| `generic-condition` | | [link](https://github.com/shopware/shopware/blob/v6.6.9.0/src/Administration/Resources/app/administration/src/app/mixin/generic-condition.mixin.ts) | -| `listing` | Mixin which is used in almost all listing pages to for example keep track of the current page of the administration | [link](https://github.com/shopware/shopware/blob/v6.6.9.0/src/Administration/Resources/app/administration/src/app/mixin/listing.mixin.ts) | -| `notification` | This mixin is used to create notifications in the administrations more easily | [link](https://github.com/shopware/shopware/blob/v6.6.9.0/src/Administration/Resources/app/administration/src/app/mixin/notification.mixin.ts) | +| `discard-detail-page-changes` | Mixin which resets entity changes on page leave or if the ID of the entity changes. This also affects changes in associations of the entity | [link](https://github.com/shopware/shopware/blob/v6.6.9.0/src/Administration/Resources/app/administration/src/app/mixin/discard-detail-page-changes.mixin.ts) | +| `form-field` | This Mixin is used to provide common functionality between form fields | [link](https://github.com/shopware/shopware/blob/v6.6.9.0/src/Administration/Resources/app/administration/src/app/mixin/form-field.mixin.ts) | +| `generic-condition` | Mixin that provides reusable logic for rendering and handling generic rule/condition UI elements (a base for condition components) in the admin interface | [link](https://github.com/shopware/shopware/blob/v6.6.9.0/src/Administration/Resources/app/administration/src/app/mixin/generic-condition.mixin.ts) | +| `listing` | Mixin which is used in almost all listing pages to, for example, keep track of the current page of the administration | [link](https://github.com/shopware/shopware/blob/v6.6.9.0/src/Administration/Resources/app/administration/src/app/mixin/listing.mixin.ts) | +| `notification` | This Mixin is used to create notifications in the administration more easily | [link](https://github.com/shopware/shopware/blob/v6.6.9.0/src/Administration/Resources/app/administration/src/app/mixin/notification.mixin.ts) | | `placeholder` | Provides a function to localize placeholders | [link](https://github.com/shopware/shopware/blob/v6.6.9.0/src/Administration/Resources/app/administration/src/app/mixin/placeholder.mixin.ts) | | `position` | A Mixin which contains helpers to work with position integers | [link](https://github.com/shopware/shopware/blob/v6.6.9.0/src/Administration/Resources/app/administration/src/app/mixin/position.mixin.ts) | -| `remove-api-error` | This mixin removes API errors e.g. after the user corrected a invalid input i.e. leaving the product name field blank | [link](https://github.com/shopware/shopware/blob/v6.6.9.0/src/Administration/Resources/app/administration/src/app/mixin/remove-api-error.mixin.ts) | +| `remove-api-error` | This Mixin removes API errors e.g., after the user corrected an invalid input, i.e., leaving the product name field blank | [link](https://github.com/shopware/shopware/blob/v6.6.9.0/src/Administration/Resources/app/administration/src/app/mixin/remove-api-error.mixin.ts) | | `rule-container` | Provides common functions between the `sw-condition-or-container` and the `sw-condition-and-container` | [link](https://github.com/shopware/shopware/blob/v6.6.9.0/src/Administration/Resources/app/administration/src/app/mixin/rule-container.mixin.ts) | | `salutation` | A common adapter for the `salutation` filter | [link](https://github.com/shopware/shopware/blob/v6.6.9.0/src/Administration/Resources/app/administration/src/app/mixin/salutation.mixin.ts) | | `sw-inline-snippet` | Makes it possible to use snippets inline | [link](https://github.com/shopware/shopware/blob/v6.6.9.0/src/Administration/Resources/app/administration/src/app/mixin/sw-inline-snippet.mixin.ts) | -| `user-settings` | | [link](https://github.com/shopware/shopware/blob/v6.6.9.0/src/Administration/Resources/app/administration/src/app/mixin/form-field.mixin.ts) | +| `form-field` | Mixin that provides standard form‑field behavior and helpers (including name handling and “inheritance” support) for input components used throughout the admin UI | [link](https://github.com/shopware/shopware/blob/v6.6.9.0/src/Administration/Resources/app/administration/src/app/mixin/form-field.mixin.ts) | +| `user-settings` | adds reusable helpers and reactive support for accessing and managing the current user’s personal settings (e.g., profile preferences like language, UI settings, etc.) | [link](https://github.com/shopware/shopware/blob/v6.6.9.0/src/Administration/Resources/app/administration/src/app/mixin/user-settings.mixin.ts) | | `validation` | Is used to validate inputs in various form fields | [link](https://github.com/shopware/shopware/blob/v6.6.9.0/src/Administration/Resources/app/administration/src/app/mixin/validation.mixin.ts) | diff --git a/guides/plugins/plugins/administration/administration-reference/utils.md b/guides/plugins/plugins/administration/administration-reference/utils.md index 63b02a9fb4..1307b23b32 100644 --- a/guides/plugins/plugins/administration/administration-reference/utils.md +++ b/guides/plugins/plugins/administration/administration-reference/utils.md @@ -15,8 +15,8 @@ Utility functions provide many useful shortcuts for common tasks. For additional | Function | Description | Link | | :--- | :--- | :--- | -| createId | Returns a uuid string in hex format. Generated with [uuid](https://www.npmjs.com/package/uuid) | [link](https://lodash.com/docs/4.17.15#create) | -| throttle | Creates a `throttled` function that only invokes `func` at most once per every `wait` milliseconds. | [link](https://lodash.com/docs/4.17.15#throttle) | +| createId | Returns a UUID string in hex format. Generated with [uuid](https://www.npmjs.com/package/uuid) | [link](https://lodash.com/docs/4.17.15#create) | +| throttle | Creates a `throttled` function that only invokes `func` at most once every `wait` milliseconds. | [link](https://lodash.com/docs/4.17.15#throttle) | | debounce | Creates a `debounced` function that delays invoking `func` until after `wait` milliseconds have elapsed since the last time the `debounced` function was invoked. | [link](https://lodash.com/docs/4.17.15#debounce) | | flow | Creates a function that returns the result of invoking the given functions with the `this` binding of the created function, where each successive invocation is supplied the return value of the previous. | [link](https://lodash.com/docs/4.17.15#flow) | | get | Gets the value at `path` of `object` | [link](https://lodash.com/docs/4.17.15#get) | @@ -30,8 +30,8 @@ Utility functions provide many useful shortcuts for common tasks. For additional | getObjectDiff | Gets a simple recursive diff of two objects. Does not consider an entity schema or entity related logic. | | | getArrayChanges | Check if the compared array has changes. | | | cloneDeep | Creates recursively a clone of value. | [link](https://lodash.com/docs/4.17.15#cloneDeep) | -| merge | This method is like \_.assign except that it recursively merges own and inherited enumerable string keyed properties of source objects into the destination object. | [link](https://lodash.com/docs/4.17.15#merge) | -| mergeWith | This method is like \_.merge except that it accepts customizer which is invoked to produce the merged values of the destination and source properties. | [link](https://lodash.com/docs/4.17.15#mergeWith) | +| merge | This method is like \_.assign except that it recursively merges own and inherited enumerable string-keyed properties of source objects into the destination object. | [link](https://lodash.com/docs/4.17.15#merge) | +| mergeWith | This method is like \_.merge, except that it accepts a customizer, which is invoked to produce the merged values of the destination and source properties. | [link](https://lodash.com/docs/4.17.15#mergeWith) | | deepMergeObject | Deep merge two objects | | | get | Gets the value at `path` of `object` | [link](https://lodash.com/docs/4.17.15#get) | | set | Sets the value at `path` of `object` | [link](https://lodash.com/docs/4.17.15#set) | @@ -41,8 +41,8 @@ Utility functions provide many useful shortcuts for common tasks. For additional | Function | Description | | :--- | :--- | -| warn | General logging function which provides a unified style of log messages for developers. Please keep the log in mind. Messages will be displayed in the developer console when they're running the application in development mode. | -| debug | The same as `warn` but instead of `console.warn` it uses `console.error`. | +| warn | A general logging function that provides a unified style for log messages for developers. Please keep the login in mind. Messages will be displayed in the developer console when the application is running in development mode. | +| debug | The same as `warn`, but instead of `console.warn` it uses `console.error`. | ## Format @@ -70,7 +70,7 @@ Utility functions provide many useful shortcuts for common tasks. For additional | kebabCase | Converts `string` to kebab case. | [link](https://lodash.com/docs/4.17.15#kebabCase) | | snakeCase | Converts `string` to snake case. | [link](https://lodash.com/docs/4.17.15#snakeCase) | | md5 | Generates a md5 hash with [md5-es](https://www.npmjs.com/package/md5-es) of a given value. | | -| isEmptyOrSpaces | Gets if the content of the string is really empty. This does also removes any whitespaces that might exist in the text. | | +| isEmptyOrSpaces | Gets if the content of the string is really empty. This also removes any whitespace in the text. | | | isUrl | Checks if the provided value is a URL | | | isValidIp | Checks if the provided value is an IP with this [Regex](https://regex101.com/r/qHTUIe/1) | | @@ -114,4 +114,4 @@ Utility functions provide many useful shortcuts for common tasks. For additional | flattenDeep | Recursively flattens `array`. | [link](https://lodash.com/docs/4.17.15#flattenDeep) | | remove | Removes all elements from `array` that predicate returns truthy for and returns an array of the removed elements | [link](https://lodash.com/docs/4.17.15#remove) | | slice | Creates a slice of `array` from `start` up to, but not including, `end`. | [link](https://lodash.com/docs/4.17.15#slice) | -| uniqBy | This method is like [`_.uniq`](https://lodash.com/docs/4.17.15#uniq) except that it accepts `iteratee` which is invoked for each element in `array` to generate the criterion by which uniqueness is computed. | [link](https://lodash.com/docs/4.17.15#uniqBy) | +| uniqBy | This method is like [`_.uniq`](https://lodash.com/docs/4.17.15#uniq) except that it accepts `iteratee`, which is invoked for each element in `array` to generate the criterion by which uniqueness is computed. | [link](https://lodash.com/docs/4.17.15#uniqBy) | diff --git a/guides/plugins/plugins/architecture/cart-process.md b/guides/plugins/plugins/architecture/cart-process.md index ba7de3d93c..fa45cf927d 100644 --- a/guides/plugins/plugins/architecture/cart-process.md +++ b/guides/plugins/plugins/architecture/cart-process.md @@ -10,7 +10,7 @@ nav: ## Extension guidelines * `CartProcessorInterface::process()` must not execute queries, as it runs multiple times per request to resolve the dependencies of the elements in the shopping cart. -* The `\Shopware\Core\Checkout\Cart\CartDataCollectorInterface::collect()` method must check whether required data was already loaded. This is to avoid having to unnecessarily execute many queries on the database. loaded data will be appended to `CartDataCollection`. +* The `\Shopware\Core\Checkout\Cart\CartDataCollectorInterface::collect()` method must check whether the required data was already loaded. This is to avoid executing unnecessary queries on the database. loaded data will be appended to `CartDataCollection`. * Line items must be created via a `LineItemFactoryHandler` class. -* All price calculations and adjustments must take place via an appropriate `PriceCalculator`, which are stored inside the `Shopware\Core\Checkout\Cart\Price` class. +* All price calculations and adjustments must take place via an appropriate `PriceCalculator`, which is stored inside the `Shopware\Core\Checkout\Cart\Price` class. * Cart-related functions must be mapped via corresponding Store API routes in the `Shopware\Core\Checkout\Cart\SalesChannel` namespace. diff --git a/guides/plugins/plugins/architecture/context-rules-rule-systems.md b/guides/plugins/plugins/architecture/context-rules-rule-systems.md index 0ed910452e..c1bf8a361a 100644 --- a/guides/plugins/plugins/architecture/context-rules-rule-systems.md +++ b/guides/plugins/plugins/architecture/context-rules-rule-systems.md @@ -8,5 +8,5 @@ nav: # Context Rules and Rule Systems * In a rule, there must never be a query against the database because all configured rules are validated in a request. -* Rules that check for the cart must always support the `\Shopware\Core\Checkout\Cart\Rule\CartRuleScope` class and the `\Shopware\Core\Checkout\Cart\Rule\LineItemScopeclass`. +* Rules that check for the cart must always support the `\Shopware\Core\Checkout\Cart\Rule\CartRuleScope` class and the `\ Shopware\Core\Checkout\Cart\Rule\LineItemScope` class. * Rules may only access data provided in the appropriate scopes. diff --git a/guides/plugins/plugins/architecture/events.md b/guides/plugins/plugins/architecture/events.md index d4eb97c7b2..21129bde9b 100644 --- a/guides/plugins/plugins/architecture/events.md +++ b/guides/plugins/plugins/architecture/events.md @@ -9,4 +9,4 @@ nav: * An event must always implement the `\Shopware\Core\Framework\Event\ShopwareEvent` interface. * Events thrown in the context of a sales channel must always implement the interfaces `ShopwareSalesChannelEvent` and `Shopware\Core\Framework\Event\SalesChannelAware`. -* Events are mostly used to allow developers to load more data. They should, as a rule, not interfere with the program flow. The decoration pattern is intended for influencing the program flow. +* Events are mostly used to allow developers to load more data. They should, as a rule, not interfere with the program flow. The decoration pattern is intended to influence the program flow. diff --git a/guides/plugins/plugins/architecture/pageloader.md b/guides/plugins/plugins/architecture/pageloader.md index f046e415b2..3c2b243e63 100644 --- a/guides/plugins/plugins/architecture/pageloader.md +++ b/guides/plugins/plugins/architecture/pageloader.md @@ -8,8 +8,8 @@ nav: # Page Loader * Pageloaders must be divided into appropriate domains that represent the different sections of the Storefront - "products", "account", etc. -* Each page loader must have an abstract class from which it derives (See [decoration pattern](../../../../resources/references/adr/2020-11-25-decoration-pattern.md)). This pattern can be used to completely replace the page loader in a project. +* Each page loader must have an abstract class from which it derives (See [decoration pattern](../../../../resources/references/adr/2020-11-25-decoration-pattern.md)). This pattern can be used to replace the page loader in a project completely. * Each page loader has a page object to return, in which all the necessary information for the page is present. -* At the end of each pageloader, an individual `PageLoaded` event is thrown. This event can be used to provide further data by third-party developers. +* At the end of each page loader, an individual `PageLoaded` event is thrown. Third-party developers can use this event to provide additional data. * Page loaders are not allowed to work directly with repositories but are only allowed to load data via the Store API. This is to ensure that all storefront functionalities can also be accessed via the Store API. * A Page object must always extend from the base `\Shopware\Storefront\Page\Page` class. From 4a1b1d7f685ebc4326ee5d65ad0c014d79aa08c0 Mon Sep 17 00:00:00 2001 From: sushmangupta Date: Fri, 13 Mar 2026 09:17:02 +0100 Subject: [PATCH 21/22] Update link --- .gitbook.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitbook.yaml b/.gitbook.yaml index 5218a4fd3f..1d747d637b 100644 --- a/.gitbook.yaml +++ b/.gitbook.yaml @@ -170,7 +170,7 @@ redirects: resources/references/administration-reference/index.html: guides/plugins/plugins/administration/administration-reference/index.html resources/references/administration-reference/mixins.html: guides/plugins/plugins/administration/administration-reference/mixins.html resources/references/administration-reference/utils.html: guides/plugins/plugins/administration/administration-reference/utils.html - resources/references/api-reference/index.html: guides/development/troubleshooting/index.html + resources/references/api-reference/index.html: guides/development/integrations-api/index.html resources/references/core-reference/dal-reference/aggregations-reference.html: guides/development/troubleshooting/dal-reference/aggregations-reference.html resources/references/core-reference/dal-reference/fields-reference/enum-field.html: guides/development/troubleshooting/dal-reference/fields-reference/enum-field.html resources/references/core-reference/dal-reference/fields-reference/index.html: guides/development/troubleshooting/dal-reference/fields-reference/index.html From e4557e323b5b077131ac35ca097dd97c47c6731f Mon Sep 17 00:00:00 2001 From: sushmangupta Date: Fri, 13 Mar 2026 10:32:37 +0100 Subject: [PATCH 22/22] removed bound --- .../troubleshooting/dal-reference/aggregations-reference.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/guides/development/troubleshooting/dal-reference/aggregations-reference.md b/guides/development/troubleshooting/dal-reference/aggregations-reference.md index 56e8da01b6..68c486c605 100644 --- a/guides/development/troubleshooting/dal-reference/aggregations-reference.md +++ b/guides/development/troubleshooting/dal-reference/aggregations-reference.md @@ -807,8 +807,6 @@ Response Allows for aggregation of data on a predefined range of values for more flexibility in the DAL - for example, it provides faceted filters on a predefined range. -Bound are computed in SQL as in the Elasticsearch native range aggregation: - * `from` will be compared with greater than or equal to * `to` will be compared with lower than