Extended Product Information
Requires changes to the template
No
Minor changes
Significant changes
Requires programming knowledge
No
Basic
Advanced
Difficulty in configuration
Impact on performance
Compliance with Magento standards
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
The 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
The 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
The 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 Image field, 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
The 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
Product Featuressection with several scales, - a
Use Casesection as an icon list, - a
Technologiessection as a swatch list, - a
Specificationsection as an attributes table, - CMS sections
Delivery,ReturnsandInstructions for Use.
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.
Product Features - installation, configuration, and attribute management
This document describes the configuration of the kowal/module-product-features module, the meaning of all admin fields, and working with attributes on the product side.
Installation
The module is intended for installation via Composer.
composer config repositories.module.product.features vcs https://github.com/kowalco/product-featurescomposer config --global --auth github-oauth.github.com composer require kowal/module-product-featuresbin/magento module:enable Kowal_ProductFeaturesbin/magento setup:upgradebin/magento cache:flush After production deployment, standard commands appropriate for the project should be run, for example 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.
Usage: quickly disable the module for the entire store, a selected Website, or a Store View without removing the section configuration.
Feature Sections
List of sections rendered on the product page. Each row defines one frontend section or a group of sections if the cms_blocks type is used.
Enabled
Enables or disables a single section.
Values:
Yes- the section is included in rendering,No- the section is skipped.
Usage: temporarily hide one section without deleting its settings.
Section Title
The section title visible on the product page.
Examples:
Product Features,Sports Use,Specification,Technologies,Delivery.
Usage: the name should be understandable to the customer and does not have to match the technical attribute name.
Note: for the cms_blocks type, 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.
Usage: use this field when the section is based on a single attribute, for example sport_usage, blocks_id, material, technology_icon.
Attribute Codes
A list of multiple product attributes used by one section. The field is a multiselect.
Usage: use this field when one section should aggregate several features, for example several scales in the Product Features section or several parameters in the Specification section.
Example: the Product Features section may contain the attributes fit, resistance, stretch and breathability, all rendered as scales.
Display Type
Defines the presentation method for the attribute value.
An empty Auto value means automatic renderer selection:
blocks_idis rendered ascms_blocks,- swatch multiselect as
swatch_list, - select with 2 or 3 options as
scale, - select with more options as
selected_label, - multiselect as
text_list, - boolean as
checkmark, - date as
date, - price as
price, - textarea as
text_block, - image/media_image as
image, - other types as
text_inline.
Available types:
| Type | Usage |
|---|---|
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 via blocks_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 tabular 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 as Yes or No. |
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, for example 4/6 or 7/10, as a radial chart with the attribute label. |
image | Single image from an image attribute. |
image_with_label | Image with caption. |
image_grid | Several images in a visual layout. |
In the admin panel, some items are marked as available in future release. This applies to types that are already visible in the configuration list but do not yet have their own final frontend presentation:
table,badge,badge_list,icon_value,icon_list,swatch_grid.
Sort Order
The order of sections on the product page. A lower number means earlier display.
Usage: place the most important sections first, for example 10 for main features, 20 for use cases, 30 for specification.
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.
Usage: 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 returns no items,No- the section may remain visible even without items.
Usage: Yes is usually recommended so the customer does not see empty sections.
Appearance Profile
Selects an appearance profile defined in the Appearance Profiles field.
The field is a dropdown. The administrator no longer enters the code manually, but selects a ready-made profile from the list, usually in the code - label format.
Usage: allows a specific section to have a different appearance than the global one, for example the compact, highlight, or plain profile.
If the field is empty and the Use global appearance option is selected, the section uses the global appearance.
Recommended workflow:
- define the profile in
Appearance Profiles, - save the configuration,
- go back to
Feature Sections, - select the profile in the
Appearance Profilecolumn for the appropriate section.
CSS Class
Additional CSS class added to the section.
Usage: individual appearance customization in the frontend theme, for example product-features-section--technical.
Renderer Options JSON
Optional settings passed to the renderer in JSON format.
Usage depends on the presentation type. Examples:
{'unit':'cm','precision':1}For number_with_unit:
unit- unit, for examplecm,%,g/m2,precision- number of decimal places.
For range_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.
For rating_dots:
steps- number of dots or levels.
The radial_chart type does not require additional options. The renderer reads the attribute value or option label in the x/y format, for example 1/6, 4/6, 7/10.
Example for a range bar:
{'min':0,'max':100,'low_label':'Low','high_label':'High'}Example for dots:
{'steps':5}Note: the field must contain valid JSON. An invalid value is ignored by the renderer.
Appearance Profiles
List of optional appearance profiles that can be assigned to sections through the Appearance Profile field.
Code
Technical profile code.
Examples:
compact,highlight,plain.
Usage: the code identifies the profile internally and is used as the option value in the Appearance Profile dropdown for a section.
Label
Descriptive profile name visible to the administrator.
Usage: makes it easier to recognize the profile in configuration, for example Compact, Highlighted, Neutral. Combined with the code, it creates a clear label in the profile selection list in Feature Sections.
Background
Section background color for the profile.
Usage: highlight selected sections or match the theme.
Text
Primary text color in the section.
Heading
Section title color.
Accent
Accent color, for example active elements, scale dots, or highlights.
Accent Background
Background color of accent elements.
Border
Color of lines, separators, scale axes, and borders.
Icon
Color of the section expand and collapse icon.
Radius, e.g. 18px
Section corner rounding.
Examples: 0, 8px, 18px.
Padding, e.g. 28px
Inner section spacing.
Examples: 16px, 24px, 28px.
Label Font Size, e.g. 21px
Font size of feature labels in the section.
Examples: 16px, 18px, 21px, 1.25rem.
Product Features Appearance
This group contains the global appearance of sections. The settings are converted into CSS variables and applied to the module wrapper.
Section Background Color
Section background color.
Default: #f4f4f4.
Section Text Color
Primary text color in the section.
Default: #000000.
Section Heading Color
Section heading color.
Default: #000000.
Muted Text Color
Color of supporting and less important text.
Default: #555555.
Accent Color
Color of active elements and highlights.
Default: #000000.
Accent Background Color
Background color of active elements, for example selections.
Default: #ffffff.
Border Color
Color of borders, separators, and scale axes.
Default: #9b9b9b.
Icon Color
Color of the + / - icon in the section heading.
Default: #000000.
Selected Text Color
Color of the selected value text.
Default: #000000.
Selected Font Weight
Font weight of the selected value.
Default: 700.
Examples: 400, 500, 600, 700, bold.
Section Border Radius
Corner rounding of the section container.
Default: 18px.
Section Padding
Inner section spacing.
Default: 28px.
Section Gap
Spacing between sections.
Default: 16px.
Heading Font Size
Font size of the section heading.
Default: 20px.
Examples: 18px, 20px, 1.25rem, clamp(18px, 2vw, 22px).
Label Font Size
Font size of feature labels and value labels.
Default: 21px.
Body Font Size
Font size of the main section content.
Default: 16px.
Attribute management on the product side
The module does not create a separate product data system. It uses Magento product attributes, so content management takes place mainly in product editing.
Single product editing
- Go to
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 Blocksfield. - 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 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.
Attribute blocks_id / CMS Blocks
During setup:upgrade, the module adds a product attribute:
- code:
blocks_id, - label:
CMS Blocks, - type:
text, - input:
multiselect, - source model: active CMS blocks,
- backend: standard Magento backend for multiselect,
- scope: Store View,
- group:
Product Features, - visible in product editing,
- available in the product grid and grid filtering.
The CMS Blocks field allows active CMS blocks to be assigned to the product. Each selected block will be rendered as a separate section if the module configuration contains a section with:
Attribute Code:blocks_id,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.
CMS block management
Blocks used by blocks_id are created in the standard Magento way:
Content > Elements > Blocks
Recommendations:
- use clear block titles because they may be visible as section titles,
- assign blocks to the correct Store View,
- set the block as active,
- store descriptive content in blocks that should be shared by many products, such as delivery, returns, instructions, or technologies.
Mass product editing
The blocks_id attribute is prepared for use with mass product editing.
- Go to
Catalog > Products. - Select products in the grid.
- Choose the
Update Attributesaction. - Set the value of the
CMS Blocksfield. - Save the changes.
Usage: quickly assign the same CMS section, for example Delivery, Returns, or Care Instructions, to multiple products at the same time.
Attributes for scale
For the scale type, use select attributes with 2 or 3 active options.
Example:
- attribute
fit, - options:
Loose,Regular,Fitted.
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, the scale renderer will skip that attribute.
Multiselect attributes
For lists of features, use cases, technologies, or certificates, use multiselect attributes.
Possible presentation types:
text_list,badge_list,swatch_list,swatch_grid,multiselect_icon,icon_list.
The product may have several values selected. The module renders only the values assigned to the product.
Magento swatches
If a multiselect attribute uses Magento swatches, you can use the swatch_list or swatch_grid type.
Usage:
- technology icons,
- colors,
- use-case pictograms,
- material markings.
If the option has an image swatch, the module will display the image. If it has a color or text swatch, the module will use the appropriate variant.
Amasty icons
For the multiselect_icon type, the module attempts to retrieve the option icon from Amasty ShopbyBrand / ShopbyBase.
Icon source:
Shop by Brand > Option Edit > Other > Small Image
Alt text comes from Small 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 display only the label.
Text and HTML attributes
For short information, use text_inline, key_value, or badge.
For longer descriptions, use text_block, accordion_text, or html_block.
Note: html_block and accordion_text render 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.
Example Renderer Options JSON for a number with a unit:
{'unit':'%','precision':0}Boolean attributes
For yes/no attributes, use:
yes_no, when the customer should see bothYesandNo,checkmark, when the feature should be visible only if the product has it.
Image attributes
For image-type attributes, you can use:
image,image_with_label,image_grid.
The module builds the image URL based on the Magento product media directory and uses the attribute label as the alt text.
Example configuration
Section with several scales:
| Field | Value |
|---|---|
| Enabled | Yes |
| Section Title | Product Features |
| Attribute Codes | fit, resistance, stretch, breathability |
| Display Type | scale |
| Sort Order | 10 |
| Default State | Expanded |
| Hide Empty | Yes |
Use-case section with icons:
| Field | Value |
|---|---|
| Enabled | Yes |
| Section Title | Sports Use |
| 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 | Additional Information |
| Attribute Code | blocks_id |
| Display Type | cms_blocks |
| Sort Order | 30 |
| Default State | Collapsed |
| Hide Empty | Yes |
Troubleshooting
If a section does not appear on the frontend, check:
- whether module
Enabledis set toYes, - whether the given section has
Enabled = Yes, - whether the product has the attribute filled in,
- whether the correct
Attribute CodeorAttribute Codeswas selected, - whether the
Display Typematches the attribute type, - whether
Hide Emptyis not hiding the 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.
Write Your Own Review





















