diff --git a/.wordlist.txt b/.wordlist.txt index d2d38dc419..8c9066742f 100644 --- a/.wordlist.txt +++ b/.wordlist.txt @@ -1678,6 +1678,7 @@ landingpage lang lavinmq lazysizes +learnings libxml lifecycle lifecycles diff --git a/guides/development/testing/legacy/cypress/cypress-best-practises.md b/guides/development/testing/legacy/cypress/cypress-best-practises.md index 11d956c913..5539b79ed5 100644 --- a/guides/development/testing/legacy/cypress/cypress-best-practises.md +++ b/guides/development/testing/legacy/cypress/cypress-best-practises.md @@ -21,13 +21,7 @@ We strongly recommend following Cypress's own best practices as well. ### Video -When it comes to dividing test types, selecting and prioritizing test cases, and thus designing tests, things get a bit more complicated. We have generally aligned our test strategy with the test pyramid, although not 100%. The pyramid states that end-to-end tests should be written in a few but well-chosen test cases because end-to-end tests are slow and expensive. - -At [Shopware Community Day](https://scd.shopware.com/en-US/) 2020, we gave a talk on how we approach automated testing in Shopware, how far we have come on this journey, and what we have gained so far: - - - -To sum it up briefly, the end-to-end tests are slow and thus expensive to maintain. That is why we need a way to prioritize our test cases. +When it comes to dividing test types, selecting and prioritizing test cases, and thus designing tests, things get a bit more complicated. We have generally aligned our test strategy with the test pyramid, although not 100%. The pyramid states that end-to-end tests should be written in a few but well-chosen test cases because end-to-end tests are slow and expensive. That is why we need a way to prioritize our test cases. ### When should I write an end-to-end test diff --git a/guides/plugins/plugins/bundle.md b/guides/plugins/plugins/bundle.md index 1790b3098a..68aac8558b 100644 --- a/guides/plugins/plugins/bundle.md +++ b/guides/plugins/plugins/bundle.md @@ -214,4 +214,10 @@ Also check out these useful videos: * [Bundle Methods in a plugin](https://www.youtube.com/watch?v=cUXcDwQwmPk) * [Symfony services in Shopware 6](https://www.youtube.com/watch?v=l5QJ8EtilaY) -* The free online training ["Shopware 6 Backend Development"](https://academy.shopware.com/courses/shopware-6-backend-development-with-jisse-reitsma) + +For related Academy learnings on plugin lifecycle and services, see + +* **[Plugin Lifecycle Management](https://hub.shopware.com/learn/unit/plugin-lifecycle-management)** +* **[Dependency Injection and Services](https://hub.shopware.com/learn/unit/dependency-injection-and-services)** + +from the free **Shopware Backend Development Intermediate** learning path. diff --git a/guides/plugins/plugins/database/database-migrations.md b/guides/plugins/plugins/database/database-migrations.md index 5feb39a5b2..a69a720cbe 100644 --- a/guides/plugins/plugins/database/database-migrations.md +++ b/guides/plugins/plugins/database/database-migrations.md @@ -14,7 +14,10 @@ Migrations are PHP classes used to manage incremental database schema changes. S To add your own database migrations for your plugin, you first need a plugin as a base. Therefore, you can refer to the [Plugin Base Guide](../plugin-base-guide.md). ::: info -Refer to this video on **[Database migrations](https://www.youtube.com/watch?v=__pWwaK6lxw)**. Also, available on our free online training ["Shopware 6 Backend Development"](https://academy.shopware.com/courses/shopware-6-backend-development-with-jisse-reitsma). +For more free learning, refer to our learning path - **Shopware Backend Development Intermediate** + +- **[Plugin Lifecycle Management](https://hub.shopware.com/learn/unit/plugin-lifecycle-management)** for plugin lifecycle and migration handling, +- **[Creating Entities](https://hub.shopware.com/learn/unit/creating-entities)** for migrations generated from custom entity definitions. ::: ## File structure @@ -87,8 +90,8 @@ class Migration1611740369ExampleDescription extends MigrationStep As you can see, your migration contains two methods: -* `getCreationTimestamp()` -* `update()` +- `getCreationTimestamp()` +- `update()` There is no need to change `getCreationTimestamp()`, it returns the timestamp that's also part of the file name. Implement **all** schema and data changes for the plugin in `update()`. That method is what Shopware runs automatically when the plugin is installed or updated. diff --git a/guides/plugins/plugins/framework/data-handling/add-data-translations.md b/guides/plugins/plugins/framework/data-handling/add-data-translations.md index 380d90b8a2..6ca53ce81b 100644 --- a/guides/plugins/plugins/framework/data-handling/add-data-translations.md +++ b/guides/plugins/plugins/framework/data-handling/add-data-translations.md @@ -20,7 +20,7 @@ This guide is built upon the [Plugin base guide](../../plugin-base-guide), but a In order to create data translations you need an existing entity, as this guide is based on the [Adding custom complex data](add-custom-complex-data) guide, you should have a look at it first. ::: info -Refer to this video on **[Translating your entity](https://www.youtube.com/watch?v=FfqxfQl3I4w)** that deals with data translations. Also available on our free online training ["Shopware 6 Backend Development"](https://academy.shopware.com/courses/shopware-6-backend-development-with-jisse-reitsma). +For Academy learning content on custom entities and translations, see our free learning path **["Shopware 6 Backend Development Intermediate"](https://hub.shopware.com/learn/path/shopware-backend-development-intermediate)**. ::: ## Creating the migration diff --git a/guides/plugins/plugins/framework/data-handling/writing-data.md b/guides/plugins/plugins/framework/data-handling/writing-data.md index f1ba01248e..bcd9d5c0e2 100644 --- a/guides/plugins/plugins/framework/data-handling/writing-data.md +++ b/guides/plugins/plugins/framework/data-handling/writing-data.md @@ -18,7 +18,7 @@ This guide is built upon the [Plugin base guide](../../plugin-base-guide.md), so You also might want to have a look at the concept behind the [Data abstraction layer](../../../../../concepts/framework/data-abstraction-layer.md) first to get a better grasp of how it works. ::: info -Refer to this video on **[Using repositories](https://www.youtube.com/watch?v=b3wOs_OWvP0)** that covers the basics of repositories. Also available on our free online training ["Shopware 6 Backend Development"](https://academy.shopware.com/courses/shopware-6-backend-development-with-jisse-reitsma). +For Academy learning content on events, subscribers, and dependency injection, refer to this free course **[Data Abstraction Layer](https://hub.shopware.com/learn/course/data-abstraction-layer)** from **Shopware Backend Development Intermediate** learning path. ::: ## Writing data diff --git a/guides/plugins/plugins/framework/event/add-custom-event.md b/guides/plugins/plugins/framework/event/add-custom-event.md index 84107f9173..aa6ded210c 100644 --- a/guides/plugins/plugins/framework/event/add-custom-event.md +++ b/guides/plugins/plugins/framework/event/add-custom-event.md @@ -16,7 +16,7 @@ In this guide, you will learn how to create your own event. You can read more ab To create your own event for your plugin, you first need a plugin as base. Therefore, you can refer to the [Plugin Base Guide](../../plugin-base-guide). ::: info -Refer to this video on **[Event dispatching and handling](https://www.youtube.com/watch?v=JBpa5nBoC78)** which is a live coding example on custom events. Also available on our free online training ["Shopware 6 Backend Development"](https://academy.shopware.com/courses/shopware-6-backend-development-with-jisse-reitsma). +For Academy learning content on events, subscribers, and dependency injection, refer to this free course **[Events and DI](https://hub.shopware.com/learn/course/events-and-di)** from **Shopware Backend Development Intermediate** learning path. ::: ## Event interfaces and classes diff --git a/guides/plugins/plugins/framework/event/listening-to-events.md b/guides/plugins/plugins/framework/event/listening-to-events.md index 0855bb734d..68c6b199dc 100644 --- a/guides/plugins/plugins/framework/event/listening-to-events.md +++ b/guides/plugins/plugins/framework/event/listening-to-events.md @@ -25,8 +25,7 @@ In order to build your own subscriber for your plugin, of course, you first need To create your own plugin, you can refer to the [Plugin Base Guide](../../plugin-base-guide.md). ::: info -Refer to this video on **[Live coding example with product.loaded event](https://www.youtube.com/watch?v=cJDaiuyjKJk)**. -Also, available on our free online training ["Shopware 6 Backend Development"](https://academy.shopware.com/courses/shopware-6-backend-development-with-jisse-reitsma). +For Academy learning content on Shopware events, subscribers, and dependency injection, refer to our free course **[Events and DI](https://hub.shopware.com/learn/course/events-and-di)** from **Shopware Backend Development Intermediate** learning path. ::: ## Creating your own subscriber diff --git a/guides/plugins/plugins/plugin-fundamentals/add-plugin-configuration.md b/guides/plugins/plugins/plugin-fundamentals/add-plugin-configuration.md index 657606864a..adcafebafb 100644 --- a/guides/plugins/plugins/plugin-fundamentals/add-plugin-configuration.md +++ b/guides/plugins/plugins/plugin-fundamentals/add-plugin-configuration.md @@ -20,7 +20,7 @@ A running plugin. Review the [Plugin Base Guide](../plugin-base-guide.md) for in ## Create your plugin configuration ::: info -This video is part of the free Shopware Academy online training ["Backend Development"](https://academy.shopware.com/courses/shopware-6-backend-development-with-jisse-reitsma). +For Academy learning content on defining plugin configuration with `config.xml`, refer to this free course **[Plugin Configuration](https://hub.shopware.com/learn/unit/plugin-configuration)** from **Shopware Backend Development Essentials** learning path. ::: Create `src/Resources/config/config.xml` inside your plugin. The content of the `config.xml` will be dynamically rendered in the Administration. Start with a simple text field first; the available field types and advanced options are listed below. diff --git a/guides/plugins/plugins/plugin-fundamentals/add-scheduled-task.md b/guides/plugins/plugins/plugin-fundamentals/add-scheduled-task.md index 1f9109c277..9a5e612d5a 100644 --- a/guides/plugins/plugins/plugin-fundamentals/add-scheduled-task.md +++ b/guides/plugins/plugins/plugin-fundamentals/add-scheduled-task.md @@ -14,7 +14,7 @@ Quite often one might want to run any type of code on a regular basis, e.g. to c This guide builds on the [Plugin Base Guide](../plugin-base-guide.md). Familiarity with `services.php` is helpful — see [Dependency Injection](../services/dependency-injection.md) and [Creating a service](../services/add-custom-service.md). ::: info -Refer to this video on **[Adding scheduled tasks](https://www.youtube.com/watch?v=88S9P3x6wYE)**. Also, available on our free online training ["Shopware 6 Backend Development"](https://academy.shopware.com/courses/shopware-6-backend-development-with-jisse-reitsma). +Refer to this video on **[Adding scheduled tasks](https://www.youtube.com/watch?v=88S9P3x6wYE)**. Also, available on our free online training ["Shopware 6 Backend Development"](https://hub.shopware.com/learn/path/shopware-backend-development-intermediate). ::: ## Registering a scheduled task in the DI container diff --git a/guides/plugins/plugins/plugin-fundamentals/plugin-lifecycle.md b/guides/plugins/plugins/plugin-fundamentals/plugin-lifecycle.md index 6e062c1de7..4e89310f93 100644 --- a/guides/plugins/plugins/plugin-fundamentals/plugin-lifecycle.md +++ b/guides/plugins/plugins/plugin-fundamentals/plugin-lifecycle.md @@ -180,7 +180,7 @@ public function uninstall(UninstallContext $context): void ``` ::: info -Refer to this video on **[Uninstalling a plugin](https://www.youtube.com/watch?v=v9OXrUJzC1I)** when dealing with plugin uninstall routines. Also available on our free online training ["Shopware 6 Backend Development"](https://academy.shopware.com/courses/shopware-6-backend-development-with-jisse-reitsma). +For Academy learning content on plugin lifecycle methods, updates, migrations, and uninstall cleanup, refer to this free course **[Plugin Lifecycle Management](https://hub.shopware.com/learn/unit/plugin-lifecycle-management)** from **Shopware Backend Development Intermediate** learning path. ::: ## Next steps diff --git a/guides/plugins/plugins/services/adjusting-service.md b/guides/plugins/plugins/services/adjusting-service.md index 35e4c850da..e5270f74d9 100644 --- a/guides/plugins/plugins/services/adjusting-service.md +++ b/guides/plugins/plugins/services/adjusting-service.md @@ -18,7 +18,7 @@ This guide explains how to adjust a service using decoration. For more details, This guide builds on the [Plugin Base Guide](../plugin-base-guide.md). ::: info -Refer to this video on **[Decorating services](https://www.youtube.com/watch?v=Rgf4c9rd1kw)** explaining service decorations with an easy example. Also available on our free online training ["Shopware 6 Backend Development"](https://academy.shopware.com/courses/shopware-6-backend-development-with-jisse-reitsma). +For Academy learning content on dependency injection, services, and service decoration, refer to this free course **[Dependency Injection and Services](https://hub.shopware.com/learn/unit/dependency-injection-and-services)** from **Shopware Backend Development Intermediate** learning path. ::: ## Decorating the service diff --git a/guides/plugins/plugins/services/dependency-injection.md b/guides/plugins/plugins/services/dependency-injection.md index ba1f4ae506..cfd9889ad5 100644 --- a/guides/plugins/plugins/services/dependency-injection.md +++ b/guides/plugins/plugins/services/dependency-injection.md @@ -14,8 +14,7 @@ This guide explains how to inject services into other services. For more details This guide builds on the [Plugin Base Guide](../plugin-base-guide.md) and requires a working service — see [Add Custom Service](add-custom-service.md). ::: info -Refer to this video on **[Injecting services into a command](https://www.youtube.com/watch?v=Z4kyx9J1xaQ)** explaining DI based on the example of a custom CLI command. -It is also available on our free online training ["Shopware 6 Backend Development"](https://academy.shopware.com/courses/shopware-6-backend-development-with-jisse-reitsma). +For Academy learning content on dependency injection, service registration, constructor injection, and service decoration, refer to this free course **[Dependency Injection and Services](https://hub.shopware.com/learn/unit/dependency-injection-and-services)** from **Shopware Backend Development Intermediate** learning path. ::: ## Injecting another service diff --git a/guides/plugins/plugins/storefront/controllers/add-custom-controller.md b/guides/plugins/plugins/storefront/controllers/add-custom-controller.md index c154d2d8fe..421d5d0b14 100644 --- a/guides/plugins/plugins/storefront/controllers/add-custom-controller.md +++ b/guides/plugins/plugins/storefront/controllers/add-custom-controller.md @@ -17,8 +17,7 @@ In order to add your own controller for your plugin, you first need a plugin as Therefore, you can refer to the [Plugin Base Guide](../../plugin-base-guide.md). ::: info -Refer to this video on **[Common Storefront controller tasks](https://www.youtube.com/watch?v=5eXXNh4cQG0)** explaining the basics about Storefront controllers. -Available also on our free online training ["Shopware 6 Backend Development"](https://academy.shopware.com/courses/shopware-6-backend-development-with-jisse-reitsma). +For current Academy learning content on connecting a Storefront controller with routes, service registration, and Twig template output, refer to this free course **[Storefront Controller: Routes, Services, and Template](https://hub.shopware.com/learn/unit/storefront-controller-routes-services-and-template)** from **Shopware Backend Development Essentials** learning path. ::: ## Adding custom Storefront controller diff --git a/guides/plugins/plugins/storefront/controllers/add-dynamic-content-via-ajax-calls.md b/guides/plugins/plugins/storefront/controllers/add-dynamic-content-via-ajax-calls.md index 16e19869ea..5c87609f20 100644 --- a/guides/plugins/plugins/storefront/controllers/add-dynamic-content-via-ajax-calls.md +++ b/guides/plugins/plugins/storefront/controllers/add-dynamic-content-via-ajax-calls.md @@ -17,8 +17,11 @@ It combines and builds upon the guides about [adding custom JavaScript](../javas For this guide we will use a very simple controller that returns a timestamp wrapped in the JSON format. ::: info -Refer to this video on **[Creating a JSON controller](https://www.youtube.com/watch?v=VzREUDdpZ3E)** dealing with the creation of a controller that returns JSON data. -Available also on our free online training ["Shopware 6 Backend Development"](https://academy.shopware.com/courses/shopware-6-backend-development-with-jisse-reitsma). +For related free Academy courses, see: + +- **[Storefront Controller: Routes, Services, and Template](https://hub.shopware.com/learn/unit/storefront-controller-routes-services-and-template)** from the **Shopware Backend Development Essentials** learning path. +- **[Custom JavaScript](https://hub.shopware.com/learn/unit/custom-js)** from the **Shopware Frontend Development Essentials** learning path. +- **[Storefront Core Features](https://hub.shopware.com/learn/unit/storefront-core-features)** from the **Shopware Frontend Development Intermediate** learning path. ::: As mentioned before this guide builds up upon the [adding a custom controller](../controllers/add-custom-controller.md) guide. diff --git a/index.md b/index.md index 2644612cdf..ad0c89e857 100644 --- a/index.md +++ b/index.md @@ -12,7 +12,9 @@ Whereas **Concepts** convey the ideas, inner workings and architectural consider These two sections are complemented by the **References**, which contain structured code references, lists of flags, commands, endpoints which are useful for development. -Visit the [academy](https://academy.shopware.com/collections?category=developer-sw6) for video content. If you have any questions left, you can always ask them on [StackOverflow](https://stackoverflow.com/questions/tagged/shopware6?tab=Newest) or join our awesome community on [Discord](https://discord.com/channels/1308047705309708348/1309107911175176217). +Visit the [Academy in the Community Hub](https://hub.shopware.com/learn) for guided learning content. + +If you have any questions left, you can always ask them on [StackOverflow](https://stackoverflow.com/questions/tagged/shopware6?tab=Newest) or join our awesome community on [Discord](https://discord.com/channels/1308047705309708348/1309107911175176217). To begin developing, [start here with our installation guide](guides/installation/index.md).