From 617c215517ddc1f90e6c4c785a982a2a8dc4d7ef Mon Sep 17 00:00:00 2001 From: julitafalcondusza <117284672+julitafalcondusza@users.noreply.github.com> Date: Mon, 21 Oct 2024 11:51:58 +0200 Subject: [PATCH] conflict fix --- README.md | 8 +- docs/commerce/commerce.md | 12 +- .../order_management/order_management.md | 10 +- .../order_management/work_with_orders.md | 16 +- docs/commerce/payment/payment_management.md | 10 +- .../payment/work_with_payment_methods.md | 14 +- docs/commerce/payment/work_with_payments.md | 9 +- .../shipping_management.md | 9 +- .../work_with_shipments.md | 14 +- .../work_with_shipping_methods.md | 24 +-- docs/content_management/block_reference.md | 80 +++++----- .../configure_ct_field_settings.md | 80 +++++----- docs/content_management/content_items.md | 16 +- docs/content_management/content_management.md | 14 +- docs/content_management/content_model.md | 53 +++---- .../content_organization/classify_content.md | 42 ++--- .../copy_move_hide_content.md | 51 +++--- .../manage_locations_urls.md | 93 +++++------ docs/content_management/content_versions.md | 11 +- .../create_edit_content_items.md | 86 +++++----- .../create_edit_content_types.md | 45 +++--- docs/content_management/create_edit_pages.md | 76 +++++---- .../img/elements_toolbox.png | Bin 61915 -> 0 bytes .../img/page_blocks_toolbox.png | Bin 0 -> 188868 bytes .../preview_content_items.md | 8 +- docs/content_management/publish_instantly.md | 19 +-- .../content_management/schedule_publishing.md | 32 ++-- docs/content_management/taxonomy/taxonomy.md | 15 +- .../taxonomy/work_with_tags.md | 26 +-- docs/content_management/translate_content.md | 41 +++-- docs/content_management/work_with_forms.md | 25 ++- .../workflow_management/editorial_workflow.md | 19 +-- .../workflow_management/view_workflow_list.md | 7 +- .../workflow_management/work_with_versions.md | 35 ++-- .../build_customer_portal.md | 30 ++-- .../company_self_registration.md | 16 +- docs/customer_management/customer_portal.md | 23 +-- docs/customer_management/manage_customers.md | 36 ++--- docs/dam/ibexa_dam.md | 34 ++-- docs/getting_started/dashboard/dashboard.md | 2 +- .../dashboard/dashboard_block_reference.md | 20 ++- .../dashboard/work_with_dashboard.md | 28 ++-- docs/getting_started/discover_ui.md | 58 +++---- docs/getting_started/get_started.md | 42 +++-- ...olbar.png => dashboard_blocks_toolbox.png} | Bin ..._toolbar.png => dashboard_side_moving.png} | Bin ...g => dashboard_structure_view_toolbox.png} | Bin docs/ibexa_engage/ibexa_engage.md | 9 +- docs/image_management/edit_images.md | 21 +-- docs/image_management/upload_images.md | 15 +- .../permission_system.md | 38 ++--- .../permissions_and_users.md | 2 +- .../work_with_permissions.md | 32 ++-- docs/persona_paths/administrator.md | 10 +- docs/persona_paths/author_content.md | 3 +- docs/persona_paths/editor.md | 10 +- docs/persona_paths/explorer.md | 3 +- docs/persona_paths/manage_content_model.md | 5 +- docs/persona_paths/manage_products.md | 3 +- docs/persona_paths/organize_content.md | 7 +- docs/persona_paths/publish_content.md | 4 +- docs/persona_paths/shop_manager.md | 9 +- docs/personalization/configure_models.md | 48 +++--- .../configure_personalization.md | 11 +- docs/personalization/configure_scenarios.md | 46 ++---- docs/personalization/content_import.md | 32 ++-- docs/personalization/content_types.md | 25 ++- .../personalization/enable_personalization.md | 13 +- docs/personalization/event_types.md | 12 +- docs/personalization/filters.md | 107 +++++-------- .../integrate_scenario_results.md | 41 ++--- docs/personalization/personalization.md | 25 +-- .../preview_scenario_results.md | 40 ++--- docs/personalization/recommendation_models.md | 150 +++++++----------- .../review_perso_performance.md | 31 ++-- docs/personalization/scenarios.md | 18 +-- docs/personalization/segment_management.md | 27 ++-- docs/personalization/triggers.md | 10 +- docs/personalization/use_cases.md | 21 +-- docs/pim/create_edit_product.md | 29 ++-- docs/pim/create_product_types.md | 7 +- docs/pim/create_virtual_product.md | 17 +- docs/pim/manage_availability_and_stock.md | 3 +- docs/pim/manage_currencies.md | 3 +- docs/pim/manage_prices.md | 3 +- docs/pim/pim.md | 4 +- docs/pim/product_types.md | 10 +- docs/pim/products.md | 8 +- docs/pim/work_with_catalogs.md | 9 +- docs/pim/work_with_product_assets.md | 13 +- docs/pim/work_with_product_attributes.md | 8 +- docs/pim/work_with_product_categories.md | 36 +++-- docs/pim/work_with_product_page_urls.md | 11 +- docs/pim/work_with_product_variants.md | 5 +- docs/recent_activity/recent_activity.md | 17 +- docs/search/search_for_content.md | 10 +- docs/search_engine_optimization/seo.md | 47 +++--- .../work_with_seo.md | 51 +++--- docs/user_management/manage_users.md | 26 ++- docs/website_organization/multisite.md | 24 ++- docs/website_organization/work_with_sites.md | 29 ++-- mkdocs.yml | 4 +- 102 files changed, 1109 insertions(+), 1382 deletions(-) delete mode 100644 docs/content_management/img/elements_toolbox.png create mode 100644 docs/content_management/img/page_blocks_toolbox.png rename docs/getting_started/img/{dashboard_blocks_toolbar.png => dashboard_blocks_toolbox.png} (100%) rename docs/getting_started/img/{dashboard_switch_toolbar.png => dashboard_side_moving.png} (100%) rename docs/getting_started/img/{dashboard_structure_view_toolbar.png => dashboard_structure_view_toolbox.png} (100%) diff --git a/README.md b/README.md index c106b63e..12784c9d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Ibexa DXP User Documentation -This repository is the source for the [user documentation for Ibexa DXP](https://doc.ezplatform.com/projects/userguide/en/latest), +This repository is the source for [User Documentation for Ibexa DXP](https://doc.ibexa.co/projects/userguide/en/latest/), a digital experience platform that is based on the Symfony Full Stack Framework in PHP. # Resources @@ -9,7 +9,7 @@ a digital experience platform that is based on the Symfony Full Stack Framework 1. Ibexa DXP Repository: https://github.com/ibexa/oss 1. Open JIRA board: https://issues.ibexa.co 1. Ibexa Website: https://ibexa.co -1. User documentation: https://doc.ibexa.co/projects/userguide +1. User Documentation: https://doc.ibexa.co/projects/userguide ## How to contribute @@ -20,7 +20,7 @@ If you'd like to see Ibexa DXP in your language, you can [contribute to the tran ## Build and preview documentation To build and preview your changes locally, you need to install Python along with its package manager (`pip`). -Other required tools will be installed by using the following command: +To install other required tools, use the following command: ```bash pip install -r requirements.txt @@ -33,7 +33,7 @@ mkdocs serve ``` After a short while your documentation should be reachable at http://localhost:8000. -If it isn't, check the output of the command. +If it's not, check the output of the command. ## Where to View diff --git a/docs/commerce/commerce.md b/docs/commerce/commerce.md index 14938080..8d38f3e5 100644 --- a/docs/commerce/commerce.md +++ b/docs/commerce/commerce.md @@ -9,20 +9,20 @@ edition: commerce You can use them to create a unified and streamlined e-commerce platform. Modules interact with each other, for example, to decrease stock following a sale, or cancel shipments and payments when orders are cancelled. -The solution complements functionalities provided by the [PIM](products.md) offering, and allows you to sell products through the website. +The solution complements functionalities provided by the [PIM](products.md) offering, and allows you to sell products through the website. With Commerce, you can build your own storefront from a set of generic components, which you can then customize to cover all aspects of the e-commerce experience. -Out of the box, Commerce is configured to follow a specific workflow and support a certain number of processing method types, for example, flat rate and free shipping methods, as well as offline payment methods. -Contact your administrator or development team about customization options. -For more information, see [developer documentation]([[= developer_doc =]]/commerce/commerce/). +Out of the box, Commerce is configured to follow a specific workflow and support a certain number of processing method types, for example, flat rate, free shipping methods, and offline payment methods. +Contact your administrator or development team about customization options. +For more information, see [Developer Documentation]([[= developer_doc =]]/commerce/commerce/). The following diagram includes statuses and actions that may occur on the order's way along the fulfilment path. ![Order processing workflow](img/commerce_workflow.png "Order processing workflow") -From the end-user perspective, once it is properly configured to grant the right permissions to [user Roles](../permission_management/permissions_and_users.md), the Commerce solution gives store managers control over the whole order fulfilment process, while allowing customers to monitor the progress of their transactions. +From the end-user perspective, once it's properly configured to grant the right permissions to [user roles](../permission_management/permissions_and_users.md), the Commerce solution gives store managers control over the whole order fulfilment process, while allowing customers to monitor the progress of their transactions. -Once the order is placed, users can interact with it by working with the following Back Office pages: +Once the order is placed, users can interact with it by working with the following back office pages: [[= cards([ "commerce/order_management/order_management", diff --git a/docs/commerce/order_management/order_management.md b/docs/commerce/order_management/order_management.md index 3dc22977..12b356af 100644 --- a/docs/commerce/order_management/order_management.md +++ b/docs/commerce/order_management/order_management.md @@ -5,19 +5,19 @@ edition: commerce # Order management -The Order management module allows users to review order details, track order completion status, and cancel orders that are created when store customers purchase products. +The **Order management** module allows users to review order details, track order completion status, and cancel orders that are created when store customers purchase products. -Depending on the permissions assigned to your [user Role](permissions_and_users.md), you might be able to track and manage orders placed by all the store customers, or just your own ones. +Depending on the permissions assigned to your [user role](permissions_and_users.md), you might be able to track and manage orders placed by all the store customers, or only your own ones. -With the Back Office **Orders** screen, you can search for orders and filter search results. +With the back office **Orders** screen, you can search for orders and filter search results. ![Orders list](order_list.png "Orders list") -The Order management package interacts with other packages of the system, so that: +The **Order management** package interacts with other packages of the system, so that: - when store customers pass the checkout stage, stock is decreased and payment and shipment workflows are initiated - when store customers cancel their orders, the decreased stock is restored and payment and shipment are cancelled [[= cards([ "commerce/order_management/work_with_orders" -], columns=3) =]] +], columns=3) =]] diff --git a/docs/commerce/order_management/work_with_orders.md b/docs/commerce/order_management/work_with_orders.md index a9fe2495..59229714 100644 --- a/docs/commerce/order_management/work_with_orders.md +++ b/docs/commerce/order_management/work_with_orders.md @@ -6,7 +6,7 @@ edition: commerce # Work with orders In [[= product_name =]], you can view a list of orders and modify their statuses on the **Orders** screen. -By default, depending on your permissions, you can access your own orders or all the orders that exist in the system. +By default, depending on your permissions, you can access your own orders, or all the orders that exist in the system. ## Filter orders in order list @@ -35,7 +35,7 @@ Available filters are: To view the details of an order, click its line in the order list. -On the order details screen, you can view more information about the order, such as customer, payment and shipment details. +On the order details screen, you can view more information about the order, such as customer, payment, and shipment details. ![Order detail view](order_detail_view.png) @@ -43,7 +43,7 @@ In the **Items** tab you can see a list of products included in the order. ![Viewing products included in the order](order_detail_items.png) -Where fields have the following meaning: +The fields have the following meaning: - **Subtotal (net)** - a sum of all product prices without taxes - **Shipping cost** - a net cost of the selected shipping method @@ -52,17 +52,15 @@ Where fields have the following meaning: !!! note "Ordering virtual products" - If the order includes only virtual products then the Shipment and Shipping address sections are not available. - Virtual products don't require shipment when they are the only product in a purchase. - + If the order includes only virtual products then the Shipment and Shipping address sections aren't available. + Virtual products don't require shipment when they're the only product in a purchase. ## Change order status -If your [user Role](work_with_permissions.md) includes the `Order/Update` permission, you can change the status of an existing order: -confirm it if the order has "Pending" status, or complete it when it is in "Processing" status. +If your [user role](work_with_permissions.md) includes the `Order/Update` permission, you can change the status of an existing order: confirm it if the order has "Pending" status, or complete it when it's in "Processing" status. With the `Order/Cancel` permission, you can cancel an existing order. !!! note "Canceling orders" - When an order is created, stocks are reduced for the products on that order. + When you create an order, stocks are reduced for the products on that order. When you cancel an order, the stocks are reverted back to their original values. diff --git a/docs/commerce/payment/payment_management.md b/docs/commerce/payment/payment_management.md index 2a983aa2..61f1c9f8 100644 --- a/docs/commerce/payment/payment_management.md +++ b/docs/commerce/payment/payment_management.md @@ -5,18 +5,18 @@ edition: commerce # Payment management -The Payment management module allows users to track the status of payments for orders placed by store customers. +The **Payment management** module allows users to track the status of payments for orders placed by store customers. -On the Back Office **Payments** screen, you can search for payments and filter the search results, as well as review payment details. +On the back office **Payments** screen, you can search for payments, filter the search results, and review payment details. Depending on configuration and permissions, you may also be allowed to cancel payments. -If the permissions assigned to your [user Role](permissions_and_users.md) allow, you may also have access to the **Payment methods** screen, where you define, enable, and disable offline payment methods. +If the permissions assigned to your [user role](permissions_and_users.md) allow, you may also have access to the **Payment methods** screen, where you define, enable, or disable offline payment methods. ![Payments list](payment_list.png "Payments list") -The Payment management module interacts with other packages of the system, so that payment processing is cancelled automatically when you cancel your order. +The **Payment management** module interacts with other packages of the system, so that payment processing is cancelled automatically when you cancel your order. [[= cards([ "commerce/payment/work_with_payments", "commerce/payment/work_with_payment_methods" -], columns=3) =]] +], columns=3) =]] diff --git a/docs/commerce/payment/work_with_payment_methods.md b/docs/commerce/payment/work_with_payment_methods.md index 28e96323..7dd46fb8 100644 --- a/docs/commerce/payment/work_with_payment_methods.md +++ b/docs/commerce/payment/work_with_payment_methods.md @@ -5,19 +5,19 @@ edition: commerce # Work with payment methods -If your [user Role](work_with_permissions.md) includes the `Payment method/Create` permission, you can create payment methods. +If your [user role](work_with_permissions.md) has the `Payment method/Create` permission, you can create payment methods. With the `Payment method/Edit` permission, you can modify existing ones. Payment methods describe the way store customers pay for their orders during the checkout process. !!! note "Payment method limitations" - By default, you can only create payment methods of type "Offline". + By default, you can only create payment methods of `Offline` type. If your organization needs other payment method types, contact your administrator or development team about [creating a custom payment method type]([[= developer_doc =]]/commerce/payment/extend_payment/#define-custom-payment-method-type). - + Payment methods created in legacy Commerce cannot be migrated when you upgrade. You have to define them from scratch. -## Create new payment method +## Create new payment method 1\. In the left panel, go to **Commerce** -> **Payment methods**, and click **Create**. @@ -39,7 +39,7 @@ Payment methods describe the way store customers pay for their orders during the ![Payment methods list](payment_methods_list.png) -2\. Find the payment method that you want to edit by using the search field and filters. +2\. Use the search field and filters to find the payment method that you want to edit. 3\. Click the **Edit** button next to the method in the list. @@ -51,13 +51,13 @@ Payment methods describe the way store customers pay for their orders during the 1\. In the left panel, go to **Commerce** -> **Payment methods**. -2\. Find the payment method that you want to delete by using the search field and filters. +2\. Use the search field and filters to find the payment method that you want to delete. 3\. Select a box next to its name and click **Delete**. !!! note "Payment methods for existing orders" - You cannot delete a payment method if it is active or if it is used by unpaid orders. + You cannot delete a payment method if it's active or if it's used by unpaid orders. You must first deactivate the method that you want to delete by toggling the **Availability** switch off. ## Filter payment methods diff --git a/docs/commerce/payment/work_with_payments.md b/docs/commerce/payment/work_with_payments.md index 015261c4..0baf5470 100644 --- a/docs/commerce/payment/work_with_payments.md +++ b/docs/commerce/payment/work_with_payments.md @@ -6,12 +6,13 @@ edition: commerce # Work with payments In [[= product_name =]], you can view a list of payments and modify their statuses on the **Payments** screen. -By default, depending on your permissions, you can access payments for your own orders or all the payments that exist in the system. +By default, depending on your permissions, you can access payments for your own orders, or all the payments that exist in the system. ## Filter payments in payment list 1. In the left panel, go to **Commerce** -> **Payments**. 2. Narrow down the list of displayed payments in one of the following ways: + - search for payments by typing part of order ID or identifier in the search box - filter payments by selecting one or more filters @@ -33,11 +34,11 @@ Available filters are: To view the details of a payment, click its line in the payment list. -On the payment details screen, you can view a summary of information about the payment. Payment details include information about the payment method used, total value and current status of the payment. +On the payment details screen, you can view a summary of information about the payment. +Payment details include information about the payment method used, total value and current status of the payment. ![Payment detail view](payment_detail_view.png) ## Change payment details -If your [user Role](work_with_permissions.md) includes the `Payment/Edit` permission, you can change the status of an existing payment: -confirm it if the payment has "Pending" status. +If your [user role](work_with_permissions.md) includes the `Payment/Edit` permission, you can change the status of an existing payment: confirm it if the payment has "Pending" status. diff --git a/docs/commerce/shipping_management/shipping_management.md b/docs/commerce/shipping_management/shipping_management.md index 66a57c34..2cadb8d3 100644 --- a/docs/commerce/shipping_management/shipping_management.md +++ b/docs/commerce/shipping_management/shipping_management.md @@ -5,17 +5,16 @@ edition: commerce # Shipping management -Shipping processes are present in almost every e-commerce business. +Shipping processes are present in almost every e-commerce business. [[= product_name =]] comes with a number of storefront and backend features to help users manage shipping. -No two businesses are identical, and Ibexa ensures the flexibility that you need to configure shipping methods in a way that is optimal for your business and store customers. +No two businesses are identical, and [[= product_name_base =]] ensures the flexibility that you need to configure shipping methods in a way that is optimal for your business and store customers. -If the permissions assigned to your [user Role](permissions_and_users.md) allow, the Shipping management module enables you to define and manage shipping methods of different types on the **Shipping methods** screen. +If the permissions assigned to your [user role](permissions_and_users.md) allow, the **Shipping management** module enables you to define and manage shipping methods of different types on the **Shipping methods** screen. ![Shipping methods list](shipping_methods_list.png "Shipping methods list") -The Shipping management module interacts with other packages of the system, -so that shipment processing is cancelled automatically when the customer cancels their order. +The **Shipping management** module interacts with other packages of the system, so that shipment processing is cancelled automatically when the customer cancels their order. [[= cards([ "commerce/shipping_management/work_with_shipping_methods", diff --git a/docs/commerce/shipping_management/work_with_shipments.md b/docs/commerce/shipping_management/work_with_shipments.md index a5b9a7ca..28676a74 100644 --- a/docs/commerce/shipping_management/work_with_shipments.md +++ b/docs/commerce/shipping_management/work_with_shipments.md @@ -50,22 +50,22 @@ Available filters are: To filter the list, set one of the filters and click `Apply` button. -You can also clear all chosen filters - to do it, click `Clear filters`. +You can also clear all chosen filters - to do it, click `Clear filters`. ## View shipment details To view the details of a shipment, click its line in the shipment list. -On the shipment details screen, you can see an overview of the shipment's details. +On the shipment details screen, you can see an overview of the shipment's details. -Shipment details include basic information about the shipment, customer details, shipping address, total value, order ID and the date of the last update. +Shipment details include basic information about the shipment, customer details, shipping address, total value, order ID, and the date of the last update. ![Shipment detail view](shipment_detail_view.png) ## Change shipment status -If your [user Role](work_with_permissions.md) has the `Shipment/Edit` permission, you can change the status of an existing shipment: +If your [user role](work_with_permissions.md) has the `Shipment/Edit` permission, you can change the status of an existing shipment: -- "Pending" -> "Ready to ship" - click **Prepare** button, then click **Change** to confirm. -- "Ready to ship" -> "Shipped" - click **Send** button, then click **Change** to confirm. -- "Shipped" -> "Delivered" - click **Deliver** button, then click **Change** to confirm. \ No newline at end of file +- "Pending" -> "Ready to ship" - click **Prepare** button, then click **Change** to confirm. +- "Ready to ship" -> "Shipped" - click **Send** button, then click **Change** to confirm. +- "Shipped" -> "Delivered" - click **Deliver** button, then click **Change** to confirm. \ No newline at end of file diff --git a/docs/commerce/shipping_management/work_with_shipping_methods.md b/docs/commerce/shipping_management/work_with_shipping_methods.md index 3de45607..bb5231e6 100644 --- a/docs/commerce/shipping_management/work_with_shipping_methods.md +++ b/docs/commerce/shipping_management/work_with_shipping_methods.md @@ -5,25 +5,25 @@ edition: commerce # Work with shipping methods -If your [user Role](work_with_permissions.md) includes the `Shipping method/Create` permission, you can create shipping methods. +If your [user role](work_with_permissions.md) includes the `Shipping method/Create` permission, you can create shipping methods. With the `Shipping method/Edit` permission, you can modify existing ones. -Shipping methods describe how goods can be shipped to a store customer, with different rates for different geographic locations. -Example shipping methods are overnight delivery, self-pickup, DHL and so on. +Shipping methods describe how goods can be shipped to a store customer, with different rates for different geographic locations. +Example shipping methods are overnight delivery, self-pickup, or DHL. !!! note "Shipping method limitations" - By default, you can only create shipping methods of 'Flat rate' and 'Free shipping' type. - + By default, you can only create shipping methods of 'Flat rate' and 'Free shipping' type. + Shipping methods created in legacy Commerce cannot be migrated when you upgrade. You have to define them from scratch. -"Flat rate" shipping means delivering goods at a fixed, predefined cost, regardless of the number and type of items in the cart. +"Flat rate" shipping means delivering goods at a fixed, predefined cost, regardless of the number, and type of items in the cart. -## Create new shipping method +## Create new shipping method 1\. In the left panel, go to **Commerce** -> **Shipping methods**, and click **Create**. -2\. Select the language for the new shipping method, its type, and region it will apply to. +2\. Select the language for the new shipping method, its type, and region that it applies to. 3\. In the next screen provide information about the new shipping method. @@ -31,7 +31,7 @@ Example shipping methods are overnight delivery, self-pickup, DHL and so on. Details about shipping cost differ between shipping methods: -- Flat rate requires setting a specific fixed cost for shipping, expressed as net value in a given currency. +- Flat rate requires setting a specific fixed cost for shipping, expressed as net value in a given currency. This value is then displayed during checkout and added to the total order amount when the store customer selects a specific shipping method. - Free shipping requires setting the minimum order value (in a given currency) above which the shipping is free. @@ -47,7 +47,7 @@ This value is then displayed during checkout and added to the total order amount ![Shipping methods list](shipping_methods_list.png) -2\. Find the shipping method that you intend to edit or delete by using the search field and filters. +2\. Use the search field and filters to find the shipping method that you intend to edit or delete. 3\. Click the **Edit** button next to the method in the list. @@ -59,13 +59,13 @@ This value is then displayed during checkout and added to the total order amount 1\. In the left panel, go to **Commerce** -> **Shipping methods**. -2\. Find the shipping method that you want to delete by using the search field and filters. +2\. Use the search field and filters to find the shipping method that you want to delete. 3\. Select a box next to its name and click **Delete**. !!! note "Shipping methods for existing orders" - You cannot delete a shipping method if it is active or if it is used by open orders. + You cannot delete a shipping method if it's active or if it's used by open orders. You must first deactivate the method that you want to delete by toggling the **Availability** switch off. ## Filter shipping methods diff --git a/docs/content_management/block_reference.md b/docs/content_management/block_reference.md index 8a0b753e..6f194c37 100644 --- a/docs/content_management/block_reference.md +++ b/docs/content_management/block_reference.md @@ -11,17 +11,17 @@ The following blocks are provided with a clean installation of [[= product_name |-----|-----------| |[Banner](#banner-block)|Displays an image content item with a URL attached to it.| |[Bestsellers](#bestsellers-block)|Displays a list of products that were recently a bestseller.| -|[Campaign](#campaign-block)|Displays a campaign selected from Ibexa Engage.| +|[Campaign](#campaign-block)|Displays a campaign selected from [[= product_name_engage =]].| |[Catalog](#catalog-block)|Displays products from a specific catalog to a selected customer group.| -|[Code](#code-block)|Enables you to place text, links, images, etc. on your Page using custom HTML.| -|[Collection](#collection-block)|Displays a set of content items you select manually from the Content structure. | -|[Content List](#content-list-block)|Displays content items of a chosen content type (or Types) that are contained in a selected folder. | +|[Code](#code-block)|Enables you to place content on your page, for example, text, links, or images, using custom HTML.| +|[Collection](#collection-block)|Displays a set of content items you select manually from the content structure. | +|[Content List](#content-list-block)|Displays content items of a chosen content type (or types) that are contained in a selected folder. | |[Content Scheduler](schedule_publishing.md#content-scheduler-block)|Displays content items at a pre-defined time. | |[Dynamic targeting](#dynamic-targeting-block)|Embeds recommended items based on the [Segment](content_organization/classify_content.md#segments) the user belongs to. | -|[Embed](#embed-block)|Embeds a content item of any content type on the Page. | -|[Form](#form-block)|Embeds a Form content item that you select from the Content Structure. | +|[Embed](#embed-block)|Embeds a content item of any content type on the page. | +|[Form](#form-block)|Embeds a Form content item that you select from the content structure. | |[Gallery](#gallery-block)|Displays all images contained in a selected folder. | -|[Ibexa Connect](#ibexa-connect-block)|Retrieves and displays data from an Ibexa Connect webhook. | +|[[[= product_name_connect =]]](#ibexa-connect-block)|Retrieves and displays data from an [[= product_name_connect =]] webhook. | |[Last purchased](#last-purchased-block)|Displays a list of products that were recently purchased from PIM. | |[Last viewed](#last-viewed-block)|Displays a list of products from PIM that were recently viewed. | |[Orders](#orders-block)|Displays a list of orders associated with a particular company or individual customer. | @@ -31,21 +31,21 @@ The following blocks are provided with a clean installation of [[= product_name |[RSS](#rss-block)|Loads and displays news from RSS feeds (channels). | |[Sales representative](#sales-representative)|Loads and displays company's sales representative.| |[SeenThis!](#seenthis-block)|Displays video with exceeded standard video restrictions of 3.5MB.| -|[Targeting](#targeting-block)|Embeds an content item based on the [Segment](content_organization/classify_content.md#segments) the user belongs to. | -|[Text](#text-block)|Enables you to add to the Page a Rich Text block. | -|[Video](#video-block)|Embeds a video into the Page with standard playback controls. | +|[Targeting](#targeting-block)|Embeds an content item based on the [segment](content_organization/classify_content.md#segments) the user belongs to. | +|[Text](#text-block)|Enables you to add to the page a Rich Text block. | +|[Video](#video-block)|Embeds a video into the page with standard playback controls. | [[= include_file('docs/content_management/create_edit_pages.md', 86, 96) =]] ## Block basics -Handling blocks is straightforward, drag and drop them into the desired spot within the drop zone. +Handling blocks is straightforward, drag and drop them into the desired spot within the drop zone. There's no need to worry about getting their placement perfect initially, you can rearrange them whenever you need. ### Settings -You have the ability to control individual blocks by accessing their settings. -Click on the settings icon next to the block's name. +You have the ability to control individual blocks by accessing their settings. +Click on the settings icon next to the block's name. ![Block settings](img/block_settings.png "Block settings") @@ -83,14 +83,14 @@ On the **Properties** tab, set values in the following fields: - **Name** – Enter a name for the page block. - **Personalization scenario** – Select "Bestsellers" to display popular products. -- **Product Types to be displayed** – Select the type of products to be displayed on the list. +- **Product types to be displayed** – Select the type of products to be displayed on the list. - **Limit** – Set the number of products to be displayed. On the **Design** tab, in the **View** field, select the layout to be used to present a list of products and submit your changes. ## Campaign block -Displays a campaign created and configured in [Ibexa Engage](../ibexa_engage/ibexa_engage.md). +Displays a campaign created and configured in [[[= product_name_engage =]]](../ibexa_engage/ibexa_engage.md). On the **Properties** tab, set values in the following fields: - **Name** – Enter a name for the campaign. @@ -121,7 +121,7 @@ On the **Properties** tab, set values in the following fields: ## Collection block -Displays a collection of content items manually selected from the Content structure, allowing you to feature specific content for promotional campaigns or highlight essential information on your website. +Displays a collection of content items manually selected from the content structure, allowing you to feature specific content for promotional campaigns or highlight essential information on your website. On the **Properties** tab, set values in the following fields: - **Name** — Enter a name for the page block. @@ -142,17 +142,17 @@ On the **Properties** tab, set values in the following fields: ## Dynamic targeting block -Dynamic targeting block provides recommended items based on users related to the configured Segments. +Dynamic targeting block provides recommended items based on users related to the configured segments. On the **Properties** tab, set values in the following fields: - **Name** — Enter a name for the page block. - **Select default scenario** — Select the default scenario for recommended items that should be rendered if the current user -is not assigned to any Segment. -- **Setup segment and scenario matching priority rules** — Select a Segment group, a Segment identifier and Scenario that you want to display recommendations from. +is not assigned to any segment. +- **Setup segment and scenario matching priority rules** — Select a segment group, a segment identifier and Scenario that you want to display recommendations from. - **Display limit** — Set the number of products to be displayed. -The rules are checked in order, so when a user belongs to more than one Segment, the first rule applies. +The rules are checked in order, so when a user belongs to more than one segment, the first rule applies. ![Dynamic targeting](img/page_builder_dynamic_targeting.png) @@ -179,7 +179,7 @@ On the **Properties** tab, set values in the following fields: To display two or more identical forms on a single page, have your developer create multiple identical form blocks for your use. This prevents potential issues related to duplicate data submission. - For more information about creating form blocks, see [Creating a newsletter form]([[= developer_doc =]]/content_management/pages/create_custom_page_block/) in developer documentation. + For more information about creating form blocks, see [Creating a newsletter form]([[= developer_doc =]]/content_management/pages/create_custom_page_block/) in Developer Documentation. ## Gallery block @@ -190,19 +190,19 @@ On the **Properties** tab, set values in the following fields: - **Folder** — Click **Select content**, browse the content, and select a folder containing images to display. After submitting the settings, all images in the folder are shown in the Gallery block. -Selecting a folder containing content items other than images results in displaying only a link to the folder where they are stored. +Selecting a folder containing content items other than images results in displaying only a link to the folder where they're stored. -## Ibexa Connect block +## [[= product_name_connect =]] block -Access and showcase data retrieved from an Ibexa Connect webhook. Streamline information presentation for seamless insights and improved decision-making. +Access and showcase data retrieved from an [[= product_name_connect =]] webhook. Streamline information presentation for seamless insights and improved decision-making. On the **Properties** tab, set values in the following fields: - **Name** – Enter a name for the page block. -- **Webhook link** — Enter the link for the Ibexa Connect webhook. +- **Webhook link** — Enter the link for the [[= product_name_connect =]] webhook. -!!! caution "Using Ibexa Connect scenario block" +!!! caution "Using [[= product_name_connect =]] scenario block" - For more information about using Ibexa Connect scenario block, see [Ibexa Connect scenario block]([[= developer_doc =]]/content_management/pages/ibexa_connect_scenario_block/) in developer documentation. + For more information about using [[= product_name_connect =]] scenario block, see [[[= product_name_connect =]] scenario block]([[= developer_doc =]]/content_management/pages/ibexa_connect_scenario_block/) in Developer Documentation. ## Last purchased block @@ -233,7 +233,7 @@ Helps track purchase history for streamlined customer service and personalized i On the **Properties** tab, set values in the following fields: - **Name** – Enter a name for the page block. -- **Columns** — Select columns that should be displayed in the orders table. Some columns are preselected, example: Order ID, Customer name, Total value etc. +- **Columns** — Select columns that should be displayed in the orders table. Some columns are preselected, for example, Order ID, Customer name, or Total value. - **Statuses** — Set the statuses of orders that should be included in the list. - **Number of orders** — Set the number of orders to be displayed. - **Sort order** — Set the sort order for the displayed orders. @@ -245,7 +245,7 @@ Enhances user experience by suggesting tailored options for various situations. On the **Properties** tab, set values in the following fields: - **Name** – Enter a name for the page block. -- **Select a scenario** – Select "Landing Page" or "Top clicked". +- **Select a scenario** – Select "Landing page" or "Top clicked". - **Select a content type to be displayed** – Select "Product". - **Display limit** – Set the number of products to be displayed. @@ -261,7 +261,7 @@ On the **Properties** tab, set values in the following fields: !!! note - Due to a technical limitation, content browser does not display product variants. + Due to a technical limitation, content browser doesn't display product variants. ## Recently added block @@ -299,6 +299,7 @@ On the **Design** tab, in the **View** field, select the layout to be used to pr Integration with [SeenThis!](https://seenthis.co/) service. SeenThis! block provides an adaptive streaming technology with no limitations as conventional streaming service. It allows to preserve the best video quality with minimum amount of data transfer. !!! note + This page block is in an opt-in bundle, to use it, install `ibexa/connector-seenthis` bundle first. On the **Properties** tab, set values in the following fields: @@ -321,37 +322,36 @@ On the **Properties** tab, set values in the following fields: ## Targeting block -Targeting block provides recommendation of content based on users related to the configured Segments. +Targeting block provides recommendation of content based on users related to the configured segments. On the **Properties** tab, set values in the following fields: - **Name** – Enter a name for the page block. - **Select default content** — Click **Select content**, browse the content, and choose the default content item to display when no priority rules are valid. -- **Setup segment and content matching priority rules** — Select a Segment Group and a Segment, -then click **Select content** and navigate to the content item that you want to display for the selected group. +- **Setup segment and content matching priority rules** — Select a segment group and a segment, then click **Select content** and navigate to the content item that you want to display for the selected group. -The rules are checked in order, so when a user belongs to more than one Segment, the first rule applies. +The rules are checked in order, so when a user belongs to more than one segment, the first rule applies. -You can preview the Page for each of the available Segments: +You can preview the page for each of the available segments: -![Previewing Page for a given Segment](img/page_builder_segment_preview.png) +![Previewing page for a given segment](img/page_builder_segment_preview.png) ## Text block -Adds a Rich Text block to the Page. +Adds a Rich Text block to the page. On the **Properties** tab, set values in the following fields: - **Name** – Enter a name for the page block. -- **Content** — Enter text, images, videos, etc. using Online Editor. +- **Content** — Enter a content, for example, text, images, or videos, with the online editor. For details, see [Editing Rich Text Fields](create_edit_content_items.md#edit-rich-text-fields). ## Video block -Integrates a video into the Page with standard playback controls. +Integrates a video into the page with standard playback controls. Helps enhance content variety and captivate audiences with seamless video viewing. On the **Properties** tab, set values in the following fields: - **Name** – Enter a name for the page block. - **Video** — Click **Select content**, browse the content, and select a video to display in the block. -On the **Properties** tab you can preview the selected video before adding it to the Page. \ No newline at end of file +On the **Properties** tab you can preview the selected video before adding it to the page. \ No newline at end of file diff --git a/docs/content_management/configure_ct_field_settings.md b/docs/content_management/configure_ct_field_settings.md index 999cc655..2d8d4f3e 100644 --- a/docs/content_management/configure_ct_field_settings.md +++ b/docs/content_management/configure_ct_field_settings.md @@ -1,35 +1,35 @@ --- -description: Configure Field settings in content types. +description: Configure field settings in content types. --- -# Configure content type Fields +# Configure content type fields -When you work with a [content type](content_model.md#content-types) to add or modify [Fields](content_model.md#fields-and-field-types), -you must configure different settings that control the way [[= product_name =]] -treats the contents of each Field. Apart from general settings, certain Field Types, for example, [Landing Page](#default-configuration-of-pages) and [Content relation](#content-relation-settings) Field Types may have additional settings. +When you work with a [content type](content_model.md#content-types) to add or modify [fields](content_model.md#fields-and-field-types), +you must configure different settings that control the way [[= product_name =]] treats the contents of each field. +Apart from general settings, certain field types, for example, [landing page](#default-configuration-of-pages) and [content relation](#content-relation-settings) field types may have additional settings. -You can only create or modify content types when your [user Role](../permission_management/work_with_permissions.md) has the `ContentType/Create` or `ContentType/Update` permission. +You can only create or modify content types when your [user role](../permission_management/work_with_permissions.md) has the `ContentType/Create` or `ContentType/Update` permission. 1\. [Create or open a content type](create_edit_content_types.md) for editing. -2\. In the **Field definitions** area, find a section, for example, **Content**. +2\. In the **Field definitions** area, find a section, for example, **Content**. -3\. If your application requires a more granular organization of Fields within a content type, click **+ Add** to add more sections. +3\. If your application requires a more granular organization of fields within a content type, click **+ Add** to add more sections. -When you add a **Metadata** section, it is later presented as an additional tab in [content item](content_items.md) editing screen. -You can use it for tags, product categories, and so on. -When you add other sections, they are later presented as anchors in content item editing screen. +When you add a **Metadata** section, it's later presented as an additional tab in [content item](content_items.md) editing screen. +You can use it, for example, for tags or product categories. +When you add other sections, they're later presented as anchors in content item editing screen. All sections are later presented as headers on the content item details screen, the **View** tab. -4\. Add, reorder or remove Fields as required: +4\. Add, reorder or remove fields as required: -- To add a Field, from the **Field types** area, drag the required Field tile to the section on the left. -- To reorder Fields, drag and drop them within the section or between sections on the left. -- To remove Fields from the section completely, click the **X** icon in the Field's header. +- To add a field, from the **Field types** area, drag the required field tile to the section on the left. +- To reorder fields, drag and drop them within the section or between sections on the left. +- To remove fields from the section completely, click the **X** icon in the field's header. -![Adding a Field](img/add_field.png "Adding a Field") +![Adding a field](img/add_field.png "Adding a field") -5\. Expand the header of a Field that you want to modify, then [change its settings](#general-settings). +5\. Expand the header of a field that you want to modify, then [change its settings](#general-settings). 6\. To save your changes: @@ -38,27 +38,27 @@ All sections are later presented as headers on the content item details screen, 7\. To discard your changes and close the window: -- If you are creating a new content type, click **Discard**. -- If you are updating an existing content type, click **Delete draft**. +- If you're creating a new content type, click **Discard**. +- If you're updating an existing content type, click **Delete draft**. ## General settings -Depending on their type, Fields can have different combinations of the following general settings. +Depending on their type, fields can have different combinations of the following general settings. |Setting|Description|Use| --------|-----------|---| -|Name|A user-friendly name that describes the Field, used in the interface. It can be up to 255 characters long and consist of letters, digits, spaces and special characters.|Required| +|Name|A user-friendly name that describes the field, used in the interface. It can be up to 255 characters long and consist of letters, digits, spaces, and special characters.|Required| |Identifier|An identifier for system use in configuration files, templates, or PHP code. It can be up to 50 characters long and can only contain lowercase letters, digits and underscores. Also used in name patterns for the content type.|Required| -|Description|A detailed description of the Field. It is displayed next to it when the user edits the content item.|Optional| -|Required|Indicates whether a value of the Field is required for the content item to be saved or published.|Optional| -|Searchable|Indicates whether a value of the Field is included in the search.|Optional| -|Translatable|Indicates whether a value of the Field can be translated.|Optional| -|Can be a thumbnail|Indicates whether the Field can be a thumbnail.|Optional| +|Description|A detailed description of the field. It's displayed next to it when the user edits the content item.|Optional| +|Required|Indicates whether a value of the field is required for the content item to be saved or published.|Optional| +|Searchable|Indicates whether a value of the field is included in the search.|Optional| +|Translatable|Indicates whether a value of the field can be translated.|Optional| +|Can be a thumbnail|Indicates whether the field can be a thumbnail.|Optional| ## Default configuration of pages -The following settings control the behavior of content items of [Page](../content_management/create_edit_pages.md) type. -You modify them in the **Field definitions** section, the **Landing Page** Field. +The following settings control the behavior of content items of [page](../content_management/create_edit_pages.md) type. +You modify them in the **Field definitions** section, the **Landing page** field. ### Block display @@ -75,37 +75,31 @@ Now, only selected page blocks are available in the edit mode. !!! caution - When you deselect blocks, any related blocks that are included in the Page - hide as well. - To publish the Page, the editor has to remove these blocks from the Page, too. + When you deselect blocks, any related blocks that are included in the page hide as well. + To publish the page, the editor has to remove these blocks from the page, too. ### Available page layouts You can decide which page layouts are available for an editor. -Expand the **Select layouts** section, and define which layouts are available -for this Page. +Expand the **Select layouts** section, and define which layouts are available for this page. ![Layouts](img/select_layouts.png "Layouts") -If you deselect a layout that is currently used on a Page, the editor has to change -the layout to be able to edit the Page. +If you deselect a layout that is currently used on a page, the editor has to change the layout to be able to edit the page. ### Preferred editing mode -You can set the editing mode that is launched when an editor starts editing the Page. +You can set the editing mode that is launched when an editor starts editing the page. To do it, in the **Select Editor launch mode** section, select one of the available options. ![Editor launch mode](img/select_editor_mode.png "Select Editor launch mode") ## Content relation settings -When you add or modify a **[Content relation](create_edit_content_items.md#relation_field)** or **Content relation (multiple)** -Field in a content type, you can decide: +When you add or modify a **[Content relation](create_edit_content_items.md#relation_field)** or **Content relation (multiple)** field in a content type, you can decide: -- which Content Tree location opens in the -[Content Browser](content_model.md#content-browser) when the user browses to a related -content item +- which content tree location opens in the [content browser](content_model.md#content-browser) when the user browses to a related content item - whether relations can be to content items of a specific type only, or any content type #### Relation starting location @@ -113,9 +107,9 @@ content item In the **Select starting Location** area, select from the available options: - **Default** - the starting location is automatically assigned to the default location in the tree of a created content item. -- **Browse** - use to manually select the location from the Content Browser. +- **Browse** - use to manually select the location from the content browser. - **Content location** - the starting location is the location of the content item that is edited by the user. For example, if the user edits the content item with the location `50`, it sets the starting location to this value with children under this location. -- **Root default location** - use if you want the Content Browser to start at the defined location with only children available for selection. +- **Root default location** - use if you want the content browser to start at the defined location with only children available for selection. ![Select starting location](img/select_start_location.png "Selecting a starting location") diff --git a/docs/content_management/content_items.md b/docs/content_management/content_items.md index 34b0bd96..2287cbdf 100644 --- a/docs/content_management/content_items.md +++ b/docs/content_management/content_items.md @@ -4,20 +4,18 @@ description: Content items are containers that Ibexa DXP uses to store content d # Content items -A content item is a single piece of content: an article, a blog post, an image, -or a product. -Each content item has general characteristics, such as name and identifier. -It also contains [Fields](content_model.md#fields-and-field-types). -These Fields will differ depending on what kind of content you are dealing with. -An *article* content item may consist of Fields such as *title*, *name*, *author*, *body*, *image*, *subscriber teaser*, etc. -A *product* content item may have *product name*, *category*, *price*, *size*, *color*, etc. as Fields. +A content item is a single piece of content: an article, a blog post, an image, or a product. +Each content item has general characteristics, such as name and identifier. +It also contains [fields](content_model.md#fields-and-field-types). +These fields can differ depending on what kind of content you're dealing with. +An *article* content item may consist of fields, for example, *title*, *name*, *author*, *body*, *image*, or *subscriber teaser*. +A *product* content item may have, for example, *product name*, *category*, *price*, *size*, or *color*, as fields. In [[= product_name =]], you create content items based on templated called [content types](content_model.md#content_types). ## Access content in the UI -In the Back Office, you can view the content in your repository in several places, -for example: +In the back office, you can view the content in your repository in several places, for example: - [Content structure](../getting_started/discover_ui.md#content-tree) - [Content browser](../getting_started/discover_ui.md#content-browser) diff --git a/docs/content_management/content_management.md b/docs/content_management/content_management.md index 093328e4..8514219a 100644 --- a/docs/content_management/content_management.md +++ b/docs/content_management/content_management.md @@ -4,7 +4,10 @@ description: Content management enables you to create, edit, and manage content # Content management -Content management enables you to create, edit, and manage content items and content types. It also includes content translation and publication scheduling. +Content management enables you to create, edit, and manage content items and content types. +It also involves content translation and publication scheduling. + +## Create and edit content [[= cards([ "content_management/content_items", @@ -12,8 +15,13 @@ Content management enables you to create, edit, and manage content items and con "content_management/create_edit_pages", "content_management/block_reference", "content_management/preview_content_items", - "content_management/translate_content", "content_management/work_with_forms", + "content_management/translate_content" +], columns=3) =]] + +## Organize content and manage workflow + +[[= cards([ "content_management/taxonomy/taxonomy", "content_management/taxonomy/work_with_tags", "content_management/content_versions", @@ -23,4 +31,4 @@ Content management enables you to create, edit, and manage content items and con "content_management/content_organization/copy_move_hide_content", "content_management/content_organization/classify_content", "content_management/content_organization/manage_locations_urls" -], columns=4) =]] \ No newline at end of file +], columns=3) =]] \ No newline at end of file diff --git a/docs/content_management/content_model.md b/docs/content_management/content_model.md index 7bce700e..90dac427 100644 --- a/docs/content_management/content_model.md +++ b/docs/content_management/content_model.md @@ -5,68 +5,65 @@ description: The Ibexa DXP content model relies on content items that are based # Content model At the heart of [[= product_name =]] is a repository that stores all content. -In [[= product_name =]] everything is a content item — not just the actual pages displayed in the website, -but also all media (images, videos, etc.) and User accounts. +In [[= product_name =]] everything is a content item — not just the actual pages displayed in the website, but also all media (for example, images or videos) and user accounts. [[= product_name =]] lets you customize and adapt the content model depending on your needs and the type of website you create. -Depending on your organization, if you are an editor or a content creator, -it is possible that the content model for your installation has already been created by your administrator or content manager. -However, even a non-technical user can easily create or modify the content model through the editing interface. +Depending on your organization, if you are an editor or a content creator, it's possible that the content model for your installation has already been created by your administrator or content manager. +However, even a non-technical user can create or modify the content model through the editing interface. ## Content types A **content type** is comparable to a pattern or a template on which you base [content items](content_items.md). Whenever you create a new content item, you must choose its content type. -The content type defines what Fields are available in the content item. -A content item may only contain the Fields that are defined in the content type. +The content type defines what fields are available in the content item. +A content item may only contain the fields that are defined in the content type. -[[= product_name =]] allows you to create, edit, and delete content types and their Fields. +[[= product_name =]] allows you to create, edit, and delete content types and their fields. A clean installation contains a few basic content types. ## Content items versus content types A [content item](content_items.md) is an instance of a particular content type, in other words, a single object created based on a content type template. -When a content item is created, it inherits the Fields from its content type. -However, the values of the Fields (their "contents") are empty, and you need to fill them separately for each content item. -The Fields in a content type are only definitions. This means that they describe what Fields of what kinds will be present in a content item, but as a rule they do not provide these Fields' values. +When a content item is created, it inherits the fields from its content type. +However, the values of the fields (their "contents") are empty, and you need to fill them separately for each content item. +The fields in a content type are only definitions. +This means that they describe what fields of what kinds are present in a content item, but as a rule they do not provide these fields' values. -As a consequence, all content items of the same content type will share the same set of Fields, but their Field values will be different. +As a consequence, all content items of the same content type share the same set of fields, but their field values are different. For example, you need to store book information. -You create a new content type called "Book" and add to it Fields such as Title, Author, Genre, ISBN, etc. +You create a new content type called "Book" and add to it fields, for example, Title, Author, Genre, or ISBN. Next, based on this content type, you can create any number of content items. -The empty Fields will be ready to be filled in with the information about each specific book: +You can then fill the empty fields with the information about each specific book: ![Content model diagram](img/content_model_diagram.png "Content model diagram") -## Fields and Field Types +## Fields and field types -A Field Type defines what kind of data is stored in a Field. -For example, a Field with a TextLine Field Type stores a single line of text, an Image Field Type stores an image file, -and Author Field Type holds information about author details (like name and email). -By default, the system comes with a large set of Field Types that cover the most common needs, -e.g. Text line, Rich text, Email, Author list, Content relation, Map location, Float, etc. +A field type defines what kind of data is stored in a field. +For example, a field with a *TextLine* field type stores a single line of text, an *Image* field type stores an image file, and *Author* field type holds information about author details (like name and email). +By default, the system comes with a large set of field types that cover the most common needs, for example, *Text line*, *Rich text*, *Email*, *Author list*, *Content relation*, *Map location*, or *Float*. ## Content model in summary -**content types:** +**Content types:** -- A content type defines Fields that a content item will be composed of. -- Every Field is modeled after a Field Type which defines the kind of data it contains. +- A content type defines fields that a content item is composed of. +- Every field is modeled after a field type which defines the kind of data it contains. **Content items:** -- A content item consists of a number of Fields. +- A content item consists of a number of fields. - Every content item is based on a content type. -**Fields and Field Types:** +**Fields and field types:** -- [[= product_name =]] comes with a collection of essential Field Types. -- It is possible to extend the system by creating custom Field Types for special needs. +- [[= product_name =]] comes with a collection of essential field types. +- It's possible to extend the system by creating custom field types for special needs. !!! note "More information" - For detailed information about the content model, see [the developer documentation]([[= developer_doc =]]/content_management/content_model/#content-information). + For detailed information about the content model, see [Developer Documentation]([[= developer_doc =]]/content_management/content_model/#content-information). \ No newline at end of file diff --git a/docs/content_management/content_organization/classify_content.md b/docs/content_management/content_organization/classify_content.md index 20432eb4..0dd0c2a9 100644 --- a/docs/content_management/content_organization/classify_content.md +++ b/docs/content_management/content_organization/classify_content.md @@ -1,63 +1,65 @@ --- -description: Classify the content of your website by using Sections, Bookmarks, Segments, and so on. +description: Use sections, bookmarks, or segments to classify the content of your website. --- # Classify content -To help you better organize content, [[= product_name =]] comes equipped with -a number of mechanisms that you can use. +To help you better organize content, [[= product_name =]] comes equipped with a number of mechanisms that you can use. ## Sections -You can divide your Content Tree into Sections to better organize it. -Sections let you decide which Users will have access to which parts of the tree. -To see which Section a content item belongs to, [disable the Focus mode](../../getting_started/discover_ui.md#disable-focus-mode), and look at its **Technical details** tab. +You can divide your content tree into sections to better organize it. +Sections let you decide which users can have access to which parts of the tree. +To see which section a content item belongs to, [disable the Focus mode](../../getting_started/discover_ui.md#disable-focus-mode), and look at its **Technical details** tab. -You can set up Sections by navigating to **Content** -> **Sections**. -A few Sections are provided with each installation, and you can add new ones. +You can set up sections by navigating to **Content** -> **Sections**. +A few sections are provided with each installation, and you can add new ones. ![List of Sections](img/sections.png "List of Sections") -In the **Sections** tab, you can assign Sections to content or delete them. -You can only delete Sections that do not contain any content. +In the **Sections** tab, you can assign sections to content or delete them. +You can only delete sections that do not contain any content. -Each content item must belong to a Section. By default, new content is placed in the same Section as its parent. -If you want to remove a content item from a Section, you just need to assign it to a different one. +Each content item must belong to a section. +By default, new content is placed in the same section as its parent. +If you want to remove a content item from a section, you need to assign it to a different one. -Access to Sections can be restricted by [setting up proper permissions](../../permission_management/work_with_permissions.md). +Access to sections can be restricted by [setting up proper permissions](../../permission_management/work_with_permissions.md). ## Object states -You can assign specific Object states to all content items in your website. +You can assign specific object states to all content items in your website. To do it, [disable the Focus mode](../../getting_started/discover_ui.md#disable-focus-mode), go to the **Technical details** tab, and make necessary changes in the **Object state details** section. ![Object state details](img/object_state_details.png) !!! note - The functioning of Object states can be set up differently in each installation. + The functioning of object states can be set up differently in each installation. Contact your website administrator for information on how to use the states in your case. ## Bookmarks -You can bookmark any content item by clicking the star icon next to the Content name. +You can bookmark any content item by clicking the star icon next to the content name. ![Bookmark icon](img/bookmark_icon.png) -Bookmarks are stored per user. You can view a list of all bookmarks by clicking Bookmarks in the left menu. +Bookmarks are stored per user. +Click **Bookmarks** in the left menu to view a list of all of them. ![Bookmark screen](img/bookmarks.png) ## Segments [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]] With segments you can target content at specific groups of your users. -You can use them to display different content to different Page visitors by using the [Targeting block](create_edit_pages.md#targeting-block). +You can use them to display different content to different page visitors. +To do it, use the [Targeting block](create_edit_pages.md#targeting-block). -You can create and configure Segments and Segment Groups in the **Admin** section of the Back Office. +You can create and configure segments and segment groups in the **Admin** section of the back office. ![Segment groups](img/admin_panel_segment_groups.png "Segment groups") !!! note - Assigning Users to Segments happens automatically according to rules set up by the administrator. + Assigning users to segments happens automatically according to rules set up by the administrator. Contact your website administrator for more information about your setup. diff --git a/docs/content_management/content_organization/copy_move_hide_content.md b/docs/content_management/content_organization/copy_move_hide_content.md index 28cec17a..85132aac 100644 --- a/docs/content_management/content_organization/copy_move_hide_content.md +++ b/docs/content_management/content_organization/copy_move_hide_content.md @@ -6,20 +6,18 @@ description: Copy, move, remove, or hide content item, either individually or in ## Move or copy -In Content Tree, you can move or copy existing content items by selecting an -option at the top of the screen. +In content tree, you can move or copy existing content items by selecting an option at the top of the screen. You can also copy the whole subtree (a content item with all content under it in the structure). !!! note - Copying very large subtrees may take too much time and server effort. That is why the system administrator - may set a limit on how many content items can be copied at the same time. + Copying very large subtrees may take too much time and server effort. + That is why the system administrator may set a limit on how many content items can be copied at the same time. - See [Copy subtree limit]([[= developer_doc =]]/administration/back_office/back_office_configuration/#copy-subtree-limit) - in the developer documentation on how to set this up. + See [Copy subtree limit]([[= developer_doc =]]/administration/back_office/back_office_configuration/#copy-subtree-limit) in Developer Documentation on how to set this up. Copying creates a new content item. -If you only want to have the same content item to another place in the Content Tree, add another Location to it. +If you only want to have the same content item to another place in the content tree, add another location to it. ### Multi-file move @@ -35,19 +33,18 @@ After choosing and confirming new destination, all selected files are moved to i ## Remove content You can remove content by clicking **Send to Trash** in the menu. -If you remove a content item that has children (other content under it in the content tree), -both this item and the children will be removed. This also breaks the connection between the items, -so you will not be able to restore them with the same structure. +If you remove a content item that has children (other content under it in the content tree), both this item and the children are removed. This also breaks the connection between the items, so you cannot restore them with the same structure. Notice that the content item is not removed completely. -It is moved to Trash, which you can access from the left menu. -In the Trash, you can search for content items and sort your search results based on different criteria. You can then select removed content items and restore them to their original Locations or to new Locations you choose. -If the content item's parent has been removed, you need to select a new parent Location. +It's moved to Trash, which you can access from the left menu. +In the Trash, you can search for content items and sort your search results based on different criteria. +You can then select removed content items and restore them to their original locations or to new locations you choose. +If the content item's parent has been removed, you need to select a new parent location. ![Warning before emptying the trash](img/empty_trash_warning.png "Warning before emptying the Trash") -If a content item has more than one Location, selecting **Send to Trash** will remove the content item only from the current Location. -The content will appear in Trash only once you have removed the last Location. +If a content item has more than one location, selecting **Send to Trash** removes the content item only from the current location. +The content appears in Trash only once you have removed the last location. You can permanently remove a content item by checking it and clicking the trash icon. You can also permanently remove all content from the Trash by clicking **Empty Trash**. @@ -58,13 +55,13 @@ You can also permanently remove all content from the Trash by clicking **Empty T ## Multi-file delete -There are multiple ways to delete multiple items, for example: +You have multiple ways to delete multiple items, for example: -- in Content Tree, select multiple items. -Then click the three dots menu and select **Delete** -- in content item's details screen, the **Sub-items** tab, select multiple items and click **Delete** +- in content tree, select multiple items, click the three dots menu, and select **Delete** +- in content item's details screen, the **Sub-items** tab, select multiple items, and click **Delete** -Confirm your choice in the pop-up window with the **Send to trash** button. All selected files are moved to trash. +Confirm your choice in the pop-up window with the **Send to trash** button. +All selected files are moved to trash. ![Multi-file delete](img/multi_file_delete.png) @@ -74,24 +71,24 @@ You can hide a content item by clicking **Hide** in the menu. ![Hide content icon](img/hide_content_icon.png) -When you click **Hide**, you can choose to **Hide later** -and select and date and time when the content item will be hidden: +When you click **Hide**, you can choose to **Hide later** and select and date and time when the content item is hidden: ![Schedule hiding panel](img/schedule_hiding.png) -A hidden content item is not shown in the frontend when using the default templates. It is also grayed out in the Content Tree. +A hidden content item is not shown in the frontend when using the default templates. +It's also grayed out in the content tree. -This is different from [hiding Locations](manage_locations_urls.md#hide-locations), because it affects the content item -in all of its Locations. +This is different from [hiding locations](manage_locations_urls.md#hide-locations), because it affects the content item in all of its locations. !!! caution "Visibility and permissions" The [visibility switcher](https://doc.ibexa.co/projects/userguide/en/latest/content_management/content_organization/manage_locations_urls/#hide-locations) is a convenient feature for withdrawing content from the frontend. It acts as a filter in the frontend by default. You can choose to respect it or ignore it in your code. - It isn't permission-based, and **doesn't restrict access to content**. Hidden content can be read through other means, like the REST API. + It's not permission-based, and **doesn't restrict access to content**. + Hidden content can be read through other means, like the REST API. If you need to restrict access to a given content item, you could create a role that grants read access for a given [**Section**](https://doc.ibexa.co/projects/userguide/en/latest/content_management/content_organization/classify_content/#sections) or [**Object State**](https://doc.ibexa.co/projects/userguide/en/latest/content_management/content_organization/classify_content/#object-states), - and set a different Section or Object State for the given Content. + and set a different section or object state for the given content. Or use other permission-based [**Limitations**](https://doc.ibexa.co/projects/userguide/en/latest/permission_management/work_with_permissions/). diff --git a/docs/content_management/content_organization/manage_locations_urls.md b/docs/content_management/content_organization/manage_locations_urls.md index ab183da6..ee3ca7f4 100644 --- a/docs/content_management/content_organization/manage_locations_urls.md +++ b/docs/content_management/content_organization/manage_locations_urls.md @@ -1,94 +1,95 @@ --- -description: Manage the content of your website by controlling Locations and URLs. +description: Manage the content of your website by controlling locations and URLs. --- -# Manage content Locations and URL addresses +# Manage content locations and URL addresses -## Content Locations +## Content locations -A content item by itself does not have a place in the Content Tree and is not visible for a visitor of the website. -To be available on the website, it has to be assigned a Location ID. -A new content item is automatically assigned a Location when you publish it. +A content item by itself does not have a place in the content tree and is not visible for a visitor of the website. +To be available on the website, it has to be assigned a location ID. +A new content item is automatically assigned a location when you publish it. -A content item can have more than one Location ID. In such a case you can find it in more than one place in the Content Tree. -A single Location can only have one content item in it. +A content item can have more than one location ID. In such a case you can find it in more than one place in the content tree. +A single location can only have one content item in it. !!! tip "Example" - You can use multiple Locations for an Article about a local sports team's victory, - which you can place in the tree both under Local News and Sports News. + You can use multiple locations for an Article about a local sports team's victory, which you can place in the tree both under Local News and Sports News. -Even if a content item is placed in more than one Location, one of the Locations is always treated as the main one. +Even if a content item is placed in more than one location, one of the locations is always treated as the main one. -To assign other Locations to content, [disable the Focus mode](../../getting_started/discover_ui.md#disable-focus-mode), go to the content item's **Locations** tab and click **+ Add**. -Then select the new parent from the Content Browser. +To assign other locations to content, [disable the Focus mode](../../getting_started/discover_ui.md#disable-focus-mode), go to the content item's **Locations** tab and click **+ Add**. +Then select the new parent from the content browser. -![Content with two locations](img/content_with_two_locations.png "Content with two Locations") +![Content with two locations](img/content_with_two_locations.png "Content with two locations") -### Hide Locations +### Hide locations You can manage the availability of content by hiding or revealing it. -You can do this in the content item's **Locations** tab by using the Visibility switcher. +To do it, go to content item's **Locations** tab and use the Visibility switcher. Notice that this way only affects a *Location*, not the *Content item*. -Even if you hide the content in one Location, it remains visible in its other Locations. +Even if you hide the content in one location, it remains visible in its other locations. You can also [hide the content item itself](copy_move_hide_content.md#hide-content). -When a Location is hidden, all of its children (other content items that are under it in the tree) will also be automatically hidden. -They can only be revealed if the parent Location is revealed as well. +When a location is hidden, all of its children (other content items that are under it in the tree) are also automatically hidden. +They can only be revealed if the parent location is revealed as well. -A hidden Location will be invisible for everyone viewing the website. -If you are looking for a way to allow only some users to view parts of the Content Tree, -use [Sections](classify_content.md#sections) and combine them with [proper permissions](../../permission_management/permission_system.md). +A hidden location is invisible for everyone viewing the website. +If you're looking for a way to allow only some users to view parts of the content tree, use [Sections](classify_content.md#sections) and combine them with [proper permissions](../../permission_management/permission_system.md). -### Swap Locations +### Swap locations -You can swap two content items in their Locations by going to the **Swap Locations** section -in the **Location** tab and selecting a content item to swap with. +You can swap two content items in their locations by going to the **Swap Locations** section in the **Location** tab and selecting a content item to swap with. !!! caution - Swapping Locations republishes their respective URL aliases. - This means that if the swapped content item was accessible by the URL that had a number at the end - (added due to a name conflict), then after the swap the number will be removed (if possible). + Swapping locations republishes their respective URL aliases. + This means that if the swapped content item was accessible by the URL that had a number at the end (added due to a name conflict), then after the swap the number is removed (if possible). The opposite case also applies. - Swapping Locations for content item with the same name and parent results in swapping their URL aliases. - This means that if the content item was previously accessible by a URL without a number at the end, - after the swap it will be accessible by a URL with a number at the end (and the other way around). + Swapping locations for content item with the same name and parent results in swapping their URL aliases. + This means that if the content item was previously accessible by a URL without a number at the end, after the swap it's accessible by a URL with a number at the end (and the other way around). - If at some point there were more than two content items with the same name under the same parent, then result of swapping such content items might not be obvious. The general rule is that the content item that previously had a higher number at the end of its URL alias will have its URL alias republished first, resulting in the lowest nonconflicting number (or the lack of) at the end of its URL alias. The content item that previously had a lower number at the end of its URL alias will have its URL alias republished second, resulting in the second lowest nonconflicting number at the end of its URL alias. + If at some point there were more than two content items with the same name under the same parent, then result of swapping such content items might not be obvious. + The general rule is that the content item that previously had a higher number at the end of its URL alias have its URL alias republished first, resulting in the lowest nonconflicting number (or the lack of) at the end of its URL alias. + The content item that previously had a lower number at the end of its URL alias have its URL alias republished second, resulting in the second lowest nonconflicting number at the end of its URL alias. ## URL management In your website, you can manage external URL addresses and URL wildcards. -You do this in the Back Office, **Admin** tab, the **URL management** node. +You do this in the back office, **Admin** tab, the **URL management** node. -For more information about URL management, see the [Ibexa Developer Documentation.]([[= developer_doc =]]/content_management/url_management/url_management/). +For more information about URL management, see [Developer Documentation.]([[= developer_doc =]]/content_management/url_management/url_management/). ### Link manager -In your website you can link to external websites by placing links inside rich text, or by using the URL Field. +In your website you can link to external websites. +To do it, use the URL field or embed links within Rich Text. You can view and update all external links that exist within the website, without having to modify and re-publish the individual content items. ![Link manager tab](img/Link_manager_sm.png) -The Link manager tab shows a list of all links in the website. Click any item in the list to see its details and a list of content items that use this URL. +The **Link manager** tab shows a list of all links in the website. +Click any item in the list to see its details and a list of content items that use this URL. ![Detail of a link in Link manager](img/link_manager_detail.png) -You can change any link in the Link manager. It is then updated in every place where it is used, across all content items. +You can change any link in the Link manager. +It's then updated in every place where it's used, across all content items. -The Link manager list also shows whether the link is alive or dead in the **Status** column. The **Last checked** column displays when the status was last verified. +The Link manager list also shows whether the link is alive or dead in the **Status** column. +The **Last checked** column displays when the status was last verified. !!! note When you edit a link in the Link manager, you cannot change the URL address to one that already exists in the system. - Once you save the link, it is automatically be marked as "Valid". + Once you save the link, it's automatically be marked as "Valid". ### URL aliases -Each content item can have one or more URL aliases. They are additional URLs that can be used to access this content item. +Each content item can have one or more URL aliases. They're additional URLs that can be used to access this content item. To add URL aliases, go to the **URL** tab, and click **+ Add** in the **Custom URL aliases for...** area. @@ -101,9 +102,9 @@ The URL alias must be unique for the whole installation, regardless of the langu For each new alias, you can set the following options: - Language - the language of the content item that the alias redirects to. -- Redirect to alias destination - when toggled on, the alias will redirect to the content item's actual URL. -- Place at the website root - when toggled, the alias will be created in the root of the website. -If this is toggled off, the alias will be relative to the parent of the content item. +- Redirect to alias destination - when toggled on, the alias redirects to the content item's actual URL. +- Place at the website root - when toggled, the alias is created in the root of the website. +If this is toggled off, the alias is relative to the parent of the content item. - SiteAccess - when selected, the prefix of the respective SiteAccess is added to the alias path. ### URL wildcards @@ -112,8 +113,10 @@ With wildcards, you can replace a portion of the URL address for many content it ![URL wildcards tab](img/URL_Wildcards_sm.png) -The URL wildcards tab shows a list of all URL wildcard definitions that exist within the website, and contains all the information about each URL wildcard. You can delete or modify existing entries, or create new ones. +The **URL wildcards** tab shows a list of all URL wildcard definitions that exist within the website, and contains all the information about each URL wildcard. +You can delete or modify existing entries, or create new ones. ![Editing a URL wildcard definition](img/URL_wildcard_detail.png) -For each URL wildcard definition, you set the wildcard pattern and the destination. Also, you decide whether the link should redirect users to the destination's original address. +For each URL wildcard definition, you set the wildcard pattern and the destination. +Also, you decide whether the link should redirect users to the destination's original address. diff --git a/docs/content_management/content_versions.md b/docs/content_management/content_versions.md index 2544f273..74a3c350 100644 --- a/docs/content_management/content_versions.md +++ b/docs/content_management/content_versions.md @@ -13,13 +13,11 @@ The **published version** is the version that is currently presented to the audi Every content item can have only one published version at a time. Whenever you edit and publish a content item again, its previous published version becomes an **archived version**. -It is not available to the visitor and you cannot edit it, but you can create new drafts based on any archived version. +It's not available to the visitor and you cannot edit it, but you can create new drafts based on any archived version. -Finally, **drafts** are versions that have not been published yet. +Finally, **drafts** are versions that haven't been published yet. There can be many drafts of the same content item. -They can be created by the autosave feature, by the reviewer as part of the -[editorial workflow](workflow_management/editorial_workflow.md), or when you save -the work and close the content item editing screen. +They can be created by the autosave feature, by the reviewer as part of the [editorial workflow](workflow_management/editorial_workflow.md), or when you save the work and close the content item editing screen. You can view all versions of a content item on the content item details screen. To do it, [disable the Focus mode](../getting_started/discover_ui.md#disable-focus-mode), and go to this content item's **Versions** tab. @@ -35,5 +33,4 @@ To recover your work, [disable the Focus mode](../getting_started/discover_ui.md Alternatively, open the most recent draft of your work on the **My dashboard** page, the **Drafts** table. Autosave is enabled by default, and set to save a draft every 60 seconds. -You can toggle autosave or change the time between saving attempts in **User settings**, by changing -the values in the **Autosave draft** and **Autosave interval** fields. +You can toggle autosave or change the time between saving attempts in **User settings**, by changing the values in the **Autosave draft** and **Autosave interval** fields. diff --git a/docs/content_management/create_edit_content_items.md b/docs/content_management/create_edit_content_items.md index ca28b6cb..318e8eb2 100644 --- a/docs/content_management/create_edit_content_items.md +++ b/docs/content_management/create_edit_content_items.md @@ -1,5 +1,5 @@ --- -description: Create content for your website with different Fields, rich text, tags, and then publish it. +description: Create content for your website with different fields, rich text, tags, and then publish it. --- # Create and edit content items @@ -8,16 +8,16 @@ description: Create content for your website with different Fields, rich text, t 1. Start creating a new content item in one of the following ways: - - In the left panel, go to **Content** -> **Content structure**. Then select a parent content item and click **Create content**. - + - In the left panel, go to **Content** -> **Content structure**. Then select a parent content item and click **Create content**. + The new content item becomes a child of the content item that you originally selected. - + - In the **Quick actions** block of the [Dashboard](../getting_started/discover_ui.md#dashboard) screen, click **Create content**. - Then choose a location for the new item in [Content Browser](../getting_started/discover_ui.md#content-browser) and click **Create**. + Then choose a location for the new item in [content browser](../getting_started/discover_ui.md#content-browser) and click **Create**. !!! tip - An alternative way of creating content items is to [drag one or more files](#upload-multiple-content-items) onto the **Sub-items** tab when viewing any content item in a [Content Tree](../getting_started/discover_ui.md#content-tree). + An alternative way of creating content items is to [drag one or more files](#upload-multiple-content-items) onto the **Sub-items** tab when viewing any content item in a [content tree](../getting_started/discover_ui.md#content-tree). 1. In a slide-out pane, make initial choices in the following fields, and click **Create**: @@ -25,18 +25,18 @@ description: Create content for your website with different Fields, rich text, t - **Select a content type** - use this field to narrow down the list of choices displayed below. Then select a content type to serve as a template for the content item. !!! note - + If you're using [[= product_name_exp =]] or [[= product_name_com =]], the options include forms and pages. - You then [build forms](work_with_forms.md) and [create pages](create_edit_pages.md) by using their respective specialist tools. + You then [build forms](work_with_forms.md) and [create pages](create_edit_pages.md) in their respective specialist tools. -1. [Fill in the Fields](#edit-new-or-existing-content-items) of the content item. +1. [Fill in the fields](#edit-new-or-existing-content-items) of the content item. 1. Click **Preview** to see how the content item could look to an end-user. !!! tip - + A content item can look different on different [SiteAccesses](translate_content.md#siteaccess). - You can select a SiteAccess to preview by using a drop-down in the preview screen. + You can select a SiteAccess to preview with a drop-down in the preview screen. 1. To discard your changes and close the window, click **Delete draft**. @@ -45,7 +45,7 @@ description: Create content for your website with different Fields, rich text, t - Click **Save** to continue editing. - Click **Save and close** to close the window. -1. To send your changes to another editor [for review](editorial_workflow.md), click **Send to review**. +1. To send your changes to another editor [for review](editorial_workflow.md), click **Send to review**. 1. When the content item is ready for publication: @@ -63,10 +63,10 @@ description: Create content for your website with different Fields, rich text, t ##### Upload multiple content items -When you view the content item details in the Content Tree, you can upload files such as images, videos, PDF documents, and so on. +When you view the content item details in the content tree, you can upload files such as images, videos, or PDF documents. This way you can add multiple sub-items without editing the original content item. To do it, on the content item details screen, in the **Sub-items** tab, click **Upload** and choose all items that you want to upload. -When a file is uploaded with multi-file upload, it is automatically stored in a Field of the content item. +When a file is uploaded with multi-file upload, it's automatically stored in a field of the content item. !!! note @@ -76,33 +76,33 @@ When a file is uploaded with multi-file upload, it is automatically stored in a ## Edit new or existing content items -Each content item is based on a [content type](create_edit_content_types.md). The content type defines what Fields -you have to fill in when creating a new item. +Each content item is based on a [content type](create_edit_content_types.md). +The content type defines what fields you have to fill in when creating a new item. It may also determine the layout or style in which this item is displayed. -Fields marked with an asterisk (\*) are required. +Fields marked with an asterisk (\*) are required. You can't save the content item without filling them in. -Some Fields, such as *Relation* Fields (which link two content items) or *Image* Fields -require you to select a different content item to link to. -A *Location* Field is a point on the map. You can type the place name, enter its coordinates, or select it on the map. +Some fields, such as *Relation* field (which links two content items) or *Image* field, require you to select a different content item to link to. +A *Location* field is a point on the map. You can type the place name, enter its coordinates, or select it on the map. !!! note - When you create or edit a content item that contains an *Image* or an *Image asset* Field, - you can perform basic image editing functions by using an [Image Editor](../image_management/edit_images.md). + When you create or edit a content item that contains an *Image* or an *Image asset* field, you can perform basic image editing functions in an [Image Editor](../image_management/edit_images.md). -### Edit Rich Text Fields +### Edit Rich Text fields -Rich Text Fields are filled in using a special Online Editor. Its options appear when you click the Field box. +To fill in Rich Text fields you use an online editor. +Its options appear when you click inside the field box. -![Online Editor menu](img/online_editor_menu.png "Online Editor menu") +![Online editor menu](img/online_editor_menu.png "Online editor menu") -You can chooose from available options to edit and customize Rich Text Field, for example, move up or down its elements, select heading style, add text elements, like superscript, block quote, or anchor. +You can chooose from available options to edit and customize Rich Text field, for example, move up or down its elements, select heading style, add text elements, like superscript, block quote, or anchor. -You can also add new elements to the Field. To do it, choose one of the available elements: +You can also add new elements to the field. +To do it, choose one of the available elements: - Unordered list - Ordered list @@ -116,13 +116,13 @@ You can also add new elements to the Field. To do it, choose one of the availabl ![Available Rich Text block elements](img/rich_text_block_elements.png "Available Rich Text block elements") Each of these elements can have its own settings, such as text formatting. -The option bar also lets you reorder or remove any elements in the Rich Text Field. +The option bar also lets you reorder or remove any elements in the Rich Text field. #### Edit embedded content items You can edit embedded content items without leaving current window. -To do it, first insert selected content item in the Rich Text Field. +To do it, first insert selected content item in the Rich Text field. Then, click the three dots icon on the right side and click **Edit**. ![Edit embedded content item](img/edit_embedded_item_richtext.png "Edit embedded content item") @@ -141,7 +141,7 @@ This option is also available when you want to set up a [relation](configure_ct_ #### Distraction free mode -While editing Rich Text Fields, you can switch to distraction free mode. +While editing Rich Text fields, you can switch to distraction free mode. Distraction free mode expands the workspace to full screen and shows only editor toolbar. It's helpful when you need to work with longer texts that take more space and when you want to focus your attention on editing text. @@ -158,12 +158,20 @@ To exit distraction free mode, click **Exit distraction free mode** or press Esc #### Anchors -For longer texts, insert an anchor linking a fragment of text with another fragment or section -to quickly jump through sections of an article. -Create an anchor by clicking in the area to link to and selecting the anchor icon from the editor menu. -In the modal window, provide the name for the anchor. Scroll to the fragment where you want to insert the link, -and select the text to appear as a link. In the modal window, click the **Link** button. -This opens the window to create the link. In the **Link to** box, enter the anchor name. Click **Save**. +For longer texts, insert an anchor linking a fragment of text with another fragment or section to quickly jump through sections of an article. + +To create an anchor: + +1\. Click in the area to link to and select the anchor icon from the editor menu. + +2\. In the modal window, provide the name for the anchor. + +3\. Scroll to the fragment where you want to insert the link, and select the text to appear as a link. + +4\. In the modal window, click the **Link** button. +This opens the window to create the link. + +5\. In the **Link to** box, enter the anchor name, and click **Save**. #### Images @@ -176,8 +184,7 @@ See [Images]([[= developer_doc =]]/content_management/images/images/) for a tec ![Table options in online editor](img/online_editor_table.png) -In table options you can define the first row and/or column as headers, -add or delete rows and columns in any part of the table, as well as merge and split cells. +In table options you can define the first row and/or column as headers, add or delete rows and columns in any part of the table, and also merge or split cells. #### Custom elements @@ -187,6 +194,7 @@ Contact your website administrator about the details of using them. ### SeenThis! streaming !!! note + This custom tag is in an opt-in bundle, to use it, install `ibexa/connector-seenthis` bundle first. Use SeenThis! tag to enable displaying of video with maximum quality regardless of connection and server integration. @@ -200,7 +208,7 @@ Here you can also add a link to the text. You can link to an external website, o ### Add taxonomy entries -To keep your content organized and easy to find, you can add taxonomy entries to a content item while creating or editing it. +To keep your content organized and searchable, you can add taxonomy entries to a content item while creating or editing it. For this feature to work as described, the content type must have a **Metadata** section, with a **Taxonomy Entry** field in it. 1. Switch to the **Meta** tab. diff --git a/docs/content_management/create_edit_content_types.md b/docs/content_management/create_edit_content_types.md index ba84ef63..c49ca576 100644 --- a/docs/content_management/create_edit_content_types.md +++ b/docs/content_management/create_edit_content_types.md @@ -1,27 +1,22 @@ --- -description: Create or edit content types by listing Fields that make a content item. +description: Create or edit content types by listing fields that make a content item. --- # Create and edit content types -[Content types](content_model.md#content-types) define what Fields are available in [content items](content_items.md). +[Content types](content_model.md#content-types) define what fields are available in [content items](content_items.md). To suit your specific needs, you can modify the default content types, or add custom ones. -You can only create or modify content types when your [user Role](../permission_management/work_with_permissions.md) has the `ContentType/Create` or `ContentType/Update` permission. +You can only create or modify content types when your [user role](../permission_management/work_with_permissions.md) has the `ContentType/Create` or `ContentType/Update` permission. When you edit a content type, each content item based on this content type changes. -For example, when you add or remove a Field to the content type, the change -is propagated to every content item of this type. +For example, when you add or remove a field to the content type, the change is propagated to every content item of this type. !!! note - Rules and templates for displaying content on the website are determined - at the developer level. - That is why content of a new content type that you create may not always display - correctly or may cause errors. - It is always best to discuss adding new content types with the administrator - of your website, to make sure whether they need to add it to the configuration. - + Rules and templates for displaying content on the website are determined at the developer level. + That is why content of a new content type that you create may not always display correctly or may cause errors. + It's always best to discuss adding new content types with the administrator of your website, to make sure whether they need to add it to the configuration. !!! caution "Deleting content types" @@ -32,13 +27,13 @@ is propagated to every content item of this type. !!! note - If your application requires a more granular organization of content types, in this screen, you can create additional content type groups. + If your application requires a more granular organization of content types, in this screen, you can create additional content type groups. ![Content type list](img/content_types.png "A list of content types") -2\. If you are adding a new content type, on the content type group's detail screen, click **Create** and skip to step 4. +2\. If you're adding a new content type, on the content type group's detail screen, click **Create** and skip to step 4. -3\. If you are modifying an existing content type, on the content type group's detail screen, click the **Edit** icon next to a name of the content type. +3\. If you're modifying an existing content type, on the content type group's detail screen, click the **Edit** icon next to a name of the content type. ![Create or edit content type](img/create_edit_content_type.png "Create or edit content type") @@ -55,23 +50,19 @@ Each content type has the following global properties: |Description|Additional information that is displayed when a content item is created based on this type.|Optional| |Content name pattern|Rules for creating a name for the content item.|Optional| |URL alias name pattern|Rules for creating the URL alias for a content item.|Optional| -|Container|When checked, Content of this Type can serve as a container in the Content Tree.|Optional| +|Container|When checked, content of this type can serve as a container in the content tree.|Optional| |Sort children by default by|Criterion by which children of this content are sorted in the tree.|Required if **Container** is checked| |Sort children by default in order|Order in which the children are sorted (ascending or descending).|Required if **Container** is checked| |Make content available even with missing translations|When checked, content of this Type is by default always available, even if it does not have a language version corresponding to the current SiteAccess.|Optional| !!! note "Rules for creating patterns" - When populating the patterns, you can use a schema with attributes which - correspond to the identifiers of Fields that make up the content type. - This way, when content items of this type are created, their names and URL - aliases are generated according to the defined pattern. + When populating the patterns, you can use a schema with attributes which correspond to the identifiers of fields that make up the content type. + This way, when content items of this type are created, their names and URL aliases are generated according to the defined pattern. - For example, if you enter `` as a value of the **Content name - pattern** field, the resulting items will be identified in the user interface - by their short titles. + For example, if you enter `` as a value of the **Content name pattern** field, the resulting items are identified in the user interface by their short titles. -5\. In the **Field definitions** area, [add or modify Fields that constitute the content type](configure_ct_field_settings.md). +5\. In the **Field definitions** area, [add or modify fields that constitute the content type](configure_ct_field_settings.md). 6\. Optionally, [enable and configure SEO for the content type](../search_engine_optimization/work_with_seo.md). @@ -82,11 +73,11 @@ Each content type has the following global properties: 8\. To discard your changes and close the window: -- If you are creating a new content type, click **Discard**. -- If you are updating an existing content type, click **Delete draft**. +- If you're creating a new content type, click **Discard**. +- If you're updating an existing content type, click **Delete draft**. Once the content type details screen is displayed, you can navigate back to the content type list. !!! note "More information" - For in-depth information about the content model, see [developer documentation]([[= developer_doc =]]/content_management/content_model). + For in-depth information about the content model, see [Developer Documentation]([[= developer_doc =]]/content_management/content_model). diff --git a/docs/content_management/create_edit_pages.md b/docs/content_management/create_edit_pages.md index 412f4111..bd97e2ac 100644 --- a/docs/content_management/create_edit_pages.md +++ b/docs/content_management/create_edit_pages.md @@ -10,20 +10,19 @@ You can modify pages with a visual drag-and-drop editor, the [Page Builder](#pag Pages are divided into drop zones into which you can drop various dynamic blocks. By editing pages, you can customize the layout and content of your website. -Whenever you edit a Page, a [new version](content_versions.md) is created in the repository. +Whenever you edit a page, a [new version](content_versions.md) is created in the repository. !!! tip - The Page content type contains a **Landing Page** Field Type which manages - the zones and blocks. - Any content item that has the **Landing Page** Field Type behaves like - a page. -## Create Page + The page content type contains a *Landing page* field type which manages the zones and blocks. + Any content item that has the *Landing page* field type behaves like a page. + +## Create page 1. In the left panel, go to **Content** -> **Content structure**. Then select a parent content item and click **Create content**. 1. In a slide-out pane, make initial choices in the following fields, and click **Create**: - **Select a language** - from a drop-down list, select the base language for the content item. - - **Select a content type** - use this field to narrow down the list of content type choices displayed below. Then select one of page type, for example, **Landing Page**, and click the **Create** button. + - **Select a content type** - use this field to narrow down the list of content type choices displayed below. Then select one of page type, for example, **Landing page**, and click the **Create** button. 1. In the [Page Builder toolbar](#page-builder-toolbar) click **Fields** and define the page's title and description. 1. Click **Switch layout** and select the layout. 1. [Edit the page](#edit-page). @@ -42,14 +41,14 @@ You can now navigate away from the Page by clicking the **Close** button. To help you preserve your work, [[= product_name =]] saves drafts of content items automatically. For more information, see [Autosave](content_versions.md#autosave). -## Edit Page +## Edit page -To edit an existing Page, in the Back Office, from the Content Tree, choose the page that you want to edit and click **Edit** button. +To edit an existing page, in the back office, from the content tree, choose the page that you want to edit, and click the **Edit** button. ### Page Builder interface Page Builder has a plain and intuitive interface. -You can create Pages without having advanced technical skills. +You can create pages without having advanced technical skills. ![Page Builder interface](img/page_builder_interface.png) @@ -57,7 +56,7 @@ Page Builder user interface consists of: A. Drop zone -B. Elements / Structure view toolbox +B. Page blocks / Structure view toolbox C. Settings toolbar (including Fields, Visibility and Schedule settings) @@ -69,28 +68,28 @@ The following table presents buttons and provides a short description of their f |Button|Description| |------|-----------| -|![Fields button](page_builder_toolbar_editpreview.png)|Edit main details of the Page, like title and description.| -|![Switch layouts](page_builder_toolbar_switch_layout.png)|Switch between Page layouts.| -|![Preview segments](page_builder_toolbar_preview_segment.png)|Access preview of the Page for a given segment.| -|![Timeline button](page_builder_toolbartimelinetoggler.png)|Access the timeline to preview how the Page changes with time. You can also view the list of all upcoming scheduled events.| -|![View toggler](page_builder_toolbar_devicestoggler.png)|Toggle through to see how the Page is rendered on different devices.| -|![Elements toolbox](page_builder_toolboxelements.png)|Move Elements / Structure view toolbox to the other side of the screen.| +|![Fields button](page_builder_toolbar_editpreview.png)|Edit main details of the page, like title and description.| +|![Switch layouts](page_builder_toolbar_switch_layout.png)|Switch between page layouts.| +|![Preview segments](page_builder_toolbar_preview_segment.png)|Access preview of the page for a given segment.| +|![Timeline button](page_builder_toolbartimelinetoggler.png)|Access the timeline to preview how the page changes with time. You can also view the list of all upcoming scheduled events.| +|![View toggler](page_builder_toolbar_devicestoggler.png)|Toggle through to see how the page is rendered on different devices.| +|![Page blocks toolbox](page_builder_toolboxelements.png)|Move Page blocks / Structure view toolbox to the other side of the screen.| |![Undo](page_builder_toolbar_undo.png)|Undo latest change.| |![Redo](page_builder_toolbar_redo.png)|Redo latest change.| Page Builder has two main views that you can use while creating a page: -- Elements toolbox - consists of all available elements that you can use by dragging them and dropping on a drop zone. +- **Page blocks** toolbox - consists of all available elements that you can use by dragging them and dropping on a drop zone. -![Elements toolbox](img/elements_toolbox.png) +![Page blocks toolbox](img/page_blocks_toolbox.png) -- Structure view toolbox - shows a structure of your page, including their division into zones and the blocks that they contain. +- **Structure view** toolbox - shows a structure of your page, including their division into zones and the blocks that they contain. ![Structure view toolbox](img/structure_view.png) ### Work with layout -[Layout](configure_ct_field_settings.md#available-page-layouts) divides the Page into the defined zones. The zones are placeholders for the blocks. +[Layout](configure_ct_field_settings.md#available-page-layouts) divides the page into the defined zones. The zones are placeholders for the blocks. The page layouts that an editor has access to are up to you to choose. @@ -102,8 +101,8 @@ To do it, click **Swicth layouts** button. ### Add blocks -In Page Builder you can access a toolbox of **Elements** — a set of blocks of content that you can add to the zones of the Page. -Each block is unique in its function and enables you to customize the content appearing on the Page. +In Page Builder you can access a toolbox of **Page blocks** — a set of blocks of content that you can add to the zones of the page. +Each block is unique in its function and enables you to customize the content appearing on the page. Add a block by dragging it from the toolbox to an empty place on a zone. Do not worry about placing blocks in the proper place from the start. @@ -111,16 +110,16 @@ You can reorder blocks later, in a few ways: - drag and drop block in the desired location on a drop zone - hover over the block and use 'Move up' and 'Move down' function in the settings of the block -- access Structure view toolbox and use 'Move up' and 'Move down' function in the settings of the block +- access **Structure view** toolbox and use 'Move up' and 'Move down' function in the settings of the block ![Structure view toolbox - reorder blocks](structure_view_move.png) -When you add a new block to the drop zone, drop it in the blue highlighted area. +When you add a new block to the drop zone, drop it in the blue highlighted area. Before you drop it, a bold line appears - it helps you see the position of the newly added block in relation to other, already added blocks. ![Drop zone line](drop_zone_line.png) -When you add a block by dragging it from Elements toolbox into the drop zone, +When you add a block by dragging it from **Page blocks** toolbox into the drop zone, the block settings panel open immediately where you can configure all block properties. ![Block properties](block_properties.png) @@ -136,21 +135,18 @@ To change this behavior, click on **Edit** icon, find the setting, and change it ![User settings - blocks](img/user_settings_blocks.png "User settings - blocks settings") -[[= product_name =]] comes with a set of ready-to-use Page blocks, +[[= product_name =]] comes with a set of ready-to-use page blocks, but [developers can add their own]([[= developer_doc =]]/content_management/pages/create_custom_page_block/). For a list of blocks available out of the box, see [Block reference](block_reference.md). !!! note - Before you add a block that involves products, product types, or product categories, make - sure your that your [user Role](../permission_management/permissions_and_users.md) has - the `Product/View` and `Product type/View` permission. + Before you add a block that involves products, product types, or product categories, make sure your that your [user role](../permission_management/permissions_and_users.md) has the `Product/View` and `Product type/View` permission. - Before you add a block that uses results derived from a [Personalization](../personalization/personalization.md) scenario, - for example, [Dynamic targeting](block_reference.md#dynamic-targeting-block) or [Recently added block](block_reference.md#recently-added-block), make sure that the scenario is [properly configured](../personalization/configure_scenarios.md). + Before you add a block that uses results derived from a [Personalization](../personalization/personalization.md) scenario, for example, [Dynamic targeting](block_reference.md#dynamic-targeting-block) or [Recently added block](block_reference.md#recently-added-block), make sure that the scenario is [properly configured](../personalization/configure_scenarios.md). -You can work with the block, for example, duplicate it, change its position or delete it. +You can work with the block, for example, duplicate it, change its position, or delete it. Hover over the block and the toolbar appears. Click the three dots icon to see more options. @@ -170,8 +166,7 @@ The following actions are available: #### Configure block settings Each kind of block has its special settings. -You can access them by placing the cursor on the added block and clicking the -**Block settings** icon. +You can access them by placing the cursor on the added block and clicking the **Block settings** icon. ![Block settings icon](img/block_settings_icon.png "Block settings icon") @@ -180,15 +175,18 @@ The settings available on the **Basic** tab are tailored to the block's content. For a description of these settings, see [Block reference](block_reference.md). The remaining tabs contain parameters common to all blocks provided with [[= product_name =]]. -Use them to modify the layout and visibility of a block. For details, see [Scheduling publication](schedule_publishing.md). +Use them to modify the layout and visibility of a block. + +For more information, see [Scheduling publication](schedule_publishing.md). -For your comfort, you can adjust the size of the block settings window. -When you hover over the window frame, blue line appears. +For your comfort, you can adjust the size of the block settings window. +When you hover over the window frame, blue line appears. Click-and-drag the border to adjust the size. -You cannot publish a Page if you have not set all the required settings of all blocks. +You cannot publish a page if you haven't set all the required settings of all blocks. !!! tip + Settings and function of custom-made blocks of content depend on their design. For details on adjusting and using them, contact your website administrator. diff --git a/docs/content_management/img/elements_toolbox.png b/docs/content_management/img/elements_toolbox.png deleted file mode 100644 index 3df2bc49fdecb39610dec231cca8772a9493fddd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61915 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 bePkPepka`%iLx z8;xuVHnti-1!*CJCXKqx%C;A_b#iMMx(otrzVVonHXyCn3zO!^U~2;^2LkMGWafcN z*N+|gk+lkrQ<y^G4%Ly^*DZnee+JNEDqFpRif7&G z9i3eUj$9VWZ9FdUb6Q%4CoL|vQQd5}I>)D$$Oc^Ig|1g@(&b%77ZxbdinYi+PVPwC zpS^AbKGF}#*pEu<(4nB9oVSV4Ztdl#$8?3^^h=}h3DVF81l!7iy)}4v8aK%wPAG4l zcOc#Lm)u{qZ^kQL*FRfYyz38^U(CFlE8@4q-0Sr_gTeuYT#*rA*wU$5D5+Q|Y5W#U zzGm(jYNyGyAdBduvT2-(;wEB(@sBBh4)=Se=$l`V3;;8H9VB_{alR z0%GY}by7yRvlc~QnaK74P?7vPCg(UHXL5Gl61v zwz$z%)>@w}!qEKq)!asxSm5@0#<|q)%VlY6cs}pVG&NV~?#Cc*4mU zqKHDnInvhqKD14gQm^WQ3G5jy#`KqSyo%4MW}8YSS9gb$0;K78x8~cocq`8>eAj=J z&hKZMq`c34TBrH&w_1FbK3dF_#GrX^DxHrO28U1ZF)%U-yVpHW=yMguVJTkMa}_Jz4}CzWYEMd@^BT!d?y9-H z-sxTxKhrd~;X!q;=m^>4`X1}@zz%A_#L>cFF^TvzJkv^w^RlMJ{WvPJ`H0N;(_#1} z;4|hAim=C{>4i;bK-BxV<+9Ve?9n7?eY*g*?=x2IiyXQC^?09eD(#?@{kT=C+IwL! z4Yx-@Ik|Tj+e7FhJp9lVx#eN{T)LXt_o_nWVbQcX=e~nJi9^BX1VEs>qR#+E zEP`?!2YN_w*sgl%Z}!ygo*>t;J!Z2ad&*r!JsM?YMx*=dY+sPpA)i|De}`i z{l8b}2_-)sMEDF$?T>oxXA^Od<*WTLdU?8@iXNW0bf{k}iCjOqy;(XhF^v4_(z0(^?}JBRdN&`whA z*9-J9$dhMUrAiR!&ljsA=P5i*r9A6fCVs!14mgr}ZhT&Pj(A8Pq7rp{9oP%6xSwK( zrtVV>#y>qQzOR28_Aml;rKdxsUZ0slA9YJT1G$6D-_$-`psH8>)^=X>=2d#Gu&Rv< zx_7S^S@7EmSGxC-1oxT>JgBSJTBoMCu7A%1QKmX7rde=Su6JU9 z96z9Iiv`O1wb6Lg)B}6HoMctS*Fs7f8Xp`TNgE1PysZEghkwK7$hJ=ZYj*D3Fq@nM z^fQ2N1&~RoP$L#UPStxdV|)AFb8y9<)hLgtxVY>~sjgannEYlF#`3D3z#ib=b_9Vy z2^fQRN4)DD@4bHT7e;PD!?T8zcRDY8*49ofR-&}0E5CoA!ZRokSQ!doil(1<@e6Vm z9nD85A$Gs;tCLhME0KQb3>UEfmS=_C^$oy-Sfz-4VHQ*aMrNh%=9{I`$QuD_z*lJJ zBzp1-_Q;AQM+pg?!fCVSGr@TLfn*tq_L6ot$+G^#(NL3yMNf@xKAhf1H#0L){+l?~ zO`}wf)1i~6wjbxHU(=4gcJem(5eF%urqw^)t_FlxhSo4@Hz*H(y3wk?T@MR$&S3`t z-k#<8c|C7GLn6q9ni|Xbj})z1bMG;&SY=qD!fI-Mqez$y2n4LYfqj|3P@v=BOFcbE z8LrV2vVEGXAzAi^mD%QzneX3@Lve8Rg7cG6=gy*hY_qmNR+~GUXq*1Mi)GYdW`(Ye zr`Zu*?HOi_d^VXCcx2K-`A3}5W6zIT#Rhby9LQ6htde6SqN*A{OizFj5=X<#Ql#aZ zS4eYsFC!3n%kchzK<}dc-43K|B}z#4$ns?q01>d+x=Tn%Y=)N#D7IX8O$A|NmwI)cNGw5 zPq#vw1EuyOQ#yj0=~P5QVOBc^c7W z*JJ=Eq_?uS+wq;r@$u6AJAcjRXStzL_58O@YF!2gPJ{>G3fDDK){aK&C-LwZj0Xaa z8?Z6rM|oTro=ZZmwQraoht;dut7K`#HAZ+(_$(Mg>3t&Jb(tHG17qVhuiu1DE5rsB`(?lI8Y>pO25!>8hGX?$TDh#6hOj^*(?(pp+ zM30mD;DTf;{J&qTo_@4pq*s2^!_rAo#hk5%&qeY|FSvG@$GAzDH{qNR#D{ASuQ7(G zZ$wSR!RK!ey$@h-r#uP53CbBaZ$3oFUgXu*T2#6`+`8_wqXy?`5n(Q%C#MsNdOLsQ zv(5g)CGzCe^+E`$A_#p*RvwGINfP#*TwJ7LTy`OHJ1UAC?Rivz8zFdUk+5#q;<#v_ z{Gq%~07iaS^T~5 zTVJ22eZ~4I*iGU^XFYz5GVk~IJ&x_&pI!Lk zulHJl*&Wqf7OY(M4iBevYpa2^X}PJIqi3cw6dK~`s^adNhKAt8Qmn~WcDrc8HSRml zf-5jgPvrs2SvnjSxy;P~Y58~mRm1<#Jl?|$2CCXgzz}+6l9t#U{c5xKgq+jc0KmMX zPWEp#b3Bw*C??i~^Kkg{L2erfrSVl(3Yyu5$zT4^TH}BCT!nMt0S?7y#nnz;{@K0e z2)HNnrnp-<=q*<*)%F%amm|BBW$tRyVcip)NWRRLy`@>6!WvfunYTg_y&;j>)LDVh z@>>N^^U22p2tDYF8x!TmKN%QMaiJZwP7f>&3^y9?)RV(8UEbIo+To`Inqj|7nDHfv zJtd=?-X8?h+Ad2&j>pc99iRc8l55tQS3zdLYQ$=D)Lb)!1Zg0)r^F|{hYts{b=f(P z##~@bj4>5U@9!;r4U&jNLpk(;aV2!fKFQ@VCXf$!r>p?FvWHPdpch0x5PZR-9n8)W zJmqayca)8i{kGuKC#y~Whi@}NYs{wvb#)G#*LGbsC$)^Z&jm{=QdsX_d4&|g25;hU zGK+^eT$g-3L157KFTke#w;nf2xXrsD=Y!x@;=|+JK$h0h{CpJpo$5|!+iH%0V2N@%| zTUq)8yLO5lwvm-cgk_-c&<5`ggEUnty0Yn6s8o8=A(ss*md|Zhwc$M+(xM!c}he=7OSEerE z24*yJR)9!+RamT;`bl=v>{#HN4I;n{`<{df9`0q(+oB&vLfMzY^um5*sTY9Cr=>1q zfvFB~oS1)pi(2Rd9#S1sIm8KqHD(l9Nvyt30QZf^opgr{SQOq`YrNu+gD8+MEh+nH zU;a43hvXG2Yw75?;q9;+3l+dqHz-m(#}hD(z3P_)GcHS^SNg&lZ=l}>K9#OS#7ev@ z$A_*YoiaHe#{XQpk3QM~6V#s70V82Af#2R@{P()GCmV}`Ahn(eamRtSmTE&zZH;7? zh#D;IEd;i(zq`x6AP!Edv#&7U_Pm_iA<6bFaCd71QMyineh{1Wd7e^@X!3}#WBMK* zdDI*Qpy$S2v36Wc?y3TbF?oN75t$8WnF)i80w02B{8qxSrcGPXBDm6jfBnj7c7HT_ z=!s9l_)=P?F)$Cz$wo20KCKHQ)_A+L>xUGwv(dYh`Hb!5Rpwth>R%`w)y`&ryegV) z`-TD`00B$?6Z>vhoTWBZ!#>K420Z5A!#B0Ql2)BB9J*Y9Hg$LztNp2iX@%v?ZlH>? zr+M?4B=3QH!s~)O(Ed&Wt_cq5{C)4GPR-dUj+!Z^CZ?@5`)p);{-4$oW(-DqJ~<+) zh7LR@e_E(=lX)o0zI0?s07~-s7;`|pOZSO6ZrR;h!-LWQX0~;DJ8YNckp)r>8Rh}u zI9^h3jEFvl1t@=HWZCVQ6?Kvv;B;M5H0#&<6D^pizTTLZH&3Unt3ybqdQ`*a=u>5b zcteJff~NC=iNEqat&c%WRjTi$0-EbpWCw{5`|N~ncRyY=<4aZM^XM*7xZ|n58fIW= zDO_WT7uDXb|D;G01IR)zwy}-M~8mhU+05F3Cg3<%gr)ehQ z2s^$hlLp*}xo+RF?w)DU3V4TBK-zpWs80HdReX_Y^Zrcy>w?^mG2YJ)gOxm|p+Wc^ zgXQ>GOyMlirV>tDHUK_f_(7zpp`e8CqAhwK@do8IH>=YW(R6r|J8EDuJ&xqP*ga%B zp4mgNrgVl@j4~-tqf`x{;KVaux6h$fMI)Dnua@*)H?OW(+&zETb6H}9&(|y){%X4O z&fL5pUMx%lHu8b1FzKYS=lpYqEutQcpqE!To%%RMHGAB6dHn*N7FI;c*Qv3W1b(Wq z8?GhUDt+q}tWQ5<wscff6?eEMm6^w4l5u&v^lPAN3w=X_a+K~Q+`8IcziuGS z0?^{K-#IZsJZ; zHhB=d+dXEY{)-v5sb~4>8$If<5=9;_wHzyEH)eE%Y1@^Z(YOk~;!A=PHO7 zr&g@DQ=K>+qv*>}Oe8}?SFmd4pzi=Zp@z^lVqtEs+`b+4BSIDz;tVQggdB_CS3(c~}P()I%}LjZ5O7M?hRNcbjZJ-v|GAk35Lv%|gIZka(s!r!}p zH58~9mQ}Mxv8-Gu3Oyku1?}-OLDErEhQF z(PUArcQ6bhyZgi2^IXynYeHkmQ2-vGI^V9Zy403uZh2 zBXO|qGpuygVF0XMChWSy&It$fLi8p&daiRYyj9WC9p2w>o&RFs ze#PjcvL+T!QPlZ@JlUiAU1ScSz_O)|uFqpCZ4koDoW29omUVYez?!Nu2!xjjv7bF^?=%(br_RVaNHWgauy@L_MCu&|6dnC z(Dc_^IbPlwlL!7Eiw_RN(g5PQw`#SKYJ=1mM#PR!-B7W_{Oa0JC)N{HP4%ik$SM*Q zG~R~(cI9cov=D<4}WK==K9K{Q%@kt?u`PP?2AxD~Iw z9TuYA{9vMK8a0lNtG-4s_7VSiFWFXcoBH?>UYd24$@F8`{R?&F(r|D=GDNkGdr+Mwok7+Pgzxb! zjK{J-lLnx*KpdT@PBZ~6LeEnnJVHW{1dCef;z(6Xiw^otf?-6o$8o*HR||_LD$S?I z$E0ciZhQIse9LV)zFI2W$%$t&gWBj+ep-7zXhp!0^l@bkhV%c`b{>Br z2g8%6KbdZ|?PM?g{q~(O515$krd;=PDbh$gg#JZ9T*w>)@-Vew8?OV+Eo9wWe><}! zh3nZ~=57f>FRkU9_K8iuU{HatMKqmGog^V>0b5m@R#n#}8<;ZE`%o8baAH`R5mzv8 z2f8OiE^|*25U~&-d*(#LPsi>vsoB4H5R-4G-~ke-onkDLf1E!0+tbwj)3y)CdY7F< zLg2!;bJmSw>WtW^W^pFo?XWlr3R;>F9}Euw8}^3Z8o;zL9}8jZI=FN*@zbUyyEV;?X31$`XtG=c zUIW++ukF-Hm2^3#+_2MbcX=yv^ZUFdrPlY{-r={+i4L3bJ*6@TBx{<&lcK1oxZ7wf zFsiD{n0dU^px~`jlE41^(67Sgvo^zL*c1nMxe{}|?BLSafZTGgL0$jwW;Qv`hc66R zHX)h+hDe;7FZ<=Gg2;T#AkBPPLx%TeF}f`#J>4`v4pT@F9f1HcxZ|r=sKapEA2@of zV5%CYu+Bk$q7MkNnPPCzH#^FDjBM>0pP$;cWC-c#)67|Y<)B8=PA@;JtCLSnPSS8E z#Ko0-ffN+cvbQHSHpvS_p`prWDqxacM@$18S=x{tI=%K_`-#j0d7$oE{Dl)Rvl2*4j#-_%K`4I$rah%Ip zscLR~50^^2TQe(J2NL0#KYuDpNlU9pk#8psGTN86UJ-_W@CsJ6$E-)|5Z!2aiO8^c zb|_E`I%&EQ(x`SvA@E#9fB!OwEM>?4oIqwqI&!JwGJ)G&llJy4=A5`ItG4%9>+W-- zHFAAw2NgoqJE-vCni|Di%f1Ns$@x7bREb|89PjteKWR+;%zt5|m~g+{Yf$qX%2$`n z{{A~`L7n<-6}@KvRK(}Jb2_#|bmKJxe&llT&bE`1%Jgm36v2fiyd$TH#R#?X1HCOv z%?ws-tR(pl#dH$I_8umvPtfMgsU>Yas~QHKJv%vxPqZ2%V*(navGJ-Ei?m7=XgBcZ zXe?+|p`nFk*ab3B4E39Dc~0A)k5*(jmvZ`jNj-+xXGSxF38h4W-ei(RaQUOFs;lEE z5_s$0!N*lpEY!N#%(q|7wcf~nD!_S>k{U3(N~-?ajkS$hxihR9dN@1AIVN(mC>xl} zIWhY{XwXwh)39@`xeJa@Hx8@`fQFy#UG`j1laiCkraoyFN*}rPbzZ1uTylEptco>t z8I#?7+6YbG^8(4+G#s~H_C6U>hu`UIHddR^equj{OnTUpxE$O-8(SIXq0hNSj3FjQ zfFaczDKmiR9U7AFry0iRkRyv^Ar%|AtR8}blo=dy8b`-O)X>qmge`Rpz<2yb=7Z5tHn7xs=Zx7yOgc5zH%6cF5* zJq3kZazy2uNXL6O{Vtkc#@sfEi}c!5`X^rAfFm)bxMDdeDWk5k zG#vtyU4o5RZ_Re~U zRI9r8f9_PWYj^g4{52@j!qcYX*qKLKU1MQl0#^&xq0Vr#3@tm!@JkBku%^l30eyYA z+%ukNsQihj$(j|X_Nv|jT}OXivP*y;i&d&H)au>mTfz1VNOSfa1xvO+o#8i z5h=Ik{lcQ%RF`E1DKkTry$K7`{lx;Zr^kWPD!s88RM23`^Yw$&{(Np_g-W1sm@kk1 zv}$llie(=8>ENEYj3QEvdH>HYBu1>`7&*R(?U5uYT~EHmmd9I>dy{3;{yFId3B&E# zL43U9Ki5^I&8Ht_lDYh3x%Xg_KA94Rw_NDt@-4vje+NSU+Yet6{lKI6XRIuT5R{}6 zuv69kVcr_OrWrWU57W)U>PzO`kt+K;cZkUuE+qO#+=N^4A-7fdk}?p=$a8miSJl@k zxciOB@M6B{vLUl-9(ZsW6CXaj-W$K42qQ15I&Oi$PIqzXc!pd^Xt>k-OHyZBnl<$y zVB4G9qZ`3a&j*J$OHMP|j=*azF7n`f?)kUiZM=I>VI8}vDJuyan6=%OhAyAsiNVv~Syr z+cuGxg}-9}Up6OHO-Cp^+b9XmV$~`tNGC#V$fc~}8zO&TeQH6I8AQ*}%v-jj*Z`hg z;wnK?a=mQ3F)lG)6e+*PVeceeAy}D|l0SR>hcnyt)c9ZA9Y!+g)&dCy2rixKu&8JK z47%-(7we0OZ8p7I)SvW}LIa=99@fJcmCt4o4=zRoR4Yqsm)&WH5?Ofgp56eURl+WXvhwkR&5Ke zKsa9db}^>eXYaNp$}+SwP>+q+sbkAr?cSQH7&HH}O7w6aZq{uiDl)oS` z)Pkbg5SGSeQdYnB7>CiXZPp16=Vj%g_R-nc)sQSkrR1o!oD7b=-Jjfg}=3|q4d zS7WP>g3MO2nbB4Hq4re8`<3|8ib}p+a5Bziq1ObBi_V(6s=}CWk|xn+8OGnVk9RN1 zswyy{C)A0rf6&Z|ApE2Ojtf=)#pWEr(vvDVDbx=nYrk3HwwmXlGAil<+aqDv{36@& z)yd6aMlSl%y+UEIMLsOP33ZgNndh)JxVTF8y>%*=_FZa_Z#3$BG}T)+ZHkD7MYT-* z=|OE%0pKcU814JYja5v?GK_RZ=gJ zw7{AxIyG>#4^Wt1>k}hP)$yD%`6O+r?brt-i#nD#&%Z_MzuNVBDz+r6@@o3JL2`~J zK+0D)v{3z^$~u`fENs!d)RN*t^~j5pSQFhqmx(yMi>&h`c!R+WM1wC-Ep9PJw;{Yk zo$^ezrs6g_hUV;NfCM?RyzWRYtGfGj-n{n_3;lD_+>%p$xp1d+^lKX2v;D}cy|$&6 zQZkr!@-V<0a*A(wy(5<- zzU*oi>ce@$`c8X@3&r5z>-PnTYMT1k`LqWdeX^?F`6QK?UnR06M+f1>r9@a3U?B8bZN^rt%axxOtkc2aH}d(m7H zoRtSfY!hvY3Ld8)$;st~f8CkDv>C?`hr51Qj3WbAhT&Ds^2$9-)I%ViP-hWI6-Zxwi+EBW_uG+-gAHsxU~zJ86>iing` zUcODZvbxHsQZ}WR2P<=+?2a7G1ET+pkJajY;4pM=6j|}D;W&^Q*#{{D3oiN1D z;*ydG8k)j_s+^yyu#z9CikM){PSt-?D|Gtkuyla5mabSujpPYkl9;r3u|TuoLLtel zwBu*dUf>z3ifjKQ>=8(T%T_>CH%*N4YZ~0-H$p(X(Jv)! zezh-9(3B-iU2JZ?H`%P|(%(OPKH}bhS<}Y8=?f+^BtFIE78J(1{TYKst{)_CogZKN4fI-i3W}{~9`F8!>qgpJVtz*PXOEa8HCNt}7dT$V<4pu6!Fh)}G*5!!{wHo!d~W5J6G z%F7B-m#$@v!vRyvs&;k#a`^QtyBBS?F|}lo%@c{1o;I7v=P}x4e*Q~Y_IyKi&`9m* zIrcz7PTjY3nbe}W3sTQx1=vgcM|pw466gICIqv$oCO#P?@{i;SP$L<;x_s#yI5>y# zZFY|vFz1+Wa?t*m5w)>ezWgx##LxU)ablc`Qy?CRXIsIYhqfq+`Y|kEdnbl5FTrnC z{RbEQ|Lg*&H2%V5*K;lrEE(44yy@6=)6>NIqmKNR{c>8t%pciZ_~0s_W)IgCQAl+m z*7kDZa%1nvvCFdsPt?mNBclOZIyO6iU(DM$m%Mn@xQMUqVgl$t^JMVdwn^HP>W%im z`@On}=jRs%x~<-xLwo)G1%5Jc4K9rGl~_C{wnRhjMNRCub*Jp2Q*xY0vv)L^TklH< z`q-c=PE!GZUcFZcxJdKpP>>__Lh@1trQp1#vXMm9)Qj|A^s?>i@cj`tF-eXTvZ`<5 zaYBSKwN5{Z`3RJC1wE}c#<3I;9EFbrb@HEeca^4?i|>4j+$hDbRvu<8J{v~pir}N2 z6NS(f%or4>$)M3FaE$+6E^d)ekzUdw3(xOmeT^z3!a+eWlL@C1ET0%C2RulJf7>;G z>9L~*C__<$FoEr1Q66NaGdwt48VBpw8N^P9AWiW%cZzaDIbF?ePrmDXp0C&}F*e4o zEQ&_OWji!bXmYbshD*P|N{^HfJFB-w={1Sv#`VLoJJyRoh={TPuAvz_OjDYQi}B$O zK1K_??f?`$)`xRJ(+oFuR^6f|+i)%z0#j}7XM!yr1C8U3%(CvFfVg<2gbBaTDJ67< z2WIw%Z{ca}%KT+4D({7GQ%f{tbAlL6x4Mep-*{abN47&rQMeuo1#JjU6kC&5wc})N z3?&JY{l?D74bxivhk-fG_WiMR#s0sB8li+f)^QcDJ( zv8{I8iOb?-etbm06&w`$wpXWY(wqeE*^(j26MphLh79#?BUq;WvYy|cLZDsnUeNIx z@+l=r;(@#S;>2TgN=V?6Yu_Pd-@$u26a1BkZqpoo2pVdFz>Y)7NDi1ynyBj-Jq-_& z_Zo44SQy35A+i*JYh!>A@V@?%2XVlJaWDiT&A=n!%F@kCTCBdjCO}?^h;sfK)ajzfPCI zY2vII=(U{?To7xUHddp+C53^KdqTIlxYcWm$Aupf$j{4`z{<#t^V<3e z2{tz+jnqp_T_J-_lvu`GAk{PWxD6w*vzq|1@G|Eg~AJ&=p+oY9$_w_ymoAS!uz4=HjCYsQeNRo(YBRkOdS#?2TKN#u= zMLYl{6E%quWM-BQ^nDsZU|0X3)DnA#r7D&@OM8gWsy(jFQ3`Vr+(zQYG#+UK?lM zrPK@8@Z2q)(c94jBWvTD6Xv(=C2m-pc35HRSZ|0l2>yQozmPqFZCe%q2L%%lA(UHO zoD}z{n7g^rrR)E%$t2Fu-5t0K$r(qCn!)b6{((_u zSbiD8x+C7UU#(~$m9na;V#P0F{({Ta+Y@RhbW zfq{V@EWe!3B{3SIb}EU2He{b-zm1b(a>SK;U~uL(u^)bK&d&)>`LqqZ{Tw&Kwv5F* zV^BV`Fo>S(^y_DilAfC@TsQ*opDU>3ZU^AJ5FT zfhCSLjDlCYdMCBy(A)Y4)-DbI1hEd3e zmwfM-*>8`Up;K#)TPg_Oatq9SCCvQ&E};+1qfJSwOd+{o^|};~!iau28O|eM5g!@6Tf8&1Z{rPZ;_O*@! z!y0i^LPD?Z?V~PKbpEuM-LY#TTsy%R6BjLHZD1^+k8L%g{cjA1gQ-#n;a2>l`#(&* zbySqk`#(&BG$J5fB3;rAA|Tz}A|28o-3kbZbayu_-QBRTba#Vv$M0U>pYL;?zc`+Q z%ieR(T-VI2270(kqlUSlY9T(n*|cRSj98ma1x0)%#@+@Feu}eoY2lY;RrbHH!vgU< z0;aK2$0eOC$Ch-)8&Qt!k+T|cLRYM5s&tIsQ+wb21vI+2S_odtstb6S2XS)E zYj?LhoXfQdPX5pdAHxg1JZet@Vk$AM%tKYoKobW5ZvNMPelue1EJ>Z-wtcmIciccL z&QVdxrvQ^-`?0a%xq=$YCc))?bya`NCP8EP#SryM;Q&D#&{6QDj*d##BBi-1$+u0w zG6^NGvlfzdT;MzUQ$$LdC`jvIPgdJS$Z@}$7k#iQECNU@v?FHIPTa`M!=m%ai2mS` zXQiRp3dZbmeP!erc9PoPg3xgkqEb??jSCAKDm2;kn)YJWUNZU9WR|p*X>G>*l@D3U z>!)AH@;*b4W3W8%zLJ0X&BC*Ae(T%~mc?C<#Beo%0pq#S)g{wO{dZbG@rPm0#Zz

0$9NEOy(RQ1NBPk&Qx6Pa=qh@)odWpuw&S(m?YGEuCy{4pIBfD|_ z_ycLH0ZhW|3&PWIXsYgrPb+^^5Z^J^I{pl5<#cE|Uzi?(E+611$;^67tqo@rV)%U< zk4V^ym(=@mg41S>jsN*}bH8CTG6z>tFxqT18E^35vo>`50|%!=i;>?E@>^m~yJw%_ z=(kJ=v?@z>sO~kk3GB|ESDM_ zIPKR&T}B26E$yQJ7y#q{QMBXOIryCp5^=W1c5a1Bi-g*Xk67>}CX%5S^^bgh{lOXf z2tRt|e?1?Bhmbk&Z9#2hkzM1W!rhO+b6@_zz z+!ljFj(C2CaevDSjVS;}3N=BZe~?ecCo|ZFA|iO9zW*w&8aFy)kxo}y=HC=c|8F5n zW`@?h=AXYNTOJNsCxXZKSw~g!d-?nF9EB>jERM2!qJH~e0G_2UC>A(r=#Jjbmrt>Hygj>|lx010-(2k{aq<5mU^)3N znZrDiI${>lEM#{?R}|P(i>>;+zjdvEe*TmRi2VD(-%w!@rhv1g8Aqak)1@OzEr?W@Tkn&5z8?I(|3k z<9Qgk`w}fhmIZ+H8S?1-{MAVxOi_<(#)V^3Q{`f46?u$99^Y*LG`Nzgc&0$gW$ID_Eg!;J`q_UIt^Vu z>6zV@feBQz)RLFDl6INJfR*teDT;#wakv~BhHN_J*ou9#cWbV;oIiFOiy9tw1Ohr+4?kR;Gz?kL(vlo7MAU1E2?Pp6 z-?s?plWBf=%d2LzgZySVL42=4k6z~bO6B0kw=h_woGifWw#XNwx1VKwTb9{TMB!JF z*>Sgz!}{kqG$bu`>A2S77aq(x;@Y2#Z^n7%h)g>1SC)%XQ=CW6c`b>L+Iyu7qd1P3 zF|T#&X9|;AQ&Z7tHf3cPrr2p{LXYKAzKQ5)YYz(Sy`k@Yv-Yu*SirS(K_6Y z@+EMk_@wXi1-ZvrFF{5!?=h$)DJCDWT_8C|b%K=I0S==Rc91ogK!&$Xrk|GQzp-j7WnY zgL`#VWUQ<;JUnbU9M3#eW3CvC6I(D}V-Bfke=a^!#S*$y;@`^*M5!xLQp>Wp3dZBi z?N!kNn1bkUz^VP|CPX>5Gg7Dh@me6^OhDgf5D_#>)?8G#{IJHW19GR2@LXfbn`*s1 zw{~7GWWT&bs{ohr7>Ivsxk%seJdb|Z^P_y2Oua)Z8Xpr-ZWnIdk0+j+i9MFZ5^<+n z_UfKKLXVf!ots*dPqz(LxxFqKubEto*kQR1L#jDP;XtH|k!`z+B=g-fAoA&QDD`TS zqyE;aN}p99*%E(d@tFVIb=4kW>(uPJFIOS_@(v)BYC^kBFFU9e!LRyBB%ZV_LmZzV zitS2>o9MyLQTlGi5_JaCjI2DG(9hLb&QZI_44dY&t#cMZkIt>OrtF>a7aFTdA&gOn#Z36~xUb zdDBF1vpJ+3n;tKTmKf=Ab==A^&Yw^`enWn-`+^%O6n6d9l;AyD^U0*<=-d}B_(Y=1 zg`xtLUk}&&62v@slYp!uzgM;`527d>?RwBi-TB4{Hig=mj!p^nMvVol9*AX>me-PJrRM`&B%wx2-ugufeM68L-w4Q7Z_R7{Z{Lg%0TB}D zxEFDZ*$gKCqxE~F(qD;`Z}S_znZaZr3}?fc87686|58*?Pz%#5P-wIY;i4a8C$ZuA zT2xddv)&!4q2H{N(dl_}QZ_bQVW=36&%BXWTdaj6n-hp7Jhvm}Kb*j-$%rCqyrj|b z%k2HQs6z7ThbyyQCoaZP>hd<_QAbQN&fk~x<}_V{&mR@@(;0OjlN7*`?WQrw6p=DOw>lQu7U&q zaV{ep&ZfpNQtTWSyH$M_iBI5LOJR{wkyHOV({Nt>?*dwJe6d0I_eelw0k6?13rpSY zWplhlU?6$mA%OW`dRs(Ia)mI3;U^hox}TXYY*3JK(Rvq9S6B!!7Pdd$ z6GIyGi!2}Sgkyv~Zd{UitQkhr_=54r(#0xTZ)1~?U?dKp65DhqKWTfyqOupb*K3(f`b+Q-tA0n{*h%-UU>%W zGJ_2cz&5X;1xH&9Hh+v16ye_l?gwzy7HQN6W^I# zLxyj6H**3a!91cJrBp{E#tBVf<_3oDcNoQAJZBl|R)c>$MYZ@arY5hrKM37>4D#57 zFT{=UJ)m!w)+P~LNOj1u-;Zb0$WBjcS4Q`u!oPSP%j;ZkIxf^2l0P5$RDUq;D7Z~M zvRUwL@4S2{7TL?wY!qC{gypWQX-_Rkty0ThycMv2d2&Y|${SQQ13w0bqa2Rnv~?IjGk17CAb89ysnU~_*zOtC(M#=&f_#c{PL0iWRF@+RZ{=O@IFl*_r%+sMCfh_ zZ3rQ|AvZRi>;~p|*bH8aW-Xl0DK1I$)ndz+nRCOJ#}t{x=2?Xy+!rSeUSx9TH^-Cp zSn@Ax%uV68npv@~CsWGvW%!j5hw}v)+3zVOtDI*30>`$w2lA|bcUN5QIvTwdjwq2_ z4cZPDngrG3n!ml8fgfDc102IE(HJ{T?Ap@pwrdR)1)u)LjvxE~LEkM8oWF!2ek=fTOi` z9_AgEDL(!e>zT4*=D83&)Hh}t{>qY)$@kg#jv)l1!*&q2dFvtYwIC@*Y zUrd#2HXl`oFQ|3I3`zuL-<*w%TXy%!qvC>?W8&7@yj?Xoe!ceu4!)QBrSqVJajw{b z8&|+ypDB*XuSD-FJD)>t@T`P7A!0)T z@%oT<)U-BV;8y}l8dd}fWGKQw{cYmcu2i_@=eMciZ!9fM`sTmye`dQ6*n!M0@^`W0 zDn#+|@#&eR>QExct|S>Q|CWNiF-Q2(h1!YYZ{g#Loy@DBm811!^pN%&3_CiuG;_fr zvTpsjz<~jWbF<_RizXP8zint+79Is#T2`i-!Rt>GVD2L~`y_L=76m`45t~r!89e=w zy86YP?=6?r8~HT;I85F(n65t>-VfL68BLm{T3JVW>p{WCI#nzsP{}nm|8wW$3{RuX*~Y* zv+X4o$FDg@yk^Z#^fjPDX$Tl~D&Xxx#iPK9I;?s@@^3pQ;}8y5rl2CZT-JOWqj!oB zr;)KA-Fho5?$1AnhSHC4!f)+QaT|T+#*lRY$(tf=9!7#;@ z{{$|8Ob!`VS*<%TXNw9Y2+jZZ8~L)#kP`6mKtK1Zxk%8Tf86!|hvERBD4Uto^7OZN zL!(4h)<3$!6crC3DatKiCaK7}h;WDQyQ!w#k4|3Iwp1(%mrQcvIea{fqD1bF&EgL^ z|KxTnZ{5!jC!NV0|A+FTd=gbG4B>nrN^Fs!tLtI_1RxF$GOKDJJU#+LljyehCE~`qf_o^N$H8@Ru=Tc4|xF2rw)s6r(jn zihYQFl`(-@EQqB3Pvp^q3Af>lCvYQU#emYo1a~rTHH}?nd9Rbl+UlO=p8QSSK#+)p zv_Qm?(iT+K9oBTlE@i~Fc`lP7-qNlRiDb7c(JC0cGxs4kf>c=nK{F<0c&!S2AZx& z#J2z_3VJ6wJ#iO#R7ey%y|wiY$j5aBZ+`>^0m1)R48{?MyR@i?o|0zv1NXZf{I9PI zO7IahtMLH>01cLI54MvA@hXpi6`}O*cqm+Iw_?*d`ZIBaf@Wbwc}a0IhM!&NDgb#m zg@mDo7s)1g$$YNdC4Bt#?-d1z{zOqz*MQ_xStpbr_)yMt3gr}6Jduo88r%kz?m+H> zJl+(PC`G>({)bIw@$)rGbY8VAdiO(a1M= zaVo%d6Q*W)^BMLa#{*5nCqB=K$Es){C%RJG)y9E48H(d+Ow%z1^K~lD{#~7r94Oj^ zTfn$BA-K!lj#1IaJp;h=m_ka0+c z^4dq3bH~j-X0>k2(mTX?CQl}HwP6a?M~mdvx1h0-xLVEs)HRXreA2-w0AKE7PV>-d zbi0fx*Faq*8TiL~*^pI=seN*LcM%^@hb;s{;%IyxU&!F$@8x7-nSB4=)Iu9rStS5#Zo15BK9Gq&Y9zRKT(Q026N6(OS%g4v_ z5)_ogi>jYPYXCBwQXO1??8gIH)|I*g=R9@?&^*$|ejO>|kC7D>)|uz$48?1P;^M82 zJzZ9CP<5s#wh~HZN1=(Qddq1)?K>q&Gyc51_ls*561a}Nu_Vcuk})R@mBBa{yopCg z;{28Xmj2~)BPvu64_#?raXLheFwyV-Sl&{__i|e#C0Pbty#c~Hr#o^P_K5s{F|{1F z%Om~$3Kett(}`02>_TxQ8P9!BOQZbdON$EARd`j=*W^Llra$ar3uXgoDIzG=4TIU0 zA;ijqP-Osu{|<#8tXLEkFA;o@aKC64GI`>wHS_lnhZCzr?Z(Y59cU52gwqMK(DutI zGD<#&E34bo^FqZ*(`M{8S**+^vt4{u#L^)RD>-nWn&W^=B^D?j+N_tQt-xnXOpudv zR^&3iNH99Tu*3i5?l{P$tz(L`#lkLqrmYS++*Yk;=K_PFp-(gyiAMN*R^*DKX5uVa z%Cc^RRtid_FCN3+H~wJqORY3TMj??Sor*MRG|JGmQIH&n&_J*2TDVRtXV4Nm{d*pi zqN1{qyDt1GEF=NG#sr{6=6k#IrwE?^8uCjz7# znykd^X`nKRN^HMLGHksrWkZj%;v_fmkAQ~s(Iu7TwPlVAfXSPCPr1y_M#75o3=mje zSgj@6L5|Q%L)AtDm@XSTsS1Ea0}jCkk2eZ?aE)RYFf6FDBz_WqZh&}flcSauDQI4! zThk?>Mg4CE4O3#XVZRLw(uE*YZ1A|-Br8iejj)eLk9@Yu{jCb!JKzDT4U?zT!yLQt zcq|z^zdhNb9o5J8>@o;F^Pljn@fx$G~rxQvJ<|1UBP^97ZZV`1CtZRJ|iP4scR99h_hHvmEbj zdBIWt2tUITsi)|fDO@$F>FMEP0IB!jHgq|#hly62 z3y4PAKg6c4iB#~m!<@ky58x;XLT zCs|;NfUZ8RNhbcq)Nw}#8sV3BTN z6FVghlmeOw{w5VO zjnEXv$(=_n*_Kn^UpK;2AWBVMx0YR?d1%Y4g}<&i-;rYO^6?`~>&yn$fmh3c=`Kx#`H%axeJ6yAj^L zFi9i|bXxQ z?*XO%8jui*zOg?DR)>j6$@F)HZ2zm0NN{8|`4L=9d$RT>ptQHQ_8?lCWrXZ3na%^Up4gZ7hhE-{P{QXD8z6(FmI~QiRvb4sG-Z# z6+w;==h)?{IK#F(Y+%mC%t3+hv%r>tq`9xFFrd!?G{0kHIBksRauH8mnt!(50V`!9 zNL1J7#5Nc&QqI)W?nfan7H!cEI6y#)&ka(2+p}LBplRoKk@(`^CoaP@2{17?V`^Fa z=7{{1NtjYi<{-Repb`>{+En-mK63i_U*WV`5Y=3J+1Mz>H1x%JcS@ax?g)e9w}GQh z?RGPxEiM8uBgYk|bRd`0(6aXNjB|CV#obxeCH46v094fiiL*-}`S*MlvM8L>`$Or* zwz3qTb^mq9eTyWwh%f&{|0}x8fucG(4D@-erqv00z(Z$} zQvLpI&uz5ngc5uiZXVjD!A#SFE3AlNHpxt=y6Aoqi)oUQTbpw zTVV+rD@G(ohaNJ}|Ku;$3h%xIBR$AY%|Ch_7TiT(i!su}W~6AWXKP1(QfQmY>%3Dy zHrjIS0Y<6XVviM21BIxKd9|TOXDl0fd5?zY4=3dOucaJO04lmFr;6PC0MQXD7(^k8 zx2$YGAqfU82Z$Z+n`avncZa#_fF~M`H7yAGP=HmB_|}A=wPMQZ-cMwKfyDC|0xAnt$;DQW4%+~@&7*~fCWj3 z@X6Sg(uhV^%t#mIEp7;R33w{EAmWGcS(ilrAar>FQ!DeB8ai_b3tRc&_oE6lekAyS zRh~NNm8`4|j>f_K`DGAifh%Bf{ZO*pD>%UhkWq#I(*a}?|2Lx!B|9yt4yd(frXG@Xx_jBoZw}PJYv}v1T$3hGvk~k$Ohq_d@^MUt=C^*u);Kx-uxDX|KPz%rr0 zhIME{?fFCpUAblmOEqN-p2w!!jIu!434`EGu(m%-nrFD-FdN*HLMfSJa4T@b4TDP9 zRL?6`2pIm_`dUAQ;~VAEMfR{I6yNqnI$Az@q>AfI`Kyq7(Xc`);F4ROCZMc5fq(D4 z%|Hb9WliQ?_noSh-8EC+{z0xuXL>u|PoCY4B}BK?A{o(`a?7&xew%=lD&S?FlH0oxY+mrK z5GwRI)bL2bs|V7&?}w$k-L2;l0`@zAFO?k|`;On`HZ(Rd@$=!#x7;EQ;hp(@_1L&L zG5DL6a3GAfGFiy$aeo(T9=*gbxH~wcah~fGFEU(RL2ddD*r2|n;VVm9(jRw+txZUg z_1)zcHW>OmrL`prL`CwQ+uvV5kh@DduwU)11S{}AYspBZ(Pt_~30t{YN zY<#@gDkj)`1{Aeo{n(>Mjr(p=qe$wJ^5y^{X{oRf51%U#GMlN zl3?@Bt4zdgr{rI_w_k)x_3P7xllXK;->i6Sa>-~*q-3UI63rQMReZfLyZ;+euXMw* zyce_?sf@}fY;4GJu94@L=GDap9B4zw1aG`_?w3Ct^wmU~nr_P|KLH_<9v5jhmgljA zfEeLZMcW;>@$uGUi(X#kipy%ZGx_3|zTSSo)Arhyo+S(N?D#sucgtXCXe76>bR@FD z?A>v%42c=HF^`^}%Et$@$%#7oKdvUvcCEN)sl@#; zaUVgve^tMtK6EF5ORLJfIJCmLjj&!%xWzjpe;vg%gT)k7N_J zq&AG)YVjKOas<$n!eAb?*Q-PZO!I}t4d%Y1RY*p<&+e7|zT-?!>fMudxrB>VQ>`Pt zdV#)UC&L_BuVIEs~0|yX@({Q8G|qS?-Zp zIQ-Ts4p3h1>J(7sfq1^jLBv#y#tq@|+CcyNLI`oDm;tsx7cIve$pR9FpEllH0&P0ukv` z=1X$uXBh&J7an46>d}~4q+=PSUk*CSFtk) zxxci|9~~T28hX7}eO|IPJ~+}p&SwC}$t)bn`nZg$-J@1mTCT#%c{@e2+g(wFQCL>8 zsd(NR_d0C84|oR=&sXE^kjl+S4eibz3LYLQ!o`uHU$gpRc3w(V1iD_yUO=WNl6Hg9pIwC93Fe06 zzNcgh-u3!N+2@H!KRD?shzLG?dGEH_C(jugxB11O7Pe+!0G^TeGd6+_E-YOM5H*x_ zpXM^7?F>Xa(`|Fb$7$#q3prSj(~vMB4)N%GSipV@_(gNcK^-+6tW3S8T%a#5e66hw zVd+m^LdTO;kz;(h)W_2T86qXz*xXK|1mhVoRiu;Q&oPp4D8}z>Tqj?zx(oGI^h;d1AQp_xZ*tzAl9^8 zH6G*Qn|l%UD>-gjoezsi1q>-#blplr*qKNBm99@nRz`VM6e5N(vDqPnlarGlQbIua zPPk_6%Da)IrOpE!!RCI-v{TraCYi=&=Zy&l%Js-$TXxNtRkm8u--Tv9|5Ch%aa~_C zk*JcYFE7o+RO84DyxAY;82nL^q&JsrS5~BKhIB81l8>b{Ia_X6F+yde8BUP8lxlOZ z>}k$nt*93^hp@S-sV55&PA@t#7H~WG#P+HqC<;L=lM4qtbbv^pC#s}@^I?wc0WeaB zS>{b^Xhp4dvu-gtY=kWSnsxYyTM8!lXBd%I6X8ujK6Jk~mS>jNQ&X62tMXS^u;xf} zo5GA88vDS8_Z!@XGxvQreJU-kD&tm_CpCmEW*;xJw95`pM!1VVoi8YW*jzA2s*0}z zP)K$~YGzE9xvhw^KK|u0rGiOOL!h(ODeC63k=@j8>@IL6t-MsH5g>FqnH;3L<22zQ z^HAVz0+i4yTjK%R2OL%V>Rf)yhl6;uoAU!6%VbAD5Q7^y3T)bk~T zGkCGmV^oJ5tI$}2UwXd#xzUwb#AI;FKhB}7wE57+bVd~8ktF%51O4KG-0Kr<2EhD| zbC+n__}H&VQ12awk|V^jB8X9_pd=0*%$sK%)6JBDRvd?!Bh8mPNrDOLx`y(dUQ-3Z zychL4pJP$BusX8pZV}`ch%nDc ztFqbCL^R6saz8}~t$o|z(t7dirmKy`BT0pdNrS`V!P_sw8Rke%T6c$^+ACEa&JVxQ zD?T@qxvTMM^twdkyyFhlIUjW!io`QGvDaJhp4GRYtiUPeq4@kIue>EYRis35Q*n!4 zCQ0zRu)BzZ6)*36E3X_C^?d(XDuW{NEy+X>O}ZTTkdIlo0&9Kz3L=swu{l?TT0$;r zsaJVw{Y=u%xLC~Xt<7BKoNT&Ia$S#nR9}&d(VD{E$$(m+;I5lQmFjX&Kg0xEQ`ree z(r;yDZ83DISSY(2`FL0wYss6HHG+}q+Exf}s2M;3z($XEyBR^+)8Q;l1L@i> zv*L_pYv0%Wk@ps?D_m+m9oKFyN<1ui5Ab>7y+U6@$Tr7x9>-2zxf}d0vVhNWZ>KB8 zOOnLOvcz22QXPMNgfA79HX9LEpASxpku9ojO5g2IZD@c{^=oDF;Q)^7R!&y)VkOIy z4<_sPj&;PX8h5%K7eGZN{< zjjdH+Uwqr0b7zNm`n3+--%1ljv)&s|qO-qf`>`hI66U+k6>qIzb{p7p>~h86?@MT!k;uPJ@2_ea$XdID zd}wu86gC{-gcp#4%t-u;&?V3@sOc#k+2T}8YC=3pNE#VS$j@$Foq){=H3n{~thhLt zLutOy%bwe7&cVhG9MLE80C&u>W$$rU%QOAQ5dL~0{Jl4C1QLeOAG?Na%-SWqg|b65 z4umPgzjZt133|vYjGbQ}*rjE@NcFMTBdcqa865Lqy=61sE@`hLDOs%ZrMEa707_+57337!j6eu9L2LqnO<%wIjc2b% z+Rjg&bH=8`#r0+6J#N>rFsB^`jN5Bu)E>Mx&~bI;7f|ILMv>&O?NA~(?M20Sn~k-- zmAjas6EFd;ThgN?Pv_x%otOU(9Kt;9eCJfMSJ}!Bp^-9EvJG6-9+WwB{upLPlv)IL z(68e!-7RIqDx6}*tM6~Ne&pP=P@T5~I2KNRzoMfSE{{yBbJSuF)vQYe>;=lhxa%>T zO+vB)%`f872Y|WYrty=;Iox1P)?fq*-ErXm2#O7ra4zf z<^fh}TTSgC_Y17 z5`G2`^FRvS>cO}Km)YreE`l7}QBipuim(T>$ZD#W02BH~F>m>n=(soM4D6s|M$MdB zUOjL2n(W$MILtIyy&mE{b&SbPLD^Qto0gGMQ03LSkt_~z>6p+rOsg2o86V~UF;oDt zdbZs*?xQYi_Td-tcJ4oPbZ#L*^tTZ0SgxSfF34vnt;4W>$4GAqU}GJ1ICDCxih&P1 zDlc{toW^2&%WO={9q}%UjVMyOk{z&!ZzDt*&tMbx>JcMR*3Nnn!O@|bdQKK* zy}aa7No`*8_}*>$Ui=Q!SJO#=CQ@vkfBL!K!($h0sU>1GVqO9`d_=>V!iSshSkJ4yk7MnFze_y1Y zmMC9yx+PUPmYIvg9av*3z(%vck+I*sLYhQgup_q@I*%N-9SF0~&;w9ngFmLG>O(2Y z6R<3ir zU2gN?`wgSHj`fd1i-M$KOeiD2q&qC?{UJ61hP?7dd6 znvVfI-~^4+GDg z1X@KH>gWR!DoX$wS(^O~{H6m)v0Go#b9fx-Lzp65tUCI84^gpJ_QJRDXrIl%69ZBi z0+T5t_j(D&WG<=y{tj@RbB2^ElKXUDe@Vvoho86=nS>*}nuM^`16vVmjp9H=MajTX z-B-RYUe72nC{RhaulMe&?#+^XiTXFt`&tb?;^a3*cmo7zoaT(Bu0fI)j$^1xiu`In znB9^lTuIqP8<2h*g%uNd-j1KWX`Ez0#25T$-Ul@bW2?nik@)F#jB_+l3vGp%H=(?? z4d!|Tq(%yQ3zWr?=2=Xf_9)KRRt%%ZMu@xYJfr(^rg4Y4ux@|{imlM(ud~w(Mg!*$ zC<~`A3F24XZ>uW17kg!q4*0NfO8ke`dwMaYh!{;{2-hkR&GR}y6OvAdMm}vYFs#1P zpTyJz6ta8(BWu$FH^A`pHryiQXY}!ON?m5(&E;HI3Jn#j2)l%HQg|Kb#aeOm{j)ub zcN`|U4Zq1tInPKb2aD!nhA_cO@0R6Idjm>~&(tj2ui)fA!6;~sD?UVMs5@s)6#RtX ztzEnU3F`s$T(eAP6x2WEJ5A!$0meA5g*dR?+HgPgbQYOup}U&DGenfe@1TX^*cPM+ z0YdHWuB{s+9}opu-p}Su)5Yw)Mm@P)3=iPdw`FzwqX0##{WT;z*ees^LrM(ZvQ>U{ z#YhQJQ@1t6jV7v{(iLZO;h6ipGo;A^ol|8L*ix@r?A>G>U+3lKDXDyEdCIQX{-q)4 zP&R%%lkx$+8fCU^ZLoq`_jGSA84pikEu)RL0%f(KZyjXJvhIPNSqs?k25FH;Wc)49yS^e=q{!fX6TFP zW8>1uG8;aoi_R*2@PC=A4T1TTMju(m#7lz8NP@3nE1g-)KQq$kC_uoe1UEgwnvw=` z&o6U?5WztLzR_H$6W{f6tje%Z6Ir%4v^tdE2dB;W4;NPCtP%#63F~=C@Rjk*Mtv-- zAu#-8xinihqwB4i@IVZ)Lf3&`nCRlXq-+^|PuquMaLRpDP3vPyNw3PV@hAS z?_1W&Fd0!Re~>*9e(s{;T_|W)_{52o$i7B76gKevB$TK69R|2ZOrSb_@*wFOWdZY5 z9%5N%_S1gOvi(=mycs9L5dzfXxZosE-{+Jr%Vo~30t?euvC%y)J0F+mBgUdZ#o*mVuLzW^F_zzg+Y}Hk>Au z5~7p2MPg>uwY)NWofcl$ZQ&uDhL1D05Ig=5(q$kik4B++BEi+u(o(NIC90_QJS9Pb zm~m5G|2Me4XleO<6C&BRB2u_;@bf{lSL= zt(_9kE$1)x6&8FoO={}d`zO~~q@c~`fwTYqP+_`CJ)a6|JPC|rP*ucbyFD#2RIX|sj(DJ*F z@UdK6OiZVt=dCJ%thD^_n3-^k1BWtXWAnC4e6KFo-d1L156hM9&=SmE7#pkR*iH}l zklex2+nBWfxqfXaevg>Jk_zlpJ{D$Av$-s<&UQ%4N!6Ko#iryMEa=o`WJ)6cyrQyIAyOQ#qCGz| z9y4t%{z6c|D0_CP2*1Y9>%*^5(-Q!RE3dJN1JsKCx!GSB@c`-(FkH+S;gZ1p%fb`u zz=gH(#^|jDl3`3G5%`KEB2~1!i#SKedfr*Ahk@QNn_(X3&MRo@%(I8%CL6-O){{d( zAjn+z5&pA5yjLlV;oPBc1PO*?RmVlnX*SyVJ{h_cq8t- zSou=sPy+I}GZC(6v2xRmMu0n9$ba*eQt2fu%<9A%BQ_}sUwt}m2r7s=qJ&W`E}PcU zM+l=Fmd|;$g9bVqD}AGzGWyx*eDQ420WO$}nK{Dtf`i1`DMg#_jfQ({BY~t;piX!Q zQX;GiPO=d;;}c9PK}|)Xu~3^KSL?HjAhY4Pf^l2HnAMN@?pC)-RG=Do2*$#zf*`47 zaX{>i``m2EUbj$iS8{apP+&N_%G}6*K6BAMln!k?5vI_BesuAzInd|DlCFd-^YL_> zjEv$~4I2g%J0`&Fh#h2q(s5m?Ll=@ENoE=pxU)1pWc4Ej_<`!!-m)a!eH@7}y1+Hm z?u0XBtFPnkR(rmHgT^YfqZNLQlmiQR_%ho1*pn^YZ}z&x88OJe6)vmg!kpqek&jk3PVq zmLI+4gWAI@sr;^f8NcsnUO}2`<<|Jkt1p)M!J>~iN_@h}zhDz&Be5_^x4bVitIj3H zSlYDF<~n`G`2@K1r}AXmbWoP2^&0;PYBL8>fL!AmeJ?(jgVb;Ir8>`V`7EOke|})~ zs+PGRlosdbN-K~3b(7cimEI@0&g;$*&je7a#x}D-cl)l?9k`~K+ZAUZ=h{^!qh^kn zpkqwfr|ptuEQOP4S&RHf=K1OoYV#<@68W)hLdJ-hNAR{Ei?-RE~5SbQm zDH#Wc*0_|vFdtpTxs+}n^DKX>H1Mhtb*d|+2U2NHau4oYaQ*!S+$WX<%Y2w+EK645 zihvhofCFAg@Jw|utmhU6a^CjW!@}yIvV=R*G`8U_x3Tlpkk8;DcPaL{yd)0&GFc~q zPgy?ed5HX4>fd?wwK-pw{oqw?CQkiw#&*Jg=TA>@g4aliEavR4P**2aPJ;mFX6$0p&~WEab{2V}7NS$r`4vG1+|LK2n=Cq2)OxPBdtyCaWLtXwwk(yD z9Uskf9Y4q6(R2ZHcbDrfAXzb5M0r<34}8dFJLMH(Z3XaG-dy^_X7Hq7J~tyoC9PR3%~jsNkg5O3q@x_MX@Lm zoSGbI^{c)FQ_XXf+95Rp!dw4Ss^0@c2VLq8m+Nk4K~As!eHgS%a8elUrD1w=5*_3p z0uq2$kV)3}b}kg?20J_d65aqe$!Fn>)P-i>nVj~Xjc{2F`VPs=pxKVrwE#4W)3r`c3oym~!|ICyG}M1{8!A}O#)1`6 zLsT`=&FTA3)BFgPj$?#Ermy)t*VpYv_N}l5^wTOmA*tmIYtW4_5Jk=^Y9R2X7jE>J zcRC#iXAobTJq^R1p5{70Hs@Z#@{TBL>?VZ<5zwZ)Q^{utr$q`~Yc&A|ehc8*O6MLN zDey*bc(;D)7Boc6_+w`1PN6YF?U@ZA407;#r-6;a2x!kuJNEwo@`S?(1MfUAk%0Mn zZ;sQ9!!u#P-V(61Ri_v2TI_;X6Dai*H0i!|hm2ZrB{np;yKW3=q8{E~=}uYU0b*4k zBBs0@&X~9P`TlSpKxgwBopx2)eV)`J6CHxPnl>W^CI$YsbhCbGI$P8<0(>J@z0m+R zE+Z$0P9IZtbae{=sw&?l5cN;T+f_Y0JU;J#G%YSFT8|Swg)=&yqh34+2}|W6uS{*X z$D!$=1^<3R`p)sHRvLw_pk(yOd3vxN66f=JIV!hp=B${)I}4E+m&>pa4=S^@P;@KI zL(729J_%6){W8{w9AnQZRoh!yP(VC0j`A-*{70O^Y(r^oNx}@VWDyoYyrQx)V2PPC zIKh;aQkfs&`E18&PX5H9E^KH>babj$luqwQ9TDG5&n4G<{B)&v7m0Z1{5T;s>08kd z#Is|uRDy%LeQR!zdqq40(Jn|QaSgu8>QB!GLJ0~zP7Q=&)8eF&G3TRLo@Ygh;Ad-u z5a^Ns1D}A)-281zn`W|Wo`de2z=ND; zM{Dl_N;Hm`_VzU9;yajVgM}(E0>M7BmZhX)Nh#^>&ZU;_cptyNbKd=P&)Fwt=FXkH_Y)}w zO*hXnQ28gKqXTv!p*RiA_}k>JzgnV$51y-TJcR{sLaARczf#9tM#N$uG8n4=qIP3` znSC*e&6$r^JdzXCD!Mtswl#d!0jMWC}lw{h3MK@z07 z9E)mY+qIY#4yjxe8xmdi>fMNiqb(%9dzIoMCI9DKPu~=S7K9 zKS+mb2%o+DzJ}{2?`?<=KX1ZSZspdlwUFNFp$BY&hxc0}o=g~S;XeuG3h0#qztkT1 z@5*mWY_ZEJ&8Y@QlLfOd>baeksNQHwfQIW=r$I|i{NgL3 zN`I}l9}?EPZNg}liANh&pCw&(Iddk}g!KJ*o-Jl}UH1Wcd&lE-{>Cqj5g!V+K?y=4 z@vWM$N~1TuOztP74lB~j&F;Cm8CF0SJRvALIUJTf^jp09+)s3?;}KRR^Bv4n)^z09 zCKBg;20fT)dZ}_}!%FPPvR?aW3qVOqeHsBPfQ$Z@YLiJDgx-(k9!)XWu#|k|ESdYO9W{&o>cc3t&)7dH_PdUu(Y74UM!c!h$VtR|oTB_#LD%#eI5_T% zG!bJiKg_)uFcSFSxZrsr75q}e+q=EYh5dpGP-(9l20an*G%ejyC)GuCH-8R zT?@dz`4sxSEmU|HD3No@rzK^iRJb?qPgZvVQY-?bzB6ICC!Lrq0s`GReCnvzKAgpD z0@=C?HU(z1@?#_BHep4u%nBr1?Syn|7DQnOz-MsyG9*8^J34Wr^oW|0M>6YPEO7B8cU@n;ZHlnp5J+wJU633jw_-RJQf%qy5owQ&#}VP!+VAIx#t6^G^x9kTg>bZ^f@=w!lfS!pVZBRV42qoU zsNnP6BK)G^oHO^;H=~M#)kH{6-jHrKWo1G;T#p?3ZHmkrHjSyJSF1n&r^2vZiY34i zdPW66o1(4!xs$(8`7sSYeHHiPauX&#FFp_Sf%jmYesR5$;4Jv3-{I#2S3a0=$dRY< zPs@7sj6vO_xLAN!Jkibp)flcN-P$dihe5CAGR2=xsI^C?1(u{oAK`pDQ7xy8Onm<^ zbK?#IAJufDZv++}bta&AV!dpOQ&kzS0WOi%c4NrBHeYnpt#|Xz-@*B%4b(fQg}%=Z zSpXB7-yfV$1F?`XqxM;q0pqCOMAj3r8CBj~hq}Tu8zv3_&yWRdUu$3CNGsnn^4&P) zmWujQVj^$YLI=mtIg;X>ZI0_61`UE|{MhGjW(q3reyS&;XkpFIzc z@g;VDGN2@$Q2`)C+@9-NKVWW;zC`TTdR90bAau^-`|4DUe~7PRa4MrB+1)`P{!d#Z z<9jOUROf$fq2P_(9hXTSYOL3DE-sm%gqN5UXjnt`H(bfq(shb_WztMmc2+$0r&tt z1U=G|`UIk*t<7Rt3vP~B@!w=H=&;RMGSxXB_Fx2`S^{m=gfq}_TQ%#qncDZDjaAY; zd!(5D>w}(E02CupXeS?2BqTc6D8Lr#cYo2lrifRA)Z{rJaM3Zhs70Nt{M5FO=e>8z zq;2fE!%bLz=ScmykH?}ckvv|V3*LDf8;0U+YwEo7Qp5+AtG^Gyp z05JdxzmcQE*%DV{X}|vRrumNzFj2{8tE4NaiGP(~D1LK3bnwP<|J0=S zc#a;=n!%lIS;8GOoGv7{%t`d^NSl7jFSU*xI&kl7v)U5uzw>dSbe!W^7X{mMexA69wO_l58hfA>0Fvq7* z1m>z$-*X)3-F{gJ`HcU=<|~lh4EuHgYCIxyT{P-Ym-yu#axK&79Q0x#-Ia3`p-se= zN9<}%%ylR(th7L^*)9Lp#IIbuo0Qn$Lya6?9iNtgPDMtJ>ytYBDa)OF7WeSL$S2+) zREW_xIsXd%GVxcOm-9XUaAtR{qF*ocgs&Z~t0r7^)X`Z@F>3-u;Qo3nPNxsQy}A5# z{5RHpnB%E`vg+9y-yL~8Trx)jK*@;2GV7ajFK)IdOvU-2iID?rF5@~^vUF-H=e{eYSZwW*@h55BRM6`yRzSv9Q5$@DIu4yTuoOa{&c z^++xT9*xakp=OcV;$^$m)l`RYqz@f|CrQaP*6m%cpREl^bk*M{I<9Q5%lsUlBMM*O ze03@ohEs;am!enB%65R|pqDE&=%!a=6z5LSKMc+D=c>o(>cnhis#2MbgnU`Hq5QS4H4CJ4;GFB?I#-CKtlgxM*raqGSqK1li7a`qe=KEa2B$`ueBGrs!4Xr|4L znG9AgsmP0tFWN{+9jBR9EkP(-=Rzb!475i@`F+Z_xpWnf5)drPY*F=3pN{dY@uPN4 z$ny~1%(yxG;q#BsW}kL9rnjbV9X9)3QSzpjFS?WYXksLcZDk2~{URud!*jO`kYqJ} z7@OG?aj!j{Vd`9aU6z$;B#tTKeq7YvwC%nyVuin(#oIYIBkdVxrAv|{*NuBW(-?3a z>@|xz$0_lLkpkbK!Etq#3Pt9dKvQdw9LaRjNf*8`7SM9s90{no zNM5h{OWeP@xvDnT_cUzvtma1TxXf@F$+a9zN_|><<7xf_+n2ECP{d90mBtppnP?xVE0or@B_v$jf1Lu}d9?tu0Qskkr~= ze19aYC{1iWo0Z*LK9OL|5n@ZIS7h+U(|j|nE|*cqrN(ZS;cH(tE8s!IscdQ*F4-w0 z*zkVvqn} zZb(6Om}fcg76;i96suJ$`<|U+%>}vYuPz0eOu{HJSLn>jiX3SaEKk1`olTW6a@Q{W z&ru#p!R}gE?Yh&}?uWx#=A!UB#mTxx6kkN{n4S8<*5>4h3-#PFTs#{4JUj_e1^=6F zsq=0G{_lq zPj`7Q%l>e~Q@jqu_xsgJ1wyu&1LKuj4ge}0 zG+R!lL8Q0!MrFptAZ72mIu z=v;F&$JdovPpsB#j@DDd)BH@TyCvyGKD;$KedDljhAVY{^BUW=Dlrk^tzhetuGl@* zW154~x>s!TN6-<{AmP?g3@X0+y597XZ^pS#n%D*9T(zA5wDpP4+&sd|`RJVUckm?V zUU#hcr^S(T94n`a&t^yL?iwA0&)5DpqR_jA_VJOA@bPxuUbbv~b5I#ir6PHJg;Z*l z8%6zzcdFR+^ML^6UOsa4I~T()5q>K3nkWZ*rRImzL^P8rO{Ci6s#Uoa=6f1`8D?$? za7ec?lS+mpssEF-cYIyHVS_{Q;M2yhFkJ|2(|rK~ zY~ajIZI}3w%5!?aA??e$aBmvYuj*(2(3elw5c6d=R>8{bD?u9*h~}0ewP8!VZB;DX$%>Uv$(9XJr#WW zh8JT%b2M9eb_l95cVS?Pu{RDuz3QxO42?uE3{>x4A?$ju%gZYW!!oQc_j^QMSQHIP zGBO@ctL}Pf$;HAL`s0K-*16S+CzyydL@;Yl1o)p8%g>kkGAXCD^Xvo=n4LdQxwhU0 zb)uW;P5hA+wERnyA00eX85tToo*zb;D|gm^#p;#nN;oYo)kWK&7k%4!$^|!%;AtG9 zvojFrKktvrw`w9qnmbvqvnoUfnQCeCacLP8B$^5+b8dp>Snl#HIbs~&6IRxHD-cW@Slq+AK? z)CkahYNX?_5Q$f=xZVcT6B#nmb%^+FE~ZBX6SS`M`ME=!k4v`-@9{i^XwpR4!)K>) ztime8FZx3(+}U0hR&kaRRoB2Z;cc4hQ-+Z~-L z{~XX8;!hjfG3JJQH$T=pj=9Y~@QD~4aa}?D?`~nefmpW3yHFbsC*wI@_n}mGN1ZVS zP%AWagU7n=qq#MBJ{`i|N#<=Uep{nmKxCuFUr{ znu?c0PnBFBklxwwa(MxdVHErQd434V8(pQ{6ig5h*NbZdZdxK{w;64;p)eES$@q53 zk3BSPul8cp??TGPnRCtWYjq}Z(E7Z6=$vgvUn&FeEA~7*f{owDAKv7n;<~ z)~(j8a;()QijJlNlZ!>s|Bk2b!0{B~4V_c}oKZoOHs2X6iic%;(I6PexA?mt-jU;6 z^4ojZDec~bg%irc_?g*_D<7m9<}6xZ4T2~jW2TN-f*^u~wG!Bnpm&Z&0uBonA>(q9 zB;&Fqhq99xbm-DO5dE4V9#F_+p;EGjj12N{rbu#@_dW|rL3zL|<@V67sI2KnCt!b% zo$%!-ODaFX7fkHfpTXE<4H9`5h8G?<6V;x?3w=(-g5k~89iaLOqR_JWaN1zjjYbbqWT30sm@12-e~brj z`T0XPZl=>Ko`pM6B!ge)U{tlXIxO<@8fCf7%vXE#ouHeZ_jCZUMTMx;uNF}@9Oi$-E5XvAfKwRj=@7E zT92Hw6z6aObrmd22=;kX+t~lc zP^PM`dAiT}#h?R}UrI)6HX92Z8^LVlH{4uGFGogaT-&`wt_PncjB}==Hwfhq+D30= zN>oORVe!Cl{d*QOI(#e$AYLS42E9`RgIZj%bGvaOA~%Are%gv~sp>Ax>)WQe z8@V+jO+3!Ruofx#X!@Vl5OPYS2-Jahr(HYlj!25YEY4P3 zR-*nr>VFgQkz=t9LB0&9oiq0mUNV^|R|~&O+RFCOwSKLzv{CV9$yWmY7lNvRLKGMz zgU}LdYAL2kH(6#w(gjXdO~V61=VlYD0@Ne7`29!)h(n6TIs$PJ2 zYq*`7a}T14t$w(WI^8jJ;=gI>CqkrBGK$$G73z=O+)E+y8v(@{o%|2HMw7E%B?Jq@e>zPFuhz-h$1WeOODZY*EmwZ(k zJv2#E6+keekeD9YeD3KT?kmgz{M?rv0S*L_cAkGZA@ri0)ShT&^TZh12_^&Ft>zgpB#jEFeGpmz1MS4>U&;7AH+@eX1v}d)>S38^_+?y;+Z@Tfb7z7(I(X6AsdNHU9>$)|6N@#sgE2&}| zft@C8QV$F{mTMhL_R zQeZcLc+3Dw@x+ffH+zb)FO1YSiXb4$0$%^bMLKHDLm6h}Qwa6?y&KGMV9>T5~YNk1(mY<@})2>O)6wSK1udI zNvFs1{oKj?@2w<$PbcEUfq&=$H5l0THZe{PmHH zQTw0z#07EcG(KjIhP{OB?}IZN4~ORo{U@{&I61zYj**pNy-MEMA?a;OQ*7cje~^7{ zI10U;tD%w2C6AG<`L&Zssv9L|L(jNIp{e@Qo;v&<$<9Fjg_(*SC7+9rl*nIi3Ayx^ zCtYA*UQ0`6q_BA=$C-79jRhcXuj>Unqtgj*VJx?~J@rK?jVu~BX&1AlG9xuY2V`u` z=(UVa@<#~R#Vr@ri_5CslXnjFOi|;>AaYo6sur`AX6c&XVXRl_l2>%#9pW#jxu-27 z(`JO##Q9l1DN%)Ot!Dk|w4P-Gw(Wj;l%>-y7LwYMn{{JjW7X|ILWN#(auF(b7s`pu zQ--ZL-;C4OTX?BFEdx_9)~Tx3l%-MWg%d=i4wUus7K@~7u9u6e$?BWqglXEN((i_F z<($15A3q##-b7?EB3mIy^IsBEou5TuO6^CK@k;fJF=7EEayz5J!E(1`*?5ofyQcSY ztFRhiTPDIoS|97oH10*#?QjhvpAz=%u&PibwkFT2@t^%C+r?)Vz)h5AfC?VY#>J&>4906N2mwyqvl*36>&x6?4zNylSXNR{Jlt*aN%;jAA|m-F0^kf1#{H+hqwr5yl19| zm>VS)1Q5v|AMXsUFB}rX!DVqcblTX7!!{_^w0h5}c&=6@O}w5%AT|y5pLozLXGa6F zVxtG8;F*G)3uVi{rM$qNF#jm^8kFJ6=ci0MoVr9V{88?9?alUNa|tR;=w{uI%EWmx zFQu#V?hPT_7P?13ehG3*HKbEyl7X@>g#j209_dBN(>lZ# z1QWa4z*Bq1uEmf#kA5F`WD4*3<2LVoW}I1(5sQ#>N+)c}?mP3rEWZ9( zI;joN49}c{GybOTVa}QMM4)q|4UV({U6%$Xmq)@)2clqrwbU6Va!>>if;J%=I!}mE2%f3`AJ?SQ*M>7cRq0aCbyTN;Fg=Fx32qB(v&k(?05g=s(**I|FXCw!JY`p)SDc5)occkYX1LQ fb(9IowP(Z=i4Pc!I8AE^z~{Z3s%(X{Y0&=x`GDo3 diff --git a/docs/content_management/img/page_blocks_toolbox.png b/docs/content_management/img/page_blocks_toolbox.png new file mode 100644 index 0000000000000000000000000000000000000000..6798d2a0858be3d1725f44fc5cd0c1b404652127 GIT binary patch literal 188868 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/content_management/preview_content_items.md b/docs/content_management/preview_content_items.md index f832e9c8..f4727e79 100644 --- a/docs/content_management/preview_content_items.md +++ b/docs/content_management/preview_content_items.md @@ -1,11 +1,11 @@ --- -description: Preview content items of various types in many places of the Back Office. +description: Preview content items of various types in many places of the back office. --- # Preview content items There are several places where you can see how the content item could look to an end-user. -The system behaves differently depending on whether you are in [Focus mode](../getting_started/discover_ui.md#focus-mode) or not and whether you selected a specific site from the **Site context** drop-down list in the top bar. +The system behaves differently depending on whether you're in [Focus Mode](../getting_started/discover_ui.md#focus-mode) or not and whether you selected a specific site from the **Site context** drop-down list in the top bar. - When you [edit a Page](create_edit_content_items.md), the editor provides a visual experience. By clicking the following icons, you can switch between different Page views. @@ -27,6 +27,6 @@ By clicking the following icons, you can switch between different Page views. Additionally, if you select a specific SiteAccess from the **Site context** drop-down list in the top bar, three things happen: -- when you hover over content items in the Content Tree, miniature previews appear -- in Focus mode, when you browse content items in Content Tree, their full screen preview is displayed +- when you hover over content items in the content tree, miniature previews appear +- in Focus mode, when you browse content items in content tree, their full screen preview is displayed - if you [disable the Focus mode](../getting_started/discover_ui.md#disable-focus-mode) or click **Exit full view**, the **View** tab appears in the content item's details view, where you can quickly preview the content item diff --git a/docs/content_management/publish_instantly.md b/docs/content_management/publish_instantly.md index 687c92e6..0181a953 100644 --- a/docs/content_management/publish_instantly.md +++ b/docs/content_management/publish_instantly.md @@ -4,23 +4,21 @@ description: You can instantly publish a newly created content item or save its # Publish content instantly -When you publish a content item, it is given a Location ID and placed in the Content Tree. -After you click **Publish**, the content item is validated and if any of the required -Fields are not configured, you see a notification. -Once the content item passes the validation, it is immediately available to the visitor. +When you publish a content item, it's given a location ID and placed in the content tree. +After you click **Publish**, the content item is validated and if any of the required fields aren't configured, you see a notification. +Once the content item passes the validation, it's immediately available to the visitors. Instead of instantly publishing content items, you can also save them, discard changes by deleting the draft, or [publish later](schedule_publishing.md#date-based-publishing). -If you are creating a new content item, you can also [send it to review](editorial_workflow.md). -All these options are available in the menu when you are in the edit mode. +If you're creating a new content item, you can also [send it to review](editorial_workflow.md). +All these options are available in the menu when you're in the edit mode. ![Publishing options](img/publishing_options.png "Publishing options") ### Publishing vs. saving -Clicking **Save** does not immediately publish the content item. +Clicking **Save** doesn't immediately publish the content item. Instead, it saves the [new version](content_versions.md) of the content as a draft. -You can then keep on editing the same content and save it again when needed, -or click **Save and close** to close the window. +You can then keep on editing the same content and save it again when needed, or click **Save and close** to close the window. !!! caution @@ -29,8 +27,7 @@ or click **Save and close** to close the window. Once you leave the editor after saving your draft, you can return to modify it, or create a new draft. To edit an existing draft, [disable the Focus mode](../getting_started/discover_ui.md#disable-focus-mode), go to this content item's **Versions** tab and click the edit icon in the proper line. -When you select **Edit** in a content item that has one or more open drafts, -you are asked which draft you want to continue working on. +When you select **Edit** in a content item that has one or more open drafts, you're asked which draft you want to continue working on. You also have the option to create a new draft based on the currently published version. You cannot edit an unpublished draft created by another user. diff --git a/docs/content_management/schedule_publishing.md b/docs/content_management/schedule_publishing.md index b4b89a51..42c2140f 100644 --- a/docs/content_management/schedule_publishing.md +++ b/docs/content_management/schedule_publishing.md @@ -4,7 +4,8 @@ description: You can schedule publication of content and Page blocks for specifi # Schedule content publication -There are three ways in which you can schedule content to be published, revealed or hidden in the future: +You can schedule content to be published, revealed or hidden in the future. +To do it, use one of the three options: - [Scheduler tab](#scheduler-tab) in any Page block's configuration - [Content Scheduler block](#content-scheduler-block) on a Page @@ -12,10 +13,10 @@ There are three ways in which you can schedule content to be published, revealed ## Scheduler tab [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]] -The Scheduler tab is available in the configuration of all Page blocks. +The **Scheduler** tab is available in the configuration of all Page blocks. You can use it to set the date and time when the block becomes visible and when it disappears from a Page. If you configure the reveal and/or hide dates for a Page block, you can then see the scheduled blocks (except for the Content Scheduler) in the calendar. -This way you can see what content is planned will be available in the future. +This way you can see what content is planned to be available in the future. ![Schedule tab](img/schedule_tab.png) @@ -24,10 +25,10 @@ This way you can see what content is planned will be available in the future. In the Content Scheduler block you can select content items to be displayed at a selected time. For each content item you can choose an airtime - a date and time in the future. -At this time the content item will become visible. +At this time the content item becomes visible. The Content Scheduler block has a limit of content items. -If the limit is filled and a new content item is displayed, the oldest item will disappear from the block. +If the limit is filled and a new content item is displayed, the oldest item disappears from the block. ![Content Scheduler](img/content_scheduler.png) @@ -38,10 +39,9 @@ When editing a content item, select **Publish later** in the menu on the right. ![Publish Later button in the menu](img/publish_later.png "Publish Later button in the menu") A **Future publication settings** window is displayed. -Choose a date and time and the content will be published at that time. +Choose a date and time for the content publication. -If you had planned a future publication date and enter the edit mode of the same content item, -you also have a new option in the menu: **Discard publish later**. +If you had planned a future publication date and enter the edit mode of the same content item, you also have a new option in the menu: **Discard publish later**. Use it to remove the previously selected publication date. ![Discard publish later button in the menu](img/discard_publish_date.png "Discard publish later button in the menu") @@ -51,20 +51,20 @@ To browse all the future events, use the [Calendar widget](#calendar-widget). ## Date-based hiding -When your content item is published, you can schedule a date and time and the content will be hidden at that time. +When your content item is published, you can schedule a date and time for the content to become hidden. To do this, go to the **Content** tab and select **Content structure** or **Media**. Then, navigate to the content item that you want to hide and click **Hide** in the menu. ![Hide content item modal window](content_organization/img/schedule_hiding.png "Hide content item modal window") -Once a content item is hidden, it is unavailable on the front page and inactive in the Content Tree. -This change affects the content item in all of its [Locations](content_organization/manage_locations_urls.md#content-locations). +Once a content item is hidden, it's unavailable on the front page and inactive in the content tree. +This change affects the content item in all of its [locations](content_organization/manage_locations_urls.md#content-locations). ## Timeline [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]] -The timeline in Page mode shows all changes that will happen to the Page in the future. +The timeline in page mode shows all changes that happen to the page in the future. -You can use the slider to preview what the Page will look like at a given time. +You can use the slider to preview what the page looks like at a given time. Use the button on the right of the time to see a list of all upcoming changes. ![List of upcoming events in the timeline](img/timeline_list.png) @@ -73,7 +73,7 @@ Use the button on the right of the time to see a list of all upcoming changes. The calendar widget enables you to view and perform actions on various events. Out of the box, it displays content items and Page blocks scheduled for future publication, but your page administrator can configure custom events. -Therefore, the calendar can contain other events, e.g. national holidays, important dates, etc. +Therefore, the calendar can contain other events, for example, national holidays or important dates. To access the calendar widget, in the **Content Panel**, open the **Calendar** tab. @@ -112,7 +112,7 @@ The calendar view refreshes automatically. The calendar widget toolbar displays events you select and gives you access to actions assigned to them. The available actions appear in the upper-right corner of the toolbar when you select an event. -You can select multiple events of the same type and perform bulk actions on them, e.g. [reschedule or cancel publication](#reschedule-or-cancel-publication). +You can select multiple events of the same type and perform bulk actions on them, for example, [reschedule or cancel publication](#reschedule-or-cancel-publication). !!! note @@ -126,7 +126,7 @@ To select, click on all events of the same type you want to add to the toolbar l ## Reschedule or cancel publication -In case of publishable content items (e.g. articles), you can change or cancel their planned publication by clicking **Reschedule** or **Cancel publication**. +In case of publishable content items (for example, articles), you can change or cancel their planned publication by clicking **Reschedule** or **Cancel publication**. These buttons are available on the **My dashboard** screen, and in the Calendar widget. |Button|Description| diff --git a/docs/content_management/taxonomy/taxonomy.md b/docs/content_management/taxonomy/taxonomy.md index c2588d4a..9b5044c1 100644 --- a/docs/content_management/taxonomy/taxonomy.md +++ b/docs/content_management/taxonomy/taxonomy.md @@ -4,20 +4,15 @@ description: Taxonomy is one of the ways classify content items with structured # Taxonomy -With Tags, which can be understood as keywords, you can classify content: you -create relationships between items to make it easier for website users to find -the content they need, or browse and view content appropriate for them. +With Tags, which can be understood as keywords, you can classify content: you create relationships between items to make it easier for website users to find the content they need, or browse and view content appropriate for them. -Tag hierarchies (aka Taxonomies) are classifications of logical relationships -between content items. -In [[= product_name =]], you can create many taxonomies, each with a tree that -contains many tags. +Tag hierarchies (aka Taxonomies) are classifications of logical relationships between content items. +In [[= product_name =]], you can create many taxonomies, each with a tree that contains many tags. ## Taxonomy tree -Taxonomy tree is where you create a hierarchy of all tags and relationships between -tags and content items. -Working with the Taxonomy tree is similar to working with the Content structure tree. +Taxonomy tree is where you create a hierarchy of all tags and relationships between tags and content items. +Working with the Taxonomy tree is similar to working with the content structure tree. ![Taxonomy tree and tag details](img/taxonomy_content_list.png "Taxonomy tree and tag details") diff --git a/docs/content_management/taxonomy/work_with_tags.md b/docs/content_management/taxonomy/work_with_tags.md index f35aedfb..d0d36411 100644 --- a/docs/content_management/taxonomy/work_with_tags.md +++ b/docs/content_management/taxonomy/work_with_tags.md @@ -2,17 +2,18 @@ description: Taxonomy is one of the ways classify content items with structured tags. --- -# Work with Tags +# Work with tags -Once you have created content items that follow the structure defined within the -content model, you can create [taxonomies](taxonomy.md) that consist of tags, to help users find -the content they need. +Once you have created content items that follow the structure defined within the content model, you can create [taxonomies](taxonomy.md) that consist of tags, to help users find the content they need. ## Add tag -There are two ways to create tags: directly in the taxonomy tree or by clicking the **Create** button in the **Tags** section. +You can create tags in two ways: -1. To create a new tag using taxonomy tree, in the left panel click **Content** -> **Tags**. +- create them directly in the taxonomy tree +- click the **Create** button in the **Tags** section + +1. To create a new tag in the taxonomy tree, in the left panel click **Content** -> **Tags**. 1. In the **Root** section, click the three dots icon on the level/place you want to add new tag and select **Add**. 1. Enter a unique name for the new tag. 1. Add the tag's identifier. @@ -24,24 +25,23 @@ Now, the tag is visible in the taxonomy tree. ### Assign tag to content from taxonomy tree -Taxonomy is controlled and configured by the **Taxonomy Entry Assignment** Field settings, -so you can use multiple Fields of this type with different taxonomies, -for example, tags and product categories in the same content type. -To be able to assign tags to a Content, first, you need to add a Taxonomy Entry Assignment Field to the content type definition. +Taxonomy is controlled and configured by the *Taxonomy Entry Assignment* field settings, so you can use multiple fields of this type with different taxonomies, for example, tags and product categories in the same content type. +To be able to assign tags to a Content, first, you need to add a *Taxonomy Entry Assignment* field to the content type definition. 1. Go to **Content types** -> **Content**. 1. Click the **Edit** icon next to the content type you want to modify. -1. Go to **Field definitions** and from the available options, drag and drop the **Taxonomy Entry Assignment** to fields in the content type. +1. Go to **Field definitions** and from the available options, drag and drop the *Taxonomy Entry Assignment* to fields in the content type. 1. From the **Taxonomy** drop-down, select the taxonomy type you want to tag this content item with. Now, when you edit or create a content item of this type, in the tags section, you can add a tag by clicking **Select Taxonomy Entries**. See [Add taxonomy entries](create_edit_content_items.md#add-taxonomy-entries). !!! caution "Duplicate taxonomy fields" - Because tags are assigned per content item, not per Field, you cannot use two **Taxonomy Entry Assignment** Fields with the same taxonomy type in one content type. + + Because tags are assigned per content item, not per field, you cannot use two *Taxonomy Entry Assignment* fields with the same taxonomy type in one content type. ### Add tag translation -If you have more than one language version of your website, you can also translate +If you have more than one language version of your website, you can also translate tags that are used in the website into the target language. 1. Go to the **Tags** section. diff --git a/docs/content_management/translate_content.md b/docs/content_management/translate_content.md index 7b5fef93..353fd333 100644 --- a/docs/content_management/translate_content.md +++ b/docs/content_management/translate_content.md @@ -4,24 +4,24 @@ description: Create multiple language versions of content items. # Translate content -The content on your website can be translated into different languages. Each content item can have different language versions. +The content on your website can be translated into different languages. +Each content item can have different language versions. The version visible to a visitor depends on the way your installation is set up (see [SiteAccess concept](#edit-page-for-different-language-versions-of-a-website)). ## Add website languages -You can only add translations in languages that have been set up for your website in the **Admin Panel**. -If your user [Role](work_with_permissions.md) has the right permissions, you can create a new language for the website. -To do it, go to the **Admin Panel**, open the **Languages** tab, and click **Add language**. +You can only add translations in languages that have been set up for your website in the **Admin** panel. +If your user [role](work_with_permissions.md) has the right permissions, you can create a new language for the website. +To do it, go to the **Admin** panel, open the **Languages** tab, and click **Add language**. -Every new language must have a name and a language code written in the xxx-XX format, for example, eng-US, fre-FR, nor-NO, etc. +Every new language must have a name and a language code written in the xxx-XX format, for example, eng-US, fre-FR, or nor-NO. After adding a language, you may have to reload the application to be able to use it. !!! caution - Depending on the way the website is set up, additional configuration may be necessary - for the new translations to be displayed properly. - Contact your administrator and inform them that you need to add a new language to the website - (see [the technical documentation on language versions]([[= developer_doc =]]/multisite/languages/languages/)). + Depending on the way the website is set up, additional configuration may be necessary for the new translations to be displayed properly. + Contact your administrator and inform them that you need to add a new language to the website. + For more information, see [Developer Documentation on language versions]([[= developer_doc =]]/multisite/languages/languages/)). ## Add translations @@ -31,8 +31,8 @@ After adding a language, you may have to reload the application to be able to us 3\. Select the source and target languages and click **Create**. -All the Fields are then pre-filled with the values they have in the base translation. -If you do not choose a base translation, the Fields remain empty. +All the fields are then pre-filled with the values they have in the base translation. +If you do not choose a base translation, the fields remain empty. While working, you can save your work and continue or click **Delete draft** to discard your changes. When done, you can save your work and close the window, publish the translated article immediately, or pick another publication date. @@ -52,29 +52,28 @@ You can compare different versions of the translations of the content item. 3\. Go to **Versions** tab and click the **Version compare** icon: ![Version Compare Icon](img/version_compare_icon.png){.inline-image}. -4\. In the **Comparing versions** screen, click the split view by using the switcher in the top right corner: +4\. In the **Comparing versions** screen, use the switcher in the top right corner, and click the split view: ![View switcher](img/view_switcher.png "View switcher") 5\. From the drop-downs, select two different language versions of the same content item. -The screen refreshes to display the side by side view of its Fields. +The screen refreshes to display the side by side view of its fields. ![Compare translations screen](img/compare_translations.png "Compare translations screen") For more information, see [Work with versions](work_with_versions.md#compare-versions). -## Edit Page for different language versions of a website [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]] +## Edit page for different language versions of a website [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]] -When you edit a Page, a bar at the top of the screen lists the most recently used [SiteAccesses](https://doc.ibexa.co/projects/userguide/en/master/website_organization/multisite/#siteaccess) on your website. Use this bar to switch between the different versions and work on them. +When you edit a page, a bar at the top of the screen lists the most recently used [SiteAccesses](https://doc.ibexa.co/projects/userguide/en/master/website_organization/multisite/#siteaccess) on your website. +Use this bar to switch between the different versions and work on them. !!! note "SiteAccess concept" - SiteAccesses are a means to present different versions of the website to different - categories of users. - You could treat SiteAccesses as different "entrance points" to your website. - They allow you to show different content or design to visitors, for example, - to serve different language versions to visitors from different countries. - + SiteAccesses are a means to present different versions of the website to different categories of users. + You could treat SiteAccesses as different "entrance points" to your website. + They allow you to show different content or design to visitors, for example, to serve different language versions to visitors from different countries. + See [Work with websites](../website_organization/work_with_sites.md) for more information about setting up websites. \ No newline at end of file diff --git a/docs/content_management/work_with_forms.md b/docs/content_management/work_with_forms.md index 8517efc0..9fa2cf26 100644 --- a/docs/content_management/work_with_forms.md +++ b/docs/content_management/work_with_forms.md @@ -5,17 +5,15 @@ edition: experience # Work with forms -You can use forms to increase the functionality of the website by adding a survey, -questionnaire, sign-up form, etc. -You can then review the results gathered from website users, for example, to improve -user experience. +You can use forms to increase the functionality of the website by adding, for example, a survey, questionnaire, or sign-up form. +You can then review the results gathered from website users, for example, to improve user experience. -For more information about building and styling forms, see [developer documentation]([[= developer_doc =]]/content_management/forms/forms). +For more information about building and styling forms, see [Developer Documentation]([[= developer_doc =]]/content_management/forms/forms). -## Create forms +## Create forms Editors can use the created form anywhere on the website. -Forms can be used in page blocks, embedded in the online editor or even used as a field relation. +Forms can be used in page blocks, embedded in the online editor or even used as a field relation. The same form can be placed at multiple locations on the website. To create a form: @@ -33,8 +31,8 @@ To create a form: ![Build form](img/build_form.png) -4\. Drag (A) or click (B) on the type from the form fields toolbar. -To create more complicated and detailed form, you can use more than one form Field Type. +4\. Drag (A) or click (B) on the type from the form fields toolbar. +To create more complicated and detailed form, you can use more than one form field type. ![Drag form fields](img/drag_form_fields.png) @@ -58,7 +56,7 @@ You can choose one of a few options of what is shown to the user after filling i - Click **Save** to continue editing. - Click **Save and close** to close the window. -10\. To send your changes to another editor [for review](editorial_workflow.md), click **Send to review**. +10\. To send your changes to another editor [for review](editorial_workflow.md), click **Send to review**. 11\. When the form is ready for publication: @@ -80,7 +78,7 @@ Click **Download submissions** icon to download all the submissions in a .CSV (c ## Use case - create newsletter -In the following example, you will learn how to create a Newsletter form and use it with Page Builder. +In the following example, you can learn how to create a Newsletter form and use it with Page Builder. 1\. Create a new content item in the chosen localization in the content tree and choose **Form** type. @@ -104,11 +102,12 @@ In the following example, you will learn how to create a Newsletter form and use 5\. Click **Save** button and then **Confirm**. -6\. Now, you can use **a Newsletter** form on your page. Open your site using Page Builder and from the **Elements** toolbar choose **Form**. Drag it and drop on the zone. +6\. Now, you can use **a Newsletter** form on your page. Open your site with Page Builder and from the **Page blocks** toolbox choose **Form**. Drag it and drop on the zone. ![Add to page](img/newsletter_add_to_page.png) -7\. Click **Block settings** icon and then, in the Form window click **Select content** button. Find your form in the content tree and choose it, then click **Confirm** and **Submit** buttons. +7\. Click **Block settings** icon and then, in the Form window click **Select content** button. +Find your form in the content tree and choose it, then click **Confirm** and **Submit** buttons. ![Block settings](img/newsletter_button_submit.png) diff --git a/docs/content_management/workflow_management/editorial_workflow.md b/docs/content_management/workflow_management/editorial_workflow.md index 4c62e03b..0be4e2f0 100644 --- a/docs/content_management/workflow_management/editorial_workflow.md +++ b/docs/content_management/workflow_management/editorial_workflow.md @@ -5,10 +5,9 @@ description: Learn about editorial workflows that organize review flows for diff # Editorial workflow With editorial workflow, you can pass content between different stages in a preconfigured flow. -Typically, the stages correspond to different teams or departments that contribute to content -and approve it. +Typically, the stages correspond to different teams or departments that contribute to content and approve it. -For example, you can pass content through stages of draft, design and proofreading. +For example, you can pass content through stages of draft, design, and proofreading. !!! note @@ -16,20 +15,16 @@ For example, you can pass content through stages of draft, design and proofreadi In your workflows you can have different stages and transition between them. Contact your administrator or developer team to configure workflows. - See [developer documentation]([[= developer_doc =]]/content_management/workflow/workflow/) for information on how to do it. + For more information, see [Developer Documentation]([[= developer_doc =]]/content_management/workflow/workflow/). ## Review queue -You can view content items which are in different stages under review on the -**My dashboard** screen, in the Review queue table. -The table only shows content items that your Role has permissions to edit. -If your installation is [configured to support draft locking]([[= developer_doc =]]/content_management/workflow/workflow/#draft-locking), -the table also informs you whether any reviewers are assigned and have claimed -their drafts for review. +You can view content items which are in different stages under review on **My dashboard** screen, in the **Review queue** table. +The table only shows content items that your role has permissions to edit. +If your installation is [configured to support draft locking]([[= developer_doc =]]/content_management/workflow/workflow/#draft-locking), the table also informs you whether any reviewers are assigned and have claimed their drafts for review. ![Review queue in the dashboard](img/dashboard_review_queue.png) -In the Review queue table, you can access the draft for editing, review its history, -and unlock the draft or request that a lock is released. +In the Review queue table, you can access the draft for editing, review its history, unlock the draft, or request that a lock is released. For more information, see [Work with versions](work_with_versions.md). \ No newline at end of file diff --git a/docs/content_management/workflow_management/view_workflow_list.md b/docs/content_management/workflow_management/view_workflow_list.md index 283e6518..5c128140 100644 --- a/docs/content_management/workflow_management/view_workflow_list.md +++ b/docs/content_management/workflow_management/view_workflow_list.md @@ -4,7 +4,7 @@ description: Review a list of workflows that are available in the installation. # View workflow list -If you have Administrator permissions, you can view all configured workflows in the Admin Panel by selecting **Workflow**. +If you have Administrator permissions, you can view all configured workflows in the **Admin** panel by selecting **Workflow**. ![Workflow in Admin Panel](img/workflow_panel.png) @@ -12,9 +12,8 @@ You can preview a diagram of the workflow. ![Workflow diagram](img/workflow_diagram.png) -You can also select a configured workflow to see all content items that are under -review as part of this workflow. +You can also select a configured workflow to see all content items that are under review as part of this workflow. ![Content under review](img/workflow_content_under_review.png) -For more information about configuring workflows, see [developer documentation]([[= developer_doc =]]/content_management/workflow/workflow/). \ No newline at end of file +For more information about configuring workflows, see [Developer Documentation]([[= developer_doc =]]/content_management/workflow/workflow/). \ No newline at end of file diff --git a/docs/content_management/workflow_management/work_with_versions.md b/docs/content_management/workflow_management/work_with_versions.md index 36394a96..4d4cc55f 100644 --- a/docs/content_management/workflow_management/work_with_versions.md +++ b/docs/content_management/workflow_management/work_with_versions.md @@ -4,18 +4,13 @@ description: Perform various tasks on content item versions, as part of editoria # Work with versions -In [[= product_name =]], content items can have one published [version](../content_versions.md), -and several draft and archived versions. -You can perform various tasks on content item versions, either to advance them -through the workflow or compare edits from different users. +In [[= product_name =]], content items can have one published [version](../content_versions.md), and several draft and archived versions. +You can perform various tasks on content item versions, either to advance them through the workflow or compare edits from different users. ## Edit drafts -If you are assigned to a draft version of a content item for [review](editorial_workflow.md), -when you click the **Edit draft** icon in **My dashboard**, the **Review queue** -table, you see the **Event(s)** timeline that lists all the transitions that this -content has gone through. +If you're assigned to a draft version of a content item for [review](editorial_workflow.md), when you click the **Edit draft** icon in **My dashboard**, the **Review queue** table, you see the **Event(s)** timeline that lists all the transitions that this content has gone through. ![Events timeline](img/workflow_events_timeline.png) @@ -25,23 +20,16 @@ If draft locking is supported, you also see a message that confirms that the dra ## Release locked drafts -If you are assigned to a draft version of a content item and have locked it for -review, you can release the lock by closing the modal window, publishing the draft, -or sending it to another reviewer. -You can also do it in **My dashboard**, the **Review queue** table, by clicking -the **Unlock** icon. +If you're assigned to a draft version of a content item and have locked it for review, you can release the lock by closing the modal window, publishing the draft, or sending it to another reviewer. +You can also do it in **My dashboard**, the **Review queue** table, by clicking the **Unlock** icon. -If you are not assigned to the draft, depending on the permissions set for your -Role, in the **Review queue** table, you can either release the lock by clicking -the **Unlock** icon, or request that the lock is released by the reviewer -by clicking the **Request access** icon. +If you're not assigned to the draft, depending on the permissions set for your role, in the **Review queue** table, you can either release the lock by clicking the **Unlock** icon, or request that the lock is released by the reviewer by clicking the **Request access** icon. -## Compare versions +## Compare versions You can compare two versions of the same content item. To do it, [disable the Focus mode](../../getting_started/discover_ui.md#disable-focus-mode). -Then, in the content item details screen, go to the **Versions** tab and click the -**Version Compare** icon: ![Version Compare Icon](img/version_compare_icon.png){.inline-image}. +Then, in the content item details screen, go to the **Versions** tab and click the **Version Compare** icon: ![Version Compare Icon](img/version_compare_icon.png){.inline-image}. From the drop-down menus at the top of the screen, select the two versions that you want to compare. @@ -62,14 +50,15 @@ When you compare two versions, the system highlights the changes: ![Version comparison in Split view](img/split_view.png "Version comparison in Split view") -You can also compare media Field Types such as images. +You can also compare media field types such as images. ![Image comparison](img/image_comparison.png "Image comparison") !!! note - Not all Field Types are available for comparison. You cannot preview the difference in the following Field Types: + Not all field types are available for comparison. + You cannot preview the differences in the following field types: - Form - - Landing Page + - Landing page - User account diff --git a/docs/customer_management/build_customer_portal.md b/docs/customer_management/build_customer_portal.md index 5eabf67d..907fc22e 100644 --- a/docs/customer_management/build_customer_portal.md +++ b/docs/customer_management/build_customer_portal.md @@ -6,27 +6,26 @@ edition: experience # Create and edit Customer Portal To create and edit a Customer Portal with Page Builder, you need to first set it up in configuration. -For detailed instructions on how to do it, go to -[Create Customer Portal]([[= developer_doc =]]/customer_management/cp_page_builder/). +For detailed instructions on how to do it, go to [Create Customer Portal]([[= developer_doc =]]/customer_management/cp_page_builder/). The Customer Portal creation and edition are based on Page Builder and work on the same principles. -If you are unfamiliar with how Page Builder works, see [Create and edit Pages](create_edit_pages.md). +If you're unfamiliar with how Page Builder works, see [Create and edit Pages](create_edit_pages.md). ## Create Customer Portal To create a new Customer Portal, go to **Content** and from the menu select **Content structure**. There, navigate to the root folder for your Customer Portals. If you don't have one, you can add it yourself. -Remember to specify its `location_id` in the configuration, you will find it under **Technical details**. -For more information, see [Configure Page Builder access to Customer Portal.]([[= developer_doc =]]/customer_management/cp_page_builder/#configure-page-builder-access-to-customer-portal) +Remember to specify its `location_id` in the configuration, you can find it under **Technical details**. +For more information, see [Configure Page Builder access to Customer Portal]([[= developer_doc =]]/customer_management/cp_page_builder/#configure-page-builder-access-to-customer-portal). Inside a root folder you can select **Create content** from the right-side toolbar. -On the list of content items, you will see two possibilities **Customer Portal** and **Customer Portal Page**. +On the list of content items, you can see two possibilities: **Customer Portal** and **Customer Portal Page**. ![Create content tab](img/cp_portal_vs_page.png) The first one is a container for your Customer Portal pages (this is not a root folder), and the second one represents the actual page. -It is recommended to use Customer Portal containers to divide and store your portal pages. +It's recommended to use Customer Portal containers to divide and store your portal pages. If your project requires it, the Customer Portal containers can also be defined as root folders in the configuration. First, select **Customer Portal** and name it appropriately. @@ -34,25 +33,24 @@ Next, navigate to the newly added container and create **Customer Portal Page**. ![Customer Portal container](img/cp_folder_for_portals.png) -In the **Page creation** box, you should see the Customer Portal layout where you can -add dedicated Customer Portal block, Sales Representative, or choose from selection of blocks available to your [[= product_name =]] version. +In the **Page creation** box, you should see the Customer Portal layout where you can add dedicated Customer Portal block, Sales Representative, or choose from selection of blocks available to your [[= product_name =]] version. For a list of blocks available out of the box, see [Block reference](block_reference.md). ![Page Builder view](img/cp_page_builder.png) -If provided ready-to-use Page blocks are not sufficient, you can [add your own blocks]([[= developer_doc =]]/content_management/pages/create_custom_page_block/). +If provided ready-to-use Page blocks aren't sufficient, you can [add your own blocks]([[= developer_doc =]]/content_management/pages/create_custom_page_block/). -Before you publish or save the Customer Portal page, edit its title and description in the Field view, you can find it in the top toolbar on the left side. +Before you publish or save the Customer Portal page, edit its title and description in the field view, you can find it in the top toolbar on the left side. -If you are ready to publish the Customer Portal page, click **Publish** in the top right corner. -You can also save it as a draft, even if some required fields are not filled in. +If you're ready to publish the Customer Portal page, click **Publish** in the top right corner. +You can also save it as a draft, even if some required fields aren't filled in. To do it, click **Save draft**. ## Add multiple pages You can have multiple Customer Portal pages available in one Customer Portal by adding them under one Customer Portal container. -If company members have sufficient `content/read` Policies and have the portal assigned to their Customer Group, they will see the changes in the left menu. +If company members have sufficient `content/read` policies and have the portal assigned to their customer group, they can see the changes in the left menu. ![Multiple pages in one portal](img/cp_multiple_pages.png) @@ -69,12 +67,12 @@ Company members need to have the following permissions to be able to see custom ![Customer Portal permissions](img/cp_permissions.png) -If members of the company don't have sufficient permissions for any Customer Portal, they will be transferred to the default Customer Portal view. +If members of the company don't have sufficient permissions for any Customer Portal, they're transferred to the default Customer Portal view. !!! note Customer Portal is only available to users that are members of the company. - Even if a user has all sufficient permissions but is not a member of a company, they will not see the Customer Portal. + Even if a user has all sufficient permissions but is not a member of a company, they cannot see the Customer Portal. Customer Portal must also be assigned to the company's Customer Group. To learn more see, [assigning portals to Customer Groups.]([[= developer_doc =]]/customer_management/cp_page_builder/#assigning-portal-to-customer-group) diff --git a/docs/customer_management/company_self_registration.md b/docs/customer_management/company_self_registration.md index b4fc3358..7eb233bf 100644 --- a/docs/customer_management/company_self_registration.md +++ b/docs/customer_management/company_self_registration.md @@ -6,9 +6,8 @@ edition: experience # Company self-registration Self-registration allows your business customers to take charge and apply for a business account on your website by themselves. -The application is not approved automatically, it has to go through the approval process in the Back Office. -If it is accepted, the business partner will receive an invitation link to the Customer Portal, -where they can set up their team and manage their account. +The application is not approved automatically, it has to go through the approval process in the back office. +If it's accepted, the business partner receives an invitation link to the Customer Portal, where they can set up their team and manage their account. ## Submitting application @@ -21,13 +20,13 @@ They need to provide their basic information, contact information and billing ad ## Application approval -The application then goes through an approval process in the Back Office. +The application then goes through an approval process in the back office. To see a list of pending applications, go to **Customers** -> **Applications**. There you can edit them or check their current status. ![List of applications](img/cp_applications_list.png) -Each application can be either edited, approved, rejected or put on hold. +Each application can be either edited, approved, rejected, or put on hold. Applications with status reject and on hold remain on the list for future reference. Accepted ones move to **Customers** -> **Companies** section. @@ -40,9 +39,8 @@ Follow the same procedure with a customer group, it can be set up in **Product c ![Application approval](img/cp_approving_application.png) -Finally, the invitation link is sent back to the applier to finish the registration process -and give them access to the [Customer Portal](customer_portal.md). +Finally, the invitation link is sent back to the applier to finish the registration process and give them access to the [Customer Portal](customer_portal.md). -Application is moved to **Customers** -> **Companies** section and the company is created with **Active** status. +Application is moved to **Customers** -> **Companies** section and the company is created with "Active" status. From there, you can manage the company and resend an invitation link if needed. -For more information on managing companies in the Back Office, see [Customer management documentation](manage_customers.md#manage-company). +For more information on managing companies in the back office, see [Customer management documentation](manage_customers.md#manage-company). diff --git a/docs/customer_management/customer_portal.md b/docs/customer_management/customer_portal.md index 914e9a25..4758773f 100644 --- a/docs/customer_management/customer_portal.md +++ b/docs/customer_management/customer_portal.md @@ -5,20 +5,15 @@ edition: experience # Customer Portal account -If you represent a company that uses a business partner's [[= product_name =]] instance, -Customer Portal allows you to create and manage your business account. -With this feature, you can edit your organization information, -invite and view members and check your order history. +If you represent a company that uses a business partner's [[= product_name =]] instance, Customer Portal allows you to create and manage your business account. +With this feature, you can edit your organization information, invite and view members and check your order history. ![Customer Portal Dashboard](img/cp_dashboard_customer_portal.png) -To access Customer Portal follow this link -`/corporate/login` and log in to your business account. +To access Customer Portal follow this link `/corporate/login` and log in to your business account. -In the dashboard, you will find a sales representative of your company and -a brief summary of your order history. -For a detailed list of your order history, go to **Pending Order** and -**Past Orders** sections. +In the dashboard, you can find a sales representative of your company and a brief summary of your order history. +For a detailed list of your order history, go to **Pending Order** and **Past Orders** sections. ## Manage members @@ -32,18 +27,16 @@ There you can: ![List of members](img/cp_members_portal.png) To invite new members to your organization, select **Invite members**. -Then, in a pop-up window, fill out email addresses one by one, -or use drag and drop to upload a file with a list of emails. +Then, in a pop-up window, fill out email addresses one by one, or use drag and drop to upload a file with a list of emails. Assign a role to each new member of your team from a drop-down list. Click **Send** to send out invitation emails. ![Invite members](img/cp_invite_members_portal.png) -Invited users will receive an email message with a registration link. +Invited users then receive an email message with a registration link. With it, they can register and create their account in the Customer Portal. -In the **Invitation** tab, you can find a list of all invitations, -registration links and the option to re-send invitations, if needed. +In the **Invitation** tab, you can find a list of all invitations, registration links and the option to re-send invitations, if needed. ![List of invitations](img/cp_invitations_list_portal.png) diff --git a/docs/customer_management/manage_customers.md b/docs/customer_management/manage_customers.md index 923ae3e9..cf295487 100644 --- a/docs/customer_management/manage_customers.md +++ b/docs/customer_management/manage_customers.md @@ -5,14 +5,12 @@ edition: experience # Customer management -In the Back Office, you can manage members of your team, -customers and organizations' accounts in your system, including their web store activities such as orders. +In the back office, you can manage members of your team, customers and organizations' accounts in your system, including their web store activities such as orders. ## Create new company To create a new company, go to **Customers** -> **Companies** section. -There you can view a list of companies you have access to, -you can also edit them or create a new one by selecting **Create** button in the top right corner. +There you can view a list of companies you have access to, you can also edit them or create a new one by selecting **Create** button in the top right corner. ![Companies section](img/cp_companies_section_back_office.png) @@ -30,7 +28,7 @@ Optionally, you can add a website and other contact details. ## Manage company -Companies can be managed from the Back Office in the **Customers** -> **Companies** section. +Companies can be managed from the back office in the **Customers** -> **Companies** section. Each company has its own profile where you can find: - summary with basic information and order history @@ -38,11 +36,11 @@ Each company has its own profile where you can find: - list of members and pending invitations - address book with multiple shipping addresses -![Company profile in the Back Office](img/cp_company_profile_back_office.png) +![Company profile in the back office](img/cp_company_profile_back_office.png) -From there, you can edit the company information, invite members, manage their roles and edit their basic information. +From there, you can edit the company information, invite members, manage their roles, and edit their basic information. You can also add members to a team from existing pool of users. -Note that the Contact Person in the company has to be a member of that company. +The Contact Person in the company has to be a member of that company. ![Add Contact Person](img/cp_contact_person_back_office.png) @@ -50,36 +48,34 @@ Note that the Contact Person in the company has to be a member of that company. You can also manage companies from **Admin** in the left menu. There, in the **Corporate** section, you can find a list of members, -billing addresses and technical details regarding the organization such as visibility, IDs, relations and so on. -You can manage companies information, activate, deactivate members and change their personal information. +billing addresses and technical details regarding the organization such as visibility, IDs, or relations. +You can manage companies information, activate, deactivate members, and change their personal information. Logged-in users cannot be deactivated. -![Corporate Back Office](img/cp_admin_company_view.png) +![Corporate back office](img/cp_admin_company_view.png) -In the **Roles** section, you can define Policies for each User Group, for example, a Company buyer. -You can also set up Policies for every user who has a business account by editing a **Corporate Access** role. +In the **Roles** section, you can define policies for each user group, for example, a company buyer. +You can also set up policies for every user who has a business account by editing a **Corporate Access** role. !!! caution "Warning" - Do not remove any Policies from the **Corporate Access** role, the proper behaviour of business accounts depends on them. + Do not remove any policies from the **Corporate Access** role, the proper behaviour of business accounts depends on them. ## Invite members To invite other members to the organization, go to **Customers** -> **Companies** -> Select your company -> **Invitations**. -![Invite members from the Back Office](img/cp_invitations_back_office.png) +![Invite members from the back office](img/cp_invitations_back_office.png) -There, you can find a list of all invitations, copy their registration links -and re-send the invitation emails. +There, you can find a list of all invitations, copy their registration links and re-send the invitation emails. To invite new members to the company, select **Invite member**. ![Invite members from the Customer Portal](img/cp_invite_members_portal.png) -Then, in a pop-up window fill out email addresses one by one, -or use drag and drop to upload a file with a list of emails. -You also have to assign a Role to each new member from a drop-down list. +Then, in a pop-up window fill out email addresses one by one, or use drag and drop to upload a file with a list of emails. +You also have to assign a role to each new member from a drop-down list. Click **Send** to send out invitations. Invited users receive an email message with a registration link. diff --git a/docs/dam/ibexa_dam.md b/docs/dam/ibexa_dam.md index 778e49df..59aa92cc 100644 --- a/docs/dam/ibexa_dam.md +++ b/docs/dam/ibexa_dam.md @@ -3,13 +3,14 @@ description: DAM module interface for uploading and managing image assets. edition: headless --- -# Ibexa DAM +# [[= product_name_dam =]] -Digital Asset Management is a platform dedicated to editors. It enables storing in central location, organizing, distributing, -and sharing media assets across many channels. +Digital Asset Management is a platform dedicated to editors. +It enables storing in central location, organizing, distributing, and sharing media assets across many channels. + +[[= product_name_dam =]] image picker is developed to work with any web browser that supports modern standards. +The minimum screen resolution is 1366 x 768. -[[= product_name_dam =]] image picker is developed to work with any web browser that supports modern standards. The minimum screen resolution is -1366 x 768. List of supported web browsers: - Mozilla® Firefox® most recent stable version (recommended) @@ -34,17 +35,16 @@ List view contains a thumbnail, title, format, size, dimensions, creation, and u ### Sorting You can sort image assets by alphabetical order or by the creation date. -To sort image assets, in the upper-right corner, click **Date** and select the -sorting method you need. +To sort image assets, in the upper-right corner, click **Date** and select the sorting method you need. ## Search assets ### Keyword search The search option allows to find image assets using a word or phrase. -To use it, in the upper part of the screen, click the -**Search** field. Enter a search keyword. The platform searches assets for matches -based on the keyword, including file title. +To use it, in the upper part of the screen, click the **Search** field. +Enter a search keyword. +The platform searches assets for matches based on the keyword, including file title. ### Filter by attributes @@ -68,21 +68,19 @@ You can combine searches by all types of filtering: keyword search and attribute ### Navigation -Assets are organized and stored in folders. The folder structure serves as another option -for filtering assets. +Assets are organized and stored in folders. The folder structure serves as another option for filtering assets. -To navigate through folders, go to left-side panel **Folders**, and in the folders tree view, click -folder you want to open. +To navigate through folders, go to left-side panel **Folders**, and in the folders tree view, click folder you want to open. !!! note - Filtering by attribues and folders is complimentary, it means you have to use these two methods at once - to get search results. + Filtering by attribues and folders is complimentary, it means you have to use these two methods at once to get search results. ### Insert images -To insert an image asset into the HTML editor, locate the image by using search options, or manually locate the asset in the folder. -Next, click the image thumbnail. The selected item is marked with a red dot in the upper-left corner. +To insert an image asset into the HTML editor, find the image with search options, or manually locate the asset in the folder. +Next, click the image thumbnail. +The selected item is marked with a red dot in the upper-left corner. To confirm the selection, in the bottom toolbar, click **Insert**. You can only select one image at a time. diff --git a/docs/getting_started/dashboard/dashboard.md b/docs/getting_started/dashboard/dashboard.md index efb982be..162e142c 100644 --- a/docs/getting_started/dashboard/dashboard.md +++ b/docs/getting_started/dashboard/dashboard.md @@ -5,7 +5,7 @@ description: Get to know about dashboard. # Dashboard Dashboard is the first screen that you see after you log into [[= product_name =]]. -It provides users a quick overview about specific content to make better business decisions based on data and work more efficiently with a clear and easy access to important information. +It provides users a quick overview about specific content to make better business decisions based on data and work more efficiently with a clear and effortless access to important information. Default dashboard in [[= product_name_headless =]] contains the following blocks: diff --git a/docs/getting_started/dashboard/dashboard_block_reference.md b/docs/getting_started/dashboard/dashboard_block_reference.md index a1fe3d19..348c0bd4 100644 --- a/docs/getting_started/dashboard/dashboard_block_reference.md +++ b/docs/getting_started/dashboard/dashboard_block_reference.md @@ -17,14 +17,12 @@ The following blocks are provided with a clean installation of [[= product_name |[Quick actions](#quick-actions-block)|Displays selected mostly used actions and shortcuts.| |[Recent activity](#recent-activity-block)|Displays a list of recent activity of all or selected users.| |[Recent orders](#recent-orders-block)|Displays a table presenting recent orders and their status.| -|[Review queue](#review-queue-block)|Displays a list of content items which user or User group can review.| +|[Review queue](#review-queue-block)|Displays a list of content items which user or user group can review.| |[Top 10 clicked items](#top-10-clicked-items-block)|Displays a table presenting top 10 clicked items.| !!! note - Before you add a block that involves products, product types, or product categories, make - sure your that your [user Role](permissions_and_users.md) has - the `Product/View` and `Product type/View` permission. + Before you add a block that involves products, product types, or product categories, make sure your that your [user role](permissions_and_users.md) has the `Product/View` and `Product type/View` permission. ## Common content block @@ -94,8 +92,13 @@ The table contains the following columns: Name, Image, Code, Category, Type, Var On the **Properties** tab, set values in the following fields: - **Name** - Enter a name for the block. +<<<<<<< HEAD - **Number of products to be displayed** - Set a number of products to be displayed. Default value = 10. - **Stock** - Set up the maximum stock value (only products with stock number greater than zero and less than the set maximum number will be displayed). Default value = 10. +======= +- **Number of visible products** - Set a number of products to be displayed. Default value = 10, minimum value = 1, and maximum = 10. +- **Stock threshold** - Set up the maximum stock value (only products with stock number greater than zero and less than the set maximum number are displayed). Default value = 10. +>>>>>>> 2b18e53 (IBX-8916: Content update in User documentation - cd. (#314)) On the **Design** tab, in the **View** field, select the layout to be used to present a list of products and submit your changes. @@ -115,8 +118,11 @@ On the **Design** tab, in the **View** field, select the layout to be used to pr Displays a list of recent activity of all or selected users. It also includes a link to view all activities available in Admin tab. -Recent activity block contains the following data: action time, User reference (avatar, first and last name) with a link to the user profile (if available), -Activity type with the context. +Recent activity block contains the following data: + +- action time +- user reference (avatar, first and last name) with a link to the user profile (if available) +- activity type with the context On the **Properties** tab, set values in the following fields: @@ -143,7 +149,7 @@ On the **Design** tab, in the **View** field, select the layout to be used to pr ## Review queue block -Displays a list of content items which user or User group can review. +Displays a list of content items which user or user group can review. On the **Properties** tab, set values in the following fields: diff --git a/docs/getting_started/dashboard/work_with_dashboard.md b/docs/getting_started/dashboard/work_with_dashboard.md index bf98b8bc..44c62cc4 100644 --- a/docs/getting_started/dashboard/work_with_dashboard.md +++ b/docs/getting_started/dashboard/work_with_dashboard.md @@ -10,7 +10,7 @@ You can work with dashboard: edit and customize it depending on your needs. ## Permissions To be able to customize a dashboard, you need the `dashboard/customize` policy. -By default, all users belonging to the `Editors` User Group have the `Dashboard` role assigned, so that they can edit, create, or delete a dashboard. +By default, all users belonging to the `Editors` user group have the `Dashboard` role assigned, so that they can edit, create, or delete a dashboard. If, by any reason, you want to narrow this permission, you can set up specific limitations. For more information about setting up a permission system, see [Work with permissions](work_with_permissions.md). @@ -35,7 +35,7 @@ Dashboard Builder user interface consists of: A. Drop zone -B. Dashboard blocks / Structure view toolbar +B. Dashboard blocks / Structure view toolbox C. Buttons: @@ -45,19 +45,19 @@ C. Buttons: |Switch layout|![Switch layout](dashboard_switch_layout.png)|Switch layout for the dashboard.| |Undo|![Undo](dashboard_undo.png)|Undo latest change.| |Redo|![Redo](dashboard_redo.png)|Redo latest change.| -|Structure view|![Structure view](dashboard_structure_view.png)|Access Structure view toolbar.| -|Dashboard blocks|![Dashboard blocks](dashboard_blocks.png)|Access Dashboard blocks toolbar.| -|View switch|![View switch](dashboard_switch_toolbar.png)|Move toolbar to the other side of the screen.| +|Structure view|![Structure view](dashboard_structure_view.png)|Access **Structure view** toolbox.| +|Dashboard blocks|![Dashboard blocks](dashboard_blocks.png)|Access **Dashboard blocks** toolbox.| +|Side moving|![Side moving](dashboard_side_moving.png)|Move toolbox to the other side of the screen.| -Dashboard Builder has two main toolbars that you can use while creating a dashboard: +Dashboard Builder has two main toolboxes that you can use while creating a dashboard: - **Dashboard blocks** - consists of all available blocks that you can use by dragging them and dropping on a drop zone. -![Dashboard blocks](dashboard_blocks_toolbar.png) +![Dashboard blocks](dashboard_blocks_toolbox.png) - **Structure view** - shows a structure of your dashboard, including its division into zones and the blocks that they contain. -![Structure view](dashboard_structure_view_toolbar.png) +![Structure view](dashboard_structure_view_toolbox.png) ### Choose layout @@ -71,27 +71,27 @@ To do it, click the **Switch layout** icon on the left side of the upper toolbar ### Add blocks -In Dashboard Builder, you can access a menu of **Dashboard blocks**, which includes a set of blocks of content that you can add to the zones of the dashboard. +In Dashboard Builder, you can access the **Dashboard blocks** toolbox, which includes a set of blocks of content that you can add to the zones of the dashboard. -!!! Tip +!!! tip For a list of available blocks and their detailed description, see [Dashboard block reference](dashboard_block_reference.md). Add a block by dragging it from the menu to an empty place on a zone. -Do not worry about placing blocks in the proper place from the start. +Don't worry about placing blocks in the proper place from the start. You can reorder them at any time by dragging and dropping them in the desired location. You can reorder blocks in a few ways: - drag and drop block in the desired location on a drop zone -- use **Move up block** or **Move down block** option from the block toolbar -- access Structure view and use **Move up** or **Move down** option in the settings of the block +- use **Move up block** or **Move down block** option from the block toolbox +- access the **Structure view** toolbox and use **Move up** or **Move down** option in the settings of the block When you add a new block to the drop zone, drop it in the blue highlighted area. Before you drop it, a bold line appears - it helps you see the position of the newly added block in relation to other, already added blocks. ![Drop zone line](dashboard_blue_line.png) -When you add a block by dragging it from **Dashboard blocks** menu into the drop zone, the block settings panel open immediately where you can configure all block properties. +When you add a block by dragging it from **Dashboard blocks** toolbox into the drop zone, the block settings panel open immediately where you can configure all block properties. ![Block properties](dashboard_block_properties.png) diff --git a/docs/getting_started/discover_ui.md b/docs/getting_started/discover_ui.md index 9293f582..bbc42f34 100644 --- a/docs/getting_started/discover_ui.md +++ b/docs/getting_started/discover_ui.md @@ -1,5 +1,5 @@ --- -description: Take a quick tour of the Back Office. +description: Take a quick tour of the back office. --- # User interface @@ -10,13 +10,13 @@ At the top of the main screen you can see a top bar. ![Top bar](img/top_bar_all.png "Top bar") -Depending on your location within the Back Office, it can contain the following important features: +Depending on your location within the back office, it can contain the following important features: A\. Logo in the left corner, which is a direct link to the [dashboard](#dashboard) B\. "Focus mode" badge which informs you that the [focus mode](#focus-mode) is on -C\. Global search field that allows you to [find content](../search/search_for_content.md) by checking all searchable Fields +C\. Global search field that allows you to [find content](../search/search_for_content.md) by checking all searchable fields D\. Drop-down that changes the site context @@ -32,7 +32,7 @@ G\. User avatar with a drop-down menu with access to [user profile and settings] !!! note "Site context" - Changing the site context results in the [Content Tree](#content-tree) showing content items that belong to the selected website. + Changing the site context results in the [content tree](#content-tree) showing content items that belong to the selected website. The appearance of content items can also change if they use different designs or languages depending on the [SiteAccess](../website_organization/multisite.md#siteaccess) settings. ## Dashboard @@ -45,46 +45,48 @@ It's the default dashboard and contains selected blocks. You can customize the dashboard by changing the blocks and the layout. For more information, see [Work with dashboard](work_with_dashboard.md). -## Main menu +## Main menu The main menu allows you to move between important sections of the application. ![Main menu](img/side_menu.png "Main menu") -You can adjust the size of the menu sidebar. To do this, click on the side edge of the panel, then drag and adjust to the desired size. +You can adjust the size of the menu sidebar. +To do this, click on the side edge of the panel, then drag and adjust to the desired size. You can also hide it by clicking the button in the down right corner. ![Main menu - adjust](img/menu_adjust.png "Adjust main menu or hide it") Depending on the product edition and your [permissions](../permission_management/permission_system.md), the main menu may include, for example: -- **Content**, which gives you access to the content Repository. -It lets you navigate the Content Tree, create, edit, move, copy, delete content, etc. +- **Content**, which gives you access to the content repository. +It lets you navigate the content tree, and, for example, create, edit, move, copy, or delete content. - [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]] **Site management**, which enables you to create and edit block-based Pages and manage multiple websites. - **PIM**, which enables you to handle products presented on the website, including their specifications and pricing. -- **Admin**, which is the administration panel where you can manage Users, Sections, permissions, etc. +- **Admin**, which is the administration panel where you can manage, for example, Users, Sections, or permissions. -## Content Tree +## Content tree If you want to navigate through your website with a menu, in the main menu, go to the **Content** -> **Content structure**. The **Content Tree** area is an expandable content menu of your website. -![Content Tree in the menu](img/left_menu_tree.png "Content Tree in the menu") +![Content tree in the menu](img/left_menu_tree.png "Content tree in the menu") -Unique icons for each content type instantly show you what type of content you are selecting. To add custom icons to your Content Tree, follow [configuration tutorial in developer documentation.]([[= developer_doc =]]/administration/back_office/back_office_elements/custom_icons/#customize-content-type-icons) +Unique icons for each content type instantly show you what type of content you're selecting. +To add custom icons to your content tree, follow [configuration tutorial in Developer Documentation]([[= developer_doc =]]/administration/back_office/back_office_elements/custom_icons/#customize-content-type-icons). Hidden content is greyed out in the tree view. -To simplify the Content Tree, big lists are collapsed and include a **Show more** icon. +To simplify the content tree, big lists are collapsed and include a **Show more** icon. You can select it to expand the branches of the tree. **Collapse all** option, which is available in the context menu, closes all expanded sections. -For more information on custom configuration, go to [Content Tree]([[= developer_doc =]]/administration/back_office/content_tree/) in developer documentation. +For more information on custom configuration, go to [Content tree]([[= developer_doc =]]/administration/back_office/content_tree/) in Developer Documentation. ## Content browser -During your work with [[= product_name =]] you might need to select content from the Repository. -This happens, for example, when you want to move or copy a content item, embed an image, link two content items, etc. +During your work with [[= product_name =]] you might need to select content from the repository. +This happens, for example, when you want to move or copy a content item, embed an image, or link two content items. In such cases, you use the **Content Browser**. To access the **Content Browser**, go to the **Content** tab and select **Content structure** or **Media**. @@ -94,30 +96,30 @@ The Content Browser window opens, and you can select the new destination of the ![Content Browser](img/udw.png "Content Browser") With the **Content Browser**, you can switch between the Grid, Panels and Tree views to navigate through the content of the website. -Depending on your permissions, you might be able to see the regular content, media, forms, site skeletons and User accounts. -You can also use the **Content Browser** to search the Repository for content, edit content, create bookmarks, and create new content when needed. +Depending on your permissions, you might be able to see the regular content, media, forms, site skeletons, and user accounts. +You can also use the **Content Browser** to search the repository for content, edit content, create bookmarks, and create new content when needed. !!! note - If you have administrator permissions, you can also view and manage User accounts and site skeletons in the **Admin** tab. + If you have administrator permissions, you can also view and manage user accounts and site skeletons in the **Admin** tab. For more information about users and permissions, see [Users](../permission_management/permissions_and_users.md). - + For more information about site skeletons, see [Site skeletons]([[= developer_doc =]]/multisite/site_factory/site_factory_configuration/#site-skeletons). ## Focus mode Focus mode helps editors focus on information that is only relevant to their line of work and omit technical details that would distract. -It is enabled by default, after you log in. +It's enabled by default, after you log in. If you need access to certain settings or technical details, you can [disable the focus mode](#disable-focus-mode) at any time. -- **Dark theme for Content Tree** -: In areas where the Content Tree is displayed, for example, in **Content structure**, the tree is displayed on a dark background. +- **Dark theme for content tree** +: In areas where the content tree is displayed, for example, in **Content structure**, the tree is displayed on a dark background. -![Dark theme for Content Tree](img/FM_dark_content_tree.png "Dark theme for Content Tree") +![Dark theme for content tree](img/FM_dark_content_tree.png "Dark theme for content tree") - **Content item view** -: If you select a specific [SiteAccess](translate_content.md#siteaccess) from the **Site context** drop-down list on the right side of the top bar and then browse content items in Content Tree, they are displayed in full view, with a limited set of actions available. +: If you select a specific [SiteAccess](translate_content.md#siteaccess) from the **Site context** drop-down list on the right side of the top bar and then browse content items in content tree, they're displayed in full view, with a limited set of actions available. To display the content item details view with more actions, click **Exit full view**. ![Content item in full view](img/FM_content_item_full_view.png "Content item in full view") @@ -127,8 +129,8 @@ To display the content item details view with more actions, click **Exit full vi Even when you're out of the full view or not in Focus mode, you can still preview the content item in the **View** tab. - **Different details view tabs** -: In Focus mode, the tabs in content item's detail view are different than the ones visible when it is disabled. -Additionally, they are displayed in different order to expose the ones that are more important from the editor's perspective. +: In Focus mode, the tabs in content item's detail view are different than the ones visible when it's disabled. +Additionally, they're displayed in different order to expose the ones that are more important from the editor's perspective. ![Content item tabs in Focus mode](img/FM_less_ci_tabs.png "Content item tabs in Focus mode") @@ -142,7 +144,7 @@ The list of columns available for selection is limited in Focus mode. Focus mode is enabled by default when you first log into [[= product_name =]], but you can toggle it in two places: -- in User settings +- in user settings ![Focus mode user setting](img/FM_user_settings.png "Focus mode user setting") diff --git a/docs/getting_started/get_started.md b/docs/getting_started/get_started.md index db6c27ce..d02d684d 100644 --- a/docs/getting_started/get_started.md +++ b/docs/getting_started/get_started.md @@ -1,14 +1,13 @@ --- -description: Get started with Ibexa DXP by logging in to the Back Office. +description: Get started with Ibexa DXP by logging in to the back office. --- # Get started -[[= product_name =]] consists of the technical platform for creating and managing +[[= product_name =]] consists of the technical platform for creating and managing online experiences, designed for developers and end-users alike. -It includes a Web framework, APIs and a Content Repository. -It features a customizable user interface where you can work with the content, -products, media, as well as manage other functionalities and administer the platform. +It includes a web framework, APIs and a content repository. +It features a customizable user interface where you can work with the content, products, media, manage other functionalities, and administer the platform. Depending on the product edition, [[= product_name =]] can provide advanced capabilities in such areas as: @@ -18,26 +17,26 @@ Depending on the product edition, [[= product_name =]] can provide advanced capa !!! note "Installation" - [[= product_name =]] must be [installed by the administrators]([[= developer_doc =]]/getting_started/install_ibexa_dxp/). + Only administrators can [install]([[= developer_doc =]]/getting_started/install_ibexa_dxp/) [[= product_name =]]. They should provide you with the address of the installation. -## Access the Back Office +## Access the back office -To access the Back Office (or the user/editor interface), add `/admin` to the address provided by the administrator. +To access the back office (or the user/editor interface), add `/admin` to the address provided by the administrator. For example, if your website's URL is `www.my-site.com`, you enter the editing interface through `www.my-site.com/admin`. -If you are the administrator, the default administrator account information is: +If you're the administrator, the default administrator account information is: - username: `admin` - password:` publish` -Otherwise, to login, you must get your user credentials from the administrator and enter them on the login screen. +Otherwise, to login, you must get your user credentials from the administrator, and enter them on the login screen. ![Login screen](img/login_form.png "Login screen") ### View and edit user profile -If you are an editor, depending on the system configuration, you may be able to view and edit the user profile, which can contain the following information: +If you're an editor, depending on the system configuration, you may be able to view and edit the user profile, which can contain the following information: - Avatar image - First and last name @@ -51,7 +50,7 @@ If you are an editor, depending on the system configuration, you may be able to !!! note - For the [recent activity](recent_activity.md) log to be displayed, your [user role](../permission_management/permissions_and_users.md) must have the **Activity Log / Read** permission. + To display the [recent activity](recent_activity.md) log, your [user role](../permission_management/permissions_and_users.md) must have the **Activity Log / Read** permission. ![User profile](img/user_profile_preview.png "User profile") @@ -73,7 +72,7 @@ You can now modify the following entries: To edit your avatar, in the **Image** area, click **Upload file** or drag and drop your photo. If necessary, you can [edit the photo with the Image Editor](edit_images.md). -After you finish, the avatar is uploaded and is visible in the Back Office. +After you finish, the avatar is uploaded and is visible in the back office. ![Edit avatar](img/user_profile_avatar.png "Edit avatar") @@ -89,19 +88,18 @@ You can access your user settings on the right side of the top bar: ![User preferences menu](img/user_preferences.png) -Here you can change your user password and define your user preferences, -such as preferred timezone, date and time format, or Back Office language. +Here you can [change your user password](get_started.md#change-the-password) and define your user preferences, such as preferred timezone, short and full date, and time format, or back office language. **Location** |Setting|Description| --------|-----------| -|Default currency|Sets the default currency used in the Back Office.| +|Default currency|Sets the default currency used in the back office.| |Toggle In-Context translation feature|Enables or disables integration with Crowdin to navigate the interface while translating.| -|User Time Zone|Sets time zone in the Back Office.| -|Date and time format|Sets format used in the Back Office.| -|Language|Sets the default language used in the Back Office.| - +|User Time Zone|Sets time zone in the back office.| +|Short date and time format|Sets short date and time format used in the back office.| +|Full date and time format|Sets full date and time format used in the back office.| +|Language|Sets the default language used in the back office.| **Content authoring** @@ -109,7 +107,7 @@ such as preferred timezone, date and time format, or Back Office language. --------|-----------| |[Autosave draft every given period](../content_management/content_versions.md/#autosave)|Enables or disables autosaving drafts.| |Seconds till next draft autosave|Sets time period for next autosave.| -|Enable character count in Online Editor|Enables or disables charactes count.| +|Enable character count in online editor|Enables or disables charactes count.| |Automatically open block settings in builders|Enables or disables the behavior of blocks used in builders.| **Browsing** @@ -117,7 +115,7 @@ such as preferred timezone, date and time format, or Back Office language. |Setting|Description| --------|-----------| |Number of items displayed in the table|Sets the number of items displayed in sub-items.| -|Location preview|Enables or disabled a thumbnail preview on the Content Tree.| +|Location preview|Enables or disabled a thumbnail preview on the content tree.| **Mode** diff --git a/docs/getting_started/img/dashboard_blocks_toolbar.png b/docs/getting_started/img/dashboard_blocks_toolbox.png similarity index 100% rename from docs/getting_started/img/dashboard_blocks_toolbar.png rename to docs/getting_started/img/dashboard_blocks_toolbox.png diff --git a/docs/getting_started/img/dashboard_switch_toolbar.png b/docs/getting_started/img/dashboard_side_moving.png similarity index 100% rename from docs/getting_started/img/dashboard_switch_toolbar.png rename to docs/getting_started/img/dashboard_side_moving.png diff --git a/docs/getting_started/img/dashboard_structure_view_toolbar.png b/docs/getting_started/img/dashboard_structure_view_toolbox.png similarity index 100% rename from docs/getting_started/img/dashboard_structure_view_toolbar.png rename to docs/getting_started/img/dashboard_structure_view_toolbox.png diff --git a/docs/ibexa_engage/ibexa_engage.md b/docs/ibexa_engage/ibexa_engage.md index 760bacba..57e8dcc6 100644 --- a/docs/ibexa_engage/ibexa_engage.md +++ b/docs/ibexa_engage/ibexa_engage.md @@ -1,9 +1,9 @@ --- -description: Ibexa Engage helps engage audiences and collect valuable data by using interactive content. +description: Use Ibexa Engage to engage audiences and collect valuable data. month_change: true --- -# Ibexa Engage +# [[= product_name_engage =]] [[= product_name_engage =]] is a data collection tool. It gives you the ability to use the [Qualifio](https://qualifio.com/) tools to engage your audiences. @@ -41,7 +41,7 @@ Click the **Manage campaigns in Qualifio** button to open a Qualifio page, where A campaign is a set of different concepts, grouped into steps, and open to configuration. You can use a campaign to interact with viewers, boost ad impressions, or gather cookies from targeted audiences. -Campaign can contain a welcome screen, a form step, an interaction element, an exit screen, and so on. +Campaign can contain elements like a welcome screen, a form step, an interaction element, or an exit screen. You can use Qualifio's existing templates and interactive elements, such as quizzes, pools, and forms, to create visually appealing, customized campaigns. You can also configure the backgrounds, themes, or designs, and set up a specific time frame for each campaign. @@ -64,11 +64,12 @@ Every campaign includes at least one publication channel, which you can choose f - **Mobile** - uses a link from Qualifio to integrate a campaign that is optimized for mobile usage. !!! note + By default, every type of publication channel is responsive and compatible with all mobile devices. ## Work with campaigns -You can create, configure, and manage campaigns by using [Qualifio Engage](https://developers.qualifio.com/docs/engage/). +You can create, configure, and manage campaigns with [Qualifio Engage](https://developers.qualifio.com/docs/engage/). To access the Qualifio Manager page and create or manage campaigns, click the **Manage campaigns in Qualifio** button under the **Ibexa Engage** menu. To display your campaign on the website, use one of the available tools - Campaign block or Campaign custom tag. diff --git a/docs/image_management/edit_images.md b/docs/image_management/edit_images.md index 9c6aeb97..70f53a46 100644 --- a/docs/image_management/edit_images.md +++ b/docs/image_management/edit_images.md @@ -4,13 +4,11 @@ description: Edit images in the Image Editor to flip, crop and select a focal po # Edit images -When you browse the [Media library](content_model.md#content-and-media), -or create or edit a content item that contains an *Image* -or *Image asset* Field, you can perform basic image editing functions by using the Image Editor. +When you browse the [Media library](content_model.md#content-and-media), or create or edit a content item that contains an *Image* or *Image asset* field, you can use the Image Editor to perform basic image editing functions. -The Image Editor enables: +The Image Editor enables: -* image cropping +* image cropping * image flipping * setting a point of focus within an image @@ -30,29 +28,26 @@ You can either choose one of the preset aspect ratio options (square, vertical o After you choose an aspect ratio, a grid appears on the preview. You can then resize the grid to mark an area of the image that you want to be visible. -You can also enter the exact width and height values in the **Crop size** area. +You can also enter the exact width and height values in the **Crop size** area. Click the tick icon to confirm the change or the **X** icon to cancel it and clear the preview. When you confirm the change, the preview refreshes to display a cropped image. !!! note "Saving changes" - Confirming the crop operation does not mean that it has been saved. + Confirming the crop operation doesn't mean that it has been saved. You must click **Save** to apply the changes to the original image. ## Focal point -If your page contains an image that is larger that the current viewport, for example, when a user accesses the page from a mobile phone, -you can select a point on the image that the view should focus on. +If your page contains an image that is larger that the current viewport, for example, when a user accesses the page from a mobile phone, you can select a point on the image that the view should focus on. -This way, a responsive image can be cropped to fit the viewport, -so the area that contains the selected point is always visible. +This way, a responsive image can be cropped to fit the viewport, so the area that contains the selected point is always visible. !!! note Cropping to focal point is not automatic. The website's templates must be adapted for this to happen. - See [Use focal point]([[= developer_doc =]]/templating/embed_and_list_content/render_images/#use-focal-point) - in developer documentation for an example of implementing such cropping. + See [Use focal point]([[= developer_doc =]]/templating/embed_and_list_content/render_images/#use-focal-point) in Developer Documentation for an example of implementing such cropping. Click the **Show point** button to see a target on the preview. Drag the target to a point on the image that you want to focus on. diff --git a/docs/image_management/upload_images.md b/docs/image_management/upload_images.md index d8fa7c6c..0ec22b9c 100644 --- a/docs/image_management/upload_images.md +++ b/docs/image_management/upload_images.md @@ -5,6 +5,7 @@ description: Upload images to Ibexa DXP to manage them. # Upload and store images !!! note + Some options may not be available depending on your configuration and permissions. ## Manage folders @@ -26,7 +27,7 @@ If you want to upload them to different location, navigate to the folder you wan 6\. Click **Publish**. -The newly created folder is now visible in the Content Tree structure. +The newly created folder is now visible in the content tree structure. You can create subfolders by clicking the folder and repeating the above procedure. ## Add image @@ -47,9 +48,9 @@ Tagging image assets helps keep the media library organized and enables searchin 7\. Click **Publish**. -!!!note - The maximum file size and file extension limitations may differ depending on your configuration. +!!! note + The maximum file size and file extension limitations may differ depending on your configuration. ## Edit images @@ -58,10 +59,7 @@ For detailed instructions how to edit images, see the [Image Editor documentatio ## Move images -To learn how to effectively manage image assets, see [Move assets between folders](../content_management/content_organization/copy_move_hide_content.md) -section. - - +To learn how to effectively manage image assets, see [Move assets between folders](../content_management/content_organization/copy_move_hide_content.md) section. ## Multiupload @@ -76,7 +74,6 @@ To upload many image assets, you can use multiupload. ## Add translations -If you work with multiple languages and want to use searching by languages in DAM, you can add translations -to image assets. +If you work with multiple languages and want to use searching by languages in DAM, you can add translations to image assets. To see how to add translations, go to [translate content section](../content_management/translate_content.md/#add-translations). \ No newline at end of file diff --git a/docs/permission_management/permission_system.md b/docs/permission_management/permission_system.md index 746b486a..2799cd59 100644 --- a/docs/permission_management/permission_system.md +++ b/docs/permission_management/permission_system.md @@ -1,43 +1,39 @@ --- -description: Fine-tune the access control by using the permission system. +description: Use the permission system to fine-tune the access control. --- # Permission system -An overview of the permission system in [[= product_name =]] is best presented by using an example. +An overview of the permission system in [[= product_name =]] is best presented with an example. ### Example permission system -Let us assume you are managing a newspaper website. Your crew consists of an editor-in-chief -and several editors responsible for particular sections of the paper: general news, local news, sports, etc. +Let us assume you're managing a newspaper website. +Your crew consists of an editor-in-chief and several editors responsible for particular sections of the paper, for example, general news, local news, or sports. You also have contributors who occasionally add new articles. -You want to give the editor-in-chief access to most parts of your website, -but the individual editors will only work with their own sections. +You want to give the editor-in-chief access to most parts of your website, but the individual editors only work with their own sections. To the contributors you want to give the permissions to create new content, but not to modify or delete the existing content. -In order to have this setup, you need to create a number of different Roles: Editor-in-Chief, different Editor(s), and Contributor. +To have this setup, you need to create a number of different roles: Editor-in-Chief, different Editor(s), and Contributor. -![Editor Role](img/role_details.png "Editor Role") +![Editor role](img/role_details.png "Editor role") -Even if you plan on having only one editor-in-chief, it is good practice to create a User group to contain this user, -and assign a Role to it instead of assigning permissions directly to the user. +Even if you plan on having only one editor-in-chief, it's good practice to create a user group to contain this user, and assign a role to it instead of assigning permissions directly to the user. ![User groups](img/user_groups.png "User groups") -To each of these Roles you need to assign proper Policies, giving them the right to perform certain actions. +To each of these roles you need to assign proper policies, giving them the right to perform certain actions. -The Editor-in-Chief Role would have the most Policies (although you may want to reserve some more advanced permissions only for system administrators). -Regular Editors need Policies allowing them to create, modify, and delete content. -Contributors can be given Policies permitting them to only create content. +The Editor-in-Chief role would have the most policies (although you may want to reserve some more advanced permissions only for system administrators). +Regular Editors need policies allowing them to create, modify, and delete content. +Contributors can be given policies permitting them to only create content. -If you want to prohibit Editors from accessing content in newspaper sections other than their own, you can add Limitations to their Policies. -This means that instead of one Editor, you need to have separate Roles for each editor profile: -Local Editor, Sports Editor, etc. All of these Roles will have the same Policies, -but to each Policy you need to assign a Limitation which would mean that the permission covers only one Section -(Sports Section, Local News Section etc.) that the editor works in. +If you want to prohibit Editors from accessing content in newspaper sections other than their own, you can add limitations to their policies. +This means that instead of one Editor, you need to have separate roles for each editor profile, for example, Local Editor or Sports Editor. +All of these roles have the same policies, but to each policy you need to assign a limitation which would mean that the permission covers only one Section (for example, Sports Section or Local News Section) that the editor works in. -Aside from Policies that define access to content items, there are also many other Policy types concerned with administrating the system. -They cover actions such as activating new Users, creating Sections, modifying content types, etc. +Aside from policies that define access to content items, there are also many other policy types concerned with administrating the system. +They cover actions, for example, activating new users, creating Sections, or modifying content types. For more information about setting up a permission system, see [Work with permissions](work_with_permissions.md). diff --git a/docs/permission_management/permissions_and_users.md b/docs/permission_management/permissions_and_users.md index ec271cce..d136ecad 100644 --- a/docs/permission_management/permissions_and_users.md +++ b/docs/permission_management/permissions_and_users.md @@ -9,5 +9,5 @@ With the permission system of [[= product_name =]] you can control which users h [[= cards([ "permission_management/permission_system", "permission_management/work_with_permissions", - "user_management/manage_users", + "user_management/manage_users" ], columns=4) =]] diff --git a/docs/permission_management/work_with_permissions.md b/docs/permission_management/work_with_permissions.md index 00ed8d8e..93c6ac5c 100644 --- a/docs/permission_management/work_with_permissions.md +++ b/docs/permission_management/work_with_permissions.md @@ -1,36 +1,36 @@ --- -description: Modify Role settings to control access to different areas of the application. +description: Modify role settings to control access to different areas of the application. --- # Work with permissions -You can view and modify all [permissions](permission_system.md) by clicking **Roles** in the **Admin Panel**. +You can view and modify all [permissions](permission_system.md) by clicking **Roles** in the **Admin** panel. -## Create a new Role +## Create a new role 1. Go to **Admin** -> **Roles** and click **Create**. -1. Provide a name and click **Save and close** to see a list of Policies that the Role has. -1. Click **+ Add**, select a Policy from the list and click **Save and close**. +1. Provide a name and click **Save and close** to see a list of policies that the role has. +1. Click **+ Add**, select a policy from the list and click **Save and close**. -You then may have an option to add Limitations to the Policy. -The available Limitations depend on the chosen Policy. -You can then return to a list of Policies by clicking **Save and close** or **Discard**. +You then may have an option to add limitations to the policy. +The available limitations depend on the chosen policy. +You can then return to a list of policies by clicking **Save and close** or **Discard**. -![Details of a Role](img/role_details.png "Details of a Role") +![Details of a role](img/role_details.png "Details of a role") -## Assign a Role to users +## Assign a role to users -1. Go to **Admin** -> **Roles** and select a Role. +1. Go to **Admin** -> **Roles** and select a role. 1. Go to the **Assignments** tab and click **Assign to Users/Groups**. -1. Choose users and/or groups to be assigned to this Role. -1. In the **Limitatons** area, select additional Limitations if necessary. +1. Choose users and/or groups to be assigned to this role. +1. In the **Limitatons** area, select additional limitations if necessary. 1. To discard your changes and close the window, click **Discard**. 1. To save your changes, click **Save and close**. -![Users assigned to Role](img/users_assigned.png "Users assigned to Role") +![Users assigned to role](img/users_assigned.png "Users assigned to role") -!!! note +!!! note - A User or user group may be assigned multiple Roles. + A user or user group may be assigned multiple roles. For a list of available permissions and limitations, see [Permissions]([[= developer_doc =]]/permissions/permissions/). diff --git a/docs/persona_paths/administrator.md b/docs/persona_paths/administrator.md index d8b04083..2ecd8192 100644 --- a/docs/persona_paths/administrator.md +++ b/docs/persona_paths/administrator.md @@ -1,14 +1,14 @@ --- -description: Discover administrative tasks that you can perform in the Back Office. +description: Discover administrative tasks that you can perform in the back office. --- # Application administrator role -When you perform administrative duties for your organization, you often are responsible for the configuration and maintenance of [[= product_name =]]-based application, as well as solving architectural challenges and performance problems. +When you perform administrative duties for your organization, you often are responsible for the configuration and maintenance of [[= product_name =]]-based application, and solving architectural challenges and performance problems. -In [[= product_name =]], most of such tasks are done outside of the UI. -It's described in detail in the [developer documentation]([[= developer_doc =]]). -However, certain things can be done in the Back Office. +In [[= product_name =]], most of such tasks are done outside of the UI. +It's described in detail in [Developer Documentation]([[= developer_doc =]]). +However, certain things can be done in the back office. ## What would you like to do today? diff --git a/docs/persona_paths/author_content.md b/docs/persona_paths/author_content.md index 2e517dde..e05a9bb1 100644 --- a/docs/persona_paths/author_content.md +++ b/docs/persona_paths/author_content.md @@ -4,7 +4,8 @@ description: Add and modify various content items, such as pages, articles, form # Author content -In [[= product_name =]] you store content data in content items. Learn to add and modify various content items, so that you can then show them to the audience. +In [[= product_name =]] you store content data in content items. +Learn to add and modify various content items, so that you can then show them to the audience. [[= cards([ "content_management/content_items", diff --git a/docs/persona_paths/editor.md b/docs/persona_paths/editor.md index d5219270..fe2d13ba 100644 --- a/docs/persona_paths/editor.md +++ b/docs/persona_paths/editor.md @@ -4,15 +4,13 @@ description: Learn about creating and managing content. # Content editor role -Whether you work as a marketing manager for a corporation, feed content to a portal -with book reviews or publish posts on your own blog page, in the [[= product_name =]] -universe you are perceived as a content editor. Your actual tasks may vary depending -on your position, but there are similarities that are characteristic to your role. +Whether you work as a marketing manager for a corporation, feed content to a portal with book reviews or publish posts on your own blog page, in the [[= product_name =]] universe you're perceived as a content editor. +Your actual tasks may vary depending on your position, but there are similarities that are characteristic to your role. Users who work as content editors can be tasked with the following responsibilities: -- Create new content for existing websites, as well as for specific campaigns and events -- Upload and edit content items (blog posts, articles, media, etc.) +- Create new content for existing websites, specific campaigns, and events +- Upload and edit content items (for example, blog posts, articles, or media) - Create engaging and memorable landing pages - Maintain editorial calendars and communicate deliverable deadlines across the organization diff --git a/docs/persona_paths/explorer.md b/docs/persona_paths/explorer.md index a64d6b87..d554aaa7 100644 --- a/docs/persona_paths/explorer.md +++ b/docs/persona_paths/explorer.md @@ -4,8 +4,7 @@ description: Browse a list of topics that bring you closer to understanding Ibex # Time to explore -Whether you are a new or seasoned user of [[= product_name =]], feel free -to browse a list of topics that bring you closer to understanding the product. +Whether you're a new or seasoned user of [[= product_name =]], feel free to browse a list of topics that bring you closer to understanding the product. [[= cards([ "getting_started/get_started", diff --git a/docs/persona_paths/manage_content_model.md b/docs/persona_paths/manage_content_model.md index 12657dc0..575c3d95 100644 --- a/docs/persona_paths/manage_content_model.md +++ b/docs/persona_paths/manage_content_model.md @@ -1,10 +1,11 @@ --- -description: Learn about the content model, content types and Fields. +description: Learn about the content model, content types and fields. --- # Manage content model -If you have Administrator permissions, you can develop a content model that is used in your [[= product_name =]] installation. Learn more and create or modify content types. +If you have Administrator permissions, you can develop a content model that is used in your [[= product_name =]] installation. +Learn more and create or modify content types. [[= cards([ "content_management/content_model", diff --git a/docs/persona_paths/manage_products.md b/docs/persona_paths/manage_products.md index d71c4be9..cd027a91 100644 --- a/docs/persona_paths/manage_products.md +++ b/docs/persona_paths/manage_products.md @@ -5,8 +5,7 @@ description: Add and configure products in your catalog, set up their attributes # Manage products In [[= product_name =]] you store aggregate product information in PIM. -Learn to add, categorize and organize products, so that you have control over -your stock and customers can easily browse your catalogs. +Learn to add, categorize and organize products, so that you have control over your stock and customers can easily browse your catalogs. [[= cards([ diff --git a/docs/persona_paths/organize_content.md b/docs/persona_paths/organize_content.md index 8902a71a..cfc0261f 100644 --- a/docs/persona_paths/organize_content.md +++ b/docs/persona_paths/organize_content.md @@ -1,13 +1,14 @@ --- -description: Organize the content of your website by copying or moving content items, controlling Locations and URLs and classifying content. +description: Organize the content of your website by copying or moving content items, controlling locations and URLs and classifying content. --- # Organize content -In [[= product_name =]] you store content data in content items. Learn to add and modify various content items, so that you can then show them to the audience. +In [[= product_name =]] you store content data in content items. +Learn to add and modify various content items, so that you can then show them to the audience. [[= cards([ "content_management/content_organization/copy_move_hide_content", "content_management/content_organization/classify_content", - "content_management/content_organization/manage_locations_urls", + "content_management/content_organization/manage_locations_urls" ], columns=2) =]] diff --git a/docs/persona_paths/publish_content.md b/docs/persona_paths/publish_content.md index ea572e03..84cab96f 100644 --- a/docs/persona_paths/publish_content.md +++ b/docs/persona_paths/publish_content.md @@ -4,9 +4,9 @@ description: Make content accessible to the audience. # Publish content -Once you are done editing the content, make it immediately accessible or schedule publication for later. +Once you're done editing the content, make it immediately accessible or schedule publication for later. [[= cards([ "content_management/publish_instantly", "content_management/schedule_publishing" -], columns=2) =]] +], columns=2) =]] diff --git a/docs/persona_paths/shop_manager.md b/docs/persona_paths/shop_manager.md index d13fd25b..db480522 100644 --- a/docs/persona_paths/shop_manager.md +++ b/docs/persona_paths/shop_manager.md @@ -4,13 +4,10 @@ description: Perform tasks related to running an online store. # Store manager role -When you run an online store, it is important that you maintain the -right turnover of stock while winning new customers and retaining existing ones, -and ultimately, bringing profit to the company. -In [[= product_name =]], it means that you must focus on many things, -including the following responsibilities: +When you run an online store, it's important that you maintain the right turnover of stock while winning new customers and retaining existing ones, and ultimately, bringing profit to the company. +In [[= product_name =]], it means that you must focus on many things, including the following responsibilities: -- Create and maintain product information (descriptions, tech specifications, media, etc.) +- Create and maintain product information (for example, descriptions, tech specifications, or media) - Maintain product pricing and shipping cost information - Manage shipping and payment methods - Manage and track orders diff --git a/docs/personalization/configure_models.md b/docs/personalization/configure_models.md index 4e01a876..60a09c93 100644 --- a/docs/personalization/configure_models.md +++ b/docs/personalization/configure_models.md @@ -4,18 +4,13 @@ description: Configure models by setting up a timeframe, segments and other sett # Configure models -If your [user role](../permission_management/permissions_and_users.md) has -the `Personalization/Edit` permission that includes your website, you can modify -model settings according to your requirements. +If your [user role](../permission_management/permissions_and_users.md) has the `Personalization/Edit` permission that includes your website, you can modify model settings according to your requirements. -Go to **Personalization** > **Models** to see a page that lists all available -[models](recommendation_models.md) and provides detailed information, such as the -[scenarios](scenarios.md) that use each model, or when the model was last triggered. +Go to **Personalization** > **Models** to see a page that lists all available [models](recommendation_models.md) and provides detailed information, such as the [scenarios](scenarios.md) that use each model, or when the model was last triggered. -![Models page in the Back Office](img/dashboard_models.png "Models page") +![Models page in the back office](img/dashboard_models.png "Models page") -Here, you can click the **Edit** icon to access the model configuration screen and modify -the settings, for example: +Here, you can click the **Edit** icon to access the model configuration screen and modify the settings, for example: - A timeframe over which the algorithm gathers [events](event_types.md) that are used in the calculation - [Submodels](recommendation_models.md#submodels) that can narrow down the list of model results @@ -26,42 +21,37 @@ For more information and a list of model types, see [Recommendation models](reco ### Advanced model configuration -Most of the models provide additional configuration parameters, which enable customization. +Most of the models provide additional configuration parameters, which enable customization. -The parameters supported by different model types are described in the table below. -Some models support [submodels](recommendation_models.md#submodels). -Additional differentiation criterion is the supported context. -If a model requires context, it can only be linked to scenarios that provide -the necessary context. +The parameters supported by different model types are described in the table below. +Some models support [submodels](recommendation_models.md#submodels). +Additional differentiation criterion is the supported context. +If a model requires context, it can only be linked to scenarios that provide the necessary context. |Model type|Available parameters|Submodel support|Context| |---|---|---|---| -|Popularity|Relevant event history defines the time period for which the statistics must be analyzed. Depending on the type of product, it can be between several months and several hours. Fast event ageing can be used to weight newer events higher than older events.|yes
submodels based on category are enabled by default|not needed| +|Popularity|Relevant event history defines the time period for which the statistics must be analyzed. Depending on the type of product, it can be between several months and several hours. Fast event aging can be used to weight newer events higher than older events.|yes
submodels based on category are enabled by default|not needed| |Also clicked/purchased / Ultimately bought|Both also clicked and ultimately purchased models allow defining the relevant event history.|yes, manual|required (either context items or user data)| |Recently added|This model requires the maximum age for the items that should be recommended by this model.|yes|not supported| |History-based|The type of the history (CLICK-history or BUY-history) must be specified.|no|required (user data)| |Editor-based|The list of recommendations must be created manually by the editor.|no|not supported| |Blacklist|The list of items that should be excluded from the recommendations must be created manually by the editor.|no|not supported| -Do not confuse event history age with item age. -History age is the age of the user's footprint (for example, "User clicked on the product A -two weeks ago"). -Item age is the time over which the item is available in the web store ("How new is the item"). -The history is recorded automatically based on [event](event_types.md) tracking. +Do not confuse event history age with item age. +History age is the age of the user's footprint (for example, "User clicked on the product A two weeks ago"). +Item age is the time over which the item is available in the web store ("How new is the item"). +The history is recorded automatically based on [event](event_types.md) tracking. The item catalog must be filled separately as a result of [data import](content_import.md). ### Trigger model build -Models on the Personalization server side are configured to build at intervals, -for example, every 24-hours. -For models which require computation (all [popularity](recommendation_models.md#popularity-models) and [collaborative models](recommendation_models.md#collaborative-models)), -you can manually trigger the build, for example, after you modify model settings. +Models on the Personalization server side are configured to build at intervals, for example, every 24-hours. +For models which require computation (all [popularity](recommendation_models.md#popularity-models) and [collaborative models](recommendation_models.md#collaborative-models)), you can manually trigger the build, for example, after you modify model settings. To do this, go to **Personalization** > **Models**. -Click the edit icon next to the model name, make necessary changes, and click -the **Trigger model build** button. -On the list of models, the model's status changes to `Build in progress`. -When the build come our successful, the status changes to `Active`. +Click the edit icon next to the model name, make necessary changes, and click the **Trigger model build** button. +On the list of models, the model's status changes to `Build in progress`. +When the build comes out successful, the status changes to `Active`. ![Model build status](img/models_edit.png "Model build status") diff --git a/docs/personalization/configure_personalization.md b/docs/personalization/configure_personalization.md index 85f5a0a4..b57cff1c 100644 --- a/docs/personalization/configure_personalization.md +++ b/docs/personalization/configure_personalization.md @@ -4,18 +4,13 @@ description: Configure your Personalization service by setting up models and sce # Configure personalization -In the Back Office, you can you can review the configuration that controls -the Personalization service. -If your [user Role](../permission_management/permissions_and_users.md) has -the `Personalization/Edit` permission that includes your website, you can modify -the settings according to your requirements. +In the back office, you can you can review the configuration that controls the Personalization service. +If your [user role](../permission_management/permissions_and_users.md) has the `Personalization/Edit` permission that includes your website, you can modify the settings according to your requirements. To do this, navigate to one of the pages mentioned below and edit the item that you want to modify. !!! note "Host multiple websites" - If you have permissions to access several websites hosted on an [[= product_name =]] - instance, you can use the selector field to switch between views for each - of these websites. + If you have permissions to access several websites hosted on an [[= product_name =]] instance, you can use the selector field to switch between views for each of these websites. [[= cards([ "personalization/configure_models", diff --git a/docs/personalization/configure_scenarios.md b/docs/personalization/configure_scenarios.md index 5d8fd72a..b0f18e02 100644 --- a/docs/personalization/configure_scenarios.md +++ b/docs/personalization/configure_scenarios.md @@ -4,62 +4,53 @@ description: Configure models by setting up a timeframe, segments and other sett # Configure scenarios -If your [user Role](../permission_management/permissions_and_users.md) includes -the `Personalization/View` Policy, you can go to **Personalization** > **Scenarios** -and see a page that lists all available scenarios. -It also provides additional information, such as a description of each of the scenarios, -[models](recommendation_models.md) that the scenario uses, or indication of whether -the scenario is operational or not. +If your [user role](../permission_management/permissions_and_users.md) includes the `Personalization/View` policy, you can go to **Personalization** > **Scenarios** and see a page that lists all available scenarios. +It also provides additional information, such as a description of each of the scenarios, [models](recommendation_models.md) that the scenario uses, or indication of whether the scenario is operational or not. -![Scenarios page in the Back Office](img/dashboard_scenarios.png "Scenarios page") +![Scenarios page in the back office](img/dashboard_scenarios.png "Scenarios page") -To modify the scenarios to suit your needs, you must have the `Personalization/Edit` Policy. +To modify the scenarios to suit your needs, you must have the `Personalization/Edit` policy. You can then click the **Edit** icon next to the name of the scenario. !!! note - You may have permissions to access several websites hosted on an [[= product_name =]], - [with independent results returned for each of these websites](use_cases.md#multiple-website-hosting). + You may have permissions to access several websites hosted on an [[= product_name =]], [with independent results returned for each of these websites](use_cases.md#multiple-website-hosting). If this is the case, use the selector field to switch between views for each of these websites. In the scenario configuration screen, you can configure a number of settings, for example: - + - The [type of content](content_types.md) used as input data and recommended items - A strategy consisting of primary, secondary and provisional models used to calculate results - User profile-based settings, boost settings and other [filters](filters.md) that can be used to eliminate or promote specific results - ## Configure basic settings -Provide a name and an identifier for the scenario. -Select a single input type and at least one output type. +Provide a name and an identifier for the scenario. +Select a single input type and at least one output type. ![Basic scenario configuration](img/scenario_configuration.png "Basic scenario configuration") ## Configure strategy -Modify the strategy by dragging model boxes between the **Models** area that lists -all available models and the **Strategy** board. +Modify the strategy by dragging model boxes between the **Models** area that lists all available models and the **Strategy** board. ![Strategy configuration](img/scenario_configuration_strategy.png "Strategy configuration") -You can arrange models within a scenario board by importance. +You can arrange models within a scenario board by importance. To make it possible, strategies have several levels. Add several models to every strategy level to avoid empty or insufficient recommendation results. -!!! note +!!! note - Models from each level are used in parallel and strategy results contain an equally - distributed mixture of both model results. - If models from one level do not return enough results, models from the - subsequent levels are used. + Models from each level are used in parallel and strategy results contain an equally distributed mixture of both model results. + If models from one level do not return enough results, models from the subsequent levels are used. From the **Data type** and **Context** drop-downs, select the required options to group items based on supported data types for the model. You can choose between **Submodels** or **Segments** data types. -If selected models support additional differentiators, you can apply them here. For more information about available model settings, see [Advanced model configuration](recommendation_models.md#advanced-model-configuration). +If selected models support additional differentiators, you can apply them here. For more information about available model settings, see [Advanced model configuration](recommendation_models.md#advanced-model-configuration). -!!! note +!!! note By default, models doe not use submodels or segments. Changes you make here apply only in the context of the current scenario. @@ -75,8 +66,7 @@ For a complete list of available general filter types and their meaning, see [Ge ## Configure category filters -For each of the importance levels from the strategy configuration matrix, you can -configure category filters. +For each of the importance levels from the strategy configuration matrix, you can configure category filters. Click the **Configure** icon next to an importance level name and make necessary changes. ![Category path filters](img/categorypath_filter.png "Category path filters in strategy settings") @@ -85,8 +75,7 @@ For a detailed description, see [Category path filters](filters.md#category-pat ## Configure cross content type recommendations -Cross content type option is used to combine best recommendation items from -different [types of content](content_types.md). +Cross content type option is used to combine best recommendation items from different [types of content](content_types.md). It applies to scenarios which have more than one output type configured. To get multiple output types in the recommendation request, perform the following actions: @@ -106,7 +95,6 @@ To get multiple output types in the recommendation request, perform the followin To check the results of your changes, [preview the scenario results](preview_scenario_results.md). You may need to provide additional information, for example, to test the cross content type recommendations, in the preview configuration screen, from the **Output type** drop-down, select **All**. - !!! note The **All** option becomes available only after you select multiple types of content in the scenario settings. diff --git a/docs/personalization/content_import.md b/docs/personalization/content_import.md index c40d76bd..ab707cd7 100644 --- a/docs/personalization/content_import.md +++ b/docs/personalization/content_import.md @@ -4,15 +4,11 @@ description: Importing existing data enables the Personalization service to prov # Import source data -Before the Personalization service can generate relevant recommendations, -it must be fed with data that relates to [content](content_types.md) items/products that are monitored, -and [event](event_types.md) tracking information. +Before the Personalization service can generate relevant recommendations, it must be fed with data that relates to [content](content_types.md) items/products that are monitored, and [event](event_types.md) tracking information. Some [scenarios](scenarios.md) return better results if provided with user data. -Data import operations are configured at the developer level, based on the arrangements -that you make with Ibexa. -Content item import jobs fetch data from the recommendation client, which tracks events, -to the Personalization service. +Data import operations are configured at the developer level, based on the arrangements that you make with [[= product_name_base =]]. +Content item import jobs fetch data from the recommendation client, which tracks events, to the Personalization service. The Personalization service then processes the events and calculates the recommendations. !!! note "Host multiple websites" @@ -22,27 +18,23 @@ The Personalization service then processes the events and calculates the recomme ## Content data import -There are several ways to import data into the Personalization service. +The Personalization service can accept data import in a several ways. For example, one can load an exported file to the Personalization service from a specified location.  -This type of import is intended to upload big portions of information, -and can be used to perform a weekly update of the whole product catalog. +This type of import is intended to upload big portions of information, and can be used to perform a weekly update of the whole product catalog. -For detailed information about content data import, see [Export item information]([[= developer_doc =]]/personalization/enable_personalization/#export-item-information) and [Content API]([[= developer_doc =]]/personalization/api_reference/content_api/) in the developer documentation. +For detailed information about content data import, see [Export item information]([[= developer_doc =]]/personalization/enable_personalization/#export-item-information) and [Content API]([[= developer_doc =]]/personalization/api_reference/content_api/) in Developer Documentation. ## User data import -The Personalization service has little information about the users of the website. -Additional attributes, such as the user's age or home city, might help the service generate -a successful recommendation, for example, by enabling the use of [boost filters](filters.md#boost-filters). +The Personalization service has little information about the users of the website. +Additional attributes, such as the user's age or home city, might help the service generate a successful recommendation, for example, by enabling the use of [boost filters](filters.md#boost-filters). User attributes could be retrieved based on the external user ID. -However, it is rarely possible to combine the external user ID within the user's attribute set. +However, it's rarely possible to combine the external user ID within the user's attribute set. -For more information about user attribute import, see [User API]([[= developer_doc =]]/personalization/api_reference/user_api/) in the developer documentation. +For more information about user attribute import, see [User API]([[= developer_doc =]]/personalization/api_reference/user_api/) in Developer Documentation. ## List of import operations -In the Back Office, from the main menu, under **Personalization**, you can access -the **Import** page that displays a list of historical import operations and their details, -such as the number of imported content items/products, their type and language. +In the back office, from the main menu, under **Personalization**, you can access the **Import** page that displays a list of historical import operations and their details, such as the number of imported content items/products, their type and language. -![Import tab in the Back Office](img/dashboard_import.png "Import tab") +![Import tab in the back office](img/dashboard_import.png "Import tab") diff --git a/docs/personalization/content_types.md b/docs/personalization/content_types.md index 4e7e5df8..6f2f045c 100644 --- a/docs/personalization/content_types.md +++ b/docs/personalization/content_types.md @@ -4,27 +4,21 @@ description: Types of content in the Personalization service allow building diff # Types of content -With the Personalization service, you can build different recommendation domains. -You do this by splitting all the products into different types of content. +With the Personalization service, you can build different recommendation domains. +You do this by splitting all the products into different types of content. There are several possible use cases for types of content, for example: - A publisher can track articles, pictures and videos as three different types. - A store can split all the products into food and non-food product groups. - An owner of several web stores can use a single account for all of them. -Based on the types of content concept, it is possible to make so-called cross -content type recommendations (like "Users who watched this film also read this -book" or "Users who bought these wallets also bought these belts"). +Based on the types of content concept, it's possible to make so-called cross content type recommendations (like "Users who watched this film also read this book" or "Users who bought these wallets also bought these belts"). -Apart from the logical separation of the content domains, types of content provide another -important advantage. -You can use them to adjust recommendation weight if different types of products/content items -are not equally popular but must be recommended equally often. -For example, on a content publisher's page, users watch videos less often than they read articles. -If the most popular products were requested without splitting the types of content, -there would most likely be no videos in the recommendation result. -If articles and videos are split into different types of content, you can explicitly request -popular videos and/or popular articles. +Apart from the logical separation of the content domains, types of content provide another important advantage. +You can use them to adjust recommendation weight if different types of products/content items aren't equally popular but must be recommended equally often. +For example, on a content publisher's page, users watch videos less often than they read articles. +If the most popular products were requested without splitting the types of content, there would most likely be no videos in the recommendation result. +If articles and videos are split into different types of content, you can explicitly request popular videos and/or popular articles. Here is a comparison of different approaches that you can take when defining types of content: @@ -39,6 +33,5 @@ Here is a comparison of different approaches that you can take when defining typ ### Types of content and scenarios -If multiple types of content are enabled in your configuration, for every scenario that -should recommend a specific type, you must enable this output type. +If multiple types of content are enabled in your configuration, for every scenario that should recommend a specific type, you must enable this output type. For more information about scenario configuration, see [Configure scenarios](configure_scenarios.md). diff --git a/docs/personalization/enable_personalization.md b/docs/personalization/enable_personalization.md index 256fdae3..dd15a483 100644 --- a/docs/personalization/enable_personalization.md +++ b/docs/personalization/enable_personalization.md @@ -5,21 +5,18 @@ description: Enabling the Personalization service requires an installation key p # Enable personalization The Personalization service is based on a client-server architecture. -The recommendation client that is part of your installation must connect to -the server that is run and maintained by Ibexa. -To use the service, you must make arrangements with Ibexa to define the initial -configuration, and then get and set up authentication parameters. +The recommendation client that is part of your installation must connect to the server that is run and maintained by [[= product_name_base =]]. +To use the service, you must make arrangements with [[= product_name_base =]] to define the initial configuration, and then get and set up authentication parameters. ## Request access to the server -After you get the initial configuration from Ibexa, you must accept the terms and conditions of the Personalization service -and create an account to get access to the server. +After you get the initial configuration from [[= product_name_base =]], you must accept the terms and conditions of the Personalization service and create an account to get access to the server. ### Create account First, you must accept the terms and conditions of the Personalization service. -1\. Go to the Back Office. +1\. Go to the back office. 2\. On the left panel, go to **Personalization** > **Dashboard**. @@ -44,7 +41,7 @@ First, you must accept the terms and conditions of the Personalization service. ## Set up service parameters -When you receive the the credentials, ask your administrator to: +When you receive the credentials, ask your administrator to: - [add the credentials to your configuration]([[= developer_doc =]]/personalization/enable_personalization/#set-up-customer-credentials) - [configure events that you wish to track]([[= developer_doc =]]/personalization/enable_personalization/#set-up-item-type-tracking) diff --git a/docs/personalization/event_types.md b/docs/personalization/event_types.md index 38258910..90315f0f 100644 --- a/docs/personalization/event_types.md +++ b/docs/personalization/event_types.md @@ -4,12 +4,10 @@ description: Recommendations rely on tracking different events that describe use # Events -Before the Personalization service can generate implicit recommendations, -it must collect events and calculate the results based on user behavior. +Before the Personalization service can generate implicit recommendations, it must collect events and calculate the results based on user behavior. The most important events collected by the service are CLICK and BUY events. -They are enough for providing basic recommendations. -Additional events exist for creating more complex [scenarios](scenarios.md) -and providing [statistics](review_perso_performance.md#statistical-information) about the acceptance of recommendations, such as conversion rate or revenue.  +They're enough for providing basic recommendations. +Additional events exist for creating more complex [scenarios](scenarios.md) and providing [statistics](review_perso_performance.md#statistical-information) about the acceptance of recommendations, such as conversion rate or revenue.  ![Events in a purchase process](img/events_overview.png "Events in a purchase process") @@ -26,7 +24,7 @@ The table below lists all possible events that could be used in the system. |CONSUME|Similar to the BUY event but without a payment. Designed for content publisher websites. Sent when an article or a web page is consumed (read or watched).| |DELETEFROMBASKET|Sent when the end user removes items from their shopping cart. Helps eliminate recommendations for products that the customer is no longer planning to buy.| |DELETEFROMWISHLIST|Sent when the end user removes items from their wishlist. Used to eliminate recommendations for products that the customer has either lost interest in or already purchased elsewhere.| -|OWNS|Same as BUY, but does not influence the statistics. Can be sent when a user already owns the product that was purchased somewhere else, to avoid recommending it again.| +|OWNS|Same as BUY, but doesn't influence the statistics. Can be sent when a user already owns the product that was purchased somewhere else, to avoid recommending it again.| |RATE|Additional [models](recommendation_models.md) can be created with this type of events. Allows building recommendations not only for implicit tracking events like CLICK or BUY, but also for events with explicit value like "rated" or "liked". These events need additional integration into the web page to allow the user to give an appropriate feedback. The event is triggered as a result of this user feedback.| |RENDERED|Sent when a recommendation is shown on the web page. This information is used by [filters](filters.md) to suppress repeated recommendations of the same item.| |TRANSFER / LOGIN|A special type of event to deal with user login after the user already surfed on the web page anonymously. Always sent when the identifier of the user changes. As a result, the anonymous history of the user is transferred to the new identifier. This happens automatically in the Personalization service.| @@ -40,7 +38,7 @@ The table below provides a brief overview of additional parameter information. |Event|Additional information| |---|---| -|CLICK|Category path of the product a customer clicked on can be attached to the event. It is an alternative way to provide this information for a product without having a catalogue/export. Ignored if an export is available to be fed into the Personalization service.| +|CLICK|Category path of the product a customer clicked on can be attached to the event. It's an alternative way to provide this information for a product without having a catalogue/export. Ignored if an export is available to be fed into the Personalization service.| |BUY|The price that a user paid for the product, an important parameter for the statistics. For revenue statistics, it must be sent together with a quantity of the products bought.| |TRIGGEROPENED /CLICKTRIGGERED|An identifier of the trigger that the trigger and recommendations originate from.| |FOLLOW / CLICKRECOMMENDED|The scenario which provided the recommendations must be sent in this event.| diff --git a/docs/personalization/filters.md b/docs/personalization/filters.md index 476ff268..ccbbe2e1 100644 --- a/docs/personalization/filters.md +++ b/docs/personalization/filters.md @@ -6,36 +6,32 @@ description: Filters enable you to fine-tune recommendation results by eliminati ## General filters -For every recommendation [scenario](scenarios.md), you can define a set of filters. -They are tools that you can use to eliminate, demote or promote specific recommendation results. -Filters are applied to all recommendations that come from [models](recommendation_models.md) selected in the strategy. +For every recommendation [scenario](scenarios.md), you can define a set of filters. +They're tools that you can use to eliminate, demote or promote specific recommendation results. +Filters are applied to all recommendations that come from [models](recommendation_models.md) selected in the strategy. ### User profile-based filters -User profile-based filters are applicable in both publishing and eCommerce use cases. +User profile-based filters are applicable in both publishing and eCommerce use cases. |Filter|Requirements and restrictions| |---|---| |Do not recommend the item currently viewed|When you activate this filter, it removes the context items from the recommendation list. You might not want to use this filter if your strategy is based on the ["Ultimately bought"](recommendation_models.md#ultimately-bought) model.| -|Do not recommend items the user already consumed|The Personalization service stores the CONSUME events of every user for one year. When you activate this filter, the user will not be recommended the consumed content again.| -|Max. repeated shows of identical recommendations per session|When you activate this filter and set a value, after a content item/product is recommended a certain number of times during the current user session, it is removed from all recommendation lists.| +|Do not recommend items the user already consumed|The Personalization service stores the CONSUME events of every user for one year. When you activate this filter, the user doesn't get the recommendation for the consumed content again.| +|Max. repeated shows of identical recommendations per session|When you activate this filter and set a value, after a content item/product is recommended a certain number of times during the current user session, it's removed from all recommendation lists.| #### Boost filters -User profile-based filters include a filter for moving certain items up on the list. -If enabled, boosting is triggered when values of a selected attribute from -a user profile and the recommended item match. -For example, news from the user's home country can have higher priority than from -the rest of the world. +User profile-based filters include a filter for moving certain items up on the list. +If enabled, boosting is triggered when values of a selected attribute from a user profile and the recommended item match. +For example, news from the user's home country can have higher priority than from the rest of the world. -In the diagram below, every item has the `country` attribute and user profiles -have the `country_of_origin` attribute. +In the diagram below, every item has the `country` attribute and user profiles have the `country_of_origin` attribute. You can configure the boost filter to promote recommendations for certain users: ![Boost filter example](img/boost_example.png "Boost filter example") -Item boosting requires that the Personalization service is fed with both item -and user attribute data. +Item boosting requires that the Personalization service is fed with both item and user attribute data. For more information about importing data, see [Import data](content_import.md). ### Exclusions @@ -57,46 +53,38 @@ The following filters are only applicable in Commerce use cases. |Filter|Requirements and restrictions| |---|---| -|No top-selling items|When you activate this filter, items that come from the top selling model (even if the model itself isn't linked to this scenario) aren't placed on the recommendations list. This way you can stop promoting products that are already popular. If you apply this filter to a top selling scenario as it will filter out all recommendations.| +|No top-selling items|When you activate this filter, items that come from the top selling model (even if the model itself isn't linked to this scenario) aren't placed on the recommendations list. This way you can stop promoting products that are already popular. If you apply this filter to a top selling scenario it filters out all recommendations.| |Item price should be equal or higher than the price of the context product|You can use this filter to filter out items that could be more attractive to the user from the recommendation list. It compares prices exported to the Personalization service with metadata of the currently viewed product.| |Minimum price of the recommended product|You can use this filter to remove cheap and popular items from the recommendation list. For example, as an optometrist you might prefer showing the most popular designer frames on the home page and avoid promoting insurance subsidized cheap models or cleaning cloths. Again, this filter relies on product metadata and uses prices exported to the Personalization service.| |Do not recommend if price unknown|If a product's price is unavailable then the product isn't recommended.| |Do not recommend items the user already purchased|When you activate this filter, the user isn't recommended to purchase products again.| -|Do not recommend product variants| By default, this filter is deactivated: only [product variants](../pim/products.md#product-variants) are recommended and base products aren't recommended. When you activate this filter, a recommendation response includes base products, while product variants are excluded. The filter does not affect products that have no variants. | +|Do not recommend product variants| By default, this filter is deactivated: only [product variants](../pim/products.md#product-variants) are recommended and base products aren't recommended. When you activate this filter, a recommendation response includes base products, while product variants are excluded. The filter doesn't affect products that have no variants. | !!! note "Product variants support" - The **Do not recommend product variants** checkbox is visible only if your version of [[= product_name =]] [supports product variants]([[= developer_doc =]]/release_notes/ibexa_dxp_v4.2/#product-variants). - Also, it is invisible before [data is imported](content_import.md) into the Personalization service, therefore you may need to revisit the [scenario configuration](configure_scenarios.md) page when data import completes. + The **Do not recommend product variants** checkbox is visible only if your version of [[= product_name =]] [supports product variants]([[= developer_doc =]]/release_notes/ibexa_dxp_v4.2/#product-variants). + Also, it's invisible before [data is imported](content_import.md) into the Personalization service, therefore you may need to revisit the [scenario configuration](configure_scenarios.md) page when data import completes. ## Category path filters -Apart from filters that you define at the scenario level, you can use category path -filters to narrow down recommendation results returned by each of the priority levels -in the scenario strategy. -When you activate a filter of this type, the service recommends only items from a specific -item/product category. +Apart from filters that you define at the scenario level, you can use category path filters to narrow down recommendation results returned by each of the priority levels in the scenario strategy. +When you activate a filter of this type, the service recommends only items from a specific item/product category. The actual category used to filter on is taken from recommendation request parameters. There are two ways to specify a category path in a recommendation request: - When there are no context items, but the category is provided in the request:  - You might want to place such recommendation calls on category overview pages - to display the most popular items/products of the currently viewed category - (or "reference category"). + You might want to place such recommendation calls on category overview pages to display the most popular items/products of the currently viewed category (or "reference category"). - When context items are provided and categories of all context items are used for the request:  - This approach is recommended only if it is technically impossible (or too complex) - to provide the category information explicitly. + This approach is recommended only if it's technically impossible (or too complex) to provide the category information explicitly. -Depending on how you configure category path filters, the Personalization service can take -different paths to find the actual set of categories to recommend the items/products from. +Depending on how you configure category path filters, the Personalization service can take different paths to find the actual set of categories to recommend the items/products from. The following example shows the category structure (which basically corresponds to website navigation): ![Example of a category path tree](img/categorypath_tree.png "Example of a category path tree") -The table below lists all possible configurations and categories that recommended -items/products are fetched from, based an assumption that the reference category passed in the request is "/Furniture/Desks&Tables/Tables". +The table below lists all possible configurations and categories that recommended items/products are fetched from, based an assumption that the reference category passed in the request is "/Furniture/Desks&Tables/Tables". |Category path filter configuration|Categories to fetch recommended items from| |---|---| @@ -108,47 +96,34 @@ items/products are fetched from, based an assumption that the reference category |"Recommend items from the same main category and its subcategories" set to 2 category levels and below|Category "Desks/Tables" and below.| |"Recommend items from the same main category and its subcategories" set to 3 category levels and below|Category "Tables" and below.| -You can provide multiple reference categories (both in the request and by defining -context items). -In such a case, the superset of the recommendations is returned, and the results -are sorted based on a global weight of the recommendations. -Depending on the popularity of the categories, the more popular categories push -the less popular categories out of the results. +You can provide multiple reference categories (both in the request and by defining context items). +In such a case, the superset of the recommendations is returned, and the results are sorted based on a global weight of the recommendations. +Depending on the popularity of the categories, the more popular categories push the less popular categories out of the results. -If the recommended item is located in more than one category, at least one category -should be requested in the recommendation call. +If the recommended item is located in more than one category, at least one category should be requested in the recommendation call. ### Multiple category path dimensions for popularity models -The category path parameter is a powerful tool. -A typical approach is to represent the default content in the navigation-based -structure of a website. -If you need to represent available items of a website in different dimensions (taxonomies), -you can do this out of the box, by enriching the `categorypath` information of an item. - -For example, in a store that sells furniture and plants, -products can be structured based on website navigation. -Typically, customers would look for computer desks and get a list of recommendations -of all computer desks in the store. -When necessary, the Personalization service can also use another dimension -for filtering recommendations, for example, a "brand" dimension. +The category path parameter is a powerful tool. +A typical approach is to represent the default content in the navigation-based structure of a website. +If you need to represent available items of a website in different dimensions (taxonomies), you can do this out of the box, by enriching the `categorypath` information of an item. + +For example, in a store that sells furniture and plants, products can be structured based on website navigation. +Typically, customers would look for computer desks and get a list of recommendations of all computer desks in the store. +When necessary, the Personalization service can also use another dimension for filtering recommendations, for example, a "brand" dimension. In this case, users would get recommendations for all items from the same "brand". -With popularity-based recommendations, you can get the most popular products based on -the main navigation tree (for example, the most popular desks) or based on the brand -(for example, the most popular IKEA products). +With popularity-based recommendations, you can get the most popular products based on the main navigation tree (for example, the most popular desks) or based on the brand (for example, the most popular IKEA products). Here are the examples of common representation dimensions of items beyond the website navigation: |Business|Possible dimensions| |---|---| -|eCommerce|manufacturer (BOSCH, Renault, etc.)
season (winter, spring, etc.)
price range (entry, middle, premium, etc.)
platform (Mac, Windows, Linux, etc.)| -|Book store|genre (romance, action, science, etc.)
design (hardcover, paperback, audiobook, etc.)
author (George R. R. Martin, Steven Spielberg, etc.)| -|Content publishing|global subject (politics, sports, tech, etc.)
physical location (France, Norway, Berlin, etc.)
timeframe (today, this week, exact date, etc.)| - -You should avoid using category filtering with "Also clicked/purchased" and stereotype models. -These models usually contain similar items, and additional filtering might remove -the best results from the list of possible recommendations. -The only exception could be coping with copyright or legal issues by removing -unlicensed or adult content in certain markets or for certain customers. -However, this use case could be handled with equal or greater success by using [submodels](recommendation_models.md#submodels) or [types of content](content_types.md). +|eCommerce|manufacturer (for example, BOSCH or Renault)
season (for example, winter or spring)
price range (for example, entry, middle, or premium)
platform (for example, Mac, Windows, or Linux)| +|Book store|genre (for example, romance, action, or science)
design (for example, hardcover, paperback, or audiobook)
author (for example, George R. R. Martin or Steven Spielberg)| +|Content publishing|global subject (for example, politics, sports, or tech)
physical location (for example, France, Norway, or Berlin)
timeframe (for example, today, this week, or exact date)| + +You should avoid using category filtering with "Also clicked/purchased" and stereotype models. +These models usually contain similar items, and additional filtering might remove the best results from the list of possible recommendations. +The only exception could be coping with copyright or legal issues by removing unlicensed or adult content in certain markets or for certain customers. +However, this use case could be handled with equal or greater success using [submodels](recommendation_models.md#submodels) or [types of content](content_types.md). diff --git a/docs/personalization/integrate_scenario_results.md b/docs/personalization/integrate_scenario_results.md index e0291a0e..c0402271 100644 --- a/docs/personalization/integrate_scenario_results.md +++ b/docs/personalization/integrate_scenario_results.md @@ -1,33 +1,23 @@ --- -description: You can display recommendation results in your Pages by using the Personalized block. +description: Use the Personalized block to display recommendation results in your pages. edition: experience --- # Integrate scenario results -When the Personalization service is [enabled](enable_personalization.md) and properly -[configured](configure_personalization.md), as an editor, you can embed the recommendations -that come from the service, to show them to the end users. -You can, for example, modify a Page to include a block that shows what -Content items/products are recommended to end users when specific [scenarios](scenarios.md) -are triggered. -One such example is the [Personalized block](../content_management/block_reference.md#personalized-block), where you can choose from a number of scenarios, -but there are also other blocks that are tailored to display the results of scenarios -of specific types, like [Recently added block](../content_management/block_reference.md#recently-added-block) -or [Bestsellers block](../content_management/block_reference.md#bestsellers-block). -Depending on the scenario type, you may need to provide additional information -to see the recommendation results. - -The blocks, as well as the number and selection of available scenarios within -these blocks depend on the arrangements that your organization makes with Ibexa -when defining the initial configuration. +When the Personalization service is [enabled](enable_personalization.md) and properly [configured](configure_personalization.md), as an editor, you can embed the recommendations that come from the service, to show them to the end users. +You can, for example, modify a page to include a block that shows what content items/products are recommended to end users when specific [scenarios](scenarios.md) are triggered. +One such example is the [Personalized block](../content_management/block_reference.md#personalized-block), where you can choose from a number of scenarios, but there are also other blocks that are tailored to display the results of scenarios of specific types, like [Recently added block](../content_management/block_reference.md#recently-added-block) or [Bestsellers block](../content_management/block_reference.md#bestsellers-block). +Depending on the scenario type, you may need to provide additional information to see the recommendation results. + +The blocks, the number, and selection of available scenarios within these blocks depend on the arrangements that your organization makes with [[= product_name_base =]] when defining the initial configuration. Follow these steps to add and configure the Personalized block to a Page: -1. In [Content Tree](discover_ui.md#content-tree), navigate to the page in which you want to place a personalization block. +1. In [content tree](discover_ui.md#content-tree), navigate to the page in which you want to place a personalization block. + +1. From the **Page blocks** toolbox, drag and drop the **Personalized** block to a location on the page layout. -1. From the **Elements** menu, drag and drop the **Personalized** block to a location on the page layout. - 1. Click the **Block settings** icon to modify the **Personalized** block:   1. On the **Basic** tab, set values in the following fields: @@ -35,15 +25,14 @@ Follow these steps to add and configure the Personalized block to a Page: - **Select a scenario** – Select "Landing page" or "Top clicked". - **Select a content type...** – Select "Product". - **Display limit** – Set the number of products to be displayed, for example, 4. - + 1. On the **Design** tab, in the **View** field, change the layout to "Products" and submit your changes. - + The preview of the Page changes to display a list of products recommended by the Personalization service. - + 1. Save your changes to the draft or publish the Page. -For more information about collecting events and embedding recommendation results, -see [Integrate recommendation service]([[= developer_doc =]]/personalization/integrate_recommendation_service/). +For more information about collecting events and embedding recommendation results, see [Integrate recommendation service]([[= developer_doc =]]/personalization/integrate_recommendation_service/). ## Use cross content type in Page Builder blocks @@ -63,4 +52,4 @@ To get all output types in the Personalized block, in Page Builder, perform the 1. Increase the display limit to make sure all recommendations are shown. 1. Click **Submit**. -For more information, see [Parameters]([[= developer_doc =]]/personalization/enable_personalization/#parameters) in the developer documentation. +For more information, see [Parameters]([[= developer_doc =]]/personalization/enable_personalization/#parameters) in Developer Documentation. diff --git a/docs/personalization/personalization.md b/docs/personalization/personalization.md index 99a06f83..f7459f77 100644 --- a/docs/personalization/personalization.md +++ b/docs/personalization/personalization.md @@ -4,34 +4,25 @@ description: Use the Personalization service to get recommendation for users bas # Personalization -A cloud-based Personalization service leverages artificial intelligence and machine learning -technologies to deliver optimized customer experience. -With Personalization, you capture [events](event_types.md) that represent preferences -and interests of your users, apply [models](recommendation_models.md) to quantify these findings, and combine them -by using [scenarios](scenarios.md) to generate recommendations, which you can then [present](integrate_scenario_results.md) in a form -of personalized content to visitors of one or more websites hosted by the [[= product_name =]] instance. +A cloud-based Personalization service leverages artificial intelligence and machine learning technologies to deliver optimized customer experience. +With Personalization, you capture [events](event_types.md) that represent preferences and interests of your users, apply [models](recommendation_models.md) to quantify these findings, and combine them with [scenarios](scenarios.md) to generate recommendations, which you can then [present](integrate_scenario_results.md) in a form of personalized content to visitors of one or more websites hosted by the [[= product_name =]] instance. -Both event tracking and result publishing is done by users with administrator privileges, -according to a procedure [described in the developer documentation]([[= developer_doc =]]/personalization/integrate_recommendation_service/). +Both event tracking and result publishing is done by users with administrator privileges, according to a procedure [described in Developer Documentation]([[= developer_doc =]]/personalization/integrate_recommendation_service/). -There are different areas where you can apply recommendations. +There are different areas where you can apply recommendations. The most common ones are [eCommerce and content publishing](use_cases.md). !!! note "eCommerce vs. content publishing" - Documentation mentions eCommerce use cases more often, - but provides a thorough understanding of the content publishing context as well. + Documentation mentions eCommerce use cases more often, but provides a thorough understanding of the content publishing context as well. Both products and content items can be referred to as content and the BUY [event](event_types.md) can be understood as the CONSUME event. Before you can use the Personalization service, you must [enable it](enable_personalization.md). -Then, for the service to generate relevant recommendations, -you can [change the default configuration](configure_personalization.md). -Finally, you can [feed it with data](content_import.md), or wait until the service -gathers enough information about the content and events. -On a website with more than 100 clicks per day, a day of collecting data should -be sufficient for the first recommendations to be relevant. +Then, for the service to generate relevant recommendations, you can [change the default configuration](configure_personalization.md). +Finally, you can [feed it with data](content_import.md), or wait until the service gathers enough information about the content and events. +On a website with more than 100 clicks per day, a day of collecting data should be sufficient for the first recommendations to be relevant. Recommendations become better with time and the amount of data collected. For more information about Personalization, see [Ibexa blog](https://www.ibexa.co/blog/ibexa-dxp-v3.3-new-feature-preview-personalization-simplified-and-dxp-integrated) or a [downloadable eBook](https://www.ibexa.co/events/ibexa-engage-2021/resources/downloads/the-basics-of-personalization). diff --git a/docs/personalization/preview_scenario_results.md b/docs/personalization/preview_scenario_results.md index bc59407c..a4236e8a 100644 --- a/docs/personalization/preview_scenario_results.md +++ b/docs/personalization/preview_scenario_results.md @@ -1,58 +1,42 @@ --- -description: In the Back Office you can preview what results are recommended by the Personalization service. +description: In the back office you can preview what results are recommended by the Personalization service. --- # Preview scenario results -If your [user Role](../permission_management/permissions_and_users.md) has -the `Personalization/View` permission that includes your website, you can see what -Content items/products are recommended to the end user when specific [scenarios](scenarios.md) -are triggered. -Depending on the scenario type, you might need to provide additional information -to see the recommendation results. +If your [user role](../permission_management/permissions_and_users.md) has the `Personalization/View` permission that includes your website, you can see what content items/products are recommended to the end user when specific [scenarios](scenarios.md) are triggered. +Depending on the scenario type, you might need to provide additional information to see the recommendation results. !!! note "Host multiple websites" - If you have permissions to access several websites hosted on an [[= product_name =]] - instance, you can use the selector field to switch between views for each - of these websites. + If you have permissions to access several websites hosted on an [[= product_name =]] instance, you can use the selector field to switch between views for each of these websites. -The number and selection of available scenarios depends on the arrangements that -your organization makes with Ibexa when defining the initial configuration. +The number and selection of available scenarios depends on the arrangements that your organization makes with [[= product_name_base =]] when defining the initial configuration. -1. Navigate to the **Personalization** > **Scenarios** tab, and then click the **Preview** -icon next to a scenario that you want to preview. +1. Navigate to the **Personalization** > **Scenarios** tab, and then click the **Preview** icon next to a scenario that you want to preview. -1. If your scenario is based on models of [popularity type](recommendation_models.md#popularity-models), such as, for example, -**Landing page** or **Top clicked**, skip to the last step. +1. If your scenario is based on models of [popularity type](recommendation_models.md#popularity-models), for example, **Landing page** or **Top clicked**, skip to the last step. No further configuration is required. -1. If your scenario is based on models of [collaborative type](recommendation_models.md#collaborative-models), for example, -**Also clicked**, in the **Context items** area, in the **Set up items** field, and start typing content item/product name or ID. +1. If your scenario is based on models of [collaborative type](recommendation_models.md#collaborative-models), for example, **Also clicked**, in the **Context items** area, in the **Set up items** field, and start typing content item/product name or ID. 1. From the search results select the respective content item/product. 1. Click the **Add** button to confirm. ![Preview scenario](img/scenario_preview_content_search.png "Preview scenario") -1. If your collaborative scenario has [category-path filtering](filters.md#category-path-filters) -enabled, for example, **Also clicked - category**, in the **Category path filter** -area: +1. If your collaborative scenario has [category-path filtering](filters.md#category-path-filters) enabled, for example, **Also clicked - category**, in the **Category path filter** area: 1. Click **Select path**, and go to the category to be used as a filter, and then click the **Confirm** button. 1. If stored externally, in the **Path** field manually enter the path to the category, and then click the **Add** button. -1. If your collaborative scenario uses the end user’s history as context, like, for example, -**Also clicked - user**, enter an end user identifier in the **User id** field, for example, 500. +1. If your collaborative scenario uses the end user’s history as context, like, for example, **Also clicked - user**, enter an end user identifier in the **User id** field, for example, 500. -1. If your scenario has the use of [submodels](recommendation_models.md#submodels) enabled, -in the **Custom parameters** field, enter the phrase that defines a set of items -based on a specific attribute, for example "material=wood", and then click the **Add** button. +1. If your scenario has the use of [submodels](recommendation_models.md#submodels) enabled, in the **Custom parameters** field, enter the phrase that defines a set of items based on a specific attribute, for example "material=wood", and then click the **Add** button. 1. Click **Send request** to display the results. !!! note "Display response" - You can preview the exact data object that is returned from the Personalization server - and then used by the Personalization service to generate the response. + You can preview the exact data object that is returned from the Personalization server and then used by the Personalization service to generate the response. To see the data object, click **See response code**. diff --git a/docs/personalization/recommendation_models.md b/docs/personalization/recommendation_models.md index 475411a4..5ef83838 100644 --- a/docs/personalization/recommendation_models.md +++ b/docs/personalization/recommendation_models.md @@ -4,23 +4,17 @@ description: Models are building blocks to recommendation scenarios. They let yo # Recommendation models -Recommendations that are useful in [real-life situations](use_cases.md) are generated by using -[scenario strategies](scenarios.md) that consist of algorithms (models). -Models are statistics-based and perform calculations based on information about -[content](content_types.md), users, and [events](event_types.md) in which they're involved. -Calculations run in the background and the results are updated regularly to provide -the most accurate recommendations. -Models come predefined with the service, based on the arrangements that your -organization makes with Ibexa when defining the initial configuration. +Recommendations that are valuable in [real-life situations](use_cases.md) are generated using [scenario strategies](scenarios.md) that consist of algorithms (models). +Models are statistics-based and perform calculations based on information about [content](content_types.md), users, and [events](event_types.md) in which they're involved. +Calculations run in the background and the results are updated regularly to provide the most accurate recommendations. +Models come predefined with the service, based on the arrangements that your organization makes with [[= product_name_base =]] when defining the initial configuration. You can request that a specific model is created by contacting customer support. -If your [user Role](../permission_management/permissions_and_users.md) includes -the `Personalization/Edit` Policy, you can modify the models according to your requirements. +If your [user role](../permission_management/permissions_and_users.md) includes the `Personalization/Edit` policy, you can modify the models according to your requirements. To do this, navigate to the **Models** tab and click the **Edit** icon next to a name of the model. -You may have permissions to access several websites hosted on an [[= product_name =]], -[with independent results returned for each of these websites](use_cases.md#multiple-website-hosting). +You may have permissions to access several websites hosted on an [[= product_name =]], [with independent results returned for each of these websites](use_cases.md#multiple-website-hosting). If this is the case, use the selector field to switch between views for each of these websites. ## Model types @@ -29,10 +23,8 @@ There are several types of models available, however, the distinction between ty ### Popularity models -Basic popularity recommendations, such as "Top purchased", "Top consumed" or "Top clicked". -Models from this category return the most popular content items/products, based on a weighted overall -usage history (recent events are more important) and category-based filtering (bestsellers -in the selected category and/or subcategories). +Basic popularity recommendations, such as "Top purchased", "Top consumed" or "Top clicked". +Models from this category return the most popular content items/products, based on a weighted overall usage history (recent events are more important) and category-based filtering (bestsellers in the selected category and/or subcategories). #### Predictive @@ -45,51 +37,39 @@ These models are more complex and require combining data from different sources. #### Also clicked / purchased -This type of recommendation is often called "Collaborative filtering based on user data" -and is a proven, powerful approach to calculating recommendations. -It recommends products that are usually clicked or purchased together. -It's simple to configure and needs no maintenance. +This type of recommendation is often called "Collaborative filtering based on user data" and is a proven, powerful approach to calculating recommendations. +It recommends products that are usually clicked or purchased together. +It's straightforward to configure and needs no maintenance. #### Ultimately bought -This model combines CLICK and BUY events. -It suggests alternative products, which customers purchased after they clicked -the selected product. -It therefore provides a "matching factor" of searching and purchasing. -In contrast to the "Also purchased" model, it recommends products that are related, -but not purchased together. -This model is the best choice to suggest alternative products for their search. -For example, when a user finds a book and the same book is being recommended on the product page, -it means that other users with the same interest purchased this book (and not others), -which hints that this book is the best choice. +This model combines CLICK and BUY events. +It suggests alternative products, which customers purchased after they clicked the selected product. +It therefore provides a "matching factor" of searching and purchasing. +In contrast to the "Also purchased" model, it recommends products that are related, but not purchased together. +This model is the best choice to suggest alternative products for their search. +For example, when a user finds a book and the same book is being recommended on the product page, it means that other users with the same interest purchased this book (and not others), which hints that this book is the best choice. #### Frequently bought together / Bundle recommendations -Products that were bought in a combination for a certain number of times can be -recommended as a bundle. -This model can recommend other products that fit the one that the user -is currently looking at. +Products that were bought in a combination for a certain number of times can be recommended as a bundle. +This model can recommend other products that fit the one that the user is currently looking at. -For example, when a user navigates to a product page with a certain smartphone, -apart from the "Also clicked" recommendations, the Personalization service could -recommend the *Smartphone + Cover + Headphones* bundle, because they were purchased -together in exactly this combination several times. +For example, when a user navigates to a product page with a certain smartphone, apart from the "Also clicked" recommendations, the Personalization service could recommend the *Smartphone + Cover + Headphones* bundle, because they were purchased together in exactly this combination several times. -It isn't guaranteed that there is a bundle available for every product. -Therefore, the rendering logic should display the recommendations if they're available, -or leave the bundle box out completely. +It's not guaranteed that there is a bundle available for every product. +Therefore, the rendering logic should display the recommendations if they're available, or leave the bundle box out completely. The currently displayed product is always part of the bundle. #### Similar rated -The "Similar rated" model provides recommendations based on user preferences. -It predicts articles that might suit the user's interests. +The "Similar rated" model provides recommendations based on user preferences. +It predicts articles that might suit the user's interests. Recommendations for articles similar to their dislikes are suppressed. #### Best rated -This model provides recommendations based on algorithms that include the ranking -values and the amount of distinct ratings. +This model provides recommendations based on algorithms that include the ranking values and the amount of distinct ratings. It's best suited for landing or category pages. ## Editorial and other models @@ -97,12 +77,10 @@ It's best suited for landing or category pages. #### Recently added This model returns a list of items from the recently added items in a configured time period. -For example, if you set item age to 10 days, the model returns items which were added to the database 10 days ago (recently added items). +For example, if you set item age to 10 days, the model returns items which were added to the database 10 days ago (recently added items). -It allows injecting new items (products, articles, an so on), to the recommendation while the "History-based" models -are yet unable to recommend products based on the statistics. -It's a simplified and unsophisticated alternative if no other information is available -to calculate and provide recommendations. +It allows injecting new items (products, articles, an so on), to the recommendation while the "History-based" models are yet unable to recommend products based on the statistics. +It's a simplified and unsophisticated alternative if no other information is available to calculate and provide recommendations. ![Item age](img/recently_added_item_age.png "Item age") @@ -110,22 +88,21 @@ This model isn't based on historical records but relies on the imported product #### Editor-based -This model returns products from a list that you manually create if you have -`Personalization/Edit` Policy. -This way you can replace automatically generated recommendations with ones from a predefined list. -It's best suited for cases when the store administrator wants to add special offers or sell older stock. +This model returns products from a list that you manually create if you have `Personalization/Edit` policy. +This way you can replace automatically generated recommendations with ones from a predefined list. +It's best suited for cases when the store administrator wants to add special offers or sell older stock. It could be referred to as "Static recommendations". #### Blacklist Items from this list aren't recommended in any scenario. -The model can be configured manually by a user. -You can use this model to exclude test products or products that are used for system monitoring. +The model can be configured manually by a user. +You can use this model to exclude test products or products that are used for system monitoring. An element added to this list is never recommended so it must be treated with care, because the blacklist model applies to all scenarios that exist in the system. #### History-based -Pseudo recommendation model that shows the user products from their own history. +Pseudo recommendation model that shows the user products from their own history. For example, the "You have just watched" box. #### Recurring purchase @@ -134,8 +111,7 @@ A recurring purchase model recognizes purchase patterns and returns recommendati This model is based on predictable purchase occurring at regular intervals going forward with a relatively high degree of certainty. The model recommends items which are suitable for this pattern. Item recommendations are displayed 20% before the completion of estimated time pattern of repeating purchasing the product. -It means, for example, that if the pattern covers 100 days, when the optimal time comes from day 80., the recommendation begins to display. When a user purchases the recommended item on day 92., -the recommendation is no longer shown and the counter resets. +It means, for example, that if the pattern covers 100 days, when the optimal time comes from day 80., the recommendation begins to display. When a user purchases the recommended item on day 92., the recommendation is no longer shown and the counter resets. !!! tip @@ -143,10 +119,11 @@ the recommendation is no longer shown and the counter resets. ### B2B model -This model shows which items were recently clicked or bought for a particular segment group of a company. +This model shows which items were recently clicked or bought for a particular segment group of a company. B2B models work for a group of users, not for an individual user, and are considered [segment](configure_models.md#configure-segments) models. !!! note + To get recommendations for the specified segment, in the request, pass the parameter only for this segment. B2B requests are limited to only one segment ID. @@ -159,28 +136,26 @@ There are two types of B2B last models: - B2B last clicked - returns the actual recent items which were clicked by a user with the same `segment ID`. For example, two users from the same `segment ID` can see the last clicked items by anyone from the same `segment ID`. - B2B last purchased - works the same as last clicked, however, returns actual bought items. -The maximum time from which events can be fetched is 10 days. +The maximum time from which events can be fetched is 10 days. ### B2B recurring purchase model -This model is built on the fly. It anticipates and predicts purchase of products that were bought recursively within the same `segment ID`. +This model is built on the fly. It anticipates and predicts purchase of products that were bought recursively within the same `segment ID`. The item appears in this model for recommendation only when it was purchased at least twice by users from the same `segment ID` in the configured timeframe. B2B recurring purchase models predict the date of the next purchase based on an average demand per day, extrapolated from BUY events. -The higher relevance of the item, the closer predicted date of the next purchase is. -The item starts to appear when the time interval is covered in 80% between the date of the last purchased and predicted date of the next purchase. +The higher relevance of the item, the closer predicted date of the next purchase is. +The item starts to appear when the time interval is covered in 80% between the date of the last purchased and predicted date of the next purchase. For example, if the time interval is set to 10 days and the next purchase is predicted after these 10 days, recommendations are displayed two days before that date. - + ## Submodels -Statistics-based recommendations often have the disadvantage of providing recommendations limited -to the most popular, most suitable to the user, or most similar products. -You might want to extend the set of available recommendations by defining a subset of -items based on external criteria. +Statistics-based recommendations often have the disadvantage of providing recommendations limited to the most popular, most suitable to the user, or most similar products. +You might want to extend the set of available recommendations by defining a subset of items based on external criteria. -Submodels give you the option to group products based on an attribute. +Submodels give you the option to group products based on an attribute. Recommendations can then be requested specifically for the selected group. For example: @@ -188,31 +163,27 @@ For example: - "Most popular toys for the predefined age" - "Also bought presents with a predefined price" -Submodels must be manually configured. +Submodels must be manually configured. You do this in the property dialog of the recommendation model. -After you configure the submodel, the results are generated overnight and are available -on the next day. +After you configure the submodel, the results are generated overnight and are available on the next day. -Once configured, submodels are enabled for the model globally. -All the scenarios which use this model also use the submodel. -If you don't want to group recommendations based on a certain attribute, remove the attribute parameter from the request. +Once configured, submodels are enabled for the model globally. +All the scenarios which use this model also use the submodel. +If you don't want to group recommendations based on a certain attribute, remove the attribute parameter from the request. The submodel is then omitted. !!! note "Multiple submodels in recommendations" You can combine recommendations from two different submodels, regardless of their type, within a single recommendation call. A response to such call contains only recommendations that come from both submodels at the same time. - For more information, see [Customizing the recommendation request]([[= developer_doc =]]/personalization/api_reference/recommendation_api/#submodel-parameters) in the developer documentation. + For more information, see [Customizing the recommendation request]([[= developer_doc =]]/personalization/api_reference/recommendation_api/#submodel-parameters) in Developer Documentation. ### Nominal attributes -A nominal attribute-based submodel works when the number of values of an attribute -is relatively small and there is a large group of products for every value. -A good example would be clothes colors in a clothing store, while authors in a book -store would make a bad example (there are too many of them). +A nominal attribute-based submodel works when the number of values of an attribute is relatively small and there is a large group of products for every value. +A good example would be clothes colors in a clothing store, while authors in a book store would make a bad example (there are too many of them). -When configuring submodels for a clothing store, you might want to get recommendations -for a specific color, either predefined or a color of the context item. +When configuring submodels for a clothing store, you might want to get recommendations for a specific color, either predefined or a color of the context item. Similar colors can be grouped together, as shown below: ![Attribute example](img/attribute_example.png "Attribute grouping example") @@ -229,19 +200,16 @@ The following results are possible for the products shown in the diagram: ### Numeric attributes -In numeric attribute-based submodels you define subgroups by setting `from` -and `to` limits for every group. +In numeric attribute-based submodels you define subgroups by setting `from` and `to` limits for every group. The logic used for resolving a submodel is as follows: - The `from` value indicates the beginning of the range and is included in the subgroup. - The `to` value indicates the end of the range end and is excluded from the subgroup. - The only exception is the last of the ranges, where the `to` value is also included. + The only exception is the last of the ranges, where the `to` value is also included. !!! note - You can specify a single or multiple attributes with multiple values - for requesting recommendations. - Recommendation are fetched from all the submodels and merged based on the weight (relevance). - If one of the submodels delivers recommendations with better relevance, - the results of other models can disappear from the list. \ No newline at end of file + You can specify a single or multiple attributes with multiple values for requesting recommendations. + Recommendation are fetched from all the submodels and merged based on the weight (relevance). + If one of the submodels delivers recommendations with better relevance, the results of other models can disappear from the list. \ No newline at end of file diff --git a/docs/personalization/review_perso_performance.md b/docs/personalization/review_perso_performance.md index 3f237300..ba489519 100644 --- a/docs/personalization/review_perso_performance.md +++ b/docs/personalization/review_perso_performance.md @@ -4,23 +4,18 @@ description: You can view the performance and statistical information about the # Review performance -You can review statistical information related to the functioning of the Personalization service, -to help you fine-tune [models](recommendation_models.md) and [scenarios](scenarios.md) and, -in consequence, achieve better financial results. -You can do this by visiting the dashboard, where you can monitor the performance -of the Personalization service. +You can review statistical information related to the functioning of the Personalization service, to help you fine-tune [models](recommendation_models.md) and [scenarios](scenarios.md) and, in consequence, achieve better financial results. +You can do this by visiting the dashboard, where you can monitor the performance of the Personalization service. The dashboard consists of several sections: -- The top section contains tiles with the most important metrics, such as a number of recommendation calls, number of successful recommendations and so on. +- The top section contains tiles with the most important metrics, such as a number of recommendation calls, or number of successful recommendations. - The diagrams section presents statistical information on how the Personalization service is used and how successful recommendations are, depending on key performance indicators. - The bottom section is made up of tables with detailed information, such as the most popular items. !!! note "Host multiple websites" - If you have [permissions](../permission_management/permissions_and_users.md) to access several websites hosted on an [[= product_name =]] - instance, you can use the selector field to switch between dashboards for - each of these websites. + If you have [permissions](../permission_management/permissions_and_users.md) to access several websites hosted on an [[= product_name =]] instance, you can use the selector field to switch between dashboards for each of these websites. ## Statistical information @@ -33,24 +28,18 @@ The diagram part consists of four main blocks: - Conversion rate: The absolute number of converted/sold recommendations. - Collected events: - Input data CLICK, BUY, and other events that the Personalization service collects - from the website. + Input data CLICK, BUY, and other events that the Personalization service collects from the website. For more information, see [Events](event_types.md). ![Diagrams on the dashboard](img/dashboard_statistics.png "Performance diagrams on the dashboard") -Revenue-through-recommendations is an additional monetary value that resulted from -the clicked recommendations. -It is calculated by summing up the revenue coming from products that users have purchased -within 30 minutes from clicking a recommendation. +Revenue-through-recommendations is an additional monetary value that resulted from the clicked recommendations. +It's calculated by summing up the revenue coming from products that users have purchased within 30 minutes from clicking a recommendation. -Purchased recommendations is the number of products sold, without any -revenue/price information. +Purchased recommendations is the number of products sold, without any revenue/price information. -Conversion (or click-through) rate is an indicator of the acceptance and, subsequently, -the quality of recommendations.  -It is calculated by dividing the total number of clicked recommendations by the number of -recommendation calls. +Conversion (or click-through) rate is an indicator of the acceptance and, subsequently, the quality of recommendations.  +It's calculated by dividing the total number of clicked recommendations by the number of recommendation calls. This statistic delivers reliable information if event tracking is implemented correctly. You can select a timeframe for the diagrams from a list of presets, or define a custom date range. diff --git a/docs/personalization/scenarios.md b/docs/personalization/scenarios.md index 3c6b2f5c..46a3be41 100644 --- a/docs/personalization/scenarios.md +++ b/docs/personalization/scenarios.md @@ -4,8 +4,8 @@ description: Scenarios define which recommendation results should be given in di # Scenarios -A scenario is a configuration that is used to obtain recommendation results based -on the results generated by [models](recommendation_models.md). +A scenario is a configuration that is used to obtain recommendation results based on the results generated by [models](recommendation_models.md). + It consists of: - A [type of content](content_types.md) to be returned as recommendation  @@ -18,8 +18,7 @@ For information about scenario configuration, see [Configure scenarios](configu Scenarios support a single input type and multiple output types. Every recommendation request can deliver content of one or all output types of content. -The output type is set during the recommendation request and must be covered by -the list of the supported types of content in the requested scenario. +The output type is set during the recommendation request and must be covered by the list of the supported types of content in the requested scenario. ### Cross content type recommendations @@ -33,13 +32,10 @@ It applies to scenarios which have more than one output type configured. A strategy is a structure made up of models that are arranged by importance. There are different levels of importance - a primary level and several fallback ones. -Models from each level are used in parallel and strategy results contain an equally -distributed mixture of both model results. -If models from one level do not return enough results, models from the -subsequent levels are used. +Models from each level are used in parallel and strategy results contain an equally distributed mixture of both model results. +If models from one level do not return enough results, models from the subsequent levels are used. ## Filters -Filters are tools that you can use to eliminate, demote or promote specific -recommendation results. -They are applied to all recommendations that come from models selected in the strategy. +Filters are tools that you can use to eliminate, demote or promote specific recommendation results. +They're applied to all recommendations that come from models selected in the strategy. diff --git a/docs/personalization/segment_management.md b/docs/personalization/segment_management.md index 5eb140c9..31fbfdbc 100644 --- a/docs/personalization/segment_management.md +++ b/docs/personalization/segment_management.md @@ -4,26 +4,26 @@ description: Manage segments and combine segment groups to get personalized cont # Segment management -Segments allow getting personalized content suitable for particular user groups. They compute models based on the segment attribute factor. +Segments allow getting personalized content suitable for particular user groups. +They compute models based on the segment attribute factor. Information about user segment is provided in each event which comes from the tracking script. ## Configure segments With segment groups you can assign users to different recommendation groups based on data gathered, and deliver recommendations to these user groups. -The **Segment** list displays only active segments and is generated from the events collected for relevant history (the actual data from recommendation engine, not what was added in the Back Office). +The **Segment** list displays only active segments and is generated from the events collected for relevant history (the actual data from recommendation engine, not what was added in the back office). The value of each segment is transferred to the event. -Models are displayed only for a selected period of time. +Models are displayed only for a selected period of time. If a group is inactive for a certain time, the segments get an `Inactive` status and can't be used. ![Time period](img/models_time_period.png "Time period configuration") ### Operators and segmentation logic -Segmentation logic in segment groups allows you to divide target audience according into their specific traits, for example, demographic, -behavior, or age, to provide narrowed and better tailored recommendations. +Segmentation logic in segment groups allows you to divide target audience according into their specific traits, for example, demographic, behavior, or age, to provide narrowed and better tailored recommendations. You can build complex segment groups using parent and nested (child) segments connected with operators which enable precise filtering. With operators you can establish filtering rules for recommendations based on segments, and create nested groups within parent groups. @@ -40,24 +40,19 @@ Use them to create sub-segment groups which narrow down filtering of recommendat Segments available in the **Elements** sections are reusable. It means you can use the same segment in different segment groups. - ![Parent segment group](img/perso_segment_group_and_parent.png "Parent segment group") - ### Create segment group with AND logic condition - The following example shows segment groups with `AND` operators linking nested elements: - women -- Poland +- Poland - sales hunters (as a type of customer) - ![AND segment group logic](img/perso_segment_group_sales_hunters.png "AND segment group logic") - -All three criteria are linked with and `AND` operator, so all conditions must be fulfilled. +All three criteria are linked with and `AND` operator, so all conditions must be fulfilled. A recommendation call in a scenario that uses a model with segments contains requests to all specified segments with `AND` conditions: @@ -145,7 +140,6 @@ The following example shows segment groups with `OR` operator connecting nested ![OR segment group logic](img/perso_segment_group_or.png "OR segment group logic") - In this case to get recommendations, only one condition must be met: women from Poland or women from Germany. `https://reco.perso.ibexa.co/api/v2/41307/someuser/landing_page?numrecs=6&attribute=ses_name,title,ses_image,teaser_image&crosscontenttype=1&segments=7,8,10,11` @@ -157,11 +151,12 @@ Where segments ID correspond to segment groups: - 25–35 - `segment ID=8` - Germany - `segment ID=10` -As a result, a recommendation call returns only one event which qualifies for these segment group requirements. The item with `ID=587` is relevant for this segment combination, clicked by: +As a result, a recommendation call returns only one event which qualifies for these segment group requirements. +The item with `ID=587` is relevant for this segment combination, clicked by: -- women from Poland at age 25–35 +- women from Poland at age 25–35 -or +or - by women from Germany at age 25–35 diff --git a/docs/personalization/triggers.md b/docs/personalization/triggers.md index f5fe7457..fa592b6e 100644 --- a/docs/personalization/triggers.md +++ b/docs/personalization/triggers.md @@ -17,7 +17,7 @@ All this while saving time and effort. The message contains items that have been abandoned in the cart. The Personalization service monitors [events](event_types.md) to avoid recommending items that the end user has bought or removed from basket. -- Reactivation aka. "We miss you" trigger: Personalization engine monitors the user's overall activity and pushes a message when they have not returned to the site for a set time. +- Reactivation aka. "We miss you" trigger: Personalization engine monitors the user's overall activity and pushes a message when they haven't returned to the site for a set time. Recommendations are generated based on the user's purchasing and browsing history. - Price drop trigger: Personalization engine monitors the user's wishlist and pushes a message when a price of the product that has been put there decreases. @@ -31,12 +31,12 @@ Trigger messages are automatically initiated when a specific user's action, inac ## Configuring triggers -Trigger message calculations are done on a server that is run and maintained by Ibexa. -The server delivers a response with recommendations to an endpoint provided by your organization, for example, an Ibexa Connect [webhook](https://doc.ibexa.co/projects/connect/en/latest/tools/webhooks/). -You may then deliver the message to the end users by using a method of your choice, for example, email. +Trigger message calculations are done on a server that is run and maintained by [[= product_name_base =]]. +The server delivers a response with recommendations to an endpoint provided by your organization, for example, an [[= product_name_connect =]] [webhook](https://doc.ibexa.co/projects/connect/en/latest/tools/webhooks/). +You may then deliver the message to the end users using a method of your choice, for example, email. Apart from a list of recommendations, the response can include an email address for routing a message to the recipient. -To enable triggers for your organization, contact your administrator or development team about [preparing a webhook address and processing the response delivered to the webhook]([[= developer_doc =]]/personalization/integrate_recommendation_service/#send-messages-with-recommendations), and Ibexa about the configuration specifics. +To enable triggers for your organization, contact your administrator or development team about [preparing a webhook address and processing the response delivered to the webhook]([[= developer_doc =]]/personalization/integrate_recommendation_service/#send-messages-with-recommendations), and [[= product_name_base =]] about the configuration specifics. You can define one or more triggers of certain type, to support different use cases. For each trigger type, you need to decide on several crucial parameters, for example: diff --git a/docs/personalization/use_cases.md b/docs/personalization/use_cases.md index a5b16f86..d811f8b1 100644 --- a/docs/personalization/use_cases.md +++ b/docs/personalization/use_cases.md @@ -9,10 +9,8 @@ The most common ones are eCommerce and content publishing. ## eCommerce -In eCommerce, recommendations can help website visitors find the exact product -that fulfils their expectations. -When a user is not sure about what to purchase, recommendations can suggest similar, -alternative or complementary products. +In eCommerce, recommendations can help website visitors find the exact product that fulfils their expectations. +When a user is not sure about what to purchase, recommendations can suggest similar, alternative, or complementary products. Some typical use cases are: - The bestseller list shown on a home page @@ -32,10 +30,9 @@ Scenarios are configurations that define what kind of recommendations should be ## Content publishing In publishing, recommendations bring indirect value by keeping users on the website. -Unlike in eCommerce, publishers often provide content for free and are financed -from advertisements. -Increasing the click-through (or conversion) rate to increase profits from -advertisements is one of the drivers here. +Unlike in eCommerce, publishers often provide content for free and are financed from advertisements. +Increasing the click-through (or conversion) rate to increase profits from advertisements is one of the drivers here. + Use cases in publishing can be the following: - A list of the most popular content shown on the home page @@ -46,9 +43,8 @@ Use cases in publishing can be the following: ## Multiple website hosting -If your [[= product_name =]] instance hosts multiple websites, you can configure -the Personalization service to provide independent recommendations for each -of these websites. +If your [[= product_name =]] instance hosts multiple websites, you can configure the Personalization service to provide independent recommendations for each of these websites. + This can eliminate irrelevant recommendations when there are: - Multiple websites that belong to different customers @@ -56,5 +52,4 @@ This can eliminate irrelevant recommendations when there are: - Multiple localized versions of the same digital presence - Several eCommerce websites operating under different brands -To get independent results for different websites, you must [set up](enable_personalization.md) -and [configure](configure_personalization.md) the service separately for each of these websites. +To get independent results for different websites, you must [set up](enable_personalization.md) and [configure](configure_personalization.md) the service separately for each of these websites. diff --git a/docs/pim/create_edit_product.md b/docs/pim/create_edit_product.md index 5246c7a1..e4e1a2dd 100644 --- a/docs/pim/create_edit_product.md +++ b/docs/pim/create_edit_product.md @@ -4,23 +4,22 @@ description: Create new products or modify existing ones. # Create and edit products -[Products](products.md#products) are a specific kind of [content items](../content_management/content_items.md#content-items) that you use -to present your offer in the website, including product specification, and pricing. +[Products](products.md#products) are a specific kind of [content items](../content_management/content_items.md#content-items) that you use to present your offer in the website, including product specification, and pricing. Individual products are instances of [product types](create_product_types.md#create-product-types). -You can only create or modify products when your [user Role](../permission_management/work_with_permissions.md) has the `Product/Edit` permission. +You can only create or modify products when your [user role](../permission_management/work_with_permissions.md) has the `Product/Edit` permission. -To create a product, depending on how the product type is defined, you [may need to provide](products.md#product-completeness) certain pieces -of information in their respective [Fields](../content_management/content_model.md#fields-and-field-types). +To create a product, depending on how the product type is defined, you [may need to provide](products.md#product-completeness) certain pieces of information in their respective [fields](../content_management/content_model.md#fields-and-field-types). -You can create products by using either manual or bulk method. -Bulk method can be used only at the developer level. +You can create products using either manual or bulk method. +Bulk method can be used only at the developer level. See [Products]([[= developer_doc =]]/pim/product_api/#products) for a technical guide on how to do this. -1\. Click **Product catalog** -> **Products**. +1\. Click **Product catalog** -> **Products**. -2\. If you are adding a new product, click **Create** and skip to step 4. +2\. If you're adding a new product, click **Create** and skip to step 4. -3\. If you are editing an existing product, in the **Category filter** tree, select a category to find your product more quickly. Then click the **Edit** button next to a name of the product item that you want to modify and skip to step 5. +3\. If you're editing an existing product, in the **Category filter** tree, select a category to find your product more quickly. +Then click the **Edit** button next to a name of the product item that you want to modify and skip to step 5. ![Products list with action buttons](img/edit_product.png "Products list with action buttons") @@ -28,15 +27,15 @@ See [Products]([[= developer_doc =]]/pim/product_api/#products) for a technical ![Creating a new product](img/create_new_product.png "Creating a new product") -5\. Fill in or edit content fields of the product, for example, name, specification and description. +5\. Fill in or edit content fields of the product, for example, name, specification, and description. Fields marked with an asterisk (*) are required. ![Editing product information](img/create_product.png "Editing product information") -6\. In the Attributes section, define the product's attributes, for example, dimensions, resolution or capacity. +6\. In the Attributes section, define the product's attributes, for example, dimensions, resolution, or capacity. -7\. If you are adding a new product, click the **Create** button. -If you are editing an existing one, click the **Update** button. +7\. If you're adding a new product, click the **Create** button. +If you're editing an existing one, click the **Update** button. After you create a product, you can [add image assets to a product](work_with_product_assets.md), [create variants to the main product](work_with_product_variants.md), [define product prices](manage_prices.md), [set the available quantity](manage_availability_and_stock.md) and [classify products into different categories](work_with_product_categories.md). @@ -44,4 +43,4 @@ After you create a product, you can [add image assets to a product](work_with_pr Feature availability may differ depending on the specifics of your installation. -For in-depth information, see [Products]([[= developer_doc =]]/pim/products/) in developer documentation. +For in-depth information, see [Products]([[= developer_doc =]]/pim/products/) in Developer Documentation. diff --git a/docs/pim/create_product_types.md b/docs/pim/create_product_types.md index fa850b9a..6709042c 100644 --- a/docs/pim/create_product_types.md +++ b/docs/pim/create_product_types.md @@ -4,7 +4,7 @@ description: Build new product types or modify existing ones. # Create product types -If your [user Role](../permission_management/work_with_permissions.md) has the `ProductType/Edit` permission, you can modify product types and add individual attributes or attribute groups. +If your [user role](../permission_management/work_with_permissions.md) has the `ProductType/Edit` permission, you can modify product types and add individual attributes or attribute groups. 1\. In the left panel, go to **Product catalog** -> **Product Types** and click **Create**. @@ -21,12 +21,11 @@ If your [user Role](../permission_management/work_with_permissions.md) has the ` Each product has a product code that must be unique. It identifies the product in the system. Product code can have up to 64 characters. It can contain only letters, numbers, underscores, and dashes. -4\. Add Fields that describe the product by dragging them from the **Field types** -area to the **Field definitions** section, and then [configure them](../content_management/configure_ct_field_settings.md). +4\. Add fields that describe the product by dragging them from the **Field types** area to the **Field definitions** section, and then [configure them](../content_management/configure_ct_field_settings.md). 5\. Add attributes by dragging them or their groups from the **Library** area to the **Attributes** section. -When you define attributes for the product type, you can add or remove either whole attribute groups or individual attributes. +When you define attributes for the product type, you can add or remove either whole attribute groups or individual attributes. ![Adding attributes to a product type](img/adding_attributes.png "Adding attributes to a product type") diff --git a/docs/pim/create_virtual_product.md b/docs/pim/create_virtual_product.md index 1aefeb0e..2a98545b 100644 --- a/docs/pim/create_virtual_product.md +++ b/docs/pim/create_virtual_product.md @@ -1,20 +1,20 @@ --- -description: Virtual products are non-tangible items such as memberships, services, warranties. +description: Virtual products are non-tangible items such as memberships, services, warranties. --- # Virtual products -Virtual product is a special type of a [Product](products.md). +Virtual product is a special type of a [Product](products.md). -Virtual products are non-tangible items such as memberships, services, warranties. +Virtual products are non-tangible items such as memberships, services, warranties. They can be sold individually, or as part of a product bundle. -Like physical products, virtual products can have their own [variants](work_with_product_variants.md), [assets](work_with_product_assets.md) or [attributes](products.md#attributes). +Like physical products, virtual products can have their own [variants](work_with_product_variants.md), [assets](work_with_product_assets.md) or [attributes](products.md#attributes). You can also create catalogs from them, check their completeness and set [prices, availability, and stock](manage_availability_and_stock.md). ## Create virtual product type -If your [user Role](work_with_permissions.md) has the `ProductType/Edit` permission, you can modify product types and add individual attributes or attribute groups. +If your [user role](work_with_permissions.md) has the `ProductType/Edit` permission, you can modify product types and add individual attributes or attribute groups. To create a virtual product, first, you have to create a virtual product type. @@ -26,8 +26,7 @@ To create a virtual product, first, you have to create a virtual product type. 3\. Fill in basic product type information. -4\. Add Fields that describe the product by dragging them from the **Field types** -area to a section on the left, and then [configure them](configure_ct_field_settings.md). +4\. Add fields that describe the product by dragging them from the **Field types** area to a section on the left, and then [configure them](configure_ct_field_settings.md). 5\. Add attributes by dragging them from the toolbox on the right. @@ -43,8 +42,8 @@ While creating a product, choose the virtual product type that you have created. ## Virtual products purchase -Virtual products don’t require shipment when they are purchased without other physical products. -While purchasing a virtual product, you only have to fill in Billing address and select relevant payment method. +Virtual products don’t require shipment when they're purchased without other physical products. +While purchasing a virtual product, you only have to fill in Billing address and select relevant payment method. ![Virtual product purchasing](virtual_product_purchase.png "Virtual product purchasing") diff --git a/docs/pim/manage_availability_and_stock.md b/docs/pim/manage_availability_and_stock.md index 88bfbdf8..df88b1e0 100644 --- a/docs/pim/manage_availability_and_stock.md +++ b/docs/pim/manage_availability_and_stock.md @@ -18,8 +18,7 @@ To control the availability and stock, in product or product variant view, go to ![Product availability](img/product_availability_tab.png "Product availability") -Then, click **Create** to add availability to a product that doesn't have it, -or **Edit** to modify existing availability settings. +Then, click **Create** to add availability to a product that doesn't have it, or **Edit** to modify existing availability settings. Use the **Available** switcher to indicate whether the product is currently available in the catalog. diff --git a/docs/pim/manage_currencies.md b/docs/pim/manage_currencies.md index db20aa46..571ef422 100644 --- a/docs/pim/manage_currencies.md +++ b/docs/pim/manage_currencies.md @@ -16,7 +16,6 @@ To use them in the catalog, edit and enable them. ![Enabling a currency](img/enable_currency.png "Enabling a currency") -To create an additional currency, provide its code (e.g. EUR, USD, GBP) and the number of fractional digits, -that is, the number of digits after the comma/period. +To create an additional currency, provide its code (for example, EUR, USD, or GBP) and the number of fractional digits, that is, the number of digits after the comma/period. For example, the configuration for the Swiss franc would be `CHF` with two fractional digits. diff --git a/docs/pim/manage_prices.md b/docs/pim/manage_prices.md index d3d00db0..57d2025d 100644 --- a/docs/pim/manage_prices.md +++ b/docs/pim/manage_prices.md @@ -21,8 +21,7 @@ Select a currency in the dropdown menu to preview the price and click the **Edit ![Prices tab](img/product_price.png "Prices tab") For each product or product variant you can set different prices for different customer groups. -Next to the base price you can see the **Global Price rule** defined for this customer group, -which is applied to the base price. +Next to the base price you can see the **Global Price rule** defined for this customer group, which is applied to the base price. However, you can also set a **Custom price rule** for this product. If you define it, the global price rule don't apply and the custom price rule is applied directly to the base price. diff --git a/docs/pim/pim.md b/docs/pim/pim.md index 98981e78..5b1aaf6c 100644 --- a/docs/pim/pim.md +++ b/docs/pim/pim.md @@ -4,10 +4,10 @@ description: PIM enables handling of products presented in the website anf offer # PIM (Product Information Management) -With PIM you can create, configure and manage products that are offered in the [[= product_name =]]-based website and/or storefront, including their specifications, attributes, assets, variants and pricing. +With PIM you can create, configure and manage products that are offered in the [[= product_name =]]-based website and/or storefront, including their specifications, attributes, assets, variants, and pricing. You can group products into categories and catalogs. -Catalogs are collections of products selected by using configurable filters. +Catalogs are collections of products selected using configurable filters. Categories let you organize products within PIM and create relationships between them, for example, to help customers in searching for products. PIM's features are available from the left-hand menu. diff --git a/docs/pim/product_types.md b/docs/pim/product_types.md index f0c19f87..3469a661 100644 --- a/docs/pim/product_types.md +++ b/docs/pim/product_types.md @@ -4,10 +4,10 @@ description: Product types contain a combination of Fields and attributes and se # Product types -Product types are templates that contain a combination of [Fields](../content_management/content_model.md#fields-and-field-types) and [attributes](#attributes) which constitute a product definition. -By default, product types contain such Fields as name, specification, image, or category. +Product types are templates that contain a combination of [fields](../content_management/content_model.md#fields-and-field-types) and [attributes](#attributes) which constitute a product definition. +By default, product types contain such fields as name, specification, image, or category. You can modify them as required. -You need different product types, because products of type "Laptops" contain different Fields and attributes than those of type "White appliances". +You need different product types, because products of type "Laptops" contain different fields and attributes than those of type "White appliances". When you create a new product type, you can choose between two available product type flavors: Physical and Virtual: @@ -15,7 +15,7 @@ When you create a new product type, you can choose between two available product They can use measurement attributes. They require shipment in the online purchase process. Examples: heaters, laptops, phones. - Virtual - non-tangible items. They can be sold individually, or as part of a product bundle. -They don't require shipment in the online process. Examples: memberships, services, warranties. +They don't require shipment in the online process. Examples: memberships, services, warranties. A product type also defines both the attributes and VAT rates for all its products. @@ -23,7 +23,7 @@ When a product type is created, you can review its fields, attributes, and VAT r ![VAT rates in product type's details view](img/vat_rates_product_details.png "VAT rates in product type's details view") -If your [user Role](../permission_management/work_with_permissions.md) has the `ProductType/Edit` +If your [user role](../permission_management/work_with_permissions.md) has the `ProductType/Edit` permission, you can [modify product types and add individual attributes or attribute groups](create_product_types.md). ### Attributes diff --git a/docs/pim/products.md b/docs/pim/products.md index 848575ec..c343d6bf 100644 --- a/docs/pim/products.md +++ b/docs/pim/products.md @@ -1,5 +1,5 @@ --- -description: Products are containers that aggregate information about the items you offer, their specs, variants, availability, etc. +description: Products are containers that aggregate information about the items you offer, for example, their specs, variants, or availability. --- # Products @@ -25,8 +25,7 @@ You must then set: - at least one price for the product - availability with positive or infinite stock for the product -When you review product details, under the product name, you can see a progress bar with an approximate indication -of how much of the product information you provided, and how much is still missing. +When you review product details, under the product name, you can see a progress bar with an approximate indication of how much of the product information you provided, and how much is still missing. ![Quick view of product completeness](img/product_completeness_bar.png "Quick view of product completeness") @@ -43,6 +42,5 @@ It lists all tasks required for product configuration, including: ![Product completeness screen](img/product_completeness.png "Product completeness screen") -You can click the **Edit** button next to an unfinished task in the Completeness table -to go directly to the screen where you can add the missing information. +You can click the **Edit** button next to an unfinished task in the **Completeness** table to go directly to the screen where you can add the missing information. diff --git a/docs/pim/work_with_catalogs.md b/docs/pim/work_with_catalogs.md index 9d1cade1..e555e90d 100644 --- a/docs/pim/work_with_catalogs.md +++ b/docs/pim/work_with_catalogs.md @@ -5,13 +5,12 @@ description: Catalogs allow creating filtered product lists for special purposes # Work with catalogs -You can create special catalogs, for example, to differentiate the offering -that's presented to B2B and B2C users, retailers and distributors or different regions. +You can create special catalogs, for example, to differentiate the offering that's presented to B2B and B2C users, retailers and distributors or different regions. ## Catalogs -Catalogs are collections of [products](products.md) selected by using configurable filters. -They are specific to each of your websites or storefronts, which means that they contain products that are presented or sold in a specific website. +Catalogs are collections of [products](products.md) selected using configurable filters. +They're specific to each of your websites or storefronts, which means that they contain products that are presented or sold in a specific website. ![Catalog menu with a sample catalog](img/catalog.png "Catalog menu with a sample catalog") @@ -26,7 +25,7 @@ To create a catalog: ![Creating a new catalog](img/catalog_create.png "Creating a new catalog") -After you create a catalog, it is draft mode. +After you create a catalog, it's in "Draft" status. To make the block available, for example, in page blocks, you must publish it. 1. In the **Catalogs** page, click the name of a catalog that you want to publish. diff --git a/docs/pim/work_with_product_assets.md b/docs/pim/work_with_product_assets.md index ce962a07..e1d317c4 100644 --- a/docs/pim/work_with_product_assets.md +++ b/docs/pim/work_with_product_assets.md @@ -4,24 +4,21 @@ description: Add image assets to products or product variants. # Work with product assets -When you [create or edit products](create_edit_product.md), you can add assets in a form of images. +When you [create or edit products](create_edit_product.md), you can add assets in a form of images. Assets can be assigned to the base product, and to one or more of its [variants](work_with_product_variants.md). -To add assets to a product, in the product's **Assets** tab browse or drag and -drop image files from disk, or select an existing image asset from library. +To add assets to a product, in the product's **Assets** tab browse or drag and drop image files from disk, or select an existing image asset from library. ![Adding assets to a product](img/product_assets.png "Adding assets to a product") You can assign assets to product variants by placing them in a collection. -A collection corresponds to specific values of attributes and is automatically assigned to the variant or variants -that have these attribute values. +A collection corresponds to specific values of attributes and is automatically assigned to the variant or variants that have these attribute values. For example, a "desk" product can have multiple images as assets. -You can group them into collections for specific desktop and frame colors, -corresponding to variants. +You can group them into collections for specific desktop and frame colors, corresponding to variants. ![Product asset collection](img/product_assets_collections.png "Product asset collection") -You can move assets between collections by using drag and drop. +You can move assets between collections using drag and drop. ![Moving assets between collection with drag and drop](img/collection_dnd.png "Moving assets between collection with drag and drop") diff --git a/docs/pim/work_with_product_attributes.md b/docs/pim/work_with_product_attributes.md index 0788228b..c419058a 100644 --- a/docs/pim/work_with_product_attributes.md +++ b/docs/pim/work_with_product_attributes.md @@ -4,9 +4,9 @@ description: Create a structure of attributes that describe product characterist # Work with product attributes -[Attributes](products.md#attributes) describe physical, technical or other characteristics of a product. -They are organized into attribute groups, and when you assign attributes to products, you can assign either whole groups or individual attributes. -You can use attributes to create multiple versions of one product, called [product variants](work_with_product_variants.md). +[Attributes](products.md#attributes) describe physical, technical or other characteristics of a product. +They're organized into attribute groups, and when you assign attributes to products, you can assign either whole groups, or individual attributes. +You can use attributes to create multiple versions of one product, called [product variants](work_with_product_variants.md). Store visitors can use them to filter and search for products. Attribute types define what type of information you can store in an attribute. @@ -33,7 +33,7 @@ With groups, you can organize attributes based on attribute type ("Physical", "A Each identifier must be unique. It can have up to 64 characters and contain only letters, numbers, underscores, and dashes. -3\. Click **Create**. +3\. Click **Create**. ## Create attributes diff --git a/docs/pim/work_with_product_categories.md b/docs/pim/work_with_product_categories.md index 84358166..fe9374f2 100644 --- a/docs/pim/work_with_product_categories.md +++ b/docs/pim/work_with_product_categories.md @@ -4,7 +4,8 @@ description: You can create a structure of tags that can be assigned to products # Work with product categories -[Product](products.md) categories are organized into a Category tree, which you can access from the **Product catalog** panel. The **Categories** screen is where you manually create a hierarchy of categories and manage category entries. +[Product](products.md) categories are organized into a Category tree, which you can access from the **Product catalog** panel. +The **Categories** screen is where you manually create a hierarchy of categories and manage category entries. ![Product category tree](img/product_categories.png "Product category tree") @@ -23,17 +24,17 @@ You can enable the use of product categories, assign products to categories and ## Enable product categories -Before you can assign categories to products, make sure that the **Taxonomy Entry Assignment** field is added and set as required in all the [product types](product_types.md) that define products from PIM which you want to categorize. -The field could be absent if product types were migrated from an older version of the product. +Before you can assign categories to products, make sure that the *Taxonomy Entry Assignment* field is added and set as required in all the [product types](product_types.md) that define products from PIM which you want to categorize. +The field could be absent if product types were migrated from an older version of [[= product_name =]]. Depending on your permissions, you might be able to verify the presence of the field and add the field yourself: 1. In the left panel, click **Product catalog** -> **Product Types** to open a list of available product types. 2. Click the **Edit** icon next to a name of the product type that you want to review. -3. In the **Editing Product Type** modal, check whether the **Field definitions** area contains the **Categories** field of **Taxonomy Entry Assignment** type. +3. In the **Editing Product Type** modal, check whether the **Field definitions** area contains the **Categories** field of *Taxonomy Entry Assignment* type. 1. If the field is present, click **Delete draft** and skip the remaining steps. - 2. If the field is absent, drag and drop the **Taxonomy Entry Assignment** option from the **Field types** area to the **Field definitions** area. - 3. Expand the **New field type** that you just added and make the following settings: + 2. If the field is absent, drag and drop the *Taxonomy Entry Assignment* option from the **Field types** area to the **Field definitions** area. + 3. Expand the **New field type** that you added and make the following settings: * Set a name for the field, for example, "Product category" * Select the **Required** checkbox * In the **Taxonomy** field, select the "Product categories" taxonomy type @@ -46,40 +47,41 @@ Depending on your permissions, you might be able to verify the presence of the f You can now add product categories and then create relationships between products and product categories. !!! caution "Duplicate taxonomy entry fields" - In your product type, you may want to have both product categories and [tags](taxonomy.md) on the list of Field definitions. - Because tags are assigned per product item, not per Field, when working with a product type, you cannot use two **Taxonomy Entry Assignment** Fields with the same taxonomy type in one Product type. + + In your product type, you may want to have both product categories and [tags](taxonomy.md) on the list of field definitions. + Because tags are assigned per product item, not per field, when working with a product type, you cannot use two *Taxonomy Entry Assignment* fields with the same taxonomy type in one product type. ## Add product category to product category hierarchy Similarly to other items in [[= product_name =]], you add product categories either by clicking the **Create** button, or directly in the product category tree: 1. In the left panel, click **Product catalog** -> **Categories** to navigate to the product category tree. -2. To add a category by using the **Create** button, in the category tree, select the category to which you want to add a child category. After the details of the selected category are loaded, click the **Create** button and skip to step 4. +2. To add a category using the **Create** button, in the category tree, select the category to which you want to add a child category. After the details of the selected category are loaded, click the **Create** button and skip to step 4. 3. To add a category directly in the category tree, click the three dots icon next to the category to which you want to add a child category. In the context menu, click **Add**. 4. In the product category editing modal, make the following settings: * Enter a unique identifier for the product category, for example, "HW_WIN". * Enter a unique name for the product category, "Devices with Windows". - * Optionally, change the parent category of the currently edited category: - + * Optionally, change the parent category of the currently edited category: + In the **Parent** area, click the **Change path** button. Then, in the **Select parent** modal, select a category from the tree and click **Select parent**. - + * Click **Save** to save the product category. The newly created category can now be assigned to products. ## Modify product category assignments to products -You can create or change product category relationships with products in two ways: either when you edit or create a Product item, or when you edit a product category. +You can create or change product category relationships with products in two ways: either when you edit or create a product item, or when you edit a product category. !!! note - Products must be of product type which is [enabled for categorization](#enable-product-categories). + Products must be of product type which is [enabled for categorization](#enable-product-categories). ### Assign product categories by editing product details 1. In the left panel, click **Product catalog** -> **Products** to navigate to the product list. -2. To create a new Product item, click the **Create** button, select the product types with product categories enabled, and click **Add**. Then skip to step 4. -3. To edit an existing Product item, click the **Edit** icon next to a name of the Product item that you want to modify. +2. To create a new product item, click the **Create** button, select the product types with product categories enabled, and click **Add**. Then skip to step 4. +3. To edit an existing product item, click the **Edit** icon next to a name of the Product item that you want to modify. 4. In the product type editing modal, go to the **Product category** area and click the **Select product categories** button. 5. In the pop-up window, select checkboxes next to product categories related with the product. 6. Click **Select** to close the pop-up window. @@ -94,7 +96,7 @@ You can create or change product category relationships with products in two way 2. In the product category tree, select a category and go to the **Products** tab. 3. To assign products to the current category: 1. Click the **Assign** button. - 2. In the Content browser, select checkboxes next to products related with the category. + 2. In the content browser, select checkboxes next to products related with the category. 3. Click **Confirm** to confirm the selection. 4. To unassign products from the current category: 1. In the **Products** tab, select checkboxes next to products selected for removal. diff --git a/docs/pim/work_with_product_page_urls.md b/docs/pim/work_with_product_page_urls.md index 42370a9e..1cded256 100644 --- a/docs/pim/work_with_product_page_urls.md +++ b/docs/pim/work_with_product_page_urls.md @@ -4,9 +4,10 @@ description: You can create URL alias name pattern and custom URLs for the Produ # Product page URLs -Every [product item](products.md) has a system URL that is automatically generated. It is based on a pattern that combines fields and attributes to build the URL (URL alias name pattern). +Every [product item](products.md) has a system URL that is automatically generated. +It's based on a pattern that combines fields and attributes to build the URL (URL alias name pattern). -When you are creating new [product type](create_product_types.md) you can set up product URL alias name pattern. +When you're creating new [product type](create_product_types.md) you can set up product URL alias name pattern. To do it, fill in all the necessary information, choose the attributes that you want to use in URL alias name pattern, copy their ID, and paste in the **URL alias name pattern** field using following pattern: --(...), then click **Save and close** button. @@ -40,15 +41,15 @@ The following attribute types can be used in URL alias name pattern field: | Measurement (single) | Single value and unit | 256gb | | Measurement (range) | Value unit and minimum/maximum values | 20-25cm| -You can use many attributes identifiers as well as fields identifiers in the URL alias pattern field. +You can use many attributes identifiers and fields identifiers in the URL alias pattern field. Having keyword-rich URLs also improves the product's visibility in search engine results and boosts the page's ranking in search results. ## Create custom URL You can create custom URL for each product. -Customized URLs are easy to remember, help with SEO optimization and reduce bounce rates on the website. -It improves the user experience - you can understand what the product is about just by reading the link. +Customized URLs are memorable, help with SEO optimization and reduce bounce rates on the website. +It improves the user experience - you can understand what the product is about by reading the link. To do it, follow the steps: diff --git a/docs/pim/work_with_product_variants.md b/docs/pim/work_with_product_variants.md index f3de11c1..9e946cd0 100644 --- a/docs/pim/work_with_product_variants.md +++ b/docs/pim/work_with_product_variants.md @@ -14,8 +14,7 @@ To use an [attribute](work_with_product_attributes.md) to create variants, mark If a product has only one attribute that can be used for variants, you can create variants for this attribute. If a product has more than one such attribute, you can create variants for any combination of attribute values. -For example, for a desk that has two top colors: `white` and `oak` and two frame colors: `black` and `grey`, -you can create up to four variants: `white/black`, `white/grey`, `oak/black`, and `oak/grey`. +For example, for a desk that has two top colors: `white` and `oak` and two frame colors: `black` and `grey`, you can create up to four variants: `white/black`, `white/grey`, `oak/black`, and `oak/grey`. ### Generate variants @@ -50,5 +49,5 @@ To do this, click **Add** next to the variant list, enter a product code and sel You can set up product availability separately for each product variant. You can also set up prices per product variant. -The prices will override prices set for the main product. +These new prices override prices set for the main product. If you do not define a price for a variant, the price of the main product is used. diff --git a/docs/recent_activity/recent_activity.md b/docs/recent_activity/recent_activity.md index 44966d49..b2bc276a 100644 --- a/docs/recent_activity/recent_activity.md +++ b/docs/recent_activity/recent_activity.md @@ -7,8 +7,7 @@ edition: experience [[= product_name =]] logs various operations on the repository and in the application. -If you have **Setup / Administrate** and **Activity Log / Read** [permissions](permission_system.md), -you can review the most recent activity log in the Back Office, **Admin** -> **Recent activity**. +If you have **Setup / Administrate** and **Activity Log / Read** [permissions](permission_system.md), you can review the most recent activity log in the back office, **Admin** -> **Recent activity**. ![Recent activity](recent_activity.png "Recent activity") @@ -22,17 +21,15 @@ By default, actions on the following items are displayed: !!! note - If your implementation requires that other actions are logged, - see [custom log entry developer documentation]([[= developer_doc =]]/administration/recent_activity/recent_activity/#adding-custom-activity-log-entries). + If your implementation requires that other actions are logged, see [custom log entry Developer Documentation]([[= developer_doc =]]/administration/recent_activity/recent_activity/#adding-custom-activity-log-entries). By default, log entries are kept for 30 days. This time can be modified through configuration. - For more information, see [developer documentation]([[= developer_doc =]]/administration/recent_activity/recent_activity/#configuration-and-cronjob). + For more information, see [Developer Documentation]([[= developer_doc =]]/administration/recent_activity/recent_activity/#configuration-and-cronjob). -Log entries are grouped by date, -then by logical bond (like web request, or migration file). +Log entries are grouped by date, then by logical bond (like web request, or migration file). -Each activity log entry shows +Each activity log entry shows: - when the action was performed, - who performed it (avatar, first name, last name), @@ -41,8 +38,8 @@ Each activity log entry shows Depending on the system configuration, activity logs may also be shown: -- on the Dashboard with the [Recent activity block](dashboard_block_reference.md#recent-activity-block) -- within the [user profile](get_started.md#view-and-edit-user-profile) +- on the dashboard with the [Recent activity block](dashboard_block_reference.md#recent-activity-block) +- within the [user profile](get_started.md#view-and-edit-user-profile) ## Filter activities diff --git a/docs/search/search_for_content.md b/docs/search/search_for_content.md index f9c56beb..0a46302f 100644 --- a/docs/search/search_for_content.md +++ b/docs/search/search_for_content.md @@ -4,12 +4,12 @@ description: Search through all content in the system and filter the results by # Search for content -You can enter a search keyword and the application checks all the searchable Fields and returns a list of search results that contain the keyword. +You can enter a search keyword and the application checks all the searchable fields and returns a list of search results that contain the keyword. ![Basic Search](img/basic_search.png) -Everywhere in the Back Office, completion suggestions are proposed while you type in the search box. -In addition to clicking in the search box, you can also move focus to it by using the keyboard shortcut `Ctrl+/` on Windows/Linux, or `Cmd+/` on macOS. +Everywhere in the back office, completion suggestions are proposed while you type in the search box. +In addition to clicking in the search box, you can also move focus to it using the keyboard shortcut `Ctrl+/` on Windows/Linux, or `Cmd+/` on macOS. - If a suggestion is what you're looking for, to use it, click on it in the suggestion drop-down, or use `down` and `up` keys to highlight it, and then press the `Enter` key. @@ -18,7 +18,7 @@ In addition to clicking in the search box, you can also move focus to it by usin ![Suggestion drop-down](img/suggestion.png) On the results page, if several languages are available, you can select a language to search in at the top of the left **Filters** menu. -The results contain Content items that are translated into this language. +The results contain content items that are translated into this language. The result list also shows which languages the content item is translated to. By default, the results are sorted by decreasing relevance. @@ -40,7 +40,7 @@ Filtered search allows you to filter by: All new or custom content types, sections and languages are automatically added to the drop-down filter lists. -Depending on the system configuration, a Content item count can be indicated for content type and section filters. +Depending on the system configuration, a content item count can be indicated for content type and section filters. Select your filters, then click **Apply** to update the results. Click **Clear** to reset and remove all filters. diff --git a/docs/search_engine_optimization/seo.md b/docs/search_engine_optimization/seo.md index 1dd2f0da..9bb70e55 100644 --- a/docs/search_engine_optimization/seo.md +++ b/docs/search_engine_optimization/seo.md @@ -4,37 +4,34 @@ description: SEO can help your content score higher in search results, which lea # Search Engine Optimization -Every time users search online, they are presented with a list of results, -together with page title and a short summary. -Based on this limited information they choose which link to follow. +Every time users search online, they're presented with a list of results, together with page title and a short summary. +Based on this limited information they choose which link to follow. The more your page stands out, the more likely users are to pay you a visit. -With Search Engine Optimization (SEO) tool, you can optimize your website for both -visitors and search engines. -SEO brings in more organic traffic and improves the website's visibility in -Search Engines Results Pages (SERPs). -It is a core feature of Digital Experience Platform. +With Search Engine Optimization (SEO) tool, you can optimize your website for both visitors and search engines. +SEO brings in more organic traffic and improves the website's visibility in Search Engines Results Pages (SERPs). +It's a core feature of Digital Experience Platform. -Additionally, SEO allows you to control the appearance of search results on SERPs, by -providing the intended wording for the title, description, keywords, and so on. +Additionally, SEO allows you to control the appearance of search results on SERPs, by providing the intended wording for the title, description, or keywords. ## Meta tags `Title`, `Description` and `Keywords` tags are displayed on SERPs. -They also help the search engine figure out what the content is about and how -high it should rank. -A `Canonical` tag is used by the search engine's internal algorithm. -After you define the tags for your content, they are rendered as part of the `` -section of a web page, from where the search engine intercepts their values. - -- `Title` is displayed as a prominent heading in the search. You want to make it relevant and attractive for users to click on. It represents the title of the content item that you want to promote. -- `Description` appears next to or below the title. Here you tell visitors what the content is about. Your goal is to optimize it for better visibility both on desktop and mobile. It represents a summary of your content item -- `Keywords` can help the search engine position the results. Keywords can be ideas and topics that define what your content is about. -- `Canonical URL` tells search engines which copy of content is the original that should appear in search results. It prevents duplicates from competing against each other. - -Additionally, you can define social media-specific meta tags separately, -to fine-tune the message that gets across to each of the platforms. -If you fail to use this feature, the default meta tags are used to generate -a social media snippet. +They also help the search engine figure out what the content is about and how high it should rank. +A `Canonical` tag is used by the search engine's internal algorithm. +After you define the tags for your content, they're rendered as part of the `` section of a web page, from where the search engine intercepts their values. + +- `Title` is displayed as a prominent heading in the search. You want to make it relevant and attractive for users to click on. +It represents the title of the content item that you want to promote. +- `Description` appears next to or below the title. Here you tell visitors what the content is about. +Your goal is to optimize it for better visibility both on desktop and mobile. +It represents a summary of your content item. +- `Keywords` can help the search engine position the results. +Keywords can be ideas and topics that define what your content is about. +- `Canonical URL` tells search engines which copy of content is the original that should appear in search results. +It prevents duplicates from competing against each other. + +Additionally, you can define social media-specific meta tags separately, to fine-tune the message that gets across to each of the platforms. +If you fail to use this feature, the default meta tags are used to generate a social media snippet. For more information about SEO, see [Ibexa blog](https://www.ibexa.co/blog/five-useful-seo-techniques-for-ez-platform-developers). diff --git a/docs/search_engine_optimization/work_with_seo.md b/docs/search_engine_optimization/work_with_seo.md index b27e0687..b6d58488 100644 --- a/docs/search_engine_optimization/work_with_seo.md +++ b/docs/search_engine_optimization/work_with_seo.md @@ -4,9 +4,7 @@ description: Enable search engine optimization and increase content visibility b # Work with SEO -For the Search Engine Optimization (SEO) feature to help you optimize the searchability -and visibility of your content, you must enable it first, and -then, define the contents of individual tags. +For the Search Engine Optimization (SEO) feature to help you optimize the searchability and visibility of your content, you must enable it first, and then, define the contents of individual tags. To do it, make sure you can [edit content types](../content_management/content_model.md#content_types). @@ -21,52 +19,39 @@ To do it, make sure you can [edit content types](../content_management/content_m ## Define Meta tags -When you edit the content type definition, in the **SEO** section, go to the -**Meta tags** area, and provide values for the following meta tags: +When you edit the content type definition, in the **SEO** section, go to the **Meta tags** area, and provide values for the following meta tags: - **Title** - **Description** -- **Keywords** +- **Keywords** - **Canonical** To learn more about the function of each of the tags, see [Meta tags](seo.md#meta-tags). -When you populate the SEO fields, you can create patterns by using a schema with -attributes which correspond to identifiers of fields that make up the content type. -As a result, SEO tags are filled in at content item generation phase with specific -contents of such fields. For example, if you enter `.<format> - <author>` -as a value of the **Title** tag, the search engine will return -`Silmarillion. Illustrated edition - J.R.R. Tolkien`. - -You can also fine-tune the way your content is presented when linked from -a social media platform by populating the social media-specific meta tags -in the exact same way: -fill in fields in the **OpenGraph** and **Twitter** sections with patterns -to configure the Facebook and Twitter presentation respectively. -<!--If you leave these fields blank, social media snippets are generated based on -the definitions that you provided in the search engine meta tag fields.--> +When you populate the SEO fields, you can create patterns using a schema with attributes which correspond to identifiers of fields that make up the content type. +As a result, SEO tags are filled in at content item generation phase with specific contents of such fields. For example, if you enter `<title>.<format> - <author>` as a value of the **Title** tag, the search engine returns `Silmarillion. Illustrated edition - J.R.R. Tolkien`. + +You can also fine-tune the way your content is presented when linked from a social media platform by populating the social media-specific meta tags in the exact same way: +fill in fields in the **OpenGraph** and **Twitter** sections with patterns to configure the Facebook and Twitter presentation respectively. +<!--If you leave these fields blank, social media snippets are generated based on the definitions that you provided in the search engine meta tag fields.--> ## Preview meta tags of content item -You can preview what the actual SEO tags for a specific content item -will look like when they are passed to a search engine or social media platform. +You can preview what the actual SEO tags for a specific content item can look like when they're passed to a search engine or social media platform. -1. In Content Tree, navigate to the content item. -2. On the content item details screen, click the SEO tab. +1. In content tree, navigate to the content item. +2. On the content item details screen, click the **SEO** tab. 3. Review the contents of the **resolved** fields. ![SEO tab in content item details](img/SEO_tab.png)` ## Override meta tags of content item -When you want a specific content item to appear in search results differently than -the other items of a specific content type, you can override the contents of SEO tags. -You might want, for example, to add a shout out to the title after the author of content -receives a literary prize. +When you want a specific content item to appear in search results differently than the other items of a specific content type, you can override the contents of SEO tags. +You might want, for example, to add a shout out to the title after the author of content receives a literary prize. -1. In Content Tree, navigate to the content item, and click the **Edit** button. -2. Go to the **SEO** section and, in relevant fields, replace the patterns that -originate from the [content type definition](#define-meta-tags). -3. **Publish** your changes, **Save and close** or **Delete draft** to return to the Content Tree. +1. In content tree, navigate to the content item, and click the **Edit** button. +2. Go to the **SEO** section and, in relevant fields, replace the patterns that originate from the [content type definition](#define-meta-tags). +3. **Publish** your changes, **Save and close** or **Delete draft** to return to the content tree. -You can either use plain text or patterns, like in the case of content types. +You can either use plain text or patterns, like in the case of content types. \ No newline at end of file diff --git a/docs/user_management/manage_users.md b/docs/user_management/manage_users.md index 131f156a..bd9a93e3 100644 --- a/docs/user_management/manage_users.md +++ b/docs/user_management/manage_users.md @@ -5,26 +5,24 @@ description: You can view and manage user accounts in your system. # Manage users Users in [[= product_name =]] are treated the same way as other content items. -They are organized in groups, which helps you manage them and their permissions. +They're organized in groups, which helps you manage them and their permissions. -You can view all User Groups and Users in the **Admin Panel** by selecting **Users**. -Here, you can manage users, their relations, Roles and Policies. +You can view all user groups and Users in the **Admin** panel by selecting **Users**. +Here, you can manage users, their relations, roles, and policies. As you can see, the interface is the same as when working with regular content items. - ![Users section](img/users_section.png) !!! caution - Be careful not to delete an existing User account. - If you do this, content created by this User will be broken and the application can face malfunction. + Be careful not to delete an existing user account. + If you do this, content created by this user can be broken and the application can face malfunction. ## Register as a user -In most cases it is the administrator who invites users to log into the application. -You can still access the registration form for the website by adding `/register` -to the address, for example: `www.my-site.com/register`. -By default, new Users created in this way are placed in the Guest accounts group. +In most cases it's the administrator who invites users to log into the application. +You can still access the registration form for the website by adding `/register` to the address, for example: `www.my-site.com/register`. +By default, new users created in this way are placed in the Guest accounts group. ## Invite users @@ -32,9 +30,7 @@ To invite users, go to **Admin** -> **Users** and click **Invite members** in th ![Inviting users](img/users_invitation.png) -To send invitations, fill out email addresses one by one, -or use drag and drop to upload a file with an email list, then click **Send**. +To send invitations, fill out email addresses one by one, or use drag and drop to upload a file with an email list, then click **Send**. -Invited users will receive an email message with a registration link. -With it, they can register and create their account -in the frontend as customers or in the Back Office as members of the team. +Invited users then receive an email message with a registration link. +With it, they can register and create their account in the frontend as customers or in the back office as members of the team. diff --git a/docs/website_organization/multisite.md b/docs/website_organization/multisite.md index 94b41b87..fcc6ceea 100644 --- a/docs/website_organization/multisite.md +++ b/docs/website_organization/multisite.md @@ -4,25 +4,19 @@ description: Learn about the Multisite feature that enables you to have several # Multisite -Developers or administrators with access to [[= product_name =]] installation directory -can configure the product to enable hosting multiple websites in one installation. -It takes several lines of code to set up an instance that supports multiple brands, -languages, etc. +Developers or administrators with access to [[= product_name =]] installation directory can configure the product to enable hosting multiple websites in one installation. +It takes several lines of code to set up an instance that supports, for example, multiple brands or languages. -This way, you can let both users and end-users who come from different departments -or countries access the same assets or resources. -For example, promotional graphics can be used on both a public website and a partner -portal, while product specifications can be accessed from storefronts for different markets. +This way, you can let both users and end-users who come from different departments or countries access the same assets or resources. +For example, promotional graphics can be used on both a public website and a partner portal, while product specifications can be accessed from storefronts for different markets. The same applies to any content stored in the repository. -Once multisite support is enabled, you can use Site Factory to create separate websites. +Once multisite support is enabled, you can use Site Factory to create separate websites. -##SiteAccess +## SiteAccess In [[= product_name =]], a website definition is called SiteAccess. -Once a website is created, website configuration, content language version, page design, content -presentation, URL aliases etc. can be configured per SiteAccess. -These settings are then used by the application when users access the -site through a specific address. +Once a website is created, website configuration, content language version, page design, content presentation, URL aliases, and more, can be configured per SiteAccess. +These settings are then used by the application when users access the site through a specific address. -For in-depth information, see [Multisite]([[= developer_doc =]]/multisite/multisite/) in the developer documentation. +For in-depth information, see [Multisite]([[= developer_doc =]]/multisite/multisite/) in Developer Documentation. diff --git a/docs/website_organization/work_with_sites.md b/docs/website_organization/work_with_sites.md index 49c79492..990dade6 100644 --- a/docs/website_organization/work_with_sites.md +++ b/docs/website_organization/work_with_sites.md @@ -5,36 +5,33 @@ edition: experience # Work with websites -If multisite support is enabled for your instance of [[= product_name =]], you can -use Site Factory to create and manage multiple websites from one place. -These websites can, for example, be in different languages, or customised for -different audiences, and still be kept in the Repository of your installation. +If multisite support is enabled for your instance of [[= product_name =]], you can use Site Factory to create and manage multiple websites from one place. +These websites can, for example, be in different languages, or customized for different audiences, and still be kept in the repository of your installation. To be able to use it, the Site Factory has to be enabled and configured by the administrator. -For more information see developer documentation on [Site Factory]([[= developer_doc =]]/multisite/site_factory/site_factory). +For more information, see Developer Documentation on [Site Factory]([[= developer_doc =]]/multisite/site_factory/site_factory). ## Create a website -To access Site Factory, in the leftmost pane, click the **Site management* icon and then **List**. -If Site Factory is enabled, and you have sufficient permissions, you should see -the **Create** button. Click it to access the **Creating New Site** modal. +To access Site Factory, in the left panel, click the **Site Management** icon and then **Sites**. +If Site Factory is enabled, and you have sufficient permissions, you should see the **Create** button. +Click it to access the **Creating New Site** modal. ![Site Factory icon](img/site_factory_icon.png) -Here, you can create an entirely new website or a different language version of -an already existing website. -First, you select a name, a predefined design, and a Parent Location for your website. +Here, you can create an entirely new website or a different language version of an already existing website. +First, select a name, a predefined design, and a Parent location for your website. ![Create a new website step one](img/site_factory_new_site_step_1.png) If the design defines a Site skeleton, you can choose if you want to copy the entire content structure of the design with a toggle. To preview the Site skeleton architecture, click **Site management**, and then **Site skeletons**. -Next, you can decide if the website will go live after creation or will be offline with the Status switcher. +Next, you can decide if the website goes live after creation or is offline with the Status switcher. In this section you also define the SiteAccess URL addresses with their main languages, fallback languages, and optional paths for the website. !!! note "Path limitation" - The path can be only one directory deep. + The path can be only one directory deep. Do not use paths that have more than one element, for example, `/en/articles`. For more information about SiteAccesses, see [Multisite]([[= developer_doc =]]/multisite/multisite/). @@ -45,10 +42,8 @@ If all required fields are filled out you can select **Create**, and the website !!! note - A SiteAccess that you create in Site Factory is always treated with lower priority - than a SiteAccess defined by the administrator as part of [configuration]([[= developer_doc =]]/multisite/multisite_configuration/#siteaccess-configuration). - For example, if you create a website that uses the `fr` path in Site Factory, and the administrator - defines a French website manually in configuration files, your website is ignored by the system. + A SiteAccess that you create in Site Factory is always treated with lower priority than a SiteAccess defined by the administrator as part of [configuration]([[= developer_doc =]]/multisite/multisite_configuration/#siteaccess-configuration). + For example, if you create a website that uses the `fr` path in Site Factory, and the administrator defines a French website manually in configuration files, your website is ignored by the system. ## Edit an existing website diff --git a/mkdocs.yml b/mkdocs.yml index 3cf1149c..760d1bbb 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -16,7 +16,7 @@ nav: - Content model management: - Content model: content_management/content_model.md - Create and edit content types: content_management/create_edit_content_types.md - - Configure content type Fields: content_management/configure_ct_field_settings.md + - Configure content type fields: content_management/configure_ct_field_settings.md - Content management: - Content management: content_management/content_management.md - Content items: content_management/content_items.md @@ -39,7 +39,7 @@ nav: - Content organization: - Copy, move or hide content: content_management/content_organization/copy_move_hide_content.md - Classify content: content_management/content_organization/classify_content.md - - Manage content Locations and URLs: content_management/content_organization/manage_locations_urls.md + - Manage content locations and URLs: content_management/content_organization/manage_locations_urls.md - PIM: - Product Information Management: pim/pim.md - PIM settings: