ProductTile

https://github.com/magesuite/product-tile

This is a powerful module developed in order to create an extensible product tile, which can be composed with fragments and used in many contexts maintaining the same view and styling.

 

Installation

This module is required by theme-creativeshop

composer require "creativestyle/magesuite-product-tile" ^2.0.0

 

Admin settings

MageSuite product tile is switched on by default when the module is installed. There are additional settings in the admin panel:

Stores -> Configuration -> MageSuite -> Product Tile

 

The Thumbnail gallery on the tile can be enabled in Thumbnail tab.

As tile gallery is an optional feature, import of scripts and styles must be uncommented in a child theme in entries:

import 'components/tile-gallery';

 

Under Cache tab

Include customer group in cache key setting can be enabled or disabled. When enabled product tile will be generated separately for every customer group. Disable only when shop does not differentiate product pricing between customer groups in any way. Disabling it improves shop performance

 

Backend

TODO BE part is needed.

Frontend

The entry template for product tile is: magesuite-product-tile/view/frontend/templates/tile.phtml

Containers

The product tile is composed of smaller containers in magesuite-product-tile/view/frontend/layout/product_tile.xml layout.

Containers create HTML elements with defined tag and class. Containers can be nested inside each other.

Example of container:

<block class="MageSuite\ProductTile\Block\Tile\Container" name="product.tile.container.tile.wrapper"> <arguments> <argument xsi:type="string" name="html_tag">div</argument> <argument xsi:type="string" name="css_class">cs-product-tile__container</argument> </arguments> </block>

All top level containers must be added inside main product.tile block.

Fragments

Tile fragment is the smallest part that can build a whole product tile. Its main purpose is to display some product data using a custom phtml template. Fragments should be as small as possible. That way there won't be much need to overwrite their templates what improves maintainability.

Example of fragment:

The following fragments are defined in the module:

Product object is always available in fragment PHTML template after calling getProduct method on $block.

Restricting Fragments to be rendered only in specific sections

Some tile fragments should be visible only on specific pages.

Fragments related to wishlist functionality (eg. removing product from wishlist) should be visible only on wishlist listing page.

When rendering tile on specific page you can define which related section displays specific tile. For example on wishlist listing page you can set wishlist section.

Later on when creating Fragment it is possible to define which sections support specific fragment:

Restricting Fragments to not be rendered in specific sections

Some fragments might not be suitable for certain sections. Example would be add to wishlist link fragment that should not be displayed in wishlist listing page (since that product was already added to wishlist)

When creating Fragment it is possible to define which sections are not supported:

Tiles structure customization

Custom containers and fragments can be added to child projects. Containers and fragments can be moved ore removed just like native Magento blocks.

 

The tile is divided into 2 main parts: thumbnail and content

 

The styling of content elements is based on CSS grid. Grid is defined on the main element of the product tile:

 

Every direct child of the main element has grid-area value defined according to the following pattern

Thanks to grid possibilities child project can easily manipulate the order and position of tile elements.  Product tile keeps its own aspect ratio.

Values for aspect ratio are defined in variables.scss

Separate list view styles

Only a limited number of projects introduce, design, and style list view mode for product tile.

 

In order to limit the amount of CSS and make the architecture of the tile easier, list view styles are optional and separated in their own scss file: to theme-creativeshop/src/components/product-tile-list/product-tile-list.scss In order to add them to child theme the following import must be uncommented: import 'components/product-tile';

Variables for list view are created according to the following pattern: $product-tile-list_padding

Grid and grid template areas for list view of product tile are defined for mobile:

and for bigger resolutions:

Magesuite scenarios for hover effects

There are some built-in hover scenarios for indicating that the tile is hovered.

  1. The default scenario is to show Add to cart button only on hover. There is also a light border to indicate hover

 

 

 

2. Addon sliding from the bottom hover effect

There is a container name product.tile.container.main.after prepared in product_tile.xml. To introduce the sliding hover effect move some elements inside it:

With some scss variable changes we can achieve the following effect:

 

 

 

 

Styling

Styling for product tile is provided in theme-creativeshop/src/components/product-tile/product-tile.scss Long list of customizable variables helps to achieve the desired look&feel for child projects. However, if design on product tile is very simple the better idea might be to create its own, reduced scss file and not include styles for all tile fragments

 

By default only grid view of style is supported. Styles for list view and product gallery on tile are optional and must be enabled in child project in entries:

 

Old documentation

https://creativestyle.atlassian.net/wiki/spaces/CSHOP/pages/41977304