diff --git a/.markdownlint-cli2.yaml b/.markdownlint-cli2.yaml
index 24285ca881..0efe81ec64 100644
--- a/.markdownlint-cli2.yaml
+++ b/.markdownlint-cli2.yaml
@@ -18,27 +18,27 @@ config:
blanks-around-tables: true
descriptive-link-text: true
# table-column-style: aligned
-# link-fragments: true
-# no-alt-text: true
+ link-fragments: true
+ no-alt-text: true
single-trailing-newline: true
# no-emphasis-as-heading: true
no-space-in-code: true
no-space-in-links: true
fenced-code-language: true
-# first-line-heading: true
-# ol-prefix: one_or_ordered
-# list-marker-space: true
-# blanks-around-fences: true
+ first-line-heading: true
+ ol-prefix: one_or_ordered
+ list-marker-space: true
+ blanks-around-fences: true
blanks-around-lists: true
-# single-title: true
+ single-title: true
no-trailing-punctuation:
punctuation: [".", ":", ";",]
-# no-multiple-space-atx: true
-# blanks-around-headings: true
+ no-multiple-space-atx: true
+ blanks-around-headings: true
# heading-increment: true
-# ul-style: dash
-# ul-indent:
-# indent: 4
+ ul-style: dash
+ ul-indent:
+ indent: 4
no-trailing-spaces: true
no-multiple-blanks: true
commands-show-output: true
diff --git a/docs/administration/back_office/back_office_configuration.md b/docs/administration/back_office/back_office_configuration.md
index b033144554..02d1c3970c 100644
--- a/docs/administration/back_office/back_office_configuration.md
+++ b/docs/administration/back_office/back_office_configuration.md
@@ -1,5 +1,4 @@
---
-title: Back office configuration
description: Configure default upload locations, pagination limits, and more settings for the back office.
---
diff --git a/docs/administration/back_office/browser/add_browser_tab.md b/docs/administration/back_office/browser/add_browser_tab.md
index 65461a89c6..951636768d 100644
--- a/docs/administration/back_office/browser/add_browser_tab.md
+++ b/docs/administration/back_office/browser/add_browser_tab.md
@@ -45,6 +45,7 @@ The module governs the creation of the new tab.
## Add tab to webpack config
In `webpack.config.js`, add the following declaration:
+
```js
const ibexaConfigManager = require('./ibexa.webpack.config.manager.js');
```
@@ -91,7 +92,7 @@ Finally, create an image view by adding an `image.js` to `assets/js/image-tab/co
[[= include_file('code_samples/back_office/udw/assets/js/image-tab/components/image.js') =]]
```
-## Add styles
+## Add styles
Ensure that the new tab is styled by adding the following files to `assets/css/`.
diff --git a/docs/administration/dashboard/configure_default_dashboard.md b/docs/administration/dashboard/configure_default_dashboard.md
index 42005eed8a..c05e6839d2 100644
--- a/docs/administration/dashboard/configure_default_dashboard.md
+++ b/docs/administration/dashboard/configure_default_dashboard.md
@@ -1,5 +1,4 @@
---
-title: Default dashboard configuration
description: Configure default dashboard.
edition: experience
---
diff --git a/docs/administration/dashboard/customize_dashboard.md b/docs/administration/dashboard/customize_dashboard.md
index 1df86bc5fb..1148cc74c2 100644
--- a/docs/administration/dashboard/customize_dashboard.md
+++ b/docs/administration/dashboard/customize_dashboard.md
@@ -1,5 +1,4 @@
---
-title: Dashboard customization
description: Customize dashboard.
edition: experience
---
diff --git a/docs/administration/dashboard/php_api_dashboard_service.md b/docs/administration/dashboard/php_api_dashboard_service.md
index 7b3fe5ab0b..fcd17dd47e 100644
--- a/docs/administration/dashboard/php_api_dashboard_service.md
+++ b/docs/administration/dashboard/php_api_dashboard_service.md
@@ -1,5 +1,4 @@
---
-title: Dashboard service's PHP API
description: Use DashboardService to manage dashboards.
edition: experience
---
diff --git a/docs/ai_actions/ai_actions.md b/docs/ai_actions/ai_actions.md
index 1f3adc6df1..cd5b1cf3e9 100644
--- a/docs/ai_actions/ai_actions.md
+++ b/docs/ai_actions/ai_actions.md
@@ -11,7 +11,7 @@ After you configure it, it can generate alt text for images or transform text pa
You can also extend it to perform other tasks or support additional AI services.
-## Getting Started
+## Getting Started
[[= cards([
"ai_actions/ai_actions_guide",
diff --git a/docs/ai_actions/configure_ai_actions.md b/docs/ai_actions/configure_ai_actions.md
index 42bf67b29d..66894e25ff 100644
--- a/docs/ai_actions/configure_ai_actions.md
+++ b/docs/ai_actions/configure_ai_actions.md
@@ -54,9 +54,9 @@ To use the connector with the Anthropic services, you need to create an account,
2. Go to **API keys** and click **Create Key**.
-4. Select the workspace, enter a **Key Name** and click **Add**.
+3. Select the workspace, enter a **Key Name** and click **Add**.
-5. Take a note of the API key, because it is displayed only once.
+4. Take a note of the API key, because it is displayed only once.
Then, in the root folder of your project, modify the `.env` file: add an `ANTHROPIC_API_KEY` variable and populate its value with the API key that you got from the AI service.
@@ -81,6 +81,7 @@ ibexa_connector_anthropic:
claude-sonnet-4-20250514: 'Claude 4 Sonnet (2025-05-14)'
claude-opus-4-20250514: 'Claude Opus 4 (2025-05-14)'
```
+
You can now use the Anthropic connector in your project.
## Configure access to [[= product_name_connect =]]
diff --git a/docs/ai_actions/extend_ai_actions.md b/docs/ai_actions/extend_ai_actions.md
index 877ea7c57f..d7e9885762 100644
--- a/docs/ai_actions/extend_ai_actions.md
+++ b/docs/ai_actions/extend_ai_actions.md
@@ -328,6 +328,7 @@ This template embeds the AI component, but only if a dedicated `transcript` fiel
```
And add it to the SiteAccess configuration for the `admin_group`:
+
``` yaml
[[= include_file('code_samples/ai_actions/config/packages/ibexa_admin_ui.yaml') =]]
```
diff --git a/docs/api/graphql/graphql_queries.md b/docs/api/graphql/graphql_queries.md
index cddb254d99..568c026e74 100644
--- a/docs/api/graphql/graphql_queries.md
+++ b/docs/api/graphql/graphql_queries.md
@@ -345,6 +345,7 @@ Alternatively, you can query the `children` property of an `item` or `content` o
}
}
```
+
Response:
```json
diff --git a/docs/api/rest_api/rest_api_usage/rest_api_usage.md b/docs/api/rest_api/rest_api_usage/rest_api_usage.md
index f196bff85b..6724f767c0 100644
--- a/docs/api/rest_api/rest_api_usage/rest_api_usage.md
+++ b/docs/api/rest_api/rest_api_usage/rest_api_usage.md
@@ -93,12 +93,12 @@ For details, see the [ISO-3166 glossary](https://www.iso.org/glossary-for-iso-31
## REST communication summary
-* A REST route (URI) leads to a REST controller action. A REST route is composed of the root prefix (`ibexa.rest.path_prefix: /api/ibexa/v2`) and a resource path (for example, `/content/objects/{contentId}`).
-* This controller action returns an `Ibexa\Rest\Value` descendant.
+- A REST route (URI) leads to a REST controller action. A REST route is composed of the root prefix (`ibexa.rest.path_prefix: /api/ibexa/v2`) and a resource path (for example, `/content/objects/{contentId}`).
+- This controller action returns an `Ibexa\Rest\Value` descendant.
- This controller action might use the `Request` to build its result according to, for example, GET parameters, the `Accept` HTTP header, or the request payload and its `Content-Type` HTTP header.
- This controller action might wrap its return in a `CachedValue` which contains caching information for the reverse proxies.
-* The `Ibexa\Bundle\Rest\EventListener\ResponseListener` attached to the `kernel.view event` is triggered, and passes the request and the controller action's result to the `AcceptHeaderVisitorDispatcher`.
-* The `AcceptHeaderVisitorDispatcher` matches one of the `regexps` of an `ibexa.rest.output.visitor` service (an `Ibexa\Contracts\Rest\Output\Visitor`). The role of this `Output\Visitor` is to transform the value returned by the controller into XML or JSON output format. To do so, it combines an `Output\Generator` corresponding to the output format and a `ValueObjectVisitorDispatcher`. This `Output\Generator` is also adding the `media-type` attributes.
-* The matched `Output\Visitor` uses its `ValueObjectVisitorDispatcher` to select the right `ValueObjectVisitor` according to the fully qualified class name (FQCN) of the controller result. A `ValueObjectVisitor` is a service tagged `ibexa.rest.output.value_object.visitor` and this tag has a property `type` pointing a FQCN.
-* `ValueObjectVisitor`s recursively help to transform the controller result thanks to the abstraction layer of the `Generator`.
-* The `Output\Visitor` returns the `Response` to send back to the client.
+- The `Ibexa\Bundle\Rest\EventListener\ResponseListener` attached to the `kernel.view event` is triggered, and passes the request and the controller action's result to the `AcceptHeaderVisitorDispatcher`.
+- The `AcceptHeaderVisitorDispatcher` matches one of the `regexps` of an `ibexa.rest.output.visitor` service (an `Ibexa\Contracts\Rest\Output\Visitor`). The role of this `Output\Visitor` is to transform the value returned by the controller into XML or JSON output format. To do so, it combines an `Output\Generator` corresponding to the output format and a `ValueObjectVisitorDispatcher`. This `Output\Generator` is also adding the `media-type` attributes.
+- The matched `Output\Visitor` uses its `ValueObjectVisitorDispatcher` to select the right `ValueObjectVisitor` according to the fully qualified class name (FQCN) of the controller result. A `ValueObjectVisitor` is a service tagged `ibexa.rest.output.value_object.visitor` and this tag has a property `type` pointing a FQCN.
+- `ValueObjectVisitor`s recursively help to transform the controller result thanks to the abstraction layer of the `Generator`.
+- The `Output\Visitor` returns the `Response` to send back to the client.
diff --git a/docs/cdp/cdp_activation/cdp_add_clientside_tracking.md b/docs/cdp/cdp_activation/cdp_add_clientside_tracking.md
index 2e0bfc9e94..4e0c117dee 100644
--- a/docs/cdp/cdp_activation/cdp_add_clientside_tracking.md
+++ b/docs/cdp/cdp_activation/cdp_add_clientside_tracking.md
@@ -16,6 +16,7 @@ For example, add this tracker to the landing page template to track user entranc
```js
raptor.trackEvent('visit', ..., ...);
```
+
or purchases:
```js
diff --git a/docs/cdp/cdp_data_customization.md b/docs/cdp/cdp_data_customization.md
index af66b301a4..67288f6c46 100644
--- a/docs/cdp/cdp_data_customization.md
+++ b/docs/cdp/cdp_data_customization.md
@@ -4,11 +4,11 @@ edition: experience
---
# Data customization
-
+
You can customize user, content, and product data exported to CDP and you can control what field type information you want to export.
By default, custom field types have basic export functionality.
It casts their `Value` object to string, thanks to `\Stringable` implementation.
-
+
## Export additional user data
You can extend user data exported to CDP by attaching custom information, for example user content fields or user preferences.
@@ -51,7 +51,7 @@ The exported user data includes your custom fields:
```
## Export field types
-
+
Field types are exported with metadata, for example, ID, field definition name, type, or value.
You can also provide your own [`\Ibexa\Contracts\Cdp\Export\Content\FieldProcessorInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Cdp-Export-Content-FieldProcessorInterface.html) instance to extend metadata.
The provided implementation has to be defined as a service and tagged with `ibexa.cdp.export.content.field_processor`.
@@ -80,19 +80,20 @@ A common field type is serialized to:
"field_measurement_simple_value_simple_base_unit": 800000000
}
```
-
+
Field identifier is a prefix that is automatically added to each key.
You can only use scalar values.
-
+
### Built in Field Processors for custom field types
-
+
You can provide your own CDP export functionality by using one of the system Field Processors:
#### `\Ibexa\Cdp\Export\Content\FieldProcessor\SkippingFieldProcessor`
-
+
It results in the field type being excluded from the exported payload.
To avoid adding the field type data to the payload, register a new service as follows:
+
```yaml
custom_fieldtype.cdp.export.field_processor:
class: Ibexa\Cdp\Export\Content\FieldProcessor\SkippingFieldProcessor
@@ -102,30 +103,30 @@ custom_fieldtype.cdp.export.field_processor:
tags:
- { name: 'ibexa.cdp.export.content.field_processor', priority: 0 }
```
-
+
## Export field type values
-
+
To customize export of field type values, provide your own [`\Ibexa\Contracts\Cdp\Export\Content\FieldValueProcessorInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Cdp-Export-Content-FieldValueProcessorInterface.html) instance.
New implementation has to be registered as a service manually or by using autoconfiguration.
The service has to use the tag `ibexa.cdp.export.content.field_value_processor`.
You can also provide `priority` property to override other Field Value Processors.
-* `FieldValueProcessorInterface::process` - takes `Field` instance and returns an `array` with scalar values that are applied to export data payload.
+- `FieldValueProcessorInterface::process` - takes `Field` instance and returns an `array` with scalar values that are applied to export data payload.
If the field type returns a single value, provides a `value` key in the array.
You can return multiple values.
-* `FieldValueProcessorInterface::supports` - decides whether `FieldValueProcessor` can work with the `Field`.
+- `FieldValueProcessorInterface::supports` - decides whether `FieldValueProcessor` can work with the `Field`.
### Built in Field Value Processors for custom field types
-
+
Several system Field Value Processors either work by default or can be registered for custom field types:
-
+
#### `\Ibexa\Cdp\Export\Content\FieldValueProcessor\CastToStringFieldValueProcessor`
-
+
This Processor is a default one, as long as no other Processor with higher priority is registered. It makes `\Stringable` implementation of the field type `\Ibexa\Core\FieldType\Value` object to use it as a value in the final payload.
-
+
#### `\Ibexa\Cdp\Export\Content\FieldValueProcessor\JsonHashFieldValueProcessor`
-
+
This Processor generates JSON data from hash representation of the field type (it uses [`\Ibexa\Contracts\Core\FieldType\FieldType::toHash`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-FieldType-FieldType.html#method_toHash) method).
!!! caution
@@ -134,6 +135,7 @@ This Processor generates JSON data from hash representation of the field type (i
To use `JsonHashFieldValueProcessor`, you need to register a new service:
+
```yaml
custom_fieldtype.cdp.export.field_processor:
class: Ibexa\Cdp\Export\Content\FieldValueProcessor\JsonHashFieldValueProcessor
diff --git a/docs/cdp/cdp_data_export_schedule.md b/docs/cdp/cdp_data_export_schedule.md
index 49c94078e5..7054b1091b 100644
--- a/docs/cdp/cdp_data_export_schedule.md
+++ b/docs/cdp/cdp_data_export_schedule.md
@@ -49,19 +49,19 @@ It's important, because each type of content/product must have its own parameter
Accepted options can be listed with the command below:
-* for User:
+- for User:
```bash
php bin/console ibexa:cdp:stream-user-data --help
```
-* for Product:
+- for Product:
```bash
php bin/console ibexa:cdp:stream-product-data --help
```
-* for Content:
+- for Content:
```bash
php bin/console ibexa:cdp:stream-content-data --help
diff --git a/docs/commerce/payment/enable_paypal_payments.md b/docs/commerce/payment/enable_paypal_payments.md
index 3bccfdcdc5..945f4a8606 100644
--- a/docs/commerce/payment/enable_paypal_payments.md
+++ b/docs/commerce/payment/enable_paypal_payments.md
@@ -3,7 +3,7 @@ description: Use Payum to integrate the PayPal payment processing service.
edition: commerce
---
-### Enable PayPal payments with Payum
+# Enable PayPal payments with Payum
By using Payum to integrate PayPal into your application, you can offer your customers a versatile payment processing service that supports various payment methods, including credit cards, debit cards, Pay Later options, and alternative payment methods.
@@ -42,5 +42,4 @@ ibexa:
type:
pp_express_checkout:
name: "Translated PayPal Express Checkout name"
-
```
diff --git a/docs/commerce/payment/payment_method_api.md b/docs/commerce/payment/payment_method_api.md
index 61ff2ee38f..f2a606c6d4 100644
--- a/docs/commerce/payment/payment_method_api.md
+++ b/docs/commerce/payment/payment_method_api.md
@@ -76,6 +76,7 @@ To update payment method information, use the `PaymentMethodServiceInterface::up
## Delete payment method
To delete a payment method from the system, use the `PaymentMethodService::deletePayment` method:
+
``` php
[[= include_file('code_samples/api/commerce/src/Command/PaymentMethodCommand.php', 95, 101) =]]
```
diff --git a/docs/commerce/shipping_management/shipment_api.md b/docs/commerce/shipping_management/shipment_api.md
index da7ccef968..8701409d65 100644
--- a/docs/commerce/shipping_management/shipment_api.md
+++ b/docs/commerce/shipping_management/shipment_api.md
@@ -53,6 +53,7 @@ To update shipment information, use the `ShipmentService::updateShipment` method
``` php
[[= include_file('code_samples/api/commerce/src/Command/ShipmentCommand.php', 105, 116) =]]
```
+
## Delete shipment
To delete a shipment from the system, use the `ShipmentService::deleteShipment` method:
diff --git a/docs/commerce/shopping_list/install_shopping_list.md b/docs/commerce/shopping_list/install_shopping_list.md
index 13d530d9d4..f054801225 100644
--- a/docs/commerce/shopping_list/install_shopping_list.md
+++ b/docs/commerce/shopping_list/install_shopping_list.md
@@ -17,6 +17,7 @@ composer require ibexa/shopping-list
The associated Symfony Flex recipe configures the bundle and its routes.
Check that the following line has been added by the recipe to `config/bundles.php` file's array:
+
```php
Ibexa\Bundle\ShoppingList\IbexaShoppingListBundle::class => ['all' => true],
```
diff --git a/docs/commerce/shopping_list/shopping_list.md b/docs/commerce/shopping_list/shopping_list.md
index 0e194f9abc..5fe7f1870f 100644
--- a/docs/commerce/shopping_list/shopping_list.md
+++ b/docs/commerce/shopping_list/shopping_list.md
@@ -9,7 +9,7 @@ editions: lts-update commerce
A shopping list allows users to save potential purchases, recurring product sets, and other items for future use in the cart.
A user can have several shopping lists, including a default one named "My Wishlist".
-## Getting Started
+## Getting Started
[[= cards([
"commerce/shopping_list/shopping_list_guide",
diff --git a/docs/commerce/shopping_list/shopping_list_api.md b/docs/commerce/shopping_list/shopping_list_api.md
index 1532d523a5..04e337949d 100644
--- a/docs/commerce/shopping_list/shopping_list_api.md
+++ b/docs/commerce/shopping_list/shopping_list_api.md
@@ -64,6 +64,7 @@ dump($list);
$list = $this->shoppingListService->addEntries($list, [new EntryAddStruct($productCode)]);
dump($list);
```
+
When adding array of entries with `ShoppingListService::addEntries()`,
an exception is thrown if at least product is already in the shopping list and no entries are added to the list.
diff --git a/docs/commerce/shopping_list/shopping_list_design.md b/docs/commerce/shopping_list/shopping_list_design.md
index 37a9ae8df8..36a5972b49 100644
--- a/docs/commerce/shopping_list/shopping_list_design.md
+++ b/docs/commerce/shopping_list/shopping_list_design.md
@@ -30,11 +30,13 @@ The following example shows the setup of an "Add to shopping list" widget on a p
For a base product, the variants are listed with an instance of the widget to demonstrate that it can be used several time on the same page.
Create an `assets/js/add-to-shopping-list.ts` that initializes the `ShoppingList` object and imports the script handling the widget interactions:
+
``` ts
[[= include_file('code_samples/shopping_list/add_to_shopping_list/assets/js/add-to-shopping-list.ts') =]]
```
Edit the `webpack.config.js` to enable TypeScript, set the aliases used in `add-to-shopping-list.ts`, and create an entry for it:
+
``` js hl_lines="5-14"
// […]
@@ -64,22 +66,26 @@ Then, you can use the component in your template as in the following example:
To have a more complete example, let's continue with a product full view template which could work on a fresh installation.
In `src/Controller/ProductViewController.php`, create a new controller to add the variants to the product view:
+
``` php hl_lines="24-30"
[[= include_file('code_samples/shopping_list/add_to_shopping_list/src/Controller/ProductViewController.php') =]]
```
In `templates/themes/standard/full/product.html.twig`, create a template to render the product in full view:
+
``` twig hl_lines="7 8 16-18 31-33 44"
[[= include_file('code_samples/shopping_list/add_to_shopping_list/templates/themes/standard/full/product.html.twig') =]]
```
+
Because the component uses global variables, it can't be used directly in a macro.
In `config/packages/views.yaml`, configure the controller and template used to render the product full view:
+
``` yaml hl_lines="7 8"
[[= include_file('code_samples/shopping_list/add_to_shopping_list/config/packages/views.yaml') =]]
```
-
+
## `ShoppingList` JS class and `ibexaShoppingList` global
@@ -153,6 +159,7 @@ shoppingLists_Mockup = {
]
};
```
+
Remember that a `ShoppingList` object like the `window.ibexaShoppingList` has its data updated by the `ShoppingList.createShoppingList` and `ShoppingList.loadShoppingLists` methods.
The following script creates a shopping list, adds a product to it, then refreshes the local `window.ibexaShoppingList.shoppingLists` (as `addShoppingListEntries` method doesn't do it):
diff --git a/docs/content_management/data_migration/data_migration_actions.md b/docs/content_management/data_migration/data_migration_actions.md
index 39c3ec6b52..0b4633b6aa 100644
--- a/docs/content_management/data_migration/data_migration_actions.md
+++ b/docs/content_management/data_migration/data_migration_actions.md
@@ -74,6 +74,7 @@ For more information, see [creating your own Actions](create_data_migration_acti
### Content
mode: Create
+
``` yaml
actions:
- { action: assign_object_state, identifier: locked, groupIdentifier: ibexa_lock }
@@ -82,6 +83,7 @@ mode: Create
```
mode: Update
+
``` yaml
actions:
- { action: assign_parent_location, value: 2 }
@@ -92,12 +94,14 @@ mode: Update
### Content types
mode: Create
+
``` yaml
actions:
- { action: assign_content_type_group, value: 'Media' }
```
mode: Update
+
``` yaml
actions:
- { action: assign_content_type_group, value: 'Media' }
@@ -110,6 +114,7 @@ mode: Update
### Roles
mode: Create and Update
+
``` yaml
actions:
-
@@ -132,6 +137,7 @@ mode: Create and Update
### Users
mode: Create and Update
+
``` yaml
actions:
-
@@ -152,6 +158,7 @@ mode: Create and Update
### User groups
mode: Create and Update
+
``` yaml
actions:
-
@@ -174,6 +181,7 @@ mode: Create and Update
In the `assign_user_group_to_role` action, limitation type section can only use section ID.
mode: Update
+
``` yaml
actions:
-
diff --git a/docs/content_management/data_migration/importing_data.md b/docs/content_management/data_migration/importing_data.md
index 1f46a1dac8..012ffc4ccd 100644
--- a/docs/content_management/data_migration/importing_data.md
+++ b/docs/content_management/data_migration/importing_data.md
@@ -37,9 +37,9 @@ In a migration file, a step is an array item starting with the mandatory propert
Then, the step is described by additional properties depending on its type and mode.
-* See [Available migrations](#available-migrations) for the modes available for each type.
-* See [Migration examples](#migration-examples) to explore what you can do with each type.
-* For a custom migration step, see [Create data migration step](create_data_migration_step.md).
+- See [Available migrations](#available-migrations) for the modes available for each type.
+- See [Migration examples](#migration-examples) to explore what you can do with each type.
+- For a custom migration step, see [Create data migration step](create_data_migration_step.md).
## Available migrations
@@ -521,13 +521,13 @@ When updating a content type, use:
### Discounts
-- The following example shows how you can create a new [discount](discounts_guide.md) in your system:
+The following example shows how you can create a new [discount](discounts_guide.md) in your system:
``` yaml
[[= include_file('code_samples/data_migration/examples/discounts/discount_create.yaml') =]]
```
-- Use the `update` mode to modify an existing discount as in the example below.
+Use the `update` mode to modify an existing discount as in the example below.
The provided conditions overwrite any already existing ones.
``` yaml
diff --git a/docs/content_management/field_types/field_type_reference/taxonomyentryassignmentfield.md b/docs/content_management/field_types/field_type_reference/taxonomyentryassignmentfield.md
index 476c043d1f..fb31d95857 100644
--- a/docs/content_management/field_types/field_type_reference/taxonomyentryassignmentfield.md
+++ b/docs/content_management/field_types/field_type_reference/taxonomyentryassignmentfield.md
@@ -23,6 +23,7 @@ To be able to assign tags to the content, first, you need to add a `TaxonomyEntr
| `array` | array with `Ibexa\Contracts\Taxonomy\Value\TaxonomyEntry` objects under `taxonomy_entries` key and Taxonomy identifier under `taxonomy` key | see below |
Example using an `Ibexa\Taxonomy\FieldType\TaxonomyEntryAssignment\Value` object:
+
``` php
$taxonomyEntry1 = $this->taxonomyService->loadEntryByIdentifier('example_entry', 'tags');
$taxonomyEntry2 = $this->taxonomyService->loadEntryByIdentifier('example_entry_2', 'tags');
@@ -37,6 +38,7 @@ new \Ibexa\Taxonomy\FieldType\TaxonomyEntryAssignment\Value(
```
Example using array:
+
``` php
[
'taxonomy_entries' => [$taxonomyEntry, $taxonomyEntry2], // load entries using TaxonomyService
diff --git a/docs/content_management/field_types/field_type_reference/taxonomyentryfield.md b/docs/content_management/field_types/field_type_reference/taxonomyentryfield.md
index 1fdbb9ec8b..89ee705228 100644
--- a/docs/content_management/field_types/field_type_reference/taxonomyentryfield.md
+++ b/docs/content_management/field_types/field_type_reference/taxonomyentryfield.md
@@ -17,6 +17,7 @@ A `TaxonomyEntry` field accepts an array with an `Ibexa\Contracts\Taxonomy\Value
| `array` | array with an `Ibexa\Contracts\Taxonomy\Value\TaxonomyEntry` object under the `taxonomy_entry` key | see below |
Example using an `Ibexa\Taxonomy\FieldType\TaxonomyEntry\Value` object:
+
``` php
$taxonomyEntry = $this->taxonomyService->loadEntryByIdentifier('example_entry', 'tags');
new \Ibexa\Taxonomy\FieldType\TaxonomyEntry\Value(
@@ -25,7 +26,9 @@ new \Ibexa\Taxonomy\FieldType\TaxonomyEntry\Value(
)
);
```
+
Example using array:
+
``` php
[
'taxonomy_entry' => $taxonomyEntry, // load Entry using TaxonomyService
@@ -54,6 +57,7 @@ $taxonomyEntry = $this->taxonomyService->loadEntryByIdentifier('example_entry',
// Instantiates a checkbox value with a checked state
$taxonomyEntryFieldTypeValue = new TaxonomyEntry\Value($taxonomyEntry);
```
+
#### String representation
`taxonomyEntry` string identifier or empty string if no Taxonomy Entry is selected.
diff --git a/docs/content_management/field_types/field_type_reference/urlfield.md b/docs/content_management/field_types/field_type_reference/urlfield.md
index 5a29baa0e2..8fb5a8506d 100644
--- a/docs/content_management/field_types/field_type_reference/urlfield.md
+++ b/docs/content_management/field_types/field_type_reference/urlfield.md
@@ -45,6 +45,7 @@ It expects two comma-separated strings, corresponding to the link and text.
// Instantiates an Url Value object
$UrlValue = new Url\Value( "https://www.ibexa.co/", "Ibexa" );
```
+
### Hash format
| Key | Type | Description | Example |
diff --git a/docs/content_management/images/add_image_asset_from_dam.md b/docs/content_management/images/add_image_asset_from_dam.md
index 919a578ad2..4aad292f83 100644
--- a/docs/content_management/images/add_image_asset_from_dam.md
+++ b/docs/content_management/images/add_image_asset_from_dam.md
@@ -93,7 +93,7 @@ To extend the DAM support built into [[= product_name =]], you must create a cus
Before you use Wikimedia Commons assets in a production environment, ensure that you comply with their [license requirements](https://commons.wikimedia.org/wiki/Commons:Reusing_content_outside_Wikimedia#How_to_comply_with_a_file's_license_requirements).
-### Create DAM handler
+### Create DAM handler
This class handles searching through Wikimedia Commons for images and fetching image assets.
diff --git a/docs/content_management/images/extend_image_editor.md b/docs/content_management/images/extend_image_editor.md
index 3c780f3dd9..ea28359c2e 100644
--- a/docs/content_management/images/extend_image_editor.md
+++ b/docs/content_management/images/extend_image_editor.md
@@ -38,6 +38,7 @@ In the root directory of your project, modify the `webpack.config.js` file by ad
[[= include_file('code_samples/back_office/image_editor/config/webpack.config.js', 6, 7) =]]//...
[[= include_file('code_samples/back_office/image_editor/config/webpack.config.js', 50, 55) =]]
```
+
At this point you should be able to see a new button in the Image Editor's UI.
!!! tip
diff --git a/docs/content_management/images/images.md b/docs/content_management/images/images.md
index ebae53a376..ab2443c58b 100644
--- a/docs/content_management/images/images.md
+++ b/docs/content_management/images/images.md
@@ -141,8 +141,8 @@ The [`GenericProvider`](https://github.com/ibexa/core/blob/main/src/bundle/Core/
With the [`RemoteProvider`](https://github.com/ibexa/core/blob/main/src/bundle/Core/Imagine/PlaceholderProvider/RemoteProvider.php) you can download placeholders from:
- - remote sources, for example, (see [example 2](#configuration-examples))
- - live version of a site (see [example 3](#configuration-examples))
+- remote sources, for example, (see [example 2](#configuration-examples))
+- live version of a site (see [example 3](#configuration-examples))

diff --git a/docs/content_management/rich_text/extend_online_editor.md b/docs/content_management/rich_text/extend_online_editor.md
index 10a771ab41..c8f5351bfe 100644
--- a/docs/content_management/rich_text/extend_online_editor.md
+++ b/docs/content_management/rich_text/extend_online_editor.md
@@ -206,6 +206,7 @@ The `note_box.html.twig` template wraps the content of the selected text
```
You can now define the custom CSS for this template, for example by using [Webpack Encore and assets](assets.md):
+
``` css
.note {
display: block;
@@ -248,6 +249,7 @@ The `highlight.html.twig` template wraps the content of the selected text
```
You can now define the custom CSS for this template, for example by using [Webpack Encore and assets](assets.md):
+
``` css
.highlight {
background-color: #fcc672;
@@ -462,6 +464,7 @@ window.ibexa.addConfig('richText.CKEditor.extraConfig', {your_custom_config_obje
```
To have `Arrows` category from [previously added Special characters plugin](#add-ckeditor-plugins) on [top of the filter menu](https://ckeditor.com/docs/ckeditor5/latest/features/special-characters.html#ordering-categories):
+
```js
ibexa.addConfig('richText.CKEditor.extraConfig', { specialCharacters: { order: ['Arrows'] } }, true);
```
diff --git a/docs/content_management/taxonomy/taxonomy.md b/docs/content_management/taxonomy/taxonomy.md
index 16420a760a..396bd7b6c5 100644
--- a/docs/content_management/taxonomy/taxonomy.md
+++ b/docs/content_management/taxonomy/taxonomy.md
@@ -18,10 +18,10 @@ The associated content type is `tag`.
## Configuration keys
-* `ibexa_taxonomies` - section responsible for taxonomy structure where you can [configure other taxonomies](#customize-taxonomy-structure)
-* `ibexa_taxonomies.tags.parent_location_remote_id` - Remote ID for location where new content items representing tags are created
-* `ibexa_taxonomies.tags.content_type` - Content type identifier which stands for the tags
-* `ibexa_taxonomies.tags.field_mappings` - field types map of a content type which taxonomy receives information about the tag from.
+- `ibexa_taxonomies` - section responsible for taxonomy structure where you can [configure other taxonomies](#customize-taxonomy-structure)
+- `ibexa_taxonomies.tags.parent_location_remote_id` - Remote ID for location where new content items representing tags are created
+- `ibexa_taxonomies.tags.content_type` - Content type identifier which stands for the tags
+- `ibexa_taxonomies.tags.field_mappings` - field types map of a content type which taxonomy receives information about the tag from.
Three fields are available: `identifier`, `parent` and `name`.
The identifiers correspond to field names defined in the content type. The `name` field is used to automatically generate an identifier.
@@ -42,15 +42,16 @@ Next, under the `ibexa_taxonomy.taxonomies` [key](configuration.md#configuration
Replace `` with the new container's location remote ID.
Translate the configuration identifier in the `ibexa_taxonomy` domain by, for example, creating a `translations/ibexa_taxonomy.en.yaml` file containing the following:
+
```yaml
taxonomy.content_categories: 'Content categories'
```
Then, create a content type with `content_category` identifier and include the following field definitions:
-* `name` of `ibexa_string` type and required. Use this field, as ``, for content name pattern.
-* `category_identifier` of `ibexa_string` type and required.
-* `parent_category` of `ibexa_taxonomy_entry` type and not required. In its Taxonomy drop-down menu, select Content categories (or `taxonomy.content_categories` if no translation has been provided).
+- `name` of `ibexa_string` type and required. Use this field, as ``, for content name pattern.
+- `category_identifier` of `ibexa_string` type and required.
+- `parent_category` of `ibexa_taxonomy_entry` type and not required. In its Taxonomy drop-down menu, select Content categories (or `taxonomy.content_categories` if no translation has been provided).
Finish taxonomy setup by creating a new Content category named Root with identifier `content_categories_root` under the previously created container folder named Content categories.
diff --git a/docs/content_management/url_management/url_management.md b/docs/content_management/url_management/url_management.md
index 22ac26c51b..16c13d011b 100644
--- a/docs/content_management/url_management/url_management.md
+++ b/docs/content_management/url_management/url_management.md
@@ -99,28 +99,7 @@ For more information about [[= product_name_base =]] configuration, see [Configu
### Custom protocol support
You can extend the external URL address validation with a custom protocol.
-To do this, you must provide a service that implements the `Ibexa\Bundle\Core\URLChecker\URLHandlerInterface` interface:
-s
-```php
-
{% endblock %}
```
+
To learn more about creating a menu, see [Add navigation menu](add_navigation_menu.md).
diff --git a/docs/customer_management/create_user_registration_form.md b/docs/customer_management/create_user_registration_form.md
index 7f82c75417..cafa82e7b8 100644
--- a/docs/customer_management/create_user_registration_form.md
+++ b/docs/customer_management/create_user_registration_form.md
@@ -41,6 +41,7 @@ ibexa:
form: '@ibexadesign/user/registration_form.html.twig'
confirmation: '@ibexadesign/user/registration_confirmation.html.twig'
```
+
This defines which templates are used for rendering the registration form and confirmation page.
In the `templates/themes//user/registration_form.html.twig` create the template for registration form.
@@ -89,6 +90,7 @@ Example confirmation form:
{% endblock %}
```
+
To add a link redirecting to the login form, in the page layout template, provide the following code:
```html+twig
diff --git a/docs/discounts/discounts.md b/docs/discounts/discounts.md
index 0fef7f67d4..71c8331b88 100644
--- a/docs/discounts/discounts.md
+++ b/docs/discounts/discounts.md
@@ -13,7 +13,7 @@ After you install it, temporary or permanent discounts can be applied against it
You can also extend the feature, for example, by creating custom pricing rules, application conditions, or changing discount priorities.
-## Getting Started
+## Getting Started
[[= cards([
"discounts/discounts_guide",
diff --git a/docs/getting_started/install_with_ddev.md b/docs/getting_started/install_with_ddev.md
index ab660f3131..2dfbfc30d0 100644
--- a/docs/getting_started/install_with_ddev.md
+++ b/docs/getting_started/install_with_ddev.md
@@ -222,6 +222,7 @@ The following example shows the use of `.env.local` with database configuration:
- Skip step [2. Configure DDEV / Configure database connection](#configure-database-connection).
- Modify step [5. Create [[= product_name =]] project](#5-create-project) to insert the database setting:
+
```bash
ddev composer create-project ibexa/commerce-skeleton --no-install;
echo "DATABASE_URL=mysql://db:db@db:3306/db" >> .env.local;
diff --git a/docs/ibexa_cloud/ibexa_cloud_guide.md b/docs/ibexa_cloud/ibexa_cloud_guide.md
index b85896b1af..cbd9fab944 100644
--- a/docs/ibexa_cloud/ibexa_cloud_guide.md
+++ b/docs/ibexa_cloud/ibexa_cloud_guide.md
@@ -1,6 +1,5 @@
---
description: Learn how to host your application and improve your business processes by using Ibexa Cloud hosting platform.
-title: Ibexa Cloud product guide
month_change: false
---
diff --git a/docs/ibexa_products/ibexa_commerce.md b/docs/ibexa_products/ibexa_commerce.md
index 2a99fc715c..975b9f325e 100644
--- a/docs/ibexa_products/ibexa_commerce.md
+++ b/docs/ibexa_products/ibexa_commerce.md
@@ -1,5 +1,4 @@
---
-title: Ibexa Commerce
description: Explore all of the key features, functionalities, and advantages of Ibexa Commerce, the most powerful edition that Ibexa DXP has to offer.
month_change: false
---
diff --git a/docs/ibexa_products/ibexa_experience.md b/docs/ibexa_products/ibexa_experience.md
index 58534551d2..1da8ef8128 100644
--- a/docs/ibexa_products/ibexa_experience.md
+++ b/docs/ibexa_products/ibexa_experience.md
@@ -1,5 +1,4 @@
---
-title: Ibexa Experience
description: Learn about all the main attributes, features, and benefits of the customer-focused Ibexa Experience edition.
month_change: false
---
diff --git a/docs/ibexa_products/ibexa_headless.md b/docs/ibexa_products/ibexa_headless.md
index f1285f5a2e..df7c8fa03b 100644
--- a/docs/ibexa_products/ibexa_headless.md
+++ b/docs/ibexa_products/ibexa_headless.md
@@ -1,5 +1,4 @@
---
-title: Ibexa Headless
description: Get to know Ibexa Headless - an edition that focuses on content management.
---
diff --git a/docs/infrastructure_and_maintenance/cache/http_cache/context_aware_cache.md b/docs/infrastructure_and_maintenance/cache/http_cache/context_aware_cache.md
index 9d299b4f34..746970e06b 100644
--- a/docs/infrastructure_and_maintenance/cache/http_cache/context_aware_cache.md
+++ b/docs/infrastructure_and_maintenance/cache/http_cache/context_aware_cache.md
@@ -56,9 +56,10 @@ It also varies on `Authorization` to cover any possible basic authorization head
The only known workaround is to make it SiteAccess aware, and have custom VCL logic tied to your SiteAccess matching with Varnish/Fastly, to send the SiteAccess prefix as URI.
+
+
!!! caution "Default options for FOSHttpCacheBundle"
-
The following configuration is defined by default for FOSHttpCacheBundle.
You should not override these settings unless you know what you're doing.
diff --git a/docs/infrastructure_and_maintenance/clustering/clustering_with_aws_s3.md b/docs/infrastructure_and_maintenance/clustering/clustering_with_aws_s3.md
index f172eea19f..9e824cb49f 100644
--- a/docs/infrastructure_and_maintenance/clustering/clustering_with_aws_s3.md
+++ b/docs/infrastructure_and_maintenance/clustering/clustering_with_aws_s3.md
@@ -12,18 +12,18 @@ When setting up clustering, you can use Amazon AWS S3 as a binary handler, meani
## Set up AWS S3 account
-1. Go to and create an account.
+1. Go to and create an account.
An [existing Amazon account can be used](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html#sign-up-for-aws).
-1. [Choose a region](https://docs.aws.amazon.com/storagegateway/latest/vgw/available-regions-intro.html).
+1. [Choose a region](https://docs.aws.amazon.com/storagegateway/latest/vgw/available-regions-intro.html).
The example below uses EU (Ireland): `eu-west-1`
-1. Create a bucket in your chosen region and make note of the bucket name:
+1. Create a bucket in your chosen region and make note of the bucket name:
.
-1. Go to the [IAM Management Console](https://console.aws.amazon.com/iam/home#/users) and create a user.
+1. Go to the [IAM Management Console](https://console.aws.amazon.com/iam/home#/users) and create a user.
See .
-1. Then create a group and assign the user to the group.
-1. Assign policies to the group. The `AmazonS3FullAccess` policy gives read/write access to your bucket.
-1. Still in the IAM console, view the user you created. Click the **Security credentials** tab.
-1. Click "Create access key" and make note of the "Access key ID" and the "Secret access key".
+1. Then create a group and assign the user to the group.
+1. Assign policies to the group. The `AmazonS3FullAccess` policy gives read/write access to your bucket.
+1. Still in the IAM console, view the user you created. Click the **Security credentials** tab.
+1. Click "Create access key" and make note of the "Access key ID" and the "Secret access key".
The secret key cannot be retrieved again after the key has been created, so don't lose it.
(However, you can create new keys if needed.)
diff --git a/docs/infrastructure_and_maintenance/clustering/clustering_with_ddev.md b/docs/infrastructure_and_maintenance/clustering/clustering_with_ddev.md
index 31c8700769..ecbfb8669b 100644
--- a/docs/infrastructure_and_maintenance/clustering/clustering_with_ddev.md
+++ b/docs/infrastructure_and_maintenance/clustering/clustering_with_ddev.md
@@ -218,9 +218,9 @@ You can now check whether Solr works.
For example, the `ddev exec curl -s http://solr:SolrRocks@solr:8983/api/cores/` command:
- - checks whether the `web` server can access the `solr` server
- - checks whether `collection1` exists and its status
- - displays `collection1`'s `numDocs` that shouldn't be zero if indexing worked correctly
+- checks whether the `web` server can access the `solr` server
+- checks whether `collection1` exists and its status
+- displays `collection1`'s `numDocs` that shouldn't be zero if indexing worked correctly
You can access the Solr admin UI from the host by:
diff --git a/docs/infrastructure_and_maintenance/performance.md b/docs/infrastructure_and_maintenance/performance.md
index 69c172c4ae..e70fa88fa6 100644
--- a/docs/infrastructure_and_maintenance/performance.md
+++ b/docs/infrastructure_and_maintenance/performance.md
@@ -113,8 +113,8 @@ To avoid quickly running out of memory while executing such commands you should
buffer_size: 200
```
-1. Run PHP without memory limits: `php -d memory_limit=-1 bin/console `
-1. Disable `xdebug` *(PHP extension to debug/profile php use)* when running the command, this causes php to use much more memory.
+1. Run PHP without memory limits: `php -d memory_limit=-1 bin/console `
+1. Disable `xdebug` *(PHP extension to debug/profile php use)* when running the command, this causes php to use much more memory.
!!! note "Memory still grows"
diff --git a/docs/infrastructure_and_maintenance/request_lifecycle.md b/docs/infrastructure_and_maintenance/request_lifecycle.md
index aa5f9fdd4f..bd403c5ae2 100644
--- a/docs/infrastructure_and_maintenance/request_lifecycle.md
+++ b/docs/infrastructure_and_maintenance/request_lifecycle.md
@@ -173,7 +173,7 @@ The `HttpKernel` retrieves the response attached to the event and continues.
### Summary of events and services
-* event=`kernel.request`
+- event=`kernel.request`
- 45:`ibexa.siteaccess_match_listener`
- `Ibexa\Core\MVC\Symfony\SiteAccess\Router`
- event=`Ibexa\Core\MVC\Symfony\SiteAccess`
@@ -186,18 +186,18 @@ The `HttpKernel` retrieves the response attached to the event and continues.
- `Ibexa\Bundle\Core\Routing\UrlAliasRouter`
- 16:`locale_listener`
- 13:`Ibexa\AdminUi\EventListener\RequestListener`
-* event=`kernel.controller`
+- event=`kernel.controller`
- 10:`Ibexa\Bundle\Core\EventListener\ViewControllerListener`
- `Ibexa\Core\MVC\Symfony\View\Builder\Registry\ControllerMatch`
- tag=`ibexa.view.builder`
- `Ibexa\Core\MVC\Symfony\View\Builder\ContentViewBuilder`
- `Ibexa\Core\MVC\Symfony\View\Configurator\ViewProvider`
-* event=`kernel.controller_arguments`
-* event=`kernel.view`
+- event=`kernel.controller_arguments`
+- event=`kernel.view`
- 0:`Ibexa\Bundle\Core\EventListener\ViewRendererListener`
- `Ibexa\Core\MVC\Symfony\View\Renderer\TemplateRenderer`
-* event=`kernel.response`
-* event=`kernel.terminate`
+- event=`kernel.response`
+- event=`kernel.terminate`
- 0:`Ibexa\Bundle\Core\EventListener\BackgroundIndexingTerminateListener`
### Examples request attributes timeline
diff --git a/docs/multisite/languages/automated_translations.md b/docs/multisite/languages/automated_translations.md
index 5bd9ee10d8..a77011b230 100644
--- a/docs/multisite/languages/automated_translations.md
+++ b/docs/multisite/languages/automated_translations.md
@@ -129,6 +129,7 @@ The following example adds support for automatically translating alternative tex
``` php hl_lines="11-14 16-19 21-27 33-38"
[[= include_file('code_samples/multisite/automated_translation/src/AutomatedTranslation/ImageFieldEncoder.php') =]]
```
+
In this example, the methods are responsible for:
- `canEncode` - deciding whether the field to be encoded is an [Image](imagefield.md) field
diff --git a/docs/multisite/languages/back_office_translations.md b/docs/multisite/languages/back_office_translations.md
index 2cc69f5143..882f984ffb 100644
--- a/docs/multisite/languages/back_office_translations.md
+++ b/docs/multisite/languages/back_office_translations.md
@@ -58,6 +58,7 @@ The method takes as arguments:
- domain of the string
Here's an example:
+
``` php hl_lines="13 14 15"
use Symfony\Component\Translation\TranslatorInterface;
diff --git a/docs/multisite/siteaccess/siteaccess_matching.md b/docs/multisite/siteaccess/siteaccess_matching.md
index 3fc8d0e884..a5ac66f7e3 100644
--- a/docs/multisite/siteaccess/siteaccess_matching.md
+++ b/docs/multisite/siteaccess/siteaccess_matching.md
@@ -185,7 +185,7 @@ ibexa:
Example URL `http://my_site.com:8080/content` matches SiteAccess `site`.
-### `Ibexa\SiteFactory\SiteAccessMatcher` [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
+### `Ibexa\SiteFactory\SiteAccessMatcher` [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]] {#ibexasitefactorysiteaccessmatcher}
Enables the use of [Site Factory](site_factory.md).
Doesn't take any parameters in configuration:
diff --git a/docs/personalization/enable_personalization.md b/docs/personalization/enable_personalization.md
index 4ba7e12eda..c5b764a7ef 100644
--- a/docs/personalization/enable_personalization.md
+++ b/docs/personalization/enable_personalization.md
@@ -219,6 +219,7 @@ The `content` endpoint returns one item and the `contentlist` endpoint returns m
}
}
```
+
### Export item information
To get recommendations you must first export the item information to the Personalization server.
diff --git a/docs/personalization/integrate_recommendation_service.md b/docs/personalization/integrate_recommendation_service.md
index a2049f526c..a6fab7c00e 100644
--- a/docs/personalization/integrate_recommendation_service.md
+++ b/docs/personalization/integrate_recommendation_service.md
@@ -170,8 +170,8 @@ To let your visitors receive emails with recommendations:
Out of many options, it could be an [[= product_name_connect =]] [webhook]([[= connect_doc =]]/tools/webhooks/).
The endpoint must meet the following requirements:
- - must support POST requests
- - must accept JSON objects in a format that resembles the following example:
+- must support POST requests
+- must accept JSON objects in a format that resembles the following example:
``` json
{
diff --git a/docs/pim/attributes/symbol_attribute_type.md b/docs/pim/attributes/symbol_attribute_type.md
index d29643f537..0b4f610ca4 100644
--- a/docs/pim/attributes/symbol_attribute_type.md
+++ b/docs/pim/attributes/symbol_attribute_type.md
@@ -46,6 +46,7 @@ ibexa_product_catalog_symbol_attribute:
- 'MSS-24827'
- 'SEE-15444'
```
+
This following example specifies the format for a "Manufacturer Part Number", defined with the `manufacturer_part_number` identifier.
The pattern is specified using a regular expression.
@@ -78,6 +79,7 @@ services:
- name: ibexa.product_catalog.attribute.symbol.checksum
format: my_format
```
+
The format attribute (`my_format`) is the identifier used under the `ibexa_product_catalog_symbol_attribute.formats` key.
## Search for products with given symbol attribute
diff --git a/docs/release_notes/ez_platform_v1.10.0.md b/docs/release_notes/ez_platform_v1.10.0.md
index 47dd6ed946..38e1fc3908 100644
--- a/docs/release_notes/ez_platform_v1.10.0.md
+++ b/docs/release_notes/ez_platform_v1.10.0.md
@@ -14,7 +14,7 @@ If you're looking for the Long Term Support (LTS) release, see [https://ezplatfo
This release introduces the ability to add tables in the RichText editor, enabling you to list up tabular data using table headings, merged table cells and more.
-
+
This is a first step. We aim to provide more in terms of table support in the editor later. For the time being images and embedding aren't supported within the table, as you won't be able to move them out or edit them. We also don't provide yet ability to style the table within the editor.
@@ -24,7 +24,7 @@ This is a new way to handle design, theming and design overrides, similar to wha
For more information, see [Bundle documentation](https://github.com/ezsystems/ezplatform-design-engine/tree/master/doc).
-
+
#### API: Simplified usage with translations
@@ -75,20 +75,20 @@ Starting with 1.10, a new command `ezplatform:io:migrate-files` has been added
#### Miscellaneous
-- Kernel: Don't store full User object in Sessions anymore, just User Id
+- Kernel: Don't store full User object in Sessions anymore, just User Id
### eZ Platform Enterprise Edition - Studio
-- Form deletion is managed more gracefully, including warnings and the option to download collected data before deleting a form
+- Form deletion is managed more gracefully, including warnings and the option to download collected data before deleting a form

-- Schedule block logic has been updated and improved.
+- Schedule block logic has been updated and improved.
### eZ Platform Enterprise Edition - Studio Demo
-- [NovaeZSEOBundle](https://github.com/Novactive/NovaeZSEOBundle/) is now included in Studio Demo. NovaeZSEOBundle includes a new field type that lets you manage your SEO strategy in very advanced and powerful ways.
-- We also improved the way we provide personalization in the site using a profiling block and letting the end user manage their preferences by themselves. In this new version, the end user, once logged on the site, can access a page where they can define their content preferences.
+- [NovaeZSEOBundle](https://github.com/Novactive/NovaeZSEOBundle/) is now included in Studio Demo. NovaeZSEOBundle includes a new field type that lets you manage your SEO strategy in very advanced and powerful ways.
+- We also improved the way we provide personalization in the site using a profiling block and letting the end user manage their preferences by themselves. In this new version, the end user, once logged on the site, can access a page where they can define their content preferences.
## Full list of new features, improvements and bug fixes since v1.9.0
diff --git a/docs/release_notes/ez_platform_v1.7.0_lts.md b/docs/release_notes/ez_platform_v1.7.0_lts.md
index e41b558ed4..5c5f4a5086 100644
--- a/docs/release_notes/ez_platform_v1.7.0_lts.md
+++ b/docs/release_notes/ez_platform_v1.7.0_lts.md
@@ -18,45 +18,46 @@ With the LTS release, the [new product naming](http://ez.no/Blog/eZ-Announces-Na
### eZ Platform (Open Source)
-- **i18n! Internationalization of the eZ Platform** User Interface is now possible. The new system selects the language to use based on the browser settings of the end user.
+- **i18n! Internationalization of the eZ Platform** User Interface is now possible. The new system selects the language to use based on the browser settings of the end user.
The system makes it possible to create translations for eZ Platform UI.
Studio internationalization and translations ready to use are shipped in further releases.
Community members are more than welcome to contribute to the translation process.
- 
+
+
-- **Universal Discovery Widget** ("UDW") provides a range of small improvements. The most noticeable one is the preview of content which is more usable and also provides a way to get a full preview of the content object.
+- **Universal Discovery Widget** ("UDW") provides a range of small improvements. The most noticeable one is the preview of content which is more usable and also provides a way to get a full preview of the content object.
-
+
-- The **Admin** panel now provides a way to get a clean **digest view of content types** configured in the system, with the ability to clearly get access to properties and field definitions.
+- The **Admin** panel now provides a way to get a clean **digest view of content types** configured in the system, with the ability to clearly get access to properties and field definitions.
-
+
-- The online editor also brings a range of improvements that improve the editorial experience. The most noticeable one is to offer the possibility to switch from Headings to Paragraph styles for the same element.
+- The online editor also brings a range of improvements that improve the editorial experience. The most noticeable one is to offer the possibility to switch from Headings to Paragraph styles for the same element.
##### Notable technical improvements
-- Search:
- - Solr Search Engine: Plugins, extend the Solr index with custom data on Content, Translation and Location block level
- - For when you need to extend the index with additional data not applicable for FieldType custom fields feature
- - *[See Solr Bundle documentation for more info](https://doc.ibexa.co/en/2.5/guide/search/solr/)*
- - Solr Search Engine: Support for FieldRelation on location search
- - Legacy Search Engine: Improve word boundaries detection
- - ezplatform:reindex added, a generic command for reindexing search index on the SiteAccess configured search engine
-- Extensibility:
- - QueryType's now support using alias when being used as service so you can define several services with same QueryType class
- - Example: Generic location child QueryType being reused several times for specific services for article or blog post listings
-- API:
- - New method: `Location->getSortClauses()` to get Sort Clauses based on what kind of sorting has been set on the Location
- - Add Content Version archives limit by configuration & enforce on publish
-- Debug:
- - ez-support-tools:dump-info command now able to dump system info in several formats, and default is now json
- - *Making it more useful for attaching system info when reporting issues*
- - Add SiteAccess collector to debug toolbar
- - Make IO exceptions more user friendly
- - Make it possible to retrieve original exception when repo->commit() fails
+- Search:
+ - Solr Search Engine: Plugins, extend the Solr index with custom data on Content, Translation and Location block level
+ - For when you need to extend the index with additional data not applicable for FieldType custom fields feature
+ - *[See Solr Bundle documentation for more info](https://doc.ibexa.co/en/2.5/guide/search/solr/)*
+ - Solr Search Engine: Support for FieldRelation on location search
+ - Legacy Search Engine: Improve word boundaries detection
+ - ezplatform:reindex added, a generic command for reindexing search index on the SiteAccess configured search engine
+- Extensibility:
+ - QueryType's now support using alias when being used as service so you can define several services with same QueryType class
+ - Example: Generic location child QueryType being reused several times for specific services for article or blog post listings
+- API:
+ - New method: `Location->getSortClauses()` to get Sort Clauses based on what kind of sorting has been set on the Location
+ - Add Content Version archives limit by configuration & enforce on publish
+- Debug:
+ - ez-support-tools:dump-info command now able to dump system info in several formats, and default is now json
+ - *Making it more useful for attaching system info when reporting issues*
+ - Add SiteAccess collector to debug toolbar
+ - Make IO exceptions more user friendly
+ - Make it possible to retrieve original exception when repo->commit() fails
*For more fixes and improvements scroll down for full change log.*
@@ -66,19 +67,19 @@ Community members are more than welcome to contribute to the translation process
The Studio **Personalization Block** available out of the box lets the editor create a block that renders a list of content items personalized to each and every visitor.
The interface lets the editor decide which of the Personalization scenarios configured in the eZ Personalization back end, and also the template for rendering, should be used.
-
+
- You can now take advantage of the **Date-Based Publishing** feature – when editing a draft, instead of publishing the content immediately you can select the date and time at which it's automatically published.
All your content scheduled to be published are accessible in a dedicated widget on the dashboard.
-
+
- Create forms in your landing page with the **Form Builder**.
A special Form Block allows you to add forms with different types of fields to the landing page.
This system has been designed to be extended, so that you can create your own form fields.
The system also provide an interface to access the data that has been collected, and download it as CSV files.
-
+
Submitted results can be previewed in the UI or downloaded in a CSV file, and a designated person is notified of submissions by email.
@@ -89,7 +90,7 @@ The product we used are meals that, in a non-demo ideal world, would be availabl
This ordering part isn't in the demo, nevertheless, the content looks really yummy...
Other improvements includes the good setup of all content type field categories and the demonstration of basic SEO field types. Demo content itself has also been upgraded with more content to better demonstrate the capabilities.
-
+
### Installation
diff --git a/docs/release_notes/ez_platform_v1.8.0.md b/docs/release_notes/ez_platform_v1.8.0.md
index bd560d61c5..e6a21049f4 100644
--- a/docs/release_notes/ez_platform_v1.8.0.md
+++ b/docs/release_notes/ez_platform_v1.8.0.md
@@ -12,36 +12,36 @@ If you're looking for the Long Term Support (LTS) release, see[https://ezplatfor
#### User Interface
-- In Universal Discovery Widget (UDW) the browse view now uses a completely new browser widget, which replaces Treeview. This solves limitations on how many items you can browse for, and provides a more intuitive user experience.
+- In Universal Discovery Widget (UDW) the browse view now uses a completely new browser widget, which replaces Treeview. This solves limitations on how many items you can browse for, and provides a more intuitive user experience.
-
+
-- Improvements in the Online Editor:
- - You now have the ability to rearrange elements in the editor by moving them up and down.
- - You can now add links to internal content items in the Online Editor, decide in which tab the link should open, and set link title:
-- Improvements to the Sub-Items view of a content item: You can now sort content items by clicking column headings
+- Improvements in the Online Editor:
+ - You now have the ability to rearrange elements in the editor by moving them up and down.
+ - You can now add links to internal content items in the Online Editor, decide in which tab the link should open, and set link title:
+- Improvements to the Sub-Items view of a content item: You can now sort content items by clicking column headings
-
+
-- The main titles of the ContentTypeView now expand and retract with an accordion function
-- Updated and added icons for the Admin Interface
-- The whole interface of PlatformUI is now translatable using Crowdin, including in-context translation where you can navigate the interface while translating. A glossary has been established to aid in unified usage of terminology throughout. [Contributions welcome](https://crowdin.com/project/ezplatform)!
+- The main titles of the ContentTypeView now expand and retract with an accordion function
+- Updated and added icons for the Admin Interface
+- The whole interface of PlatformUI is now translatable using Crowdin, including in-context translation where you can navigate the interface while translating. A glossary has been established to aid in unified usage of terminology throughout. [Contributions welcome](https://crowdin.com/project/ezplatform)!
#### Under the Hood
-- New opt-in approach to HttpCache to improve usability and performance by means of:
- - Cache multi-tagging: allowing you to tag pages with, for example, path, location, type, or parent, so the repository can clear cache in a more targeted, accurate, and flexible way, getting rid of any "clear all" situations on complex operations.
- - For Varnish this uses [xkey](https://github.com/varnish/varnish-modules/blob/master/docs/vmod_xkey.rst) instead of BAN, enabling greater performance by allowing you to control grace time.
- - This also places HttpCache in a separate repo, allowing it to grow independently: see
-- New `content/publish` policy to be able to configure `content/edit` rights independently from publish rights
-- Community-provided translations of the user interface may be imported individually to conserve resources
-- Replaced deprecated templating helper assets with assets packages service
-- Localization of handlebar templates
-- Also part of v1.7.1 from the end of January:
- - Solr: Solving last issues in UI hindering relative ranking of search results from working properly
- - API: Respect `defaultAlwaysAvailable` setting on `newContentCreateStruct` solving issues with for instance Kaliop Migrations bundle use
- - Landing pages: Better support for wider range of multi-site setups
- - Online Editor: Ability to change a paragraph to header and back
+- New opt-in approach to HttpCache to improve usability and performance by means of:
+ - Cache multi-tagging: allowing you to tag pages with, for example, path, location, type, or parent, so the repository can clear cache in a more targeted, accurate, and flexible way, getting rid of any "clear all" situations on complex operations.
+ - For Varnish this uses [xkey](https://github.com/varnish/varnish-modules/blob/master/docs/vmod_xkey.rst) instead of BAN, enabling greater performance by allowing you to control grace time.
+ - This also places HttpCache in a separate repo, allowing it to grow independently: see
+- New `content/publish` policy to be able to configure `content/edit` rights independently from publish rights
+- Community-provided translations of the user interface may be imported individually to conserve resources
+- Replaced deprecated templating helper assets with assets packages service
+- Localization of handlebar templates
+- Also part of v1.7.1 from the end of January:
+ - Solr: Solving last issues in UI hindering relative ranking of search results from working properly
+ - API: Respect `defaultAlwaysAvailable` setting on `newContentCreateStruct` solving issues with for instance Kaliop Migrations bundle use
+ - Landing pages: Better support for wider range of multi-site setups
+ - Online Editor: Ability to change a paragraph to header and back
*For the complete list of fixes and improvements, see the GitHub release notes: *
@@ -49,26 +49,26 @@ If you're looking for the Long Term Support (LTS) release, see[https://ezplatfor
#### Studio
-- New fields are available for the Form Builder:
- - URL
- - Date
- - Checkbox
- - Radio
- - Dropdown
- - Captcha
- - File Upload
+- New fields are available for the Form Builder:
+ - URL
+ - Date
+ - Checkbox
+ - Radio
+ - Dropdown
+ - Captcha
+ - File Upload
-
+
#### Under the Hood
-- StudioUI is now fully ready for Internationalization
+- StudioUI is now fully ready for Internationalization
### Updated eZ Platform/EE Demo Distributions
-- You can now search and filter products in the Product Page of the EE Demo distribution:
+- You can now search and filter products in the Product Page of the EE Demo distribution:
-
+
## Full list of new features, improvements and bug fixes since v1.7.0 LTS
diff --git a/docs/release_notes/ez_platform_v1.9.0.md b/docs/release_notes/ez_platform_v1.9.0.md
index b35540397b..cb29c1506d 100644
--- a/docs/release_notes/ez_platform_v1.9.0.md
+++ b/docs/release_notes/ez_platform_v1.9.0.md
@@ -17,7 +17,7 @@ The files are automatically imported as content using the content type that matc
Go to the content view, drag and drop or select multiple files in the sub-items area and you get direct access for further editing.
As ever, this solution can be customized so that you create your own matching rules.
-
+
#### Content browser
@@ -26,26 +26,26 @@ This Content Browser is now used to browse content everywhere, also when accessi
This allows users to reach the entire repository from this toolbar (which was previously limited in terms of number of items per level), it also provides a much more consistent user experience.
To reflect this change, the content tree button has been renamed **Content browse**.
-
+
#### Miscellaneous
-- The **Details** tab in content view now provides information about the Section the content item belongs to.
+- The **Details** tab in content view now provides information about the Section the content item belongs to.

-- You can now edit a content item directly from its parent's Sub-items table, and sort the table:
+- You can now edit a content item directly from its parent's Sub-items table, and sort the table:

-- You can now restore from Trash content whose original Location has been deleted.
-- Pasted thead/tfood tags are now kept in RichText field type, and its Online Editor
-- Solr 6 is now supported in [Solr Bundle](https://doc.ibexa.co/en/latest/guide/search/solr)
+- You can now restore from Trash content whose original Location has been deleted.
+- Pasted thead/tfood tags are now kept in RichText field type, and its Online Editor
+- Solr 6 is now supported in [Solr Bundle](https://doc.ibexa.co/en/latest/guide/search/solr)
### eZ Platform Enterprise Edition - Studio
-- It's now possible to configure landing page blocks used by the landing page editor in a simpler way. The configuration is done in a YAML file
-- *..lots of other bug fixes and smaller improvements..*
+- It's now possible to configure landing page blocks used by the landing page editor in a simpler way. The configuration is done in a YAML file
+- *..lots of other bug fixes and smaller improvements..*
### eZ Platform Enterprise Edition - Studio Demo
@@ -53,12 +53,12 @@ To reflect this change, the content tree button has been renamed **Content brows
The eZ Enterprise Demo now uses the [Netgen Tags bundle](https://github.com/netgen/TagsBundle). This bundle was recently ported to eZ Platform and provides a powerful, solid and user-friendly way to categorize content using tags. The solution lets editors and administrators define their taxonomies in a dedicated interface. These taxonomies that are immediately available for editors working on content who want to categorize any content types.
-
+
#### Miscellaneous
-- As an editor, I want to personalize content based on user persona
-- As an editor, I want to embed a video
+- As an editor, I want to personalize content based on user persona
+- As an editor, I want to embed a video
## Full list of new features, improvements and bug fixes since v1.8.0
diff --git a/docs/release_notes/ez_platform_v3.1.md b/docs/release_notes/ez_platform_v3.1.md
index 35e6f4abab..330a114d03 100644
--- a/docs/release_notes/ez_platform_v3.1.md
+++ b/docs/release_notes/ez_platform_v3.1.md
@@ -45,7 +45,7 @@ This release of eZ Platform introduces the following new features:
You can now filter elements in the sidebar during site creation process to get to the desired blocks faster.
- 
+ 
### Field group permissions
diff --git a/docs/release_notes/ibexa_dxp_v4.0_deprecations.md b/docs/release_notes/ibexa_dxp_v4.0_deprecations.md
index 16f88c73f3..74e38b643a 100644
--- a/docs/release_notes/ibexa_dxp_v4.0_deprecations.md
+++ b/docs/release_notes/ibexa_dxp_v4.0_deprecations.md
@@ -237,6 +237,7 @@ The following Twig functions and filter have been renamed, including:
| `youtube_video_id` | `ibexa_commerce_youtube_video_id` |
## URL Alias route name
+
URL Alias route name has changed from `ez_urlalias` to `ibexa.url.alias`.
## Configuration file names
diff --git a/docs/release_notes/ibexa_dxp_v4.4.md b/docs/release_notes/ibexa_dxp_v4.4.md
index 1815acf729..b7c7d67bb4 100644
--- a/docs/release_notes/ibexa_dxp_v4.4.md
+++ b/docs/release_notes/ibexa_dxp_v4.4.md
@@ -21,7 +21,7 @@ A new welcome page greets you when opening Ibexa Digital Experience Platform.

-### All-new [[= product_name_com =]] packages [[% include 'snippets/commerce_badge.md' %]]
+### All-new [[= product_name_com =]] packages [[% include 'snippets/commerce_badge.md' %]] {#all-new-ibexa-commerce-packages}
This release deprecates all Commerce packages that you've known from previous releases and brings a redesigned and reconstructed Commerce offering:
diff --git a/docs/release_notes/ibexa_dxp_v4.6.md b/docs/release_notes/ibexa_dxp_v4.6.md
index e96dd515c4..5c90a287ae 100644
--- a/docs/release_notes/ibexa_dxp_v4.6.md
+++ b/docs/release_notes/ibexa_dxp_v4.6.md
@@ -698,6 +698,7 @@ For more information, see [Date and time attributes](https://doc.ibexa.co/en/4.6
[[= release_note_entry_begin("AI Actions " + version, '2025-03-04', ['Headless', 'Experience', 'Commerce', 'LTS Update', 'New feature']) =]]
#### Features
+
You can now [duplicate AI actions]([[= user_doc =]]/ai_actions/work_with_ai_actions/#duplicate-ai-actions) in the AI actions list.
#### PHP API
@@ -1390,7 +1391,7 @@ With `IsVirtual` criterion that searches for virtual or physical products, produ
[Product variants](https://doc.ibexa.co/en/master/content_management/data_migration/importing_data/#product-variants) and [product assets](https://doc.ibexa.co/en/master/content_management/data_migration/importing_data/#product-assets) can now be created through [data migration](https://doc.ibexa.co/en/master/content_management/data_migration/data_migration/).
-#### New features and improvements in Commerce [[% include 'snippets/commerce_badge.md' %]]
+#### New features and improvements in Commerce [[% include 'snippets/commerce_badge.md' %]]
##### Reorder
diff --git a/docs/resources/new_in_doc.md b/docs/resources/new_in_doc.md
index b233267afc..e19d829fd3 100644
--- a/docs/resources/new_in_doc.md
+++ b/docs/resources/new_in_doc.md
@@ -123,7 +123,7 @@ This promotes skipping the rebuild of the Symfony container when environment var
### Infrastructure
- - [MariaDB 11.4 is officially supported on v5 and v4.6](requirements.md#dbms)
+- [MariaDB 11.4 is officially supported on v5 and v4.6](requirements.md#dbms)
### Taxonomy
diff --git a/docs/resources/phpstorm_plugin.md b/docs/resources/phpstorm_plugin.md
index 2ceeb7576d..527f412b3d 100644
--- a/docs/resources/phpstorm_plugin.md
+++ b/docs/resources/phpstorm_plugin.md
@@ -221,9 +221,9 @@ Suggestions are based on service definitions tagged as `ibexa.query_type`.
Parameter name suggestions are available for Query types which implement the `Ibexa\Core\QueryType\QueryType` interface or extend the `Ibexa\Core\QueryType\OptionsResolverBasedQueryType` class in the following places:
-* `Ibexa\Core\QueryType\QueryType::getQuery` method calls
-* `Ibexa\Core\QueryType\QueryType::getQuery` method definition
-* `Ibexa\Core\QueryType\OptionsResolverBasedQueryType::doGetQuery` method definition
+- `Ibexa\Core\QueryType\QueryType::getQuery` method calls
+- `Ibexa\Core\QueryType\QueryType::getQuery` method definition
+- `Ibexa\Core\QueryType\OptionsResolverBasedQueryType::doGetQuery` method definition

diff --git a/docs/search/ai_actions_search_reference/action_configuration_criteria.md b/docs/search/ai_actions_search_reference/action_configuration_criteria.md
index 04e2a900be..5ac2d5a3bc 100644
--- a/docs/search/ai_actions_search_reference/action_configuration_criteria.md
+++ b/docs/search/ai_actions_search_reference/action_configuration_criteria.md
@@ -17,6 +17,7 @@ Search criteria are found in the `Ibexa\Contracts\ConnectorAi\ActionConfiguratio
| [Type](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-Query-Criterion-Type.html) | Find Action Configuration having the exact given type |
The following example shows how to use them to find specific Action Configurations:
+
``` php
[[= include_file('code_samples/ai_actions/src/Query/Search.php') =]]
```
diff --git a/docs/search/ai_actions_search_reference/action_configuration_sort_clauses.md b/docs/search/ai_actions_search_reference/action_configuration_sort_clauses.md
index 71fe71042c..56dbaf044d 100644
--- a/docs/search/ai_actions_search_reference/action_configuration_sort_clauses.md
+++ b/docs/search/ai_actions_search_reference/action_configuration_sort_clauses.md
@@ -12,6 +12,7 @@ Sort Clauses are found in the `Ibexa\Contracts\ConnectorAi\ActionConfiguration\Q
- [Identifier](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-Query-SortClause-Identifier.html)
The following example shows how to use them to sort the searched Action Configurations:
+
``` php
[[= include_file('code_samples/ai_actions/src/Query/Search.php') =]]
```
diff --git a/docs/search/reindex_search.md b/docs/search/reindex_search.md
index 65e4f9220f..ab27cbf193 100644
--- a/docs/search/reindex_search.md
+++ b/docs/search/reindex_search.md
@@ -7,6 +7,7 @@ description: Reindexing lets you create or refresh the search engine index.
To (re)create or refresh the search engine index for configured search engines (per SiteAccess repository), use the `php bin/console ibexa:reindex` command.
Some examples of common usage:
+
```bash
# Reindex the whole index using parallel process (by default starts by purging the whole index)
# (with the 'auto' option which detects the number of CPU cores -1, default behavior)
diff --git a/docs/search/search_engines/elasticsearch/configure_elasticsearch.md b/docs/search/search_engines/elasticsearch/configure_elasticsearch.md
index c6f86d8711..62cc6b6cc0 100644
--- a/docs/search/search_engines/elasticsearch/configure_elasticsearch.md
+++ b/docs/search/search_engines/elasticsearch/configure_elasticsearch.md
@@ -538,6 +538,6 @@ ibexa_elasticsearch:
For more information about how Elasticsearch handles settings and mappings from multiple templates that match the same index, see [Elasticsearch documentation](https://www.elastic.co/guide/en/elasticsearch/reference/8.19/index-templates.html).
-# Extend Elasticsearch
+## Extend Elasticsearch
To learn how you can create document field mappers, custom Search Criteria, custom Sort Clauses and Aggregations, see [Create custom Search Criterion](create_custom_search_criterion.md).
diff --git a/docs/search/search_engines/search_engines.md b/docs/search/search_engines/search_engines.md
index 75080c338e..d1fdfdac82 100644
--- a/docs/search/search_engines/search_engines.md
+++ b/docs/search/search_engines/search_engines.md
@@ -7,9 +7,9 @@ description: Learn about different search engines that are supported by Ibexa DX
[[= product_name =]] enables you to use different search engines.
Currently, they exist in their own [[= product_name =]] Bundles:
-1. [Legacy search engine](legacy_search_overview.md) - a database-powered search engine for basic needs.
-1. [Solr](solr_overview.md) - an integration providing better overall performance, better scalability and support for more advanced search capabilities.
-1. [Elasticsearch](elasticsearch_overview.md) - a document-oriented engine providing even better performance and scalability.
+1. [Legacy search engine](legacy_search_overview.md) - a database-powered search engine for basic needs.
+1. [Solr](solr_overview.md) - an integration providing better overall performance, better scalability and support for more advanced search capabilities.
+1. [Elasticsearch](elasticsearch_overview.md) - a document-oriented engine providing even better performance and scalability.
## Search engines comparison
diff --git a/docs/search/search_engines/solr_search_engine/configure_solr.md b/docs/search/search_engines/solr_search_engine/configure_solr.md
index e38c5c5db9..10f92c8295 100644
--- a/docs/search/search_engines/solr_search_engine/configure_solr.md
+++ b/docs/search/search_engines/solr_search_engine/configure_solr.md
@@ -224,7 +224,7 @@ Connect to the Solr slave interface (http://localhost:8983/solr), go to your cor

-# Configure HTTP Client for Solr queries
+## Configure HTTP Client for Solr queries
[[= product_name_base =]] Solr Bundle uses Symfony HTTP Client to fetch and update Solr index.
You can configure timeout and maximum number of retries for that client using Solr Bundle's Semantic configuration:
@@ -238,6 +238,6 @@ ibexa_solr:
max_retries: 5
```
-# Extend Solr
+## Extend Solr
To learn how you can create document field mappers, custom Search Criteria, custom Sort Clauses and Aggregations, see [Search extensibility](create_custom_search_criterion.md).
diff --git a/docs/tutorials/beginner_tutorial/5_display_a_list_of_content_items.md b/docs/tutorials/beginner_tutorial/5_display_a_list_of_content_items.md
index c9ce080a97..ada2675a35 100644
--- a/docs/tutorials/beginner_tutorial/5_display_a_list_of_content_items.md
+++ b/docs/tutorials/beginner_tutorial/5_display_a_list_of_content_items.md
@@ -173,6 +173,7 @@ Because this template is rendered inside a table, it starts with a `` tag.
```
+
### Add Media permission
To be able to view the `photo` field you have to add a `read` permission to `Media` section.
diff --git a/docs/tutorials/generic_field_type/8_data_migration.md b/docs/tutorials/generic_field_type/8_data_migration.md
index 339ae692d1..3afef5e44a 100644
--- a/docs/tutorials/generic_field_type/8_data_migration.md
+++ b/docs/tutorials/generic_field_type/8_data_migration.md
@@ -19,7 +19,7 @@ First, you need to add support for normalization in a `src/Serializer/Point2D/Va
[[= include_file('code_samples/field_types/2dpoint_ft/src/Serializer/Point2D/ValueNormalizer.php') =]]
```
-## Add Normalizer definition
+## Add Normalizer definition
Next, add the `ValueNormalizer` service definition to the `config/services.yaml` with a `serializer.normalizer` tag:
diff --git a/docs/tutorials/page_and_form_tutorial/5_create_newsletter_form.md b/docs/tutorials/page_and_form_tutorial/5_create_newsletter_form.md
index 36e3cd4371..897a4a9dc6 100644
--- a/docs/tutorials/page_and_form_tutorial/5_create_newsletter_form.md
+++ b/docs/tutorials/page_and_form_tutorial/5_create_newsletter_form.md
@@ -93,6 +93,7 @@ In `config/packages`, add a `gregwar_captcha.yaml` file with the following confi
``` yaml
[[= include_file('code_samples/tutorials/page_tutorial/config/packages/gregwar_captcha.yaml') =]]
```
+
The configuration resizes the CAPTCHA image (line 2), changes the error message (line 3), and shortens the authentication code (line 4).
### Add stylesheet
@@ -103,12 +104,14 @@ Add the following code to `assets/css/style.css`:
``` css
[[= include_file('code_samples/tutorials/page_tutorial/assets/css/style.css', 229, 277) =]]
```
+
Reinstall the assets and clear the cache by running the following commands:
``` bash
yarn encore
php bin/console cache:clear
```
+
Your newsletter form block is ready.

diff --git a/docs/update_and_migration/from_1.x_2.x/update_db_to_2.5.md b/docs/update_and_migration/from_1.x_2.x/update_db_to_2.5.md
index 7e2e6dd12a..f0ae09fa07 100644
--- a/docs/update_and_migration/from_1.x_2.x/update_db_to_2.5.md
+++ b/docs/update_and_migration/from_1.x_2.x/update_db_to_2.5.md
@@ -833,6 +833,7 @@ To promote use of eZ Platform, `ezsystems/ez-support-tools` v1.0.10, as of eZ Pl
It's enabled by default and generates a header like `Powered-By: eZ Platform Enterprise v2`.
To omit the version number, use the following configuration:
+
``` yaml
ezplatform_support_tools:
system_info:
diff --git a/docs/update_and_migration/from_3.3/update_from_3.3.md b/docs/update_and_migration/from_3.3/update_from_3.3.md
index 220c03e1bc..6f3e1973ef 100644
--- a/docs/update_and_migration/from_3.3/update_from_3.3.md
+++ b/docs/update_and_migration/from_3.3/update_from_3.3.md
@@ -493,6 +493,7 @@ There are no additional update steps to execute.
This release comes with a command to clean up duplicated entries in the `ezcontentobject_attribute` table, which were created due to an issue related to previewing content in different languages.
If you're affected, remove the duplicated entries by running the following command:
+
``` bash
php bin/console ibexa:content:remove-duplicate-fields
```
diff --git a/docs/update_and_migration/from_4.3/update_from_4.3_new_commerce.md b/docs/update_and_migration/from_4.3/update_from_4.3_new_commerce.md
index 0ff9511bb9..e8e0420c8d 100644
--- a/docs/update_and_migration/from_4.3/update_from_4.3_new_commerce.md
+++ b/docs/update_and_migration/from_4.3/update_from_4.3_new_commerce.md
@@ -136,6 +136,7 @@ oneup_flysystem:
local:
location: '%kernel.cache_dir%/flysystem'
```
+
If you haven't applied custom changes to that file,
you can reset the third-party `oneup/flysystem-bundle` recipe by executing:
@@ -418,6 +419,7 @@ Finish the code update by running:
```bash
composer run post-install-cmd
```
+
## Run data migration
### Customer Portal self-registration
diff --git a/docs/update_and_migration/from_4.5/update_from_4.5.md b/docs/update_and_migration/from_4.5/update_from_4.5.md
index 3673bf2144..d56b2977af 100644
--- a/docs/update_and_migration/from_4.5/update_from_4.5.md
+++ b/docs/update_and_migration/from_4.5/update_from_4.5.md
@@ -277,7 +277,7 @@ php bin/console ibexa:migrations:import vendor/ibexa/image-picker/src/bundle/Res
php bin/console ibexa:migrations:migrate --file=2023_12_06_15_00_image_content_type.yaml
```
-### Dashboard migration [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
+### Dashboard migration [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]] {#dashboard-migration}
If you're using [[= product_name_exp =]] or [[= product_name_com =]],
you must run data migration required by the dashboard and other features to finish the upgrade process:
@@ -297,6 +297,7 @@ php bin/console ibexa:migrations:migrate --file=2023_09_23_14_15_dashboard_struc
If you have custom user groups which need to manipulate dashboards, you need to skip this migration, copy it to your migrations folder (by default, `src/Migrations/Ibexa/migrations`) and adjust it according to your needs before execution.
For [[= product_name_com =]] there's an additional migration:
+
``` bash
php bin/console ibexa:migrations:import vendor/ibexa/order-management/src/bundle/Resources/install/migrations/dashboard_structure.yaml --name=2023_11_20_14_33_order_dashboard_structure.yaml
php bin/console ibexa:migrations:migrate --file=2023_11_20_14_33_order_dashboard_structure.yaml
diff --git a/docs/update_and_migration/from_4.6/update_from_4.6.md b/docs/update_and_migration/from_4.6/update_from_4.6.md
index deee906816..fd8b30db0b 100644
--- a/docs/update_and_migration/from_4.6/update_from_4.6.md
+++ b/docs/update_and_migration/from_4.6/update_from_4.6.md
@@ -170,6 +170,7 @@ If the new bundle `ibexa/core-search` has not been added by the recipes, enable
This release comes with a command to clean up duplicated entries in the `ezcontentobject_attribute` table, which were created due to an issue related to previewing content in different languages.
If you're affected, remove the duplicated entries by running the following command:
+
``` bash
php bin/console ibexa:content:remove-duplicate-fields
```
@@ -326,21 +327,21 @@ You can use it to get rid of PHP code deprecations and start preparing your proj
To get started with [[= product_name_base =]] Rector, execute the following steps:
-1. Add the Composer dependency:
+1\. Add the Composer dependency:
``` bash
composer require --dev ibexa/rector:^4.6
```
-2. Adjust the created `rector.php` configuration file to match your project structure
+2\. Adjust the created `rector.php` configuration file to match your project structure
-3. Run Rector in the dry-run mode to preview the changes:
+3\. Run Rector in the dry-run mode to preview the changes:
``` bash
vendor/bin/rector --dry-run
```
-4. Run Rector:
+4\. Run Rector:
``` bash
vendor/bin/rector
diff --git a/docs/update_and_migration/from_4.6/update_to_5.0.md b/docs/update_and_migration/from_4.6/update_to_5.0.md
index 74ff05231f..0bf7390ee1 100644
--- a/docs/update_and_migration/from_4.6/update_to_5.0.md
+++ b/docs/update_and_migration/from_4.6/update_to_5.0.md
@@ -43,8 +43,8 @@ Customize the `rector.php` config file by:
- making it match your directory structure (for example, you may not have the `tests` directory)
- adding project-specific rules:
- - specify [PHP rules by using `withPhpSets`](https://getrector.com/documentation/set-lists#content-php-sets)
- - specify [Symfony, Twig, or Doctrine rules by using `withComposerBased`](https://getrector.com/documentation/composer-based-sets).
+ - specify [PHP rules by using `withPhpSets`](https://getrector.com/documentation/set-lists#content-php-sets)
+ - specify [Symfony, Twig, or Doctrine rules by using `withComposerBased`](https://getrector.com/documentation/composer-based-sets).
It's recommended to activate one rule set at a time and preview the output by running Rector with the `--dry-run` option to decide which rulesets should be used and in which order.
@@ -66,7 +66,9 @@ return RectorConfig::configure()
->withComposerBased(symfony: true)
;
```
+
Run the following command to preview the changes done by Rector:
+
```bash
php vendor/bin/rector --dry-run
```
@@ -913,10 +915,10 @@ The following example illustrates the update of a custom page block's icon:
Features which were optional 4.6 LTS Updates are now part of 5.0.0.
-* If you have already installed the feature, its schema has been updated by the previous step.
-* If you haven't installed the feature, you need to add its schema to your database.
+- If you have already installed the feature, its schema has been updated by the previous step.
+- If you haven't installed the feature, you need to add its schema to your database.
Store the SQL of the schema into a file, **review it carefully**, then run it.
-* If you mistakenly reinstall a schema, you might encounter "Table already exists" errors which can be ignored.
+- If you mistakenly reinstall a schema, you might encounter "Table already exists" errors which can be ignored.
#### Install AI actions schema
diff --git a/docs/update_and_migration/migrate_to_ibexa_dxp/common_issues.md b/docs/update_and_migration/migrate_to_ibexa_dxp/common_issues.md
index 5aaebd9f62..aa31931780 100644
--- a/docs/update_and_migration/migrate_to_ibexa_dxp/common_issues.md
+++ b/docs/update_and_migration/migrate_to_ibexa_dxp/common_issues.md
@@ -54,6 +54,7 @@ It cleans up redundant Relations rows:
```bash
php bin/console ezpublish:update:legacy_storage_clean_up_relation_type_eq_zero
```
+
The command can be executed in two modes:
- list / dry-run - prints table with all corrupted Relations that are deleted (to be executed first)
diff --git a/docs/update_and_migration/migrate_to_ibexa_dxp/migrating_from_ez_publish_platform.md b/docs/update_and_migration/migrate_to_ibexa_dxp/migrating_from_ez_publish_platform.md
index dc4742e37b..9d8bf44cfc 100644
--- a/docs/update_and_migration/migrate_to_ibexa_dxp/migrating_from_ez_publish_platform.md
+++ b/docs/update_and_migration/migrate_to_ibexa_dxp/migrating_from_ez_publish_platform.md
@@ -98,11 +98,11 @@ If you plan to use Legacy Bridge for a while before migrating content, you also
To move over your own custom configurations, follow the conventions below and manually move the settings over:
- `/ezpublish/config/parameters.yaml => /app/config/parameters.yaml`
- - *For parameters like before, for new parameters you'll be prompted on later step.*
+ - *For parameters like before, for new parameters you'll be prompted on later step.*
- `/ezpublish/config/config.yaml => /app/config/config.yaml`
- - *For system/framework config, and for defining global db, cache, search settings.*
+ - *For system/framework config, and for defining global db, cache, search settings.*
- `/ezpublish/config/ezpublish.yaml => /app/config/ezplatform.yaml`
- - *For SiteAccess, site groups and repository settings.*
+ - *For SiteAccess, site groups and repository settings.*
!!! note "Changes to repository configuration"
@@ -217,7 +217,7 @@ The easiest way to upgrade the distribution files is to copy the directories tha
Since writable directories and files have been replaced / copied, their permissions might have changed. You most likely need to reconfigure webserver user permissions as instructed further down.
-### 2.6 Binary files
+### 2.6 Binary files
Binary files can simply be copied from the old to the new installation:
@@ -227,7 +227,7 @@ Binary files can simply be copied from the old to the new installation:
In the eZ Publish Platform 5.x installation `web/var` is a symlink to `ezpublish_legacy/var`, so if you can't find it in path above you can instead copy the storage files to the similar `ezpublish_legacy/var[/]/storage` path.
-### 2.7 Re-apply permissions and update composer
+### 2.7 Re-apply permissions and update composer
Since writable directories and files have been replaced / copied, their permissions might have changed. You need to re-apply them.