Extended Product Information
- SKU
- M2-PRODUCT-FEATURES
Description / Extended Product Information
MAGENTO 2 · ATTRIBUTES · SECTIONS · PRODUCT INFORMATION
Turn attributes into information that is easy to compare.
Kowal Product Features
Organize product features into independent, collapsible sections. Choose scales, swatch lists, images and CMS blocks so customers understand the product's uses and specifications faster.
Store View configuration · Appearance profiles · Optional Hyvä adapter
HOW IT WORKS IN PRACTICE
01 · Choose information sources
Assign attributes or CMS blocks to sections.
02 · Choose the presentation
Set the renderer, order and appearance profile.
03 · Customers check key features
Sections show the data assigned to the product.
How does your store benefit?
Explore the module's features, use cases, and settings.
Explore the module
kowal/module-product-features is a Magento 2 module for presenting the most important product features directly on the product page. The extension turns data stored in Magento attributes into clear, visually appealing, and collapsible sections that help customers understand the product faster, compare its parameters, and make a purchase decision.
The module was designed for stores where the standard attributes table is not sufficient: products have functional features, use cases, technologies, parameter levels, certificates, graphics, icons, or additional CMS descriptions. Instead of showing them as a long, technical list, the store can present them as organized sections tailored to the product context.
Customer needs
Customers visiting a product page usually look for answers to specific questions:
- is the product suitable for my use case,
- how does it differ from other variants,
- what are its key technical features,
- does it have specific functions, certificates, or technologies,
- what is the level of important parameters such as breathability, durability, flexibility, or fit,
- what additional information, delivery, or returns details apply to this product.
The module addresses these needs by moving product features from technical administrative data into a clear shopping-focused layer. The customer does not need to analyze raw attribute names or long tables. Instead, they get sections described in sales-oriented language, enhanced with icons, scales, images, or content blocks.
Business benefits
The module helps organize product information in a way that supports sales and customer service:
- improves product page readability,
- reduces the time needed to find key information,
- limits the number of customer service questions about product parameters,
- allows product advantages to be highlighted without rebuilding the store template,
- enables different feature presentation depending on category, product type, or store,
- makes it easier to use existing Magento attributes as sales content,
- helps maintain a consistent look of feature sections across multiple Store View.
Module capabilities
The module displays a set of configurable sections on the product page. Each section can use a single product attribute or aggregate several attributes in one block. The administrator decides which features are visible, in what order they appear, and which presentation type is used to render them.
Key capabilities:
- presentation of product features as collapsible sections on the product page,
- independent expanding and collapsing of each section,
- automatic hiding of empty sections,
- support for single and multiple attributes in one section,
- automatic selection of the presentation method for selected attribute types,
- dedicated renderers for scales, lists, swatches, icons, CMS blocks, images, and numeric values,
- ability to define a custom section order,
- appearance profiles assigned to specific sections,
- global configuration of colors, spacing, text sizes, and visual accents,
- support for per Store View configuration.
Frontend features
On the product page, the module adds a block with product features. Sections have a heading, content, and an icon indicating the expanded state. This keeps the product page organized even when the product has a lot of additional information.
Sections can be expanded or collapsed by default. This allows the most important information to be exposed immediately, while supporting content such as specifications, delivery, returns, or longer descriptions can remain available on click.
If the product has no value for the attribute used in a given section, the module can hide the section automatically. As a result, the customer only sees information that actually applies to the viewed product.
Presentation types
The module supports multiple ways of presenting product data.
Feature scales
Type scale type is used to display dropdown attributes that have 2 or 3 values. The customer sees the full scale context, and the selected product value is highlighted.
Usage examples:
- fit: loose, regular, fitted,
- durability: standard, reinforced, maximum,
- stretch: stiff, normal, flexible,
- breathability: low, medium, high.
This presentation type is more readable than a plain text value, because it shows where the product is positioned relative to the other options.
Swatch lists
Type swatch_list type presents selected multiselect attribute values together with the swatch. This can be an icon, color, or text label configured in Magento.
Usage examples:
- sports uses,
- technologies,
- materials,
- certificates,
- functional features.
The customer gets a short list of values assigned to the product, enhanced with a visual element.
Lists with Amasty icons
Type multiselect_icon type allows you to use icons assigned to attribute options in the Amasty ShopbyBrand / ShopbyBase module. If the option has an image in the Small Imagefield, the module can display it next to the label.
This solution is useful when the store already manages feature, brand, sport, or use-case icons in the Amasty configuration and wants to use the same assets on the product page.
Sections from CMS blocks
Type cms_blocks type uses the product attribute blocks_id. The administrator assigns active CMS blocks to the product, and the module renders each selected block as a separate collapsible section.
Usage examples:
- specification and features,
- delivery information,
- returns,
- instructions for use,
- educational content,
- product-dependent messages.
This allows descriptive content to be managed through standard Magento CMS blocks and assigned only to selected products.
Technical data and text values
The module also supports typical attribute data:
- short one-line text,
- longer text description,
- HTML block,
- label-value layout,
- parameters table,
- single selected label,
- text list,
- badge and badge list.
This makes it possible to build both a simple section with a single parameter and a more advanced specification from multiple attributes.
Boolean values, dates, prices, and numbers
For special data, the module provides dedicated presentation methods:
yes_nofor yes/no values,checkmarkfor positive features,datefor dates formatted according to the store locale,pricefor price values formatted in the store currency,number_with_unitfor numbers with a unit,range_barfor values shown as a range bar,rating_dotsfor ratings or levels shown as dots.
These variants help match the data format to the way the customer naturally reads it.
Images
The module also supports image attributes:
- single image,
- image with label,
- image grid.
This can be used to present technology icons, certificates, pictograms, product markings, or additional informational graphics.
Flexible appearance
The module appearance is based on admin configuration and CSS variables. The store can set global colors, section background, text colors, accents, borders, rounding, spacing, and font sizes without editing template files.
Additionally, the module supports appearance profiles. This means one section can have a standard look, another a more compact one, and another can be highlighted with a different color or accent. This is useful when emphasizing important content, such as certificates, technologies, or information that affects the purchase decision.
Example use cases
The module works especially well in stores where the product requires explanation:
- sportswear and technical apparel,
- sports equipment,
- electronics,
- products with certificates,
- cosmetics and supplements,
- home equipment,
- B2B products with technical parameters,
- catalogs with a large number of variants and features.
An example layout on the product page may include:
- a
Cechy produktusection with several scales, - a
Zastosowaniesection as an icon list, - a
Technologiesection as a swatch list, - a
Specyfikacjasection as an attributes table, - CMS sections
Dostawaerrors,ZwrotyandInstrukcja użytkowania.
Summary
kowal/module-product-features organizes product information and allows it to be presented in a form tailored to the customer purchase decision. The module uses existing Magento mechanisms: product attributes, swatches, CMS blocks, Store View, and system configuration, and then transforms them into clear sections on the product page.
The result is a product page that explains product value better, is easier to scan, and gives administrators greater control over how product features are communicated to customers.
Scales, swatches and the current renderer scope
The current scale renderer supports dropdowns with 2–5 values. Alongside swatch_list you can select swatch_grid and swatch_text; radial_chart presents a parameter in a circular display.
The table, badge, badge_list, icon_value and icon_list options appear in configuration as available in future release. They do not yet have their intended dedicated frontend presentation. Choose an available renderer during implementation and check the result with product data.
Section configuration and optional integrations
Stores → Configuration → Catalog → Product Features provides Feature Sections, Appearance and Appearance Profiles. Define attributes, order, the default section state, hiding empty data and appearance.
The multiselect_icon renderer requires the appropriate Amasty modules and Small Image images assigned to options. blocks_id is a multiselect attribute of active CMS blocks and can also be populated through bulk Update Attributes.
Hyvä and assets loaded only with sections
The package includes the optional Kowal_ProductFeaturesHyva module. For a Hyvä view, enable both modules, Enabled and Enable Hyva Integration; leave Hyvä integration disabled on Luma.
The module's CSS and JS load on product pages with rendered sections. The adapter uses a script without RequireJS or jQuery and does not require rebuilding Tailwind. Scripts placed in CMS blocks by an administrator require separate compatibility checks.
Tooltips and multilingual support
The product-features:tooltips:copy and product-features:tooltips:reset commands request bulk copying or resetting of attribute tooltips between scopes and Store Views.
The kowal.product_features.attribute_tooltip.save consumer performs the save. Keep the queue running during bulk operations and check the destination store view.
Installation via Composer
Package kowal/module-product-features, module Kowal_ProductFeatures. After configuring access to the Kowal repository, install the package, enable the module, update Magento, and clear the cache. In production, include compilation and static content deployment in accordance with the store's deployment process.
From configuration to results
1. Choose information sources
Assign attributes or CMS blocks to sections.
2. Choose the presentation
Set the renderer, order and appearance profile.
3. Customers check key features
Sections show the data assigned to the product.
Technical clothing product page
Show breathability and fit on scales, technologies as a swatch list and care information in a CMS block.
Sections with missing data can be hidden. Organize specifications, images and supporting content in one place.
Prepare sections suited to your assortment
Want to tailor the module to your store? Ask about implementing Kowal Product Features and discuss the configuration or any extensions you need.
More Information
Module Installation Instructions
Product Features - installation, configuration, and attribute management
This document describes the configuration of thekowal/module-product-featuresmodule, the meaning of all admin fields, and working with attributes on the product side.
Installation
The module is intended to be installed via Composer.
You will receive the access details for the Composer repository, the customer's email address and license token, by email after purchase. They are also available in the customer panel after logging in at kowal.store. Replace TWOJ_EMAIL_KLIENTA with your account email address and TWOJ_TOKEN with the token you received. Run the commands in the Magento root directory.
composer config repositories.kowal composer https://repo.kowal.store
composer config http-basic.repo.kowal.store "TWOJ_EMAIL_KLIENTA" "TWOJ_TOKEN"
composer require kowal/module-product-features
bin/magento module:enable Kowal_ProductFeatures
bin/magento setup:upgrade
bin/magento cache:flush
After production deployment, run the standard commands appropriate for the project, e.g. DI compilation and static asset deployment, according to the Magento operating mode.
Configuration location
The module configuration is located in the Magento admin panel:
Stores > Configuration > Catalog > Product Features
Appearance settings are located in a separate group:
Stores > Configuration > Catalog > Product Features Appearance
Configuration fields are available at the Default, Website, and Store View levels. This allows different store views to have different feature sections or a different appearance.
Product Features
Enabled
Enables or disables the module for the given configuration scope.
Values:
Yes- product feature sections are rendered on the product page,No- the module does not return sections and the block does not appear on the frontend.
Use: quickly disable the module for the entire store, selected Website, or Store View without removing the section configuration.
Feature Sections
A list of sections rendered on the product page. Each row defines one frontend section or a group of sections if thecms_blocks.
Enabled
Enables or disables a single section.
Values:
Yes- the section is included in rendering,No- the section is skipped.
Use: temporarily hide one section without deleting its settings.
Section Title
The section title visible on the product page.
Examples:
Cechy produktuerrors,Zastosowanie Sportoweerrors,Specyfikacjaerrors,Technologieerrors,Dostawa.
Use: the name should be understandable to the customer and does not have to match the technical attribute name.
Note: for thecms_blockstype, the child section title is taken from the CMS block title.
Attribute Code
A single product attribute used by the section. The field is a dropdown with a list of product attributes.
Use: use this field when the section is based on one attribute, e.g.sport_usageerrors,blocks_iderrors,materialerrors,technology_icon.
Attribute Codes
A list of multiple product attributes used by one section. The field is a multiselect.
Use: use this field when one section should aggregate several features, e.g. several scales in theCechy produktusection or several parameters in theSpecyfikacja.
Example: theCechy produktusection can contain thefiterrors,resistanceerrors,stretchandbreathabilityattributes, all rendered as scales.
Display Type
Defines how the attribute value is presented.
An empty valueAutomeans automatic renderer selection:
blocks_idis rendered ascms_blockserrors,- swatch multiselect as
swatch_listerrors, - select with 2 or 3 options as
scaleerrors, - select with more options as
selected_labelerrors, - multiselect as
text_listerrors, - boolean as
checkmarkerrors, - date as
dateerrors, - price as
priceerrors, - textarea as
text_blockerrors, - image/media_image as
imageerrors, - other types as
text_inline.
Available types:
| Type | Use |
|---|---|
scale |
Scale for a select attribute with 2 or 3 options. |
swatch_list |
List of selected multiselect values with a Magento swatch. |
multiselect_icon |
List of selected multiselect values with an Amasty ShopbyBrand / ShopbyBase icon. |
cms_blocks |
Separate sections created from CMS blocks assigned throughblocks_id. |
text_inline |
Short text value. |
text_block |
Longer text. |
html_block |
HTML content from the attribute. |
accordion_text |
HTML/text content in a collapsible section. |
key_value |
Label-value rows. |
table |
Technical data in a table layout. |
selected_label |
Label of the selected select attribute option. |
text_list |
Text list of selected multiselect values. |
badge |
Single value as a badge. |
badge_list |
List of values as badges. |
icon_value |
Single value with an icon. |
icon_list |
List of values with icons. |
swatch_grid |
Selected multiselect values in a swatch grid. |
yes_no |
Boolean value asYesorNo. |
checkmark |
Boolean value as a positive feature; visible only for a true value. |
date |
Date formatted according to the store. |
price |
Price formatted by Magento. |
number_with_unit |
Number with a unit. |
range_bar |
Number as a range bar. |
rating_dots |
Number as active level dots. |
radial_chart |
Fractional value, e.g.4/6or7/10, as a radial chart with the attribute label. |
image |
Single image from an image attribute. |
image_with_label |
Image with a caption. |
image_grid |
Multiple images in a graphic layout. |
In the admin panel, some items are marked asavailable in future release. This applies to types that are already visible in the configuration list but do not yet have their own target frontend presentation:
tableerrors,badgeerrors,badge_listerrors,icon_valueerrors,icon_listerrors,swatch_grid.
Sort Order
The order of sections on the product page. A lower number means earlier display.
Use: place the most important sections first, e.g.10for main features,20for use cases,30for specifications.
Default State
The initial state of the section on the product page.
Values:
Expanded- the section is expanded by default,Collapsed- the section is collapsed by default.
Use: the most important content can be shown immediately, while longer supporting information can remain collapsed.
Hide Empty
Determines whether the section should be hidden when there is no data to display.
Values:
Yes- the section is hidden if the product has no attribute value or the renderer does not return any items,No- the section may remain visible even without items.
Use:Yesis usually recommended to avoid showing empty sections to the customer.
Appearance Profile
Selects an appearance profile defined in theAppearance Profiles.
The field is a dropdown. The administrator no longer enters the code manually, but selects a ready-made profile from the list, usually in thecode - label.
Use: allows a specific section to have an appearance different from the global one, e.g. thecompacterrors,highlightorplain.
If the field is empty and theUse global appearanceoption is selected, the section uses the global appearance.
Recommended workflow:
- define a profile in
Appearance Profileserrors, - save the configuration,
- return to
Feature Sectionserrors, - select the profile in the
Appearance Profilecolumn for the appropriate section.
CSS Class
An additional CSS class added to the section.
Use: individual appearance adjustment in the frontend theme, e.g.product-features-section--technical.
Renderer Options JSON
Optional settings passed to the renderer in JSON format.
Use depends on the presentation type. Examples:
{"unit":"cm","precision":1}
Fornumber_with_unit:
unit- unit, e.g.cmerrors,%errors,g/m2errors,precision- number of decimal places.
Forrange_bar:
min- minimum range value,max- maximum range value,low_label- label for the beginning of the range,high_label- label for the end of the range.
Forrating_dots:
steps- number of dots or levels.
Typeradial_charttype does not require additional options. The renderer reads the attribute value or option label in thex/yformat, e.g.1/6errors,4/6errors,7/10.
Example for a range bar:
{"min":0,"max":100,"low_label":"Niska","high_label":"Wysoka"}
Example for dots:
{"steps":5}
Note: the field must contain valid JSON. An invalid value is ignored by the renderer.
Appearance Profiles
A list of optional appearance profiles that can be assigned to sections through theAppearance Profile.
Code
The technical profile code.
Examples:
compacterrors,highlighterrors,plain.
Use: the code identifies the profile internally and is used as the option value in theAppearance Profiledropdown for the section.
Label
A descriptive profile name visible to the administrator.
Use: makes it easier to identify the profile in the configuration, e.g.Kompaktowyerrors,Wyróżnionyerrors,Neutralny. Combined with the code, it creates a readable label in the profile selection list inFeature Sections.
Background
The section background color for the profile.
Use: highlight selected sections or match the theme.
Text
The color of the main text in the section.
Heading
The color of the section title.
Accent
The accent color, e.g. active elements, scale dots, or highlights.
Accent Background
The background color of accent elements.
Border
The color of lines, separators, scale axes, and borders.
Icon
The color of the section expand and collapse icon.
Radius, e.g. 18px
Section corner rounding.
Examples:0errors,8pxerrors,18px.
Padding, e.g. 28px
Internal section spacing.
Examples:16pxerrors,24pxerrors,28px.
Label Font Size, e.g. 21px
Text size of feature labels in the section.
Examples:16pxerrors,18pxerrors,21pxerrors,1.25rem.
Product Features Appearance
This group contains the global section appearance. The settings are converted into CSS variables and applied to the module wrapper.
Section Background Color
The section background color.
API Log Retention Days#f4f4f4.
Section Text Color
The main text color in the section.
API Log Retention Days#000000.
Section Heading Color
The section heading color.
API Log Retention Days#000000.
Muted Text Color
The color of helper and less important text.
API Log Retention Days#555555.
Accent Color
The color of active elements and highlights.
API Log Retention Days#000000.
Accent Background Color
The background color of active elements, e.g. selections.
API Log Retention Days#ffffff.
Border Color
The color of borders, separators, and scale axes.
API Log Retention Days#9b9b9b.
Icon Color
The color of the+/-icon in the section header.
API Log Retention Days#000000.
Selected Text Color
The text color of the selected value.
API Log Retention Days#000000.
Selected Font Weight
The font weight of the selected value.
API Log Retention Days700.
Examples:400errors,500errors,600errors,700errors,bold.
Section Border Radius
The border radius of the section container.
API Log Retention Days18px.
Section Padding
Internal section spacing.
API Log Retention Days28px.
Section Gap
Spacing between sections.
API Log Retention Days16px.
Heading Font Size
The section heading font size.
API Log Retention Days20px.
Examples:18pxerrors,20pxerrors,1.25remerrors,clamp(18px, 2vw, 22px).
Label Font Size
The font size of feature labels and value labels.
API Log Retention Days21px.
Body Font Size
The font size of the main section content.
API Log Retention Days16px.
Managing attributes on the product side
The module does not create a separate product data system. It uses Magento product attributes, so content management is handled primarily in product editing.
Editing a single product
- for a public URL from an allowed host.
Catalog > Products. - Open the product for editing.
- Fill in the attributes used by the module sections.
- If the product should use CMS blocks, go to the
Product Featuresgroup and set theCMS Blocks. - Save the product.
- Clear the cache if the project requires it.
The section will appear on the frontend only if:
- the module is enabled,
- the section is enabled in the configuration,
- the attribute exists,
- the product has an attribute value,
- the renderer can handle the selected value,
- the section has not been hidden by
Hide Empty.
Theblocks_id/ CMS Blocks attribute
Duringsetup:upgrade, the module adds a product attribute:
- code:
blocks_iderrors, - label:
CMS Blockserrors, - type:
texterrors, - input:
multiselecterrors, - source model: active CMS blocks,
- backend: standard Magento backend for multiselect,
- scope: Store View,
- group:
Product Featureserrors, - visible in product editing,
- available in the product grid and grid filtering.
FieldCMS Blocksfield allows you to assign active CMS blocks to a product. Each selected block will be rendered as a separate section if the module configuration includes a section with:
Attribute Code:blocks_iderrors,Display Type:cms_blocks.
The section title on the frontend comes from the CMS block title, and the content comes from the block content. Inactive blocks or blocks unavailable for the Store View are not rendered.
Managing CMS blocks
Blocks used byblocks_idare created in Magento in the standard way:
Content > Elements > Blocks
Recommendations:
- use clear block titles because they may be visible as section titles,
- assign blocks to the appropriate Store Views,
- set the block as active,
- store descriptive content in blocks that should be shared by many products, e.g. delivery, returns, instructions, technologies.
Bulk product editing
Theblocks_idattribute is prepared to work with bulk product editing.
- for a public URL from an allowed host.
Catalog > Products. - Select products in the grid.
- Choose the
Update Attributes. - Set the value of the
CMS Blocks. - Save the changes.
Use: quickly assign the same CMS section, e.g.Dostawaerrors,ZwrotyorInstrukcja pielęgnacji, to many products at once.
Attributes for scale
For thescaletype, useselectattributes with 2 or 3 active options.
Example:
- attribute
fiterrors, - options:
Luźnyerrors,Regularnyerrors,Dopasowany.
The product should have one of the options selected. The module will show all scale options and highlight the one assigned to the product.
If the attribute has fewer than 2 or more than 3 options, thescalerenderer will skip this attribute.
Multiselect attributes
For lists of features, use cases, technologies, or certificates, usemultiselect.
Possible presentation types:
text_listerrors,badge_listerrors,swatch_listerrors,swatch_griderrors,multiselect_iconerrors,icon_list.
The product can have several values selected. The module renders only the values assigned to the product.
Magento swatches
If the multiselect attribute uses Magento swatches, you can use theswatch_listorswatch_grid.
Use:
- technology icons,
- colors,
- use case pictograms,
- material markings.
If the option has an image swatch, the module will show the image. If it has a color or text swatch, the module will use the appropriate variant.
Amasty icons
For themultiselect_icontype, the module attempts to retrieve the option icon from Amasty ShopbyBrand / ShopbyBase.
Icon source:
Shop by Brand > Option Edit > Other > Small Image
The alternative text comes fromSmall Image Alt, and if it is missing, from the option label.
If Amasty is not installed or the option has no icon, the module will show only the label.
Text and HTML attributes
For short information, usetext_inlineerrors,key_valueorbadge.
For longer descriptions, usetext_blockerrors,accordion_textorhtml_block.
Note:html_blockandaccordion_textrender HTML, so they should be used only for trusted admin content.
Numeric attributes
For numeric values, you can use:
number_with_unit- when the number requires a unit,range_bar- when the value should be shown as progress within a range,rating_dots- when the value describes a level or rating.
ExampleRenderer Options JSON for a number with a unit:
{"unit":"%","precision":0}
Boolean attributes
For yes/no attributes, use:
yes_nowhen the customer should see bothYesandNoerrors,checkmarkwhen the feature should be visible only if the product has it.
Image attributes
For image-type attributes, you can use:
imageerrors,image_with_labelerrors,image_grid.
The module builds the image URL based on the Magento product media directory and uses the attribute label as the alternative text.
Example configuration
Section with several scales:
| Field | Value |
|---|---|
| Enabled | Yes |
| Section Title | Cechy produktu |
| Attribute Codes | fiterrors,resistanceerrors,stretcherrors,breathability |
| Display Type | scale |
| Sort Order | 10 |
| Default State | Expanded |
| Hide Empty | Yes |
Use case section with icons:
| Field | Value |
|---|---|
| Enabled | Yes |
| Section Title | Zastosowanie Sportowe |
| Attribute Code | sport_usage |
| Display Type | multiselect_icon |
| Sort Order | 20 |
| Default State | Collapsed |
| Hide Empty | Yes |
CMS sections:
| Field | Value |
|---|---|
| Enabled | Yes |
| Section Title | Informacje dodatkowe |
| Attribute Code | blocks_id |
| Display Type | cms_blocks |
| Sort Order | 30 |
| Default State | Collapsed |
| Hide Empty | Yes |
Diagnostics
If the section does not appear on the frontend, check:
- whether
Enabledvalue isYeserrors, - whether the given section has
Enabled = Yeserrors, - whether the product has the attribute filled in,
- whether the correct
Attribute CodeorAttribute Codeserrors, - whether
Display Typematches the attribute type, - whether
Hide Emptyis not hiding an empty section, - whether the attribute is available for the given Store View,
- whether the CMS block is active and assigned to the correct Store View,
- whether the Magento cache has been refreshed.