<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>e-commerce &#8211; Aimeos</title>
	<atom:link href="https://aimeos.org/tips/category/e-commerce/feed/" rel="self" type="application/rss+xml" />
	<link>https://aimeos.org/tips</link>
	<description>ultra fast PHP e-commerce framework</description>
	<lastBuildDate>Wed, 24 Jul 2024 09:35:19 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.7.8</generator>

<image>
	<url>https://aimeos.org/tips/wp-content/uploads/2019/09/Aimeos_e_200-100x104.png</url>
	<title>e-commerce &#8211; Aimeos</title>
	<link>https://aimeos.org/tips</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Aimeos 2024.07 release</title>
		<link>https://aimeos.org/tips/aimeos-2024-07-release/</link>
					<comments>https://aimeos.org/tips/aimeos-2024-07-release/#comments</comments>
		
		<dc:creator><![CDATA[aimeos]]></dc:creator>
		<pubDate>Wed, 24 Jul 2024 09:35:17 +0000</pubDate>
				<category><![CDATA[e-commerce]]></category>
		<category><![CDATA[Laravel]]></category>
		<category><![CDATA[Releases]]></category>
		<category><![CDATA[TYPO3]]></category>
		<guid isPermaLink="false">https://aimeos.org/tips/?p=1024</guid>

					<description><![CDATA[The 2024.07 release completes the GraphQL API and adds some nice features to Aimeos. In addition, we&#8217;ve invested a lot of time to improve the documentation of the GraphQL and JSON APIs: GraphQL file uploads and new index query Extended<span class="ellipsis">&#8230;</span><div class="read-more"><a href="https://aimeos.org/tips/aimeos-2024-07-release/">Read more <span class="screen-reader-text">Aimeos 2024.07 release</span><span class="meta-nav"> &#8250;</span></a></div><!-- end of .read-more -->]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full is-resized"><a href="https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big.jpg"><img src="https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big.jpg" alt="" class="wp-image-887" width="1200" height="630" srcset="https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big.jpg 1200w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-300x158.jpg 300w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-1024x538.jpg 1024w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-768x403.jpg 768w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-100x53.jpg 100w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-150x79.jpg 150w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-200x105.jpg 200w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-450x236.jpg 450w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-600x315.jpg 600w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-900x473.jpg 900w" sizes="(max-width: 1200px) 100vw, 1200px" /></a></figure>



<p>The 2024.07 release completes the GraphQL API and adds some nice features to Aimeos. In addition, we&#8217;ve invested a lot of time to improve the documentation of the GraphQL and JSON APIs:</p>



<ul><li>GraphQL file uploads and new index query</li><li>Extended GraphQL and JSON:API documentation</li><li>Custom address types</li><li>Full time support in subscriptions</li><li>Multiple mailer support in Laravel</li></ul>



<span id="more-1024"></span>



<h2>GraphQL API improvements</h2>



<div class="wp-block-image"><figure class="alignright size-large is-resized"><a href="https://aimeos.org/tips/wp-content/uploads/2019/09/grapgql.png"><img src="https://aimeos.org/tips/wp-content/uploads/2019/09/grapgql.png" alt="" class="wp-image-402" width="200" height="200" srcset="https://aimeos.org/tips/wp-content/uploads/2019/09/grapgql.png 400w, https://aimeos.org/tips/wp-content/uploads/2019/09/grapgql-150x150.png 150w, https://aimeos.org/tips/wp-content/uploads/2019/09/grapgql-300x300.png 300w, https://aimeos.org/tips/wp-content/uploads/2019/09/grapgql-100x100.png 100w, https://aimeos.org/tips/wp-content/uploads/2019/09/grapgql-200x200.png 200w" sizes="(max-width: 200px) 100vw, 200px" /></a></figure></div>



<p>The GraphQL admin API will replace the existing JSON admin API completely beginning in 2025. The JS code of the Aimeos admin backend is rewritten step by step to use the GraphQL API only and thus, the GraphQL admin API has been further improved and is now almost feature complete.</p>



<p>The latest additions contain a new GraphQL index query that allows aggregating products matched by filters for counting or of aggregation. Also, The API supports uploading media files now &#8211; a feature, that&#8217;s not available in the the old JsonAdm API.</p>



<p>Until 2025, the remaining code that uses the JsonAdm API will be rewritten and the JsonAdm API will be finally removed.</p>



<h2>API documentation</h2>



<div class="wp-block-image"><figure class="alignleft size-large is-resized"><a href="https://aimeos.org/tips/wp-content/uploads/2024/07/aimeos.org_docs_latest_admin_graphql.png"><img src="https://aimeos.org/tips/wp-content/uploads/2024/07/aimeos.org_docs_latest_admin_graphql-1024x671.png" alt="" class="wp-image-1025" width="256" height="168" srcset="https://aimeos.org/tips/wp-content/uploads/2024/07/aimeos.org_docs_latest_admin_graphql-1024x671.png 1024w, https://aimeos.org/tips/wp-content/uploads/2024/07/aimeos.org_docs_latest_admin_graphql-300x197.png 300w, https://aimeos.org/tips/wp-content/uploads/2024/07/aimeos.org_docs_latest_admin_graphql-768x504.png 768w, https://aimeos.org/tips/wp-content/uploads/2024/07/aimeos.org_docs_latest_admin_graphql-100x66.png 100w, https://aimeos.org/tips/wp-content/uploads/2024/07/aimeos.org_docs_latest_admin_graphql-150x98.png 150w, https://aimeos.org/tips/wp-content/uploads/2024/07/aimeos.org_docs_latest_admin_graphql-200x131.png 200w, https://aimeos.org/tips/wp-content/uploads/2024/07/aimeos.org_docs_latest_admin_graphql-450x295.png 450w, https://aimeos.org/tips/wp-content/uploads/2024/07/aimeos.org_docs_latest_admin_graphql-600x393.png 600w, https://aimeos.org/tips/wp-content/uploads/2024/07/aimeos.org_docs_latest_admin_graphql-900x590.png 900w, https://aimeos.org/tips/wp-content/uploads/2024/07/aimeos.org_docs_latest_admin_graphql.png 1220w" sizes="(max-width: 256px) 100vw, 256px" /></a></figure></div>



<p>We&#8217;ve put a lot of effort in improving the API documentation for the GraphQL and JSON REST API.</p>



<p>Especially, the examples have been improved and they include vanilla Javascript code for the JSON API and JQAdm code the GraphQL admin API now. This enables developers of any skill level to get code for working requests quickly. Furthermore, existing examples have been improved to show how related items can be fetched too and how they are returned.</p>



<p>All new queries and mutations available in 2024.07 has been documented too in the <a href="https://aimeos.org/docs/latest/admin/graphql/">GraphQL admin API</a> and <a href="https://aimeos.org/docs/latest/frontend/jsonapi/">JSON REST API</a> documentation.</p>



<h2>Custom addess types</h2>



<p>Up to now, it was possible to add addresses to customers and suppliers but they had a fixed meaning. For customers, the addresses are treated as delivery addresses while for suppliers, the addresses are locations for stores or with a similar meaning.</p>



<p>Now, the customer and supplier address tables contains a new &#8220;type&#8221; column that can contain any string to distinguish the different addresses stored there. This is especially useful in heavily customized setups which includes non-standard use cases, e.g. for complex B2B applications and marketplaces.</p>



<h2>Time support in subscriptions</h2>



<div class="wp-block-image"><figure class="alignright size-large is-resized"><a href="https://aimeos.org/tips/wp-content/uploads/2024/07/admin-product-subscription.png"><img src="https://aimeos.org/tips/wp-content/uploads/2024/07/admin-product-subscription.png" alt="" class="wp-image-1026" width="250" height="150" srcset="https://aimeos.org/tips/wp-content/uploads/2024/07/admin-product-subscription.png 1000w, https://aimeos.org/tips/wp-content/uploads/2024/07/admin-product-subscription-300x180.png 300w, https://aimeos.org/tips/wp-content/uploads/2024/07/admin-product-subscription-768x461.png 768w, https://aimeos.org/tips/wp-content/uploads/2024/07/admin-product-subscription-100x60.png 100w, https://aimeos.org/tips/wp-content/uploads/2024/07/admin-product-subscription-150x90.png 150w, https://aimeos.org/tips/wp-content/uploads/2024/07/admin-product-subscription-200x120.png 200w, https://aimeos.org/tips/wp-content/uploads/2024/07/admin-product-subscription-450x270.png 450w, https://aimeos.org/tips/wp-content/uploads/2024/07/admin-product-subscription-600x360.png 600w, https://aimeos.org/tips/wp-content/uploads/2024/07/admin-product-subscription-900x540.png 900w" sizes="(max-width: 250px) 100vw, 250px" /></a></figure></div>



<p>The Aimeos backend supported entering hours for subscriptions already in the past but the rest of the code wasn&#8217;t fully prepared to copy with subscriptions that should be only available for one or more hours.</p>



<p>Now, this feature is completely available in the whole code base including renewal of subscriptions after one hour if configured in the product subscription settings.</p>



<h2>Multiple mailer support</h2>



<p>In case you need to use different mail servers for sending e-mails depending on their purpose, Aimeos does support them now &#8211; at least if you are using Laravel. The <em>mail()</em> method of the Aimeos context object accepts the name of the mailer configuration now and returns the mailer object which uses the corresponding configuration. Existing code isn&#8217;t affected because the new parameter is optional and the default mailer is returned as before if no parameter is passed.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://aimeos.org/tips/aimeos-2024-07-release/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Aimeos 2024.04 release</title>
		<link>https://aimeos.org/tips/aimeos-2024-04-release/</link>
					<comments>https://aimeos.org/tips/aimeos-2024-04-release/#respond</comments>
		
		<dc:creator><![CDATA[aimeos]]></dc:creator>
		<pubDate>Wed, 24 Apr 2024 06:31:41 +0000</pubDate>
				<category><![CDATA[e-commerce]]></category>
		<category><![CDATA[Laravel]]></category>
		<category><![CDATA[Releases]]></category>
		<category><![CDATA[TYPO3]]></category>
		<guid isPermaLink="false">https://aimeos.org/tips/?p=1015</guid>

					<description><![CDATA[The first stable release of the Aimeos ecommerce framwork for Laravel and TYPO3 in 2024 offers a whole bunch of updates compared to previous versions and is prepared for the upcoming accessibility requirements in the EU. The most important features<span class="ellipsis">&#8230;</span><div class="read-more"><a href="https://aimeos.org/tips/aimeos-2024-04-release/">Read more <span class="screen-reader-text">Aimeos 2024.04 release</span><span class="meta-nav"> &#8250;</span></a></div><!-- end of .read-more -->]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><a href="https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big.jpg"><img width="1024" height="538" src="https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-1024x538.jpg" alt="" class="wp-image-887" srcset="https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-1024x538.jpg 1024w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-300x158.jpg 300w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-768x403.jpg 768w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-100x53.jpg 100w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-150x79.jpg 150w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-200x105.jpg 200w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-450x236.jpg 450w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-600x315.jpg 600w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-900x473.jpg 900w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>The first stable release of the Aimeos ecommerce framwork for Laravel and TYPO3 in 2024 offers a whole bunch of updates compared to previous versions and is prepared for the upcoming accessibility requirements in the EU. The most important features and changes are:</p>



<ul><li>Full Laravel 11 support</li><li>WCAG AAA compatible template</li><li>Top-level URLs for products/categories/pages</li><li>Product CSV upload in backend and imports per site</li><li>VueJS 3 in admin backend with locally bundled JS libs</li><li>Improved GraphQL admin API</li><li>Simplifications for developers</li></ul>



<span id="more-1015"></span>



<h2>Full Laravel 11 support</h2>



<div class="wp-block-image"><figure class="alignright size-large"><a href="https://aimeos.org/tips/wp-content/uploads/2021/10/laravel6.png"><img width="126" height="130" src="https://aimeos.org/tips/wp-content/uploads/2021/10/laravel6.png" alt="" class="wp-image-863" srcset="https://aimeos.org/tips/wp-content/uploads/2021/10/laravel6.png 126w, https://aimeos.org/tips/wp-content/uploads/2021/10/laravel6-100x103.png 100w" sizes="(max-width: 126px) 100vw, 126px" /></a></figure></div>



<p>The Aimeos Laravel package has support for Laravel 11 since its release a month ago. The number of breaking changes in Laravel 11 had been low so adapting the package was possible immediately.</p>



<p>Now, with the Aimeos 2024.04 release, the Aimeos shop distribution as well as the Aimeos headless distribution are based on Laravel 11 too. The most important change in Laravel 11 is the simplified ./app/ directory but the old structure is still supported. Only the AuthServiceProvider class isn&#8217;t used any more.</p>



<h2>WCAG AAA compatible template</h2>



<div class="wp-block-image"><figure class="alignleft size-large"><a href="https://aimeos.org/tips/wp-content/uploads/2024/04/wcag22AAA.svg"><img width="368" height="130" src="https://aimeos.org/tips/wp-content/uploads/2024/04/wcag22AAA.svg" alt="" class="wp-image-1016"/></a></figure></div>



<p>Starting in 2025, almost all companies in the EU need to have accessible web sites which can be used by handicapped persons too. The W3C Web Content Accessibility Guidelines provides useful help to comply to the required accessibility standards.</p>



<p>The default Aimeos theme as well as the <a rel="noreferrer noopener" href="https://aimeos.com/extensions#c759" target="_blank">Berlin theme for marketplaces</a> is now prepared for WCAG 2.2 AAA. Most of the required changes related to controls, buttons and other active elements which needs to be big enough for easy usage.</p>



<h2>Top-level URLs for categories/products/pages</h2>



<p>The Aimeos Laravel package and the Aimeos shop distribution based on Laravel support now URL segments without sub-paths. Than means, you can have URLs like /<code>sneakers</code>, <code>/nice-blue-top-sneaker</code> and <code>/contact</code> as URLs for categories, products and CMS content pages.</p>



<p>All those top-level URLs are handled by the ResolveController, which checks if a category, product or CMS page with that URL segment exists. This feature isn&#8217;t enabled by default because it requires additional database queries to check what type of entity is assigned to that URL segment. The README of the <a rel="noreferrer noopener" href="https://github.com/aimeos/#multi-routing" target="_blank">Aimeos shop distribution</a> contains a section how to enable the multi-routing feature.</p>



<h2>Product CSV upload in backend and imports per site</h2>



<div class="wp-block-image"><figure class="alignright size-medium"><a href="https://aimeos.org/tips/wp-content/uploads/2024/04/admin-product-csvupload.png"><img width="300" height="150" src="https://aimeos.org/tips/wp-content/uploads/2024/04/admin-product-csvupload-300x150.png" alt="" class="wp-image-1018" srcset="https://aimeos.org/tips/wp-content/uploads/2024/04/admin-product-csvupload-300x150.png 300w, https://aimeos.org/tips/wp-content/uploads/2024/04/admin-product-csvupload-1024x512.png 1024w, https://aimeos.org/tips/wp-content/uploads/2024/04/admin-product-csvupload-768x384.png 768w, https://aimeos.org/tips/wp-content/uploads/2024/04/admin-product-csvupload-1536x768.png 1536w, https://aimeos.org/tips/wp-content/uploads/2024/04/admin-product-csvupload-100x50.png 100w, https://aimeos.org/tips/wp-content/uploads/2024/04/admin-product-csvupload-150x75.png 150w, https://aimeos.org/tips/wp-content/uploads/2024/04/admin-product-csvupload-200x100.png 200w, https://aimeos.org/tips/wp-content/uploads/2024/04/admin-product-csvupload-450x225.png 450w, https://aimeos.org/tips/wp-content/uploads/2024/04/admin-product-csvupload-600x300.png 600w, https://aimeos.org/tips/wp-content/uploads/2024/04/admin-product-csvupload-900x450.png 900w, https://aimeos.org/tips/wp-content/uploads/2024/04/admin-product-csvupload.png 1600w" sizes="(max-width: 300px) 100vw, 300px" /></a><figcaption>Product CSV upload</figcaption></figure></div>



<p>One of the major changes in Aimeos 2024.x compared to previous versions is that CSV and XML files can now be imported per site in multi-site environments. Therefore, the files must be stored in sub-directories of the product, catalog, supplier, etc. directories named after the code of the site to import the files for within the fs-import file system.</p>



<p>That change allowed to implement uploading CSV files in the product list panel. Then, these files are stored in the appropriate directory of the fs-import file system and are processed by the product CSV job controller that needs to be executed regularly by a cron job because of time and memory constraints in HTTP requests.</p>



<h2>VueJS 3 in admin backend with locally bundled JS libs</h2>



<div class="wp-block-image"><figure class="alignleft size-medium"><a href="https://aimeos.org/tips/wp-content/uploads/2024/04/admin-dashboard.png"><img width="300" height="240" src="https://aimeos.org/tips/wp-content/uploads/2024/04/admin-dashboard-300x240.png" alt="" class="wp-image-1019" srcset="https://aimeos.org/tips/wp-content/uploads/2024/04/admin-dashboard-300x240.png 300w, https://aimeos.org/tips/wp-content/uploads/2024/04/admin-dashboard-1024x819.png 1024w, https://aimeos.org/tips/wp-content/uploads/2024/04/admin-dashboard-768x614.png 768w, https://aimeos.org/tips/wp-content/uploads/2024/04/admin-dashboard-1536x1229.png 1536w, https://aimeos.org/tips/wp-content/uploads/2024/04/admin-dashboard-100x80.png 100w, https://aimeos.org/tips/wp-content/uploads/2024/04/admin-dashboard-150x120.png 150w, https://aimeos.org/tips/wp-content/uploads/2024/04/admin-dashboard-200x160.png 200w, https://aimeos.org/tips/wp-content/uploads/2024/04/admin-dashboard-450x360.png 450w, https://aimeos.org/tips/wp-content/uploads/2024/04/admin-dashboard-600x480.png 600w, https://aimeos.org/tips/wp-content/uploads/2024/04/admin-dashboard-900x720.png 900w, https://aimeos.org/tips/wp-content/uploads/2024/04/admin-dashboard.png 2000w" sizes="(max-width: 300px) 100vw, 300px" /></a><figcaption>Aimeos admin dashboard</figcaption></figure></div>



<p>The Aimeos admin backend has been rewritten and uses VueJS 3.x for the dynamic features now. You will only notice the upgrade of the VueJS library if you have overwritten parts of the admin backend with custom templates. The code for initializing the VueJS apps must be different now as well as inline templates are not supported any more.</p>



<p>Instead of using the JS files from a content delivery network, they are now bundled by NPM and included from the local file system. This reduces the dependency from external CDNs, supports environment without internet connections and the bundled files are also smaller which improves the loading time.</p>



<h2>Improved GraphQL admin API</h2>



<div class="wp-block-image"><figure class="alignright size-thumbnail"><a href="https://aimeos.org/tips/wp-content/uploads/2019/09/grapgql.png"><img width="150" height="150" src="https://aimeos.org/tips/wp-content/uploads/2019/09/grapgql-150x150.png" alt="" class="wp-image-402" srcset="https://aimeos.org/tips/wp-content/uploads/2019/09/grapgql-150x150.png 150w, https://aimeos.org/tips/wp-content/uploads/2019/09/grapgql-300x300.png 300w, https://aimeos.org/tips/wp-content/uploads/2019/09/grapgql-100x100.png 100w, https://aimeos.org/tips/wp-content/uploads/2019/09/grapgql-200x200.png 200w, https://aimeos.org/tips/wp-content/uploads/2019/09/grapgql.png 400w" sizes="(max-width: 150px) 100vw, 150px" /></a></figure></div>



<p>The Aimeos GraphQL API is now almost feature complete. It can handle the necessary requests to fetch and manage all resources including the aggregations required for the dashboard. Compared to previous versions, the API supports getting the total number of items too. Only file uploads for the media resources are missing and will be added in the next version.</p>



<p>Beginning of 2025, the existing JSON admin API will be deprecated and removed in later versions so you should use the <a rel="noreferrer noopener" href="https://aimeos.org/docs/latest/admin/graphql/" target="_blank">GraphQL API in the backend</a> from now on. The <a rel="noreferrer noopener" href="https://aimeos.org/docs/latest/frontend/jsonapi/" target="_blank">JSON API for the frontend</a> won&#8217;t be affected in any way and is the only supported option for fetching data for building your own frontend.</p>



<h2>Simplifications for developers</h2>



<p>We always work hard to make things as simple as possible for developers using Aimeos for their own projects. Creating new managers required to write a lot of code in the past but now, it has become very simple. The article about <a rel="noreferrer noopener" href="https://aimeos.org/docs/latest/models/create-managers/" target="_blank">implementing new managers</a> describes the few steps with examples that are required to create the necessary migration and the manager class which defines the properties.</p>



<p>In the HTML frontend, the address sections in the checkout process and the account profile page have been unified and use a common address partial now. Thus, they can be configured using the same settings now but that required renaming the existing configuration options.</p>



<p>To simplify the structure, the controller/common and controller/jobs code in the ai-controller-jobs extension has been merged and the controller/common code from the aimeos-core package has been moved to the media and order managers where they belong to.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://aimeos.org/tips/aimeos-2024-04-release/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Aimeos 2023.10 LTS release</title>
		<link>https://aimeos.org/tips/aimeos-2023-10-lts-release/</link>
					<comments>https://aimeos.org/tips/aimeos-2023-10-lts-release/#comments</comments>
		
		<dc:creator><![CDATA[aimeos]]></dc:creator>
		<pubDate>Wed, 25 Oct 2023 08:23:40 +0000</pubDate>
				<category><![CDATA[e-commerce]]></category>
		<category><![CDATA[Laravel]]></category>
		<category><![CDATA[Releases]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[TYPO3]]></category>
		<category><![CDATA[ecommerce]]></category>
		<category><![CDATA[laravel]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[release]]></category>
		<guid isPermaLink="false">https://aimeos.org/tips/?p=1005</guid>

					<description><![CDATA[The 2023.10 version of the Aimeos e-commerce framework for Laravel and TYPO3 is available now! Especially developers will love the 2023 version because it contains a lot of simplifications and fully supports scaleable cloud setups like Kubernetes natively. The most<span class="ellipsis">&#8230;</span><div class="read-more"><a href="https://aimeos.org/tips/aimeos-2023-10-lts-release/">Read more <span class="screen-reader-text">Aimeos 2023.10 LTS release</span><span class="meta-nav"> &#8250;</span></a></div><!-- end of .read-more -->]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><a href="https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big.jpg"><img width="1024" height="538" src="https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-1024x538.jpg" alt="" class="wp-image-887" srcset="https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-1024x538.jpg 1024w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-300x158.jpg 300w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-768x403.jpg 768w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-100x53.jpg 100w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-150x79.jpg 150w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-200x105.jpg 200w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-450x236.jpg 450w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-600x315.jpg 600w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-900x473.jpg 900w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>The 2023.10 version of the Aimeos e-commerce framework for Laravel and TYPO3 is available now! Especially developers will love the 2023 version because it contains a lot of simplifications and fully supports scaleable cloud setups like Kubernetes natively. The most important updates in 2023 are:</p>



<ul><li>Laravel 10 distributions</li><li>TYPO3 12 support</li><li>Kubernetes/Serverless support</li><li>Create managers easily</li><li>Merged order and order base</li><li>Stored basket panel</li><li>DB-based translations for type names</li><li>VueJS and GraphQL in backend</li></ul>



<span id="more-1005"></span>



<h2>Laravel 10 distributions</h2>



<div class="wp-block-image"><figure class="alignright size-large"><a href="https://aimeos.org/tips/wp-content/uploads/2021/10/laravel6.png"><img width="126" height="130" src="https://aimeos.org/tips/wp-content/uploads/2021/10/laravel6.png" alt="" class="wp-image-863" srcset="https://aimeos.org/tips/wp-content/uploads/2021/10/laravel6.png 126w, https://aimeos.org/tips/wp-content/uploads/2021/10/laravel6-100x103.png 100w" sizes="(max-width: 126px) 100vw, 126px" /></a></figure></div>



<p>Since the Laravel 10 release in February 2023, Aimeos fully supports the latest Laravel version and since 2023.04, the Aimeos headless and full stack distribution are based on Laravel 10. You can bootstrap your own Aimeos application in less than five minutes using those distributions and get a fully working Laravel 10 application. This also includes pre-configured authentication setup for both, the full stack and the headless distribution.</p>



<h2>TYPO3 12 support</h2>



<div class="wp-block-image"><figure class="alignleft size-large"><a href="https://aimeos.org/tips/wp-content/uploads/2021/10/typo3.png"><img width="128" height="128" src="https://aimeos.org/tips/wp-content/uploads/2021/10/typo3.png" alt="" class="wp-image-864" srcset="https://aimeos.org/tips/wp-content/uploads/2021/10/typo3.png 128w, https://aimeos.org/tips/wp-content/uploads/2021/10/typo3-100x100.png 100w" sizes="(max-width: 128px) 100vw, 128px" /></a></figure></div>



<p>Also, Aimeos 2023.x fully supports TYPO3 12.4 since it&#8217;s release in April. Many changes has happened in v12 compared to v11, especially a lot of deprecated code has been removed. This made it very hard to make Aimeos 2023.x available for TYPO3 v11 too so we&#8217;ve decided to support v12 only in that release. Therefore, if you need a feature from Aimeos 2023.x or want to upgrade after two years of free support, you must upgrade to the latest TYPO3 v12 too.</p>



<h2>Kubernetes/Serverless support</h2>



<p>We are proud to announce that Aimeos 2023+ is the first cloud-native e-commerce solution for Laravel. Everything including file imports can be distributed across any cloud environment like Kubernetes, AWS, Google Cloud, Azure or so called serverless environments now. Aimeos for Laravel is cloud-ready since the beginning and images/CSS/JS files can be stored in S3 or similar cloud storage services but files were read only from a local file system. This this year, you can store files for importing products, categories, users, etc. from any remote server regardless if they are in CSV or XML format.</p>



<p>We also moved our complete server infrastructure from traditional hosting to a private Kubernetes cloud beginning this year including the web sites, demo setups and private package repository.</p>



<h2>Create managers easily</h2>



<p>Extending existing managers is extremely simply but writing new managers for own data domains or extending existing data domains required a lot of boilerplate code in the past. Since 2023.10, creating new managers is as easy as extending managers now.</p>



<p>First of all, create a setup task for the database migration as before:</p>



<pre class="wp-block-code"><code>namespace Aimeos\Upscheme\Task;

class Test extends Base
{
    public function up()
    {
        $this-&gt;info( 'Creating test schema', 'v' );

        $this-&gt;db( 'db-test' )-&gt;table( $name, function( $table ) {
            $table-&gt;engine = 'InnoDB';

             $table-&gt;id()-&gt;primary( 'pk_mstes_id' );
             $table-&gt;string( 'siteid' );
             $table-&gt;string( 'label' )-&gt;default( '' );
             $table-&gt;int( 'position' )-&gt;default( 0 );
             $table-&gt;smallint( 'status' )-&gt;default( 1 );
             $table-&gt;meta();
         } );
    }
}</code></pre>



<p>Then, create the manager for the new domain named &#8220;test&#8221;:</p>



<pre class="wp-block-code"><code>namespace Aimeos\MShop\Test\Manager;

class Standard
    extends \Aimeos\MShop\Common\Manager\Base
    implements \Aimeos\MShop\Common\Manager\Iface
{
    public function getSaveAttributes() : array
    {
        return $this-&gt;createAttributes( &#91;
            'label' =&gt; &#91;
            ],
            'status' =&gt; &#91;
                'type' =&gt; 'int',
            ],
            'position' =&gt; &#91;
                'type' =&gt; 'int',
                'label' =&gt; 'Position for sorting'
            ],
        ] );
    }
}</code></pre>



<p>That&#8217;s all! You can work with your new manager like with any other manager from the Aimeos core:</p>



<pre class="wp-block-code"><code>$manager = \Aimeos\MShop::create( $this-&gt;context(), 'test' )

$item = $manager-&gt;create()
    -&gt;set( 'label', 'test label' )
    -&gt;set( 'position', 2 )
    -&gt;set( 'status', 1 );

$item = $manager-&gt;save( $item );

$label = $item-&gt;label;
// or using get() with default value
$label = $item-&gt;get( 'label', 'default value' );</code></pre>



<p>For more information, there&#8217;s an article about <a href="https://aimeos.org/docs/latest/models/create-managers/">creating new managers</a> in the Aimeos documentation.</p>



<h2>Merged order and order base</h2>



<p>The biggest architectural change since the beginning is simplifying the order data domain by merging the order and order base tables/managers/items. The initial idea behind was that we can have several invoice/refund entries for each stored order base item (=basket) but that turned out to not work well over the years and complicated handling orders a lot. Thus, the data is all stored in the order record now.</p>



<p>That leads to some consequences, especially for the JSON:API as this change isn&#8217;t backward compatible! An application using the JSON:API doesn&#8217;t need to use the order endpoint any more to create an order item because the basket endpoint did that already. Furthermore, the property names in the basket changed and &#8220;.base&#8221; has to be removed.</p>



<p>The JSON:API has been backward compatible for six years (2017-2022) and we want to keep v2 stable for the next 5-10 years now.</p>



<h2>Stored basket panel</h2>



<div class="wp-block-image"><figure class="alignright size-medium"><a href="https://aimeos.org/tips/wp-content/uploads/2023/10/saved-basket.png"><img width="300" height="180" src="https://aimeos.org/tips/wp-content/uploads/2023/10/saved-basket-300x180.png" alt="" class="wp-image-1009" srcset="https://aimeos.org/tips/wp-content/uploads/2023/10/saved-basket-300x180.png 300w, https://aimeos.org/tips/wp-content/uploads/2023/10/saved-basket-1024x614.png 1024w, https://aimeos.org/tips/wp-content/uploads/2023/10/saved-basket-768x461.png 768w, https://aimeos.org/tips/wp-content/uploads/2023/10/saved-basket-1536x922.png 1536w, https://aimeos.org/tips/wp-content/uploads/2023/10/saved-basket-100x60.png 100w, https://aimeos.org/tips/wp-content/uploads/2023/10/saved-basket-150x90.png 150w, https://aimeos.org/tips/wp-content/uploads/2023/10/saved-basket-200x120.png 200w, https://aimeos.org/tips/wp-content/uploads/2023/10/saved-basket-450x270.png 450w, https://aimeos.org/tips/wp-content/uploads/2023/10/saved-basket-600x360.png 600w, https://aimeos.org/tips/wp-content/uploads/2023/10/saved-basket-900x540.png 900w, https://aimeos.org/tips/wp-content/uploads/2023/10/saved-basket.png 2000w" sizes="(max-width: 300px) 100vw, 300px" /></a></figure></div>



<p>Customer baskets are stored in the database during some time and now, the admin backend contains a new &#8220;Sales &gt; Baskets&#8221; Panel in the admin backend. Administrators and editors can check saved and abandoned baskets of the customers and it&#8217;s also possible to send emails to 3rd party applications for reminding customers about their abandoned carts.</p>



<h2>DB-based translations for type names</h2>



<div class="wp-block-image"><figure class="alignleft size-medium"><a href="https://aimeos.org/tips/wp-content/uploads/2023/10/type-translations.png"><img width="300" height="180" src="https://aimeos.org/tips/wp-content/uploads/2023/10/type-translations-300x180.png" alt="" class="wp-image-1011" srcset="https://aimeos.org/tips/wp-content/uploads/2023/10/type-translations-300x180.png 300w, https://aimeos.org/tips/wp-content/uploads/2023/10/type-translations-1024x614.png 1024w, https://aimeos.org/tips/wp-content/uploads/2023/10/type-translations-768x461.png 768w, https://aimeos.org/tips/wp-content/uploads/2023/10/type-translations-1536x922.png 1536w, https://aimeos.org/tips/wp-content/uploads/2023/10/type-translations-100x60.png 100w, https://aimeos.org/tips/wp-content/uploads/2023/10/type-translations-150x90.png 150w, https://aimeos.org/tips/wp-content/uploads/2023/10/type-translations-200x120.png 200w, https://aimeos.org/tips/wp-content/uploads/2023/10/type-translations-450x270.png 450w, https://aimeos.org/tips/wp-content/uploads/2023/10/type-translations-600x360.png 600w, https://aimeos.org/tips/wp-content/uploads/2023/10/type-translations-900x540.png 900w, https://aimeos.org/tips/wp-content/uploads/2023/10/type-translations.png 2000w" sizes="(max-width: 300px) 100vw, 300px" /></a></figure></div>



<p>Before, translations for attribute types were only possible by translating them statically the Gettext translation files or in the Aimeos configuration. Thus, only developers were able to update these translations and it was difficult to update translations if they have been delivered by ERP systems.</p>



<p>Now, type translations are saved in the database along with the types and can be edited in the admin backend and updated easily by ERP systems. This is available for all types, not only attribute types.</p>



<h2>VueJS and GraphQL in backend</h2>



<p>Several panels have been rewritten in the admin backend to use VueJS components now. This lead to better code quality and is another step forward to remove all jQuery-related code in the next versions. Also, VueJS components for which no VueJS 3 version is available has been replaced by better supported ones, namely the combo box select components which have been replaced by Vue Multiselect now. Finally, this will make the upgrade to VueJS 3 possible in the next versions.</p>



<p>Furthermore, requests to the JSON admin API has been replaced by requests to the new GraphQL API where possible. We will continue to extend the GraphQL API and replace existing JSON admin API requests until we completely phased out the JSON admin API. In 2024.x, the JSON admin API will be also marked as deprecated. The frontend JSON:API will never be replaced and will be the only way for frontends to interact with Aimeos servers as GraphQL is not suited well for read-heavy applications like e-commerce apps.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://aimeos.org/tips/aimeos-2023-10-lts-release/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>AI revolution in eCommerce</title>
		<link>https://aimeos.org/tips/ai-revolution-in-ecommerce/</link>
					<comments>https://aimeos.org/tips/ai-revolution-in-ecommerce/#comments</comments>
		
		<dc:creator><![CDATA[aimeos]]></dc:creator>
		<pubDate>Tue, 24 Jan 2023 18:30:34 +0000</pubDate>
				<category><![CDATA[e-commerce]]></category>
		<guid isPermaLink="false">https://aimeos.org/tips/?p=990</guid>

					<description><![CDATA[Since the availability of ChatGPT, a large language machine learning model from OpenAI, artificial intelligence seems to be on the rise. Now, editors writing texts might be seen as a dying species because tools like ChatGPT can do the same<span class="ellipsis">&#8230;</span><div class="read-more"><a href="https://aimeos.org/tips/ai-revolution-in-ecommerce/">Read more <span class="screen-reader-text">AI revolution in eCommerce</span><span class="meta-nav"> &#8250;</span></a></div><!-- end of .read-more -->]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-image"><figure class="aligncenter size-large"><a href="https://aimeos.org/tips/wp-content/uploads/2023/01/ai-ecommerce-2.jpg"><img width="1000" height="600" src="https://aimeos.org/tips/wp-content/uploads/2023/01/ai-ecommerce-2.jpg" alt="" class="wp-image-991" srcset="https://aimeos.org/tips/wp-content/uploads/2023/01/ai-ecommerce-2.jpg 1000w, https://aimeos.org/tips/wp-content/uploads/2023/01/ai-ecommerce-2-300x180.jpg 300w, https://aimeos.org/tips/wp-content/uploads/2023/01/ai-ecommerce-2-768x461.jpg 768w, https://aimeos.org/tips/wp-content/uploads/2023/01/ai-ecommerce-2-100x60.jpg 100w, https://aimeos.org/tips/wp-content/uploads/2023/01/ai-ecommerce-2-150x90.jpg 150w, https://aimeos.org/tips/wp-content/uploads/2023/01/ai-ecommerce-2-200x120.jpg 200w, https://aimeos.org/tips/wp-content/uploads/2023/01/ai-ecommerce-2-450x270.jpg 450w, https://aimeos.org/tips/wp-content/uploads/2023/01/ai-ecommerce-2-600x360.jpg 600w, https://aimeos.org/tips/wp-content/uploads/2023/01/ai-ecommerce-2-900x540.jpg 900w" sizes="(max-width: 1000px) 100vw, 1000px" /></a></figure></div>



<p>Since the availability of <a href="https://openai.com/blog/chatgpt/" target="_blank" rel="noreferrer noopener">ChatGPT</a>, a large language machine learning model from OpenAI, artificial intelligence seems to be on the rise. Now, editors writing texts might be seen as a dying species because tools like ChatGPT can do the same in seconds and in almost the same quality. This is similar to how <a href="https://www.deepl.com/" target="_blank" rel="noreferrer noopener">DeepL</a>, a translation tool based on machine learning, changed the translation industry before.</p>



<p>Especially in eCommerce, search engines like Google require a lot of relevant text before pages show up at the top of search results. This can now be automated in <a href="https://aimeos.org/">Aimeos</a>, the first eCommerce framework with direct integration of ChatGPT and DeepL. This allows editors to generate any text in seconds and have it translated into 29 languages.</p>



<span id="more-990"></span>



<h2>Generate and translate any content</h2>



<div class="wp-block-image"><figure class="alignright size-large is-resized"><a href="https://aimeos.org/tips/wp-content/uploads/2023/01/admin-openai-integration.png"><img src="https://aimeos.org/tips/wp-content/uploads/2023/01/admin-openai-integration-1024x614.png" alt="" class="wp-image-992" width="512" height="307" srcset="https://aimeos.org/tips/wp-content/uploads/2023/01/admin-openai-integration-1024x614.png 1024w, https://aimeos.org/tips/wp-content/uploads/2023/01/admin-openai-integration-300x180.png 300w, https://aimeos.org/tips/wp-content/uploads/2023/01/admin-openai-integration-768x461.png 768w, https://aimeos.org/tips/wp-content/uploads/2023/01/admin-openai-integration-1536x922.png 1536w, https://aimeos.org/tips/wp-content/uploads/2023/01/admin-openai-integration-100x60.png 100w, https://aimeos.org/tips/wp-content/uploads/2023/01/admin-openai-integration-150x90.png 150w, https://aimeos.org/tips/wp-content/uploads/2023/01/admin-openai-integration-200x120.png 200w, https://aimeos.org/tips/wp-content/uploads/2023/01/admin-openai-integration-450x270.png 450w, https://aimeos.org/tips/wp-content/uploads/2023/01/admin-openai-integration-600x360.png 600w, https://aimeos.org/tips/wp-content/uploads/2023/01/admin-openai-integration-900x540.png 900w, https://aimeos.org/tips/wp-content/uploads/2023/01/admin-openai-integration.png 2000w" sizes="(max-width: 512px) 100vw, 512px" /></a><figcaption>Aimeos admin backend with ChatGPT and DeepL integration</figcaption></figure></div>



<p>Not only texts based on existing product specifications are possible, but also helpful information for customers. Depending on the prompt entered, ChatGPT also generates, for example, styling tips for fashion or health information for allergy sufferers &#8211; everything about which there are already publications on the Internet that have been incorporated into the training of the AI model.</p>



<p>Although ChatGPT can generate texts in different languages, the quality is better the more texts are available in the respective language on the topic. Since DeepL can translate good quality texts into less common (European) languages, this will greatly accelerate the professionalization of online stores in these language regions.</p>



<h2>Test yourself</h2>



<p>You can try Aimeos and the capabilities of ChatGPT and DeepL yourself in the <a rel="noreferrer noopener" href="https://admin.demo.aimeos.org/" target="_blank">Aimeos admin demo</a>:</p>



<p><a rel="noreferrer noopener" href="https://admin.demo.aimeos.org/" target="_blank">https://admin.demo.aimeos.org/</a></p>



<p>Aimeos is the ultra-fast, cloud-native, API-first PHP eCommerce framework for building custom online shops, marketplaces and complex B2B applications. It&#8217;s available as <a href="https://aimeos.org/Laravel">Laravel package</a>, <a href="https://aimeos.org/Symfony">Symfony bundle</a> and <a href="https://aimeos.org/TYPO3">TYPO3 extension</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://aimeos.org/tips/ai-revolution-in-ecommerce/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Aimeos 2022.10 LTS release</title>
		<link>https://aimeos.org/tips/aimeos-2022-10-lts-release/</link>
					<comments>https://aimeos.org/tips/aimeos-2022-10-lts-release/#comments</comments>
		
		<dc:creator><![CDATA[aimeos]]></dc:creator>
		<pubDate>Thu, 27 Oct 2022 07:42:15 +0000</pubDate>
				<category><![CDATA[e-commerce]]></category>
		<category><![CDATA[Laravel]]></category>
		<category><![CDATA[Releases]]></category>
		<category><![CDATA[TYPO3]]></category>
		<guid isPermaLink="false">https://aimeos.org/tips/?p=966</guid>

					<description><![CDATA[The Aimeos 2022.10 version with long term support is now available for Laravel and TYPO3. It contains a lot of improvements for customers, editors, developers and marketplace owners. The most important improvements included in this release are: GraphQL admin API<span class="ellipsis">&#8230;</span><div class="read-more"><a href="https://aimeos.org/tips/aimeos-2022-10-lts-release/">Read more <span class="screen-reader-text">Aimeos 2022.10 LTS release</span><span class="meta-nav"> &#8250;</span></a></div><!-- end of .read-more -->]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><a href="https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big.jpg"><img width="1024" height="538" src="https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-1024x538.jpg" alt="" class="wp-image-887" srcset="https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-1024x538.jpg 1024w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-300x158.jpg 300w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-768x403.jpg 768w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-100x53.jpg 100w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-150x79.jpg 150w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-200x105.jpg 200w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-450x236.jpg 450w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-600x315.jpg 600w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-900x473.jpg 900w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>The Aimeos 2022.10 version with long term support is now available for Laravel and TYPO3. It contains a lot of improvements for customers, editors, developers and marketplace owners. The most important improvements included in this release are:</p>



<ul><li>GraphQL admin API</li><li>Headless Laravel distribution</li><li>Direct editing of marketplace items</li><li>Dynamic supplier filter</li><li>Customers can save baskets</li><li>Invoice numbers per site</li><li>Optimized performance</li><li>SEO and 404 improvements</li></ul>



<span id="more-966"></span>



<h2>GraphQL admin API</h2>



<p>The biggest improvement in the 2022.10 LTS realease is the GraphQL API for administration, which enables developers to manage products and other data stored in Aimeos much easier compared to the JSON REST Admin API. Especially updating several related resources can be done in one API call now instead of requiring ten or more calls. The GraphQL API is also much more aligned to document based storage like ElasticSearch.</p>



<p>A GraphQL mutation to store a new product and return its ID looks like:</p>



<pre class="wp-block-code"><code>mutation {
  saveProduct(input: {
    code: "test-graphql",
    lists: {
      media: &#91;{
        type: "test"
        item: {
          type: "download",
          url: "https://local/test.jpg",
          preview: "https://local/test-small.jpg"
          property: &#91;{
            type: "copyright",
            value: "Aimeos"
          }]
        }
      }],
      text: &#91;{
        type: "name",
        item: {
          type: "name",
          languageid: "de",
          content: "Some text"
        }
      }]
    },
    property: &#91;{
      type: "prodcode",
      value: "abcd-1234"
    }]
  }) {
    id
  }
}</code></pre>



<h2>Headless Laravel distribution</h2>



<p>The Aimeos headless distribution based on Laravel 9 is now stable and available with long term support too. It&#8217;s tailored for developers who want to build the complete frontend in Javascript using ReactJS, VueJS or any other Javascript framework. For authentication, JSON Web Tokens are used in the headless distribution and the world-class Aimeos JSON REST API offers access to the complete frontend functionality of Aimeos. </p>



<p>Get the <a href="https://github.com/aimeos/aimeos-headless">Aimeos headless distribution</a></p>



<h2>Edit marketplace items directly</h2>



<div class="wp-block-columns">
<div class="wp-block-column">
<p>In the past, editors have to switch to the site where the texts, images, attributes or other related items had been created before they could update or delete those items. Now, editors can modify or delete every item created in a sub-site of the current one directly, which is extremely handy in marketplace setups to fix items of vendors quickly!</p>



<p>For all those aggregated items (and also for inherited ones) where no space for additional information is available, the Aimeos backend displays the meta data like site, editor and creation/modification time when hovering over the item now. Therefore, you can see immediately from which site the item is coming from as well as who created/modified it and when.</p>
</div>



<div class="wp-block-column">
<figure class="wp-block-image size-large"><a href="https://aimeos.org/tips/wp-content/uploads/2022/10/admin-meta.png"><img width="1000" height="600" src="https://aimeos.org/tips/wp-content/uploads/2022/10/admin-meta.png" alt="" class="wp-image-970" srcset="https://aimeos.org/tips/wp-content/uploads/2022/10/admin-meta.png 1000w, https://aimeos.org/tips/wp-content/uploads/2022/10/admin-meta-300x180.png 300w, https://aimeos.org/tips/wp-content/uploads/2022/10/admin-meta-768x461.png 768w, https://aimeos.org/tips/wp-content/uploads/2022/10/admin-meta-100x60.png 100w, https://aimeos.org/tips/wp-content/uploads/2022/10/admin-meta-150x90.png 150w, https://aimeos.org/tips/wp-content/uploads/2022/10/admin-meta-200x120.png 200w, https://aimeos.org/tips/wp-content/uploads/2022/10/admin-meta-450x270.png 450w, https://aimeos.org/tips/wp-content/uploads/2022/10/admin-meta-600x360.png 600w, https://aimeos.org/tips/wp-content/uploads/2022/10/admin-meta-900x540.png 900w" sizes="(max-width: 1000px) 100vw, 1000px" /></a></figure>
</div>
</div>



<h2>Dynamic supplier filter</h2>



<div class="wp-block-columns">
<div class="wp-block-column" style="flex-basis:33.33%">
<figure class="wp-block-image size-large"><a href="https://aimeos.org/tips/wp-content/uploads/2022/10/aimeos-supplier-filter.png"><img width="1000" height="1000" src="https://aimeos.org/tips/wp-content/uploads/2022/10/aimeos-supplier-filter.png" alt="" class="wp-image-979" srcset="https://aimeos.org/tips/wp-content/uploads/2022/10/aimeos-supplier-filter.png 1000w, https://aimeos.org/tips/wp-content/uploads/2022/10/aimeos-supplier-filter-300x300.png 300w, https://aimeos.org/tips/wp-content/uploads/2022/10/aimeos-supplier-filter-150x150.png 150w, https://aimeos.org/tips/wp-content/uploads/2022/10/aimeos-supplier-filter-768x768.png 768w, https://aimeos.org/tips/wp-content/uploads/2022/10/aimeos-supplier-filter-100x100.png 100w, https://aimeos.org/tips/wp-content/uploads/2022/10/aimeos-supplier-filter-200x200.png 200w, https://aimeos.org/tips/wp-content/uploads/2022/10/aimeos-supplier-filter-450x450.png 450w, https://aimeos.org/tips/wp-content/uploads/2022/10/aimeos-supplier-filter-600x600.png 600w, https://aimeos.org/tips/wp-content/uploads/2022/10/aimeos-supplier-filter-900x900.png 900w" sizes="(max-width: 1000px) 100vw, 1000px" /></a></figure>
</div>



<div class="wp-block-column" style="flex-basis:66.66%">
<p>For those who have hundreds, thousands or more suppliers/manufacturers/brands in their Aimeos installation, the new supplier filter offers searching for those items dynamically. Thus, it&#8217;s not necessary to preload a limited set of items.</p>



<p>The filter enable customers to search for any supplier based on their name and it also finds sub-strings in supplier names. The most often used suppliers are still listed first when opening the filter and found items are added at the top.</p>
</div>
</div>



<h2>Customers can save baskets</h2>



<div class="wp-block-columns">
<div class="wp-block-column">
<p>Customers can save their baskets now, which is especially useful for B2B clients who have selected the products they need for their customers and store the baskets until they get the final OK. Each basket can have a name describing the content.</p>



<p>Then, the stored baskets are listed in the profile section of the account just like for the order history. Customers can select one of the stored baskets and put all products inside into the current basket with a single click and continuing to the checkout.</p>
</div>



<div class="wp-block-column">
<figure class="wp-block-image size-large"><a href="https://aimeos.org/tips/wp-content/uploads/2022/10/aimeos-basket-save.png"><img width="1024" height="615" src="https://aimeos.org/tips/wp-content/uploads/2022/10/aimeos-basket-save-1024x615.png" alt="" class="wp-image-977" srcset="https://aimeos.org/tips/wp-content/uploads/2022/10/aimeos-basket-save-1024x615.png 1024w, https://aimeos.org/tips/wp-content/uploads/2022/10/aimeos-basket-save-300x180.png 300w, https://aimeos.org/tips/wp-content/uploads/2022/10/aimeos-basket-save-768x461.png 768w, https://aimeos.org/tips/wp-content/uploads/2022/10/aimeos-basket-save-1536x922.png 1536w, https://aimeos.org/tips/wp-content/uploads/2022/10/aimeos-basket-save-100x60.png 100w, https://aimeos.org/tips/wp-content/uploads/2022/10/aimeos-basket-save-150x90.png 150w, https://aimeos.org/tips/wp-content/uploads/2022/10/aimeos-basket-save-200x120.png 200w, https://aimeos.org/tips/wp-content/uploads/2022/10/aimeos-basket-save-450x270.png 450w, https://aimeos.org/tips/wp-content/uploads/2022/10/aimeos-basket-save-600x360.png 600w, https://aimeos.org/tips/wp-content/uploads/2022/10/aimeos-basket-save-900x540.png 900w, https://aimeos.org/tips/wp-content/uploads/2022/10/aimeos-basket-save.png 1999w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>
</div>
</div>



<h2>Invoice numbers per site</h2>



<p>Especially for marketplaces and SaaS setups, separate sequential invoice numbers for each vendor are important for accounting reasons. In 2022.10, Aimeos adds an invoice ID column to the locale site table and creates a new, unique invoice ID for each order after the payment was successful.</p>



<p>The ID from the order table is still used to identify each order uniquely over all sites and the generated invoice ID is stored in addition in the order table. The invoice ID can also be formatted before being added to the e-mails or the PDFs by using the <em>ordernumber</em> marco:</p>



<pre class="wp-block-code"><code>use \Aimeos\MShop\Order\Item\Standard as Order;

Order::method( 'ordernumber', function( \Aimeos\MShop\Order\Item\Iface $order ) {
    return 'RE-' . date( 'Y' ) . '-' . $order-&gt;getInvoiceNumber();
} );
</code></pre>



<h2>Optimized performance</h2>



<p>Job controllers often iterate over a large result set and using the limit and offset values in <em>slice()</em> of the search filter cause long response times until the database found the requested slice. This can take several seconds if the whole result set is more than 100k rows.</p>



<p>For optimal performance, Aimeos offers a cursor based <em>iterate()</em> method in each manager now:</p>



<pre class="wp-block-code"><code>$manager = \Aimeos\MShop::create( $this-&gt;context(), 'product' );
$cursor = $manager-&gt;cursor( $manager-&gt;filter()-&gt;add( 'product.instock', '==', 1 ) );

while( $items = $manager-&gt;iterate( $cursor, &#91;'price'] ) ) {
    // process items
}</code></pre>



<p>The new <em>iterate()</em> method is most useful if you need to process a large result set completely.</p>



<p>Furthermore, the column order of all indexes in the Aimeos tables have been optimized to get the best performance for the most often used queries. Especially, MySQL uses more parts of the index now because it will use indexed columns in a combined index only as long as there&#8217;s no LIKE condition involved.</p>



<h2>SEO and 404 improvements</h2>



<p>To get the best results in Google, the schema.org markup in the list and detail views has been improved. It&#8217;s telling the search engine what&#8217;s the name, image, price and description of the product and contains now additional markup for the Google merchant listings. Furthermore, the breadcrumbs from the catalog stage component are now also machine readable for Google.</p>



<p>Before 2022.10, pages with no content or with invalid category/product IDs returned a page without content but no 404 error. This led to many pages without useful content being index by search engines. Now, all category list, product detail and CMS pages which are not available (any more) return a &#8220;404 not found&#8221; error.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://aimeos.org/tips/aimeos-2022-10-lts-release/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Aimeos 2022.07 release</title>
		<link>https://aimeos.org/tips/aimeos-2022-07-release/</link>
					<comments>https://aimeos.org/tips/aimeos-2022-07-release/#respond</comments>
		
		<dc:creator><![CDATA[aimeos]]></dc:creator>
		<pubDate>Wed, 27 Jul 2022 19:16:33 +0000</pubDate>
				<category><![CDATA[e-commerce]]></category>
		<category><![CDATA[Laravel]]></category>
		<category><![CDATA[Releases]]></category>
		<category><![CDATA[TYPO3]]></category>
		<guid isPermaLink="false">https://aimeos.org/tips/?p=948</guid>

					<description><![CDATA[The second stable release in 2022 contains new features and some changes/improvements for developers to keep an eye on. This version focuses on improvements for editors and on minimizing code developers have to write when creating new features in Aimeos.<span class="ellipsis">&#8230;</span><div class="read-more"><a href="https://aimeos.org/tips/aimeos-2022-07-release/">Read more <span class="screen-reader-text">Aimeos 2022.07 release</span><span class="meta-nav"> &#8250;</span></a></div><!-- end of .read-more -->]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><a href="https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big.jpg"><img width="1024" height="538" src="https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-1024x538.jpg" alt="" class="wp-image-887" srcset="https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-1024x538.jpg 1024w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-300x158.jpg 300w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-768x403.jpg 768w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-100x53.jpg 100w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-150x79.jpg 150w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-200x105.jpg 200w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-450x236.jpg 450w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-600x315.jpg 600w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-900x473.jpg 900w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>The second stable release in 2022 contains new features and some changes/improvements for developers to keep an eye on. This version focuses on improvements for editors and on minimizing code developers have to write when creating new features in Aimeos. The most important changes are:</p>



<ul><li>Bulk editing in admin backend</li><li>Customizable theme colors in backend</li><li>Uses Bootstrap icons instead of Fontawesome</li><li>No more need for factories</li><li>Scales images in media manager</li><li>More fractional quantity support</li><li>Improved debugging</li></ul>



<span id="more-948"></span>



<h2>Bulk editing</h2>



<div class="wp-block-image"><figure class="alignright size-large is-resized"><a href="https://aimeos.org/tips/wp-content/uploads/2022/07/admin-bulk-1.jpg"><img src="https://aimeos.org/tips/wp-content/uploads/2022/07/admin-bulk-1.jpg" alt="" class="wp-image-950" width="250" height="150" srcset="https://aimeos.org/tips/wp-content/uploads/2022/07/admin-bulk-1.jpg 1000w, https://aimeos.org/tips/wp-content/uploads/2022/07/admin-bulk-1-300x180.jpg 300w, https://aimeos.org/tips/wp-content/uploads/2022/07/admin-bulk-1-768x460.jpg 768w, https://aimeos.org/tips/wp-content/uploads/2022/07/admin-bulk-1-100x60.jpg 100w, https://aimeos.org/tips/wp-content/uploads/2022/07/admin-bulk-1-150x90.jpg 150w, https://aimeos.org/tips/wp-content/uploads/2022/07/admin-bulk-1-200x120.jpg 200w, https://aimeos.org/tips/wp-content/uploads/2022/07/admin-bulk-1-450x270.jpg 450w, https://aimeos.org/tips/wp-content/uploads/2022/07/admin-bulk-1-600x359.jpg 600w, https://aimeos.org/tips/wp-content/uploads/2022/07/admin-bulk-1-900x539.jpg 900w" sizes="(max-width: 250px) 100vw, 250px" /></a></figure></div>



<p>One of the features that can simplify life of editors a lot is editing the values of several items at once. The Aimeos admin interface it&#8217;s now possible to do exactly that, not only for single values like the status, but also for multiple values in parallel with one bulk edit request.</p>



<p>For all panels, at least the basic item values can be changed as long as they must be not unique. You can add your own bulk edit options by extending the list template of the panel and add the additional code to subparts or decorators if required.</p>



<h2>Customizable theme colors</h2>



<div class="wp-block-image"><figure class="alignleft size-large is-resized"><a href="https://aimeos.org/tips/wp-content/uploads/2022/07/admin-theme-options.png"><img src="https://aimeos.org/tips/wp-content/uploads/2022/07/admin-theme-options.png" alt="" class="wp-image-954" width="250" height="150" srcset="https://aimeos.org/tips/wp-content/uploads/2022/07/admin-theme-options.png 1000w, https://aimeos.org/tips/wp-content/uploads/2022/07/admin-theme-options-300x180.png 300w, https://aimeos.org/tips/wp-content/uploads/2022/07/admin-theme-options-768x461.png 768w, https://aimeos.org/tips/wp-content/uploads/2022/07/admin-theme-options-100x60.png 100w, https://aimeos.org/tips/wp-content/uploads/2022/07/admin-theme-options-150x90.png 150w, https://aimeos.org/tips/wp-content/uploads/2022/07/admin-theme-options-200x120.png 200w, https://aimeos.org/tips/wp-content/uploads/2022/07/admin-theme-options-450x270.png 450w, https://aimeos.org/tips/wp-content/uploads/2022/07/admin-theme-options-600x360.png 600w, https://aimeos.org/tips/wp-content/uploads/2022/07/admin-theme-options-900x540.png 900w" sizes="(max-width: 250px) 100vw, 250px" /></a></figure></div>



<p>Aimeos uses <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties">CSS variables</a> to define colors and several other important values which are used at several places in the CSS files. This allows you to overwrite these values in your custom CSS file to adapt the frontend design to your needs or to the corporate identity.</p>



<p>In Aimeos 2022.07, you can change those variables not only globally but also per site and theme if you have several themes installed. Thus, each customer/company can select the theme and the appropriate colors themselves for their needs which makes Aimeos a perfect fit for building ecommerce SaaS solutions.</p>



<h2>New Bootstrap icons</h2>



<div class="wp-block-image"><figure class="alignright size-large is-resized"><a href="https://aimeos.org/tips/wp-content/uploads/2022/07/admin-icons.jpg"><img src="https://aimeos.org/tips/wp-content/uploads/2022/07/admin-icons-1024x614.jpg" alt="" class="wp-image-958" width="256" height="154" srcset="https://aimeos.org/tips/wp-content/uploads/2022/07/admin-icons-1024x614.jpg 1024w, https://aimeos.org/tips/wp-content/uploads/2022/07/admin-icons-300x180.jpg 300w, https://aimeos.org/tips/wp-content/uploads/2022/07/admin-icons-768x461.jpg 768w, https://aimeos.org/tips/wp-content/uploads/2022/07/admin-icons-1536x922.jpg 1536w, https://aimeos.org/tips/wp-content/uploads/2022/07/admin-icons-100x60.jpg 100w, https://aimeos.org/tips/wp-content/uploads/2022/07/admin-icons-150x90.jpg 150w, https://aimeos.org/tips/wp-content/uploads/2022/07/admin-icons-200x120.jpg 200w, https://aimeos.org/tips/wp-content/uploads/2022/07/admin-icons-450x270.jpg 450w, https://aimeos.org/tips/wp-content/uploads/2022/07/admin-icons-600x360.jpg 600w, https://aimeos.org/tips/wp-content/uploads/2022/07/admin-icons-900x540.jpg 900w, https://aimeos.org/tips/wp-content/uploads/2022/07/admin-icons.jpg 2000w" sizes="(max-width: 256px) 100vw, 256px" /></a></figure></div>



<p>Up to now, Aimeos have used Fontawesome for all icons in frontend and backend. As new icons in Fontawesome are most often available only in their proprietary icon packages, there was time for choosing a new icon set. In the shop frontend, Fontawesome icons have been replaced in the 2022.04 release and now they are also gone in the admin backend.</p>



<p>Instead, Aimeos is using the <a href="https://icons.getbootstrap.com/">Bootstrap icons</a> now, giving the backend a cleaner, more lightweight look and feel that supports the colored theme available since 2021.</p>



<h2>Removed factories</h2>



<p>Each manager, controller and client required its own factory for creating a new object of that type. This lead to a lot of boilerplate code because the factories had mainly the same code and were just different in the used configuration options and the names of the classes. Beginning with the 2022.07 release, implementing a manager or controller for a new data domain or job as well as clients for the frontend or backend doesn&#8217;t require a supporting factory any more. </p>



<p>All objects are now created by the central factories only that have been available for a long time:</p>





<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="re0">$manager</span> <span class="sy0">=</span> \Aimeos\MShop<span class="sy0">::</span><span class="me2">create</span><span class="br0">&#40;</span> <span class="re0">$context</span><span class="sy0">,</span> <span class="st_h">'product'</span> <span class="br0">&#41;</span><span class="sy0">;</span>
<span class="re0">$cntl</span> <span class="sy0">=</span> \Aimeos\Controller\Frontend<span class="sy0">::</span><span class="me2">create</span><span class="br0">&#40;</span> <span class="re0">$context</span><span class="sy0">,</span> <span class="st_h">'catalog'</span> <span class="br0">&#41;</span><span class="sy0">;</span>
<span class="re0">$cntl</span> <span class="sy0">=</span> \Aimeos\Controller\Jobs<span class="sy0">::</span><span class="me2">create</span><span class="br0">&#40;</span> <span class="re0">$context</span><span class="sy0">,</span> <span class="re0">$aimeos</span><span class="sy0">,</span> <span class="st_h">'media/scale'</span> <span class="br0">&#41;</span><span class="sy0">;</span>
<span class="re0">$client</span> <span class="sy0">=</span> \Aimeos\Client\Html<span class="sy0">::</span><span class="me2">create</span><span class="br0">&#40;</span> <span class="re0">$context</span><span class="sy0">,</span> <span class="st_h">'catalog/detail'</span> <span class="br0">&#41;</span><span class="sy0">;</span>
<span class="re0">$admin</span> <span class="sy0">=</span> \Aimeos\Admin\JQAdm<span class="sy0">::</span><span class="me2">create</span><span class="br0">&#40;</span> <span class="re0">$context</span><span class="sy0">,</span> <span class="st_h">'product'</span> <span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>






<h2>Developer experience</h2>



<p>We strive for the best developer experience possible, so working with Aimeos should be as easy as possible. In that light, there are a couple of improvements available in this release.</p>



<p>Instead of using the common media contoller to work with image file, the media manager is now able to do that directly by its new <code>scale()</code> method. It offers the same features as the controller which is going to be cleansed next year.</p>



<p>Ordering fractional product quantities is supported since 2020.04 but now, you can also use fractional quantities for multi-level pricing (also known as block pricing). This gives you fine-grained control over pricing of products that can be bought in quantities of less than one or non-integer quantities.</p>



<p>For debugging purpose, all non-item objects where decorators can be added support a <code>classes()</code> method since this version. Thus, you can easily find out, which class has been used for the inner object and which decorators has been wrapped around, so identifying possible issues is now easier then before.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://aimeos.org/tips/aimeos-2022-07-release/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Aimeos 2022.04 release</title>
		<link>https://aimeos.org/tips/aimeos-2022-04-release/</link>
					<comments>https://aimeos.org/tips/aimeos-2022-04-release/#respond</comments>
		
		<dc:creator><![CDATA[aimeos]]></dc:creator>
		<pubDate>Tue, 03 May 2022 16:35:51 +0000</pubDate>
				<category><![CDATA[e-commerce]]></category>
		<category><![CDATA[Laravel]]></category>
		<category><![CDATA[Releases]]></category>
		<category><![CDATA[TYPO3]]></category>
		<guid isPermaLink="false">https://aimeos.org/tips/?p=926</guid>

					<description><![CDATA[The first stable release of the Aimeos e-commerce framework in 2022 contains a lot of exciting new features and changes compared to the last LTS version. Improving the developer experience further was one of the most important goals for this<span class="ellipsis">&#8230;</span><div class="read-more"><a href="https://aimeos.org/tips/aimeos-2022-04-release/">Read more <span class="screen-reader-text">Aimeos 2022.04 release</span><span class="meta-nav"> &#8250;</span></a></div><!-- end of .read-more -->]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full"><a href="https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big.jpg"><img width="1200" height="630" src="https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big.jpg" alt="" class="wp-image-887" srcset="https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big.jpg 1200w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-300x158.jpg 300w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-1024x538.jpg 1024w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-768x403.jpg 768w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-100x53.jpg 100w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-150x79.jpg 150w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-200x105.jpg 200w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-450x236.jpg 450w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-600x315.jpg 600w, https://aimeos.org/tips/wp-content/uploads/2021/10/aimeos-release-rect-big-900x473.jpg 900w" sizes="(max-width: 1200px) 100vw, 1200px" /></a></figure>



<p>The first stable release of the Aimeos e-commerce framework in 2022 contains a lot of exciting new features and changes compared to the last LTS version. Improving the developer experience further was one of the most important goals for this release besides more performance. All improvements are available for both, Laravel and TYPO3 and include:</p>



<ul><li>Laravel 9 LTS support</li><li>Integrated distribution based on Laravel 9</li><li>New Aimeos headless distribution built on Laravel 9</li><li>Radically simplified HTML client code base</li><li>Top scores of 100% for Google Lighthouse</li><li>Bootstrap 5 w/o jQuery</li><li>Upscheme migrations</li><li>Higher performance</li></ul>



<span id="more-926"></span>



<h2>Laravel 9</h2>



<div class="wp-block-image"><figure class="alignright size-full is-resized"><a href="https://aimeos.org/tips/wp-content/uploads/2022/05/laravel.svg"><img src="https://aimeos.org/tips/wp-content/uploads/2022/05/laravel.svg" alt="" class="wp-image-939" width="250" height="260"/></a></figure></div>



<p>Aimeos is the first full-featured e-commerce framework supporting the new Laravel 9 release with long term support (LTS) since beginning of April 2022. The biggest changes necessary for moving to the new Laravel release have been the migration from Swiftmailer to the Symfony mailer package and to FlySystem v3 for file access. </p>



<p>Together with the <a href="https://github.com/aimeos/aimeos-laravel">Aimeos Laravel 2022.04 package</a> which can be added to every existing Laravel 9 installation, the integrated <a href="https://github.com/aimeos/aimeos">Aimeos distribution</a> is now also based on Laravel 9 LTS. The distribution includes shop and CMS features and you can create a ready to use online shop. Simply execute this on the command line if PHP and the composer package manager are installed:</p>



<pre class="wp-block-code"><code>php composer create-project aimeos/aimeos myshop</code></pre>



<p>In addition, there&#8217;s now a Laravel 9 based <a href="https://github.com/aimeos/aimeos-headless">Aimeos headleass distribution</a> available too. This distribution is especially suited for building your own progressive web application based on ReactJS, VueJS or any other JS frontend framework. It includes the admin backend and the world-class <a href="https://aimeos.org/docs/latest/frontend/jsonapi/">Aimeos JSON REST API</a> but not the traditional HTML frontend. Also, it comes with the pre-configured <a href="https://jwt-auth.readthedocs.io/">JSON web token (JWT) package for Laravel</a> installed for authenticating frontend users.</p>



<h2>Developer experience</h2>



<p>We&#8217;ve put a lot of effort into improving the experience for developers, especially the need to write less boilerplate code when implementing own HTML clients. Thus, the necessary code for adding a new HTML component in the frontend is now reduced to the bare minimum. You only need to write the code you really need now and additional methods are not required any more because there are default implementations available for them.</p>



<p>Additionally, the directory structure has been simplified as much as possible. Methods have been shortend and the most important ones only consists of a single word now. A few examples of renamed methods are:</p>



<ul><li>getContext() -&gt; context()</li><li>getBody() -&gt; body()</li><li>addData() -&gt; data()</li><li>&#8230;</li></ul>



<p>For a full list of breaking changes compared to the 2021.10 LTS version, please have a look into the <a href="https://aimeos.org/docs/latest/changelog/2022.x/">Aimeos changelog </a>in the documentation.</p>



<h2>Google Lighthouse scores</h2>



<div class="wp-block-image"><figure class="alignright size-large is-resized"><a href="https://aimeos.org/tips/wp-content/uploads/2022/05/aimeos-lighthouse.png"><img src="https://aimeos.org/tips/wp-content/uploads/2022/05/aimeos-lighthouse-1024x538.png" alt="" class="wp-image-933" width="512" height="269" srcset="https://aimeos.org/tips/wp-content/uploads/2022/05/aimeos-lighthouse-1024x538.png 1024w, https://aimeos.org/tips/wp-content/uploads/2022/05/aimeos-lighthouse-300x158.png 300w, https://aimeos.org/tips/wp-content/uploads/2022/05/aimeos-lighthouse-768x403.png 768w, https://aimeos.org/tips/wp-content/uploads/2022/05/aimeos-lighthouse-100x53.png 100w, https://aimeos.org/tips/wp-content/uploads/2022/05/aimeos-lighthouse-150x79.png 150w, https://aimeos.org/tips/wp-content/uploads/2022/05/aimeos-lighthouse-200x105.png 200w, https://aimeos.org/tips/wp-content/uploads/2022/05/aimeos-lighthouse-450x236.png 450w, https://aimeos.org/tips/wp-content/uploads/2022/05/aimeos-lighthouse-600x315.png 600w, https://aimeos.org/tips/wp-content/uploads/2022/05/aimeos-lighthouse-900x473.png 900w, https://aimeos.org/tips/wp-content/uploads/2022/05/aimeos-lighthouse.png 1200w" sizes="(max-width: 512px) 100vw, 512px" /></a></figure></div>



<p>Aimeos already achieved top scores for desktops in the past but for mobile devices, the performance score reached a maximum value of 70. Several changes have increased the score to almost 100 now.</p>



<p>The most important change was to split up the three main Aimeos CSS and JS files into one CSS/JS file per component. Now, all <a href="https://github.com/aimeos/ai-client-html/tree/master/themes/client/html/default">CSS rules and Javascript code</a> that is used solely by e.g. the catalog detail component has been moved the their own catalog-detail.css and catalog-detail.js file. They are only sent to the browser if the catalog detail component is used at the requested page. Therefore, the browser doesn&#8217;t need to fetch and parse unused CSS/JS code any more which can shorten page loads drastically especially on slow devices/networks.</p>



<p>Furthermore, the used Slick slider contains a lot of JS code which is executed after the document is fully loaded. This increases the &#8220;time to interactive&#8221; until the users can interact with the page but it&#8217;s a crucial value for Google Lighthouse and heavily affects the score. Now, Aimeos uses <a href="https://swiffyslider.com/">SwiffySlider</a>, a slider based on CSS animations with only very little JS code. It&#8217;s feature-rich, supports touch out of the box and has very little negative effect on performance.</p>



<h2>Bootstrap / jQuery</h2>



<p>Bootstrap 5 has been used in the backend since 2021.04 and now, the default frontend theme has switched to Bootstrap 5 too. This allowed us to dump the jQuery library in favor of vanilla Javascript but that turned out to be much more code than before. Here&#8217;s a code example for jQuery and vanilly JS:</p>



<pre class="wp-block-code"><code>// jQuery
$('.class')

// vanilla JS
document.querySelectorAll('.class')</code></pre>



<p>Vanilly JS is rather inconvenient compared to the terse code you can write with jQuery. To get short code without the bloat of jQuery, we now use the <a href="https://github.com/fabiospampinato/cash">Cash DOM library</a> as instead. It offers the same syntax as jQuery for the &#8220;$&#8221; function and the collection methods but doesn&#8217;t contain the compatibility code for old browsers and uses native browser functionality instead. It also requried to use the new JS fetch API offered natively by modern browsers instead of the jQuery get()/post() methods.</p>



<h2>Upscheme migrations</h2>



<p>Since 2022.01, Aimeos uses <a href="https://upscheme.org">Upscheme</a> for migrating the database schema and the data itself. Compared to using Doctrine DBAL directly, this reduced the required lines of code drastically up to 80% and creating/updating a table now looks like:</p>



<pre class="wp-block-code"><code>$this-&gt;db( 'db-message' )-&gt;table( 'message', function( Table $t ) {
        $t-&gt;id();
        $t-&gt;type();
        $t-&gt;string( 'label' );
        $t-&gt;bool( 'status' );
        $t-&gt;meta();
} );</code></pre>



<p>All setup tasks are now located in the <code>setup</code> directory of the Aimeos core and the Aimeos extensions. There&#8217;s already an <a href="https://aimeos.org/tips/aimeos-2022-news/">Upscheme article </a>available which explains how to implement setup tasks in Aimeos 2022.x and later.</p>



<h2>Performance</h2>



<p>To increase performance of Aimeos further, the underlying data structure has been modified. Before, products has been referenced in the <code>mshop_catalog_list</code> table by categories and in the <code>mshop_supplier_list</code> table by suppliers. This required fetching categories and suppliers for products in two separate queries and especially for document-oriented storages like ElasticSearch, it enforced updating the documents two times.</p>



<p>Now, categories and suppliers are attached to products instead of the other way round, so only one additional query per domain is needed to fetch that data for the frontend. It&#8217;s now perfectly in line with document-oriented storages can reduce indexing time drastically.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://aimeos.org/tips/aimeos-2022-04-release/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>10 Essential Ecommerce Trends to Look for in 2020</title>
		<link>https://aimeos.org/tips/10-essential-ecommerce-trends-to-look-for-in-2020/</link>
					<comments>https://aimeos.org/tips/10-essential-ecommerce-trends-to-look-for-in-2020/#respond</comments>
		
		<dc:creator><![CDATA[Tati]]></dc:creator>
		<pubDate>Wed, 22 Jan 2020 16:39:38 +0000</pubDate>
				<category><![CDATA[e-commerce]]></category>
		<guid isPermaLink="false">https://aimeos.org/tips/?p=637</guid>

					<description><![CDATA[The first e-commerce transaction was in July of 1995. That was a book by Douglas Hofstadter named Fluid Concepts and Creative Analogies priced at $27.95 Fast forward a quarter of a century, and in 2019 the revenue stood at a<span class="ellipsis">&#8230;</span><div class="read-more"><a href="https://aimeos.org/tips/10-essential-ecommerce-trends-to-look-for-in-2020/">Read more <span class="screen-reader-text">10 Essential Ecommerce Trends to Look for in 2020</span><span class="meta-nav"> &#8250;</span></a></div><!-- end of .read-more -->]]></description>
										<content:encoded><![CDATA[
<p>The first e-commerce transaction was in July of 1995. That was a book by Douglas Hofstadter named Fluid Concepts and Creative Analogies priced at $27.95</p>



<p>Fast forward a quarter of a century, and in 2019 the revenue stood at a staggering 3.4 trillion dollars. It is projected to almost double and touch $6.5 trillion by 2023.</p>



<span id="more-637"></span>



<p>&nbsp;The reason for this growth is that online shopping is now commonplace and has really taken off due to convenience, coupled with highly secure payment options.</p>



<p>&nbsp;At the same time, the evolution and maturity of HTML 5 have meant high-quality landing pages that are visually compelling. Fast internet availability with most places in the world receiving at least megabit data connection has meant the pages can present the products more believably with high-res images.&nbsp;&nbsp;</p>



<p>The revolution in online commerce has meant that a fast-moving ecosystem has emerged. It is driven by a plethora of new technology that makes life easier for the owner.</p>



<p>Let us discuss some of the latest trends that would help you understand the e-commerce landscape.</p>



<h2>New and Emerging Trends in Ecommerce</h2>



<h3>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Small is beautiful</h3>



<figure class="wp-block-image size-large"><img width="900" height="761" src="https://aimeos.org/tips/wp-content/uploads/2020/05/01_Wix.jpg" alt="" class="wp-image-638" srcset="https://aimeos.org/tips/wp-content/uploads/2020/05/01_Wix.jpg 900w, https://aimeos.org/tips/wp-content/uploads/2020/05/01_Wix-300x254.jpg 300w, https://aimeos.org/tips/wp-content/uploads/2020/05/01_Wix-768x649.jpg 768w, https://aimeos.org/tips/wp-content/uploads/2020/05/01_Wix-100x85.jpg 100w, https://aimeos.org/tips/wp-content/uploads/2020/05/01_Wix-150x127.jpg 150w, https://aimeos.org/tips/wp-content/uploads/2020/05/01_Wix-200x169.jpg 200w, https://aimeos.org/tips/wp-content/uploads/2020/05/01_Wix-450x381.jpg 450w, https://aimeos.org/tips/wp-content/uploads/2020/05/01_Wix-600x507.jpg 600w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<p>The upward trajectory of e-commerce sales is unstoppable. But that does not mean it is only being served up by Amazon, Rakuten, and Flipkart alone.</p>



<p>Small businesses have flourished. In 2017 it was estimated that there are 500,000 small e-commerce businesses in the US alone. These had a turnover of less than a million dollars and offered niche products such as flowers and specialty items such as dark chocolates and truffles.</p>



<p>Going forward, most small brick and mortar stores would be adding an online arm for boosting revenue. What has facilitated this is the ease with which an online e-store can be set up with the help of such <a href="https://www.beautifullife.info/web-design/10-best-ecommerce-builders/">popular ecommerce platforms</a>, like Shopify and Wix.</p>



<h3>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; More use of augmented reality</h3>



<figure class="wp-block-image size-large"><img width="900" height="596" src="https://aimeos.org/tips/wp-content/uploads/2020/05/02_Obsess.jpg" alt="" class="wp-image-639" srcset="https://aimeos.org/tips/wp-content/uploads/2020/05/02_Obsess.jpg 900w, https://aimeos.org/tips/wp-content/uploads/2020/05/02_Obsess-300x199.jpg 300w, https://aimeos.org/tips/wp-content/uploads/2020/05/02_Obsess-768x509.jpg 768w, https://aimeos.org/tips/wp-content/uploads/2020/05/02_Obsess-100x66.jpg 100w, https://aimeos.org/tips/wp-content/uploads/2020/05/02_Obsess-150x99.jpg 150w, https://aimeos.org/tips/wp-content/uploads/2020/05/02_Obsess-200x132.jpg 200w, https://aimeos.org/tips/wp-content/uploads/2020/05/02_Obsess-450x298.jpg 450w, https://aimeos.org/tips/wp-content/uploads/2020/05/02_Obsess-600x397.jpg 600w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<p>Anecdotal evidence has shown that it is standardized products from graphics cards to cell phones that are most often purchased through online shopping. The buyer has already seen it in real life and is comfortable buying it online since they are familiar with the product.</p>



<p>This has meant a broad category of goods, especially clothes are not much favored by online shoppers. The use of augmented and virtual reality will soon make this discrimination a thing of the past.</p>



<p>With whole-body scans, you could upload an avatar into a virtual dressing room and try on as many dresses as you want without waiting for your turn. Levi&#8217;s and Tommy Hilfiger have incorporated a VR shopping platform known as Obsess to introduce a new paradigm to online shopping.&nbsp;</p>



<h3>3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; E-commerce through voice search</h3>



<figure class="wp-block-image size-large"><img width="900" height="687" src="https://aimeos.org/tips/wp-content/uploads/2020/05/03_Apple_Siri.jpg" alt="" class="wp-image-640" srcset="https://aimeos.org/tips/wp-content/uploads/2020/05/03_Apple_Siri.jpg 900w, https://aimeos.org/tips/wp-content/uploads/2020/05/03_Apple_Siri-300x229.jpg 300w, https://aimeos.org/tips/wp-content/uploads/2020/05/03_Apple_Siri-768x586.jpg 768w, https://aimeos.org/tips/wp-content/uploads/2020/05/03_Apple_Siri-100x76.jpg 100w, https://aimeos.org/tips/wp-content/uploads/2020/05/03_Apple_Siri-150x115.jpg 150w, https://aimeos.org/tips/wp-content/uploads/2020/05/03_Apple_Siri-200x153.jpg 200w, https://aimeos.org/tips/wp-content/uploads/2020/05/03_Apple_Siri-450x344.jpg 450w, https://aimeos.org/tips/wp-content/uploads/2020/05/03_Apple_Siri-600x458.jpg 600w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<p>Google Assistant and Apple Siri are becoming significant elements of e-commerce. Voice shopping is used by 11% of users in the US.</p>



<p>As buyers become more accustomed to using voice search for more than a playlist and weather, they would purchase through conversations.</p>



<p>This is a critical technology that cannot be ignored by e-commerce store owners. Though the backend evolution of software to match voice shopping still is not widely available, it is expected to change in the next two years as a large number of plugins become available.</p>



<p>Amazon has already leveraged Alexa for this purpose. It is going to be the next big thing in e-commerce.</p>



<h3>4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Green is great</h3>



<figure class="wp-block-image size-large"><img width="900" height="429" src="https://aimeos.org/tips/wp-content/uploads/2020/05/04_Green_is_great.jpg" alt="" class="wp-image-641" srcset="https://aimeos.org/tips/wp-content/uploads/2020/05/04_Green_is_great.jpg 900w, https://aimeos.org/tips/wp-content/uploads/2020/05/04_Green_is_great-300x143.jpg 300w, https://aimeos.org/tips/wp-content/uploads/2020/05/04_Green_is_great-768x366.jpg 768w, https://aimeos.org/tips/wp-content/uploads/2020/05/04_Green_is_great-100x48.jpg 100w, https://aimeos.org/tips/wp-content/uploads/2020/05/04_Green_is_great-150x72.jpg 150w, https://aimeos.org/tips/wp-content/uploads/2020/05/04_Green_is_great-200x95.jpg 200w, https://aimeos.org/tips/wp-content/uploads/2020/05/04_Green_is_great-450x215.jpg 450w, https://aimeos.org/tips/wp-content/uploads/2020/05/04_Green_is_great-600x286.jpg 600w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<p>Carbon footprint is no longer a buzzword. Either a business takes it seriously or perishes. With green campaigns on the rise and consumers turning eco-friendly, e-commerce also needs to wake up and smell the coffee.</p>



<p>This would mean creating business models that are as close to carbon neutral as possible.</p>



<p>Ecommerce is under increasing scrutiny due to its usage of packaging material that is not biodegradable. Bubble wrappers made of plastic are not approved by post-millennials who march to the tune of Greta Thunberg.</p>



<p>Also, employing hosting providers who use renewable sources of power and have green certification are bound to make a difference and create positivity among buyers.</p>



<h3>5.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Mobile shopping on the rise</h3>



<figure class="wp-block-image size-large"><img width="900" height="827" src="https://aimeos.org/tips/wp-content/uploads/2020/05/05_Mobile_shopping_on_the_rise.jpg" alt="" class="wp-image-642" srcset="https://aimeos.org/tips/wp-content/uploads/2020/05/05_Mobile_shopping_on_the_rise.jpg 900w, https://aimeos.org/tips/wp-content/uploads/2020/05/05_Mobile_shopping_on_the_rise-300x276.jpg 300w, https://aimeos.org/tips/wp-content/uploads/2020/05/05_Mobile_shopping_on_the_rise-768x706.jpg 768w, https://aimeos.org/tips/wp-content/uploads/2020/05/05_Mobile_shopping_on_the_rise-100x92.jpg 100w, https://aimeos.org/tips/wp-content/uploads/2020/05/05_Mobile_shopping_on_the_rise-150x138.jpg 150w, https://aimeos.org/tips/wp-content/uploads/2020/05/05_Mobile_shopping_on_the_rise-200x184.jpg 200w, https://aimeos.org/tips/wp-content/uploads/2020/05/05_Mobile_shopping_on_the_rise-450x414.jpg 450w, https://aimeos.org/tips/wp-content/uploads/2020/05/05_Mobile_shopping_on_the_rise-600x551.jpg 600w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<p>Statista has predicted that the rise of mobile e-commerce will continue and touch 70% by the end of next year.</p>



<p>To take advantage of this change, every e-commerce site needs to have a dedicated app that is well designed and can work seamlessly with their website.</p>



<p>It is not very difficult to create such an app because it acts as an extension to the existing website and does not need far-reaching backend coding.</p>



<p>What it does need is downloads, and that means persuading the customer to spare a few pixels of valuable smart device screen area.</p>



<p>This can be driven by app-only discounts coupled with classic app store optimization techniques.</p>



<h3>6.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Emergence of social commerce</h3>



<figure class="wp-block-image size-large"><img width="900" height="725" src="https://aimeos.org/tips/wp-content/uploads/2020/05/06_TikTok.jpg" alt="" class="wp-image-643" srcset="https://aimeos.org/tips/wp-content/uploads/2020/05/06_TikTok.jpg 900w, https://aimeos.org/tips/wp-content/uploads/2020/05/06_TikTok-300x242.jpg 300w, https://aimeos.org/tips/wp-content/uploads/2020/05/06_TikTok-768x619.jpg 768w, https://aimeos.org/tips/wp-content/uploads/2020/05/06_TikTok-100x81.jpg 100w, https://aimeos.org/tips/wp-content/uploads/2020/05/06_TikTok-150x121.jpg 150w, https://aimeos.org/tips/wp-content/uploads/2020/05/06_TikTok-200x161.jpg 200w, https://aimeos.org/tips/wp-content/uploads/2020/05/06_TikTok-450x363.jpg 450w, https://aimeos.org/tips/wp-content/uploads/2020/05/06_TikTok-600x483.jpg 600w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<p>Social media has brought a sea change to the way we know, think, and act. It was only a matter of time before it began to impact our buying behavior.</p>



<p>That is now present, though mostly on Facebook and Instagram for the past year.</p>



<p>25% of e-commerce store owners are selling through Facebook. Instagram Checkout is something similar that allows you to buy without ever leaving the app.</p>



<p>Why is this important? It is because people check social media several times a day, and if you want to push a product, it is ideal to use a social media platform.</p>



<p>Even TikTok, the new kid on the block, is allowing users to add links to e-commerce sites.</p>



<h3>7.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Google Shopping is the new goliath</h3>



<p>Google Shopping is not an online marketplace, but it is the 800 pound gorilla in the room, one that even a giant like Amazon cannot ignore.</p>



<p>While Google has till now stayed out of retail, it is the most quintessential technology that online shopping uses bar none.</p>



<p>You could avoid Shopify and use Magento, replace the marketing campaign on Facebook with Instagram, but Google is an unchanging constant.</p>



<p>Google Shopping is a market price comparison tool that shows up in every search you make. Formerly known as Froogle (Frugal Google), it has been around since 2002. But it is only recently that it has become a colossal influencer that you can&#8217;t ignore.</p>



<h3>8.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Finapps make an impact</h3>



<figure class="wp-block-image size-large"><img width="900" height="605" src="https://aimeos.org/tips/wp-content/uploads/2020/05/08_WeChat.jpg" alt="" class="wp-image-644" srcset="https://aimeos.org/tips/wp-content/uploads/2020/05/08_WeChat.jpg 900w, https://aimeos.org/tips/wp-content/uploads/2020/05/08_WeChat-300x202.jpg 300w, https://aimeos.org/tips/wp-content/uploads/2020/05/08_WeChat-768x516.jpg 768w, https://aimeos.org/tips/wp-content/uploads/2020/05/08_WeChat-100x67.jpg 100w, https://aimeos.org/tips/wp-content/uploads/2020/05/08_WeChat-150x101.jpg 150w, https://aimeos.org/tips/wp-content/uploads/2020/05/08_WeChat-200x134.jpg 200w, https://aimeos.org/tips/wp-content/uploads/2020/05/08_WeChat-450x303.jpg 450w, https://aimeos.org/tips/wp-content/uploads/2020/05/08_WeChat-600x403.jpg 600w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<p>Mobile payment apps are popular in Asia, where credit cards are yet to make an impact. Tencent and WeChat showed the way, and it was quickly copied by Square, Google Pay, and Apple Pay.</p>



<p>These speed up online commerce by allowing you to add a payment option on the checkout page. They are, in fact, safer than credit or prepaid cards and add layers of security that does not depend on SMS for verification.</p>



<p>Moreover, they allow QR code scanning as well as shopping from inside the app. they are particularly useful for allowing customers to earn loyalty points and pay safely from their home.</p>



<p>For phones that use NFC, they also add this functionality, thus making it necessary to physically carry a credit card.</p>



<h3>9.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AI for search</h3>



<p>The use of AI for product recommendations is growing. The understanding of buyer behavior from browsing habits and crunching the click habits is going to be a gamechanger.</p>



<p>It is not a simple suggestion for the latest CPU that you get when you buy a motherboard. It is a predictive behavior analysis that is making e-commerce shopping a whole new experience.</p>



<p>The recommendation engines no longer only show five more types of dress style because you hovered on one. They show you the colors that you like.</p>



<p>It is this type of advanced assistance that gives AI the capability to enhance the shopping experience.</p>



<h3>10.&nbsp; Chatbots that are informative</h3>



<figure class="wp-block-image size-large"><img width="900" height="738" src="https://aimeos.org/tips/wp-content/uploads/2020/05/10_Chatbots.jpg" alt="" class="wp-image-645" srcset="https://aimeos.org/tips/wp-content/uploads/2020/05/10_Chatbots.jpg 900w, https://aimeos.org/tips/wp-content/uploads/2020/05/10_Chatbots-300x246.jpg 300w, https://aimeos.org/tips/wp-content/uploads/2020/05/10_Chatbots-768x630.jpg 768w, https://aimeos.org/tips/wp-content/uploads/2020/05/10_Chatbots-100x82.jpg 100w, https://aimeos.org/tips/wp-content/uploads/2020/05/10_Chatbots-150x123.jpg 150w, https://aimeos.org/tips/wp-content/uploads/2020/05/10_Chatbots-200x164.jpg 200w, https://aimeos.org/tips/wp-content/uploads/2020/05/10_Chatbots-450x369.jpg 450w, https://aimeos.org/tips/wp-content/uploads/2020/05/10_Chatbots-600x492.jpg 600w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<p>Have you noted how chatbots are becoming more human? They are almost as good as a human sales assistant in a physical store. You could say that they are also less annoying because you could shut them down at any time without fear of offending.</p>



<p>Some studies have shown that 60% of shoppers like to have a chatbot reply to basic queries.</p>



<p>Improved customer engagement is a key sales driver, and they work 24&#215;7 without feeling exhausted. What&#8217;s more, the queries can be directly linked to analytics, and thus better offers can be presented suited to customer expectations.</p>



<h2>Last Words</h2>



<p>Ecommerce trends are evolving so rapidly that it is hard to keep pace with them. That is why we have presented the ten most significant for the current year. Of course, you may not need to adopt all of them at the same time since quite a few are technologies that are yet to mature. But it is a clear indication of the road ahead and what it will look like.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://aimeos.org/tips/10-essential-ecommerce-trends-to-look-for-in-2020/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>GraphQL vs JSON:API for e-commerce</title>
		<link>https://aimeos.org/tips/graphql-vs-jsonapi-for-ecommerce/</link>
					<comments>https://aimeos.org/tips/graphql-vs-jsonapi-for-ecommerce/#respond</comments>
		
		<dc:creator><![CDATA[aimeos]]></dc:creator>
		<pubDate>Wed, 11 Sep 2019 08:12:17 +0000</pubDate>
				<category><![CDATA[e-commerce]]></category>
		<guid isPermaLink="false">https://aimeos.org/tips/?p=381</guid>

					<description><![CDATA[GraphQL is hot these days! More and more GraphQL APIs appear and especially in the Javascript / NodeJS scene, GraphQL is extremely popular. As progressive web applications using GraphQL are also on the rise (not only in the e-commerce area),<span class="ellipsis">&#8230;</span><div class="read-more"><a href="https://aimeos.org/tips/graphql-vs-jsonapi-for-ecommerce/">Read more <span class="screen-reader-text">GraphQL vs JSON:API for e-commerce</span><span class="meta-nav"> &#8250;</span></a></div><!-- end of .read-more -->]]></description>
										<content:encoded><![CDATA[<p><a href="https://aimeos.org/tips/wp-content/uploads/2019/09/graphql-jsonapi2-1.jpg"><img class="aligncenter wp-image-400 size-full" src="https://aimeos.org/tips/wp-content/uploads/2019/09/graphql-jsonapi2-1.jpg" alt="" width="1000" height="600" srcset="https://aimeos.org/tips/wp-content/uploads/2019/09/graphql-jsonapi2-1.jpg 1000w, https://aimeos.org/tips/wp-content/uploads/2019/09/graphql-jsonapi2-1-300x180.jpg 300w, https://aimeos.org/tips/wp-content/uploads/2019/09/graphql-jsonapi2-1-768x461.jpg 768w, https://aimeos.org/tips/wp-content/uploads/2019/09/graphql-jsonapi2-1-100x60.jpg 100w, https://aimeos.org/tips/wp-content/uploads/2019/09/graphql-jsonapi2-1-150x90.jpg 150w, https://aimeos.org/tips/wp-content/uploads/2019/09/graphql-jsonapi2-1-200x120.jpg 200w, https://aimeos.org/tips/wp-content/uploads/2019/09/graphql-jsonapi2-1-450x270.jpg 450w, https://aimeos.org/tips/wp-content/uploads/2019/09/graphql-jsonapi2-1-600x360.jpg 600w, https://aimeos.org/tips/wp-content/uploads/2019/09/graphql-jsonapi2-1-900x540.jpg 900w" sizes="(max-width: 1000px) 100vw, 1000px" /></a></p>
<p>GraphQL is hot these days! More and more GraphQL APIs appear and especially in the Javascript / NodeJS scene, GraphQL is extremely popular. As progressive web applications using GraphQL are also on the rise (not only in the e-commerce area), we compare how GraphQL and the JSON REST API standard fits for e-commerce applications based on our experience in these areas:</p>
<ul>
<li>Ease of implementation and use</li>
<li>Performance and scalability</li>
<li>Reading and writing data</li>
</ul>
<p><span id="more-381"></span></p>
<h2>GraphQL</h2>
<p><a href="https://graphql.org"><img class="alignright wp-image-402 size-thumbnail" src="https://aimeos.org/tips/wp-content/uploads/2019/09/grapgql-150x150.png" alt="" width="150" height="150" srcset="https://aimeos.org/tips/wp-content/uploads/2019/09/grapgql-150x150.png 150w, https://aimeos.org/tips/wp-content/uploads/2019/09/grapgql-300x300.png 300w, https://aimeos.org/tips/wp-content/uploads/2019/09/grapgql-100x100.png 100w, https://aimeos.org/tips/wp-content/uploads/2019/09/grapgql-200x200.png 200w, https://aimeos.org/tips/wp-content/uploads/2019/09/grapgql.png 400w" sizes="(max-width: 150px) 100vw, 150px" /></a>The <a href="https://graphql.org/">GraphQL specification</a> was invented by Facebook because they need to retrieve data efficiently by web clients to render their frontend. Facebook accounts and their relationships to other accounts are a graph they need to query, hence the name &#8220;Graph Query Language&#8221;. The clients should be able to do complex queries while minimizing the data in the response to the really required properties only.</p>
<h3>Advantages</h3>
<h4>One API for all client requirements</h4>
<p style="padding-left: 30px;">There&#8217;s only one API endpoint that can handle all client requests. Internally, the requests for different resources may be routed to different APIs so a GraphQL server can act as a director for different services. For the clients this may be easier to work with.</p>
<h4>Efficient requests including related resources</h4>
<p style="padding-left: 30px;">With one request, you can not only retrieve the data of the requested resource. Instead, you can also fetch all related resources that are referenced by the requested resource entries. This reduces the number of required requests to retrieve all data to exactly one.</p>
<h4>Retrieve only the data you really need</h4>
<p style="padding-left: 30px;">For each resource and related resource, only the required properties can be retrieved. Thus, the amount of data transfered over the network is reduced to the absolute minium that is required by the client.</p>
<h4>Writing several (related) resources at once is possible</h4>
<p style="padding-left: 30px;">Creating and updating resources and related resources can be done in only one request. This means, saving data isn&#8217;t limited by the network but only by the server processing the requests.</p>
<h4>Exact schema definition is provided by the server</h4>
<p style="padding-left: 30px;">A GraphQL API requires a schema that exactly specifies the resources, its properties and types as well as what queries can consist of. This enables built-in introspection and schema validation on the client and server.</p>
<pre lang="graphql" class="prism language-graphql" style="padding-left: 30px;"><span class="type-def"><span class="keyword">type</span> Product <span class="fields"><span class="punctuation">{</span>
  <span class="attr-name">id</span><span class="punctuation">:</span> <span class="type-name">ID
</span>  label: String
  status: Boolean
<span class="punctuation">}</span></span></span>
</pre>
<h4>Well defined query language</h4>
<p style="padding-left: 30px;">The specification tells you exactly how queries look like, independent of the concrete GraphQL API implementation:</p>
<pre lang="graphql" style="padding-left: 30px;">{
  product(code: '1000.001') {
    label
    attribute(type: 'variant') {
      id
      name
  }
}</pre>
<h4>Client side libraries for working with the API available</h4>
<p style="padding-left: 30px;">There are Javascript libraries available for working with GraphQL APIs easily, the most widely used one is <a href="https://www.apollographql.com/">Apollo</a>. Contrary to the simple JSON:API this is absolutely necessary because its hard to implement a GraphQL API by hand.</p>
<h3>Disadvantages</h3>
<h4>No caching by CDNs or proxies possible</h4>
<p style="padding-left: 30px;">All requests are sent as POST request in the body of the request. This makes it impossible for intermediate caches to store those requests and return the response immediately. Thus, scaling a GraphQL API is only possible by adding more servers.</p>
<h4>Optimizing queries can be hard because they are not fixed</h4>
<p style="padding-left: 30px;">Each client can send arbitrary queries to the GraphQL server. They can be different in the fields requested or related resources as well as the used filters so it&#8217;s difficult to create indexes for the database tables.</p>
<h4>Clients can build deep and complex queries overloading the server</h4>
<p style="padding-left: 30px;">As servers don&#8217;t implement a fixed list of queries, malicious clients can build deeply nested queries that doesn&#8217;t use the indexes of the database. This can lead to a denial of service attack easily.</p>
<h4>Client and server are thighly coupled how they work together</h4>
<p style="padding-left: 30px;">Whenever an item in the backend is refactored or its properties renamed, all clients consuming the GraphQL API has to be updated. To avoid that you need to keep the original data structure forever and only adding new items and properties but that will bloat your backend code of the time.</p>
<h4>Application state and what&#8217;s possible next must be programmed into the client</h4>
<p style="padding-left: 30px;">Clients can use all kinds of queries to fetch data from the server but they don&#8217;t get any information what they should do with that data. Developers must hard-code the next steps in the clients, e.g. how to fetch the data for the next list page or how to add the product to the basket.</p>
<h4>Query language adds more complexity</h4>
<p style="padding-left: 30px;">The GraphQL query language is more complex than using a simple URL with some parameters. Instead, you have to write a complex query even if you only want to retrieve all products with their names, e.g.</p>
<pre lang="bash" style="padding-left: 30px;"><code>curl -X POST -H 'Content-Type: application/json'
    -d '{ "query": "{ products { name } }" }'
    http://localhost/graphql</code></pre>
<h4>Client side caching necessary which may introduce additional points of failure</h4>
<p style="padding-left: 30px;">Because caching by CDNs and proxies is impossible, the GraphQL server only has limited resources and network latency is bad for the user experience, you have to implement caching in the client. This can add another source of problems to your software stack that&#8217;s hard to debug.</p>
<h2>&#x200d;JSON:API</h2>
<p><a href="https://jsonapi.org/"><img class="alignright wp-image-405 size-medium" src="https://aimeos.org/tips/wp-content/uploads/2019/09/jsonapi-2-300x100.png" alt="" width="300" height="100" srcset="https://aimeos.org/tips/wp-content/uploads/2019/09/jsonapi-2.png 300w, https://aimeos.org/tips/wp-content/uploads/2019/09/jsonapi-2-100x33.png 100w, https://aimeos.org/tips/wp-content/uploads/2019/09/jsonapi-2-150x50.png 150w, https://aimeos.org/tips/wp-content/uploads/2019/09/jsonapi-2-200x67.png 200w" sizes="(max-width: 300px) 100vw, 300px" /></a>The <a href="https://jsonapi.org/">JSON:API standard</a> was invented by Ember.js, one of the first major Javascript frameworks. It&#8217;s main goal is to reduce the amount of client code required for using a server API that communicates in a well defined way. Implementation on the client and server side should be easy and use existing best practices.</p>
<h3>Advantages</h3>
<h4>Efficient requests which can include related resources</h4>
<p style="padding-left: 30px;">Usually, one one request is needed to fetch all required data from the server because you can use the <em>&#8220;include=text,price,media&#8221;</em> parameter to fetch all listed resources too.</p>
<h4>Fetch only required data</h4>
<p style="padding-left: 30px;">You can pass the &#8220;fields&#8221; parameter to fetch only the properties you need from the server just like you can using GraphQL. This also works for related resources:</p>
<pre style="padding-left: 30px;">http://localhost/jsonapi/product?fields[product]=id,label&amp;fields[text]=langid,content</pre>
<h4>Excellent caching by CDNs, proxies and browsers</h4>
<p style="padding-left: 30px;">REST APIs perfectly fit to the current internet infrastructure. The browser and intermediate servers automatically cache responses so services offered via a JSON:API can scale indefinitely for read heavy applications.</p>
<h4>Client and server are decoupled for independent evolution</h4>
<p style="padding-left: 30px;">Request don&#8217;t map directly to the entries in the (NoSQL) database, so you can change the backend and data structures while still maintaining compatibility to clients implementing a previous version of the API.</p>
<h4>Application state can be managed by the server</h4>
<p style="padding-left: 30px;">The JSON:API standard includes a <em>&#8220;links&#8221;</em> section which contains links for the next possible actions like moving forward to the next page or for adding a product to the basket. Thus, the client doesn&#8217;t have to know how to build them on its own.</p>
<pre lang="json" style="padding-left: 30px;"><span class="st0">"links"</span><span class="sy0">:</span> <span class="br0">{</span>
    <span class="st0">"self"</span><span class="sy0">:</span> <span class="st0">"http:<span class="es0">\/</span><span class="es0">\/</span>localhost<span class="es0">\/</span>jsonapi<span class="es0">\/</span>product<span class="es0">\/</span>13"</span><span class="sy0">,
</span>    <span class="st0">"next"</span><span class="sy0">:</span> <span class="st0">"http:<span class="es0">\/</span><span class="es0">\/</span>localhost<span class="es0">\/</span>jsonapi<span class="es0">\/</span>product<span class="es0">\/</span>21"</span><span class="sy0">,</span>
    <span class="st0">"basket<span class="es0">\/</span>product"</span><span class="sy0">:</span> <span class="st0">"http:<span class="es0">\/</span><span class="es0">\/</span>localhost<span class="es0">\/</span>jsonapi<span class="es0">\/</span>basket<span class="es0">\/</span>default<span class="es0">\/</span>product"</span>
<span class="br0">}</span>
</pre>
<h4>Queries can be optimized for the required use cases</h4>
<p style="padding-left: 30px;">In contrast to GraphQL, you have to think about the use cases for your JSON:API upfront because clients can&#8217;t ask for something there&#8217;s no resource endpoint for. In terms of optimization possibilities that&#8217;s a huge advantage because you know what kind of queries you can expect.</p>
<h4>Interacting with the API is plain simple</h4>
<p style="padding-left: 30px;">There&#8217;s no query language involved for simple requests and returning the list of products with their name is only a matter for using:</p>
<pre style="padding-left: 30px;"><code>curl http://localhost/jsonapi/product?fields=label</code></pre>
<h3>Disadvantages</h3>
<h4>Only single resource (database record) can be updated at once</h4>
<p style="padding-left: 30px;">Write heavy applications where also related resources must be updated (think about e.g. an administration interface) are not suited well for a REST API. You can only update one resource per request which can require multiple requests necessary if you want to save data.</p>
<h4>No specification of the query language so every implementation has it&#8217;s own</h4>
<p style="padding-left: 30px;">There&#8217;s a <em>&#8220;filter=&#8230;&#8221;</em> parameter defined in the JSON:API standard but not the query language behind due to different requirements. This leads to custom implementations for each API but client developers may need to handle several query languages in one client.</p>
<h4>No schema returned by default, has to be documented elsewhere</h4>
<p style="padding-left: 30px;">For the returned items and properties, there doesn&#8217;t exist a common schema description including the data types. Developers need to know what the server will return.</p>
<h4>Schema validation must be done yourself</h4>
<p style="padding-left: 30px;">The APIs implementing the JSON:API standard are not self descriptive and you need to manually verify that the request and response matches the documented properties and types.</p>
<h2>Conclusion</h2>
<p>There are some good reasons why to use GraphQL but it&#8217;s not a replacement for all JSON REST API as some are stating with &#8220;GraphQL is taking over APIs&#8221;.</p>
<p>The best use case for <strong>GraphQL</strong> according to our observations is for <strong>internal APIs</strong> where the tight coupling between client and server isn&#8217;t a big problem. They can also act perfectly as a <strong>single endpoint</strong> for clients. Futhermore, you should think about <strong>access control</strong> to the GraphQL API because it&#8217;s inherently prone to denial of service attacks. The <strong>lack of scalability</strong> is a good reason to hide it from the public too.</p>
<p>APIs based on the <strong>JSON:API</strong> standard are better suited &#8220;for the wild&#8221; than GraphQL according to the current state. They enable <strong>clients and servers to evolve independently</strong> and can also reduce code in the clients. When leveraging CDNs and set cache timeouts correctly, JSON:APIs can <strong>scale infinitely</strong>. Only for applications with many <strong>writes to several resources</strong> at once they are not suited well.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://aimeos.org/tips/graphql-vs-jsonapi-for-ecommerce/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Responsive emails with MJML in Aimeos</title>
		<link>https://aimeos.org/tips/responsive-emails-with-mjml-in-aimeos/</link>
					<comments>https://aimeos.org/tips/responsive-emails-with-mjml-in-aimeos/#comments</comments>
		
		<dc:creator><![CDATA[aimeos]]></dc:creator>
		<pubDate>Tue, 18 Jun 2019 07:59:22 +0000</pubDate>
				<category><![CDATA[e-commerce]]></category>
		<guid isPermaLink="false">https://aimeos.org/tips/?p=304</guid>

					<description><![CDATA[Every online shop needs to send e-mails and so the Aimeos e-commerce framework does. They are still the best option to confirm the order and tell customers about changes in the delivery and payment status. Nevertheless, even nowadays, creating appealing<span class="ellipsis">&#8230;</span><div class="read-more"><a href="https://aimeos.org/tips/responsive-emails-with-mjml-in-aimeos/">Read more <span class="screen-reader-text">Responsive emails with MJML in Aimeos</span><span class="meta-nav"> &#8250;</span></a></div><!-- end of .read-more -->]]></description>
										<content:encoded><![CDATA[<p><a href="https://aimeos.org/tips/wp-content/uploads/2019/06/responsive-emails.jpg"><img class="aligncenter size-full wp-image-311" src="https://aimeos.org/tips/wp-content/uploads/2019/06/responsive-emails.jpg" alt="" width="1000" height="604" srcset="https://aimeos.org/tips/wp-content/uploads/2019/06/responsive-emails.jpg 1000w, https://aimeos.org/tips/wp-content/uploads/2019/06/responsive-emails-300x181.jpg 300w, https://aimeos.org/tips/wp-content/uploads/2019/06/responsive-emails-768x464.jpg 768w, https://aimeos.org/tips/wp-content/uploads/2019/06/responsive-emails-100x60.jpg 100w, https://aimeos.org/tips/wp-content/uploads/2019/06/responsive-emails-150x91.jpg 150w, https://aimeos.org/tips/wp-content/uploads/2019/06/responsive-emails-200x121.jpg 200w, https://aimeos.org/tips/wp-content/uploads/2019/06/responsive-emails-450x272.jpg 450w, https://aimeos.org/tips/wp-content/uploads/2019/06/responsive-emails-600x362.jpg 600w, https://aimeos.org/tips/wp-content/uploads/2019/06/responsive-emails-900x544.jpg 900w" sizes="(max-width: 1000px) 100vw, 1000px" /></a></p>
<p>Every online shop needs to send e-mails and so the <a href="https://aimeos.org/">Aimeos e-commerce framework</a> does. They are still the best option to confirm the order and tell customers about changes in the delivery and payment status. Nevertheless, even nowadays, creating appealing e-mails for different devices is hard stuff! Software seem to be from year 2000 when <a href="https://templates.mailchimp.com/resources/email-client-css-support/">comparing support for HTML5 and CSS in e-mail clients</a>.</p>
<p>Most of the time, support is limited for security reasons which is a good thing because compared to web sites you have to visit actively, everyone can send you e-mails. But often, simple features aren&#8217;t implemented since more than ten years or are buggy and therefore unusable. Outlook falls into the later category and it seems that Microsoft wants to punish us forever!</p>
<p><span id="more-304"></span></p>
<h2>Response e-mail frameworks</h2>
<p>Thus, the only way to get e-mails that look similar (not equal) in most clients is using tables and a limited set of inline CSS. Because it&#8217;s hard to write the code that is most compatible by hand, there are two frameworks that makes life easier: <a href="https://mjml.io/">MJML</a> and <a href="https://foundation.zurb.com/emails.html">Foundation for Emails</a>. Both offer a simple syntax and generate the HTML/CSS code for you.</p>
<p><a href="https://aimeos.org/tips/wp-content/uploads/2019/06/mjml-foundation.jpg"><img class="size-full wp-image-305 aligncenter" src="https://aimeos.org/tips/wp-content/uploads/2019/06/mjml-foundation.jpg" alt="" width="600" height="300" srcset="https://aimeos.org/tips/wp-content/uploads/2019/06/mjml-foundation.jpg 600w, https://aimeos.org/tips/wp-content/uploads/2019/06/mjml-foundation-300x150.jpg 300w, https://aimeos.org/tips/wp-content/uploads/2019/06/mjml-foundation-100x50.jpg 100w, https://aimeos.org/tips/wp-content/uploads/2019/06/mjml-foundation-150x75.jpg 150w, https://aimeos.org/tips/wp-content/uploads/2019/06/mjml-foundation-200x100.jpg 200w, https://aimeos.org/tips/wp-content/uploads/2019/06/mjml-foundation-450x225.jpg 450w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>
<p>The biggest difference between both is that Foundation is more complex than MJML. Using Foundation, you have to wrangle with several libraries and build tools at the same time while with MJML, you can generate the output with a tool of your choice (NPM, Visual Studio Code plugin or even using a web service). The ease of use and the choice of the build chain were the crucial factors for using MJML in <a href="https://aimeos.org/">Aimeos</a>.</p>
<h2>MJML structure</h2>
<p>MJML has a simple XML-based syntax and uses its own tags for describing the content. The custom tags will get translated into HTML and inline CSS while generating the output. A basic MJML document looks like:</p>
<pre lang="xml" class="highlight xml tab-xml"><code>&lt;mjml&gt;
  &lt;mj-head&gt;
    ...
  &lt;/mj-head&gt;
  &lt;mj-body&gt;
    ...
  &lt;/mj-body&gt;
&lt;/mjml&gt;</code></pre>
<p>This corresponds to the standard HTML structure. Building a reponsive grid with MJML is rather simple: You need the &#8220;&lt;mj-section&gt;&#8221; and &#8220;&lt;mj-column&gt;&#8221; tags and and create any number of columns simply by using &#8220;&lt;mj-column&gt;&#8221; multiple times. This would create a responsive grid with three columns:</p>
<pre lang="xml" class="highlight xml tab-xml"><code>&lt;mjml&gt;
  &lt;mj-body&gt;
    &lt;mj-section&gt;
      &lt;mj-column&gt;column one&lt;/mj-column&gt;
      &lt;mj-column&gt;​column two&lt;/mj-column&gt;
      &lt;mj-column&gt;column three&lt;/mj-column&gt;
    &lt;/mj-section&gt;
  &lt;/mj-body&gt;
&lt;/mjml&gt;</code></pre>
<p><strong>Note:</strong> You can&#8217;t add any additional tags between the &#8220;&lt;mj-section&gt;&#8221; and &#8220;&lt;mj-column&gt;&#8221; tags! Furthermore, most of the MJML tags are only allowed within the &#8220;&lt;mj-column&gt;&#8221; tags.</p>
<h2>Basic MJML tags</h2>
<p>The &#8220;&lt;mj-head&gt;&#8221; can contain two tags often used: &#8220;&lt;mj-font&gt;&#8221; to use a specific font and &#8220;&lt;mj-style&gt;&#8221; for CSS styles that will be part of the e-mail. If &#8220;&lt;mj-style&gt;&#8221; contains the &#8220;inline&#8221; attribute, the styles will be copied to the style attributes of the HTML tags directly instead of referencing them from the head section. This is especially useful for the Gmail App, which discards &#8220;&lt;style&gt;&#8221; tags in e-mails depdending on the account type.</p>
<pre lang="xml" class="highlight xml tab-xml"><code>&lt;mjml&gt;
  &lt;mj-head&gt;
    &lt;mj-font name="Noto" href="https://fonts.googleapis.com/css?family=Noto Sans" /&gt;
    &lt;mj-style inline="inline"&gt;
      .logo img { max-width: 300px; margin: auto }
      .blue-text h1 { color: #103050; text-align: center }
      .btn td, .btn a { color: #fff; background-color: #ba9a5a !important; }
    &lt;/mj-style&gt;
  &lt;/mj-head&gt;
  &lt;mj-body&gt;
    &lt;mj-section&gt;
      &lt;mj-column&gt;
        &lt;mj-image css-class="logo" src="https://aimeos.org/fileadmin/logos/aimeos.png" /&gt;
        &lt;mj-text css-class="blue-text" font-family="Noto, Arial"&gt;
          &lt;h1&gt;Hello World!&lt;/h1&gt;
        &lt;/mj-text&gt;
        &lt;mj-button css-class="btn" href="https://example.com/"&gt;Click me&lt;/mj-button&gt;
      &lt;/mj-column&gt;
    &lt;/mj-section&gt;
  &lt;/mj-body&gt;
&lt;/mjml&gt;</code></pre>
<p>Referenced images using &#8220;&lt;mj-image&gt;&#8221; are responsive by default which means their width automatically adapts to the available size of the container. E-mail clients often don&#8217;t show images by default for security reasons. To circumvent that to a certain degree, you can add the images to the e-mail as attachments referenced by the <a href="https://blog.mailtrap.io/embedding-images-in-html-email-have-the-rules-changed/">content ID (CID) technique or by using base64 encoded inline images</a>.</p>
<p>CSS classes are assigned to the MJML tags with the &#8220;css-class&#8221; attriubutes. If you have a look at the &#8220;&lt;mj-style&gt;&#8221; section, the selector for the CSS class isn&#8217;t the same as the CSS class itself, e.g. &#8220;.logo img&#8221; is used for css-class=&#8221;logo&#8221;. This is due to the generated HTML by MJML, which is something like that for the &#8220;&lt;mj-image&gt;&#8221; tag:</p>
<pre lang="highlight html tab-xml"><code>&lt;table border="0" cellpadding="0" cellspacing="0" role="presentation"
  style="border-collapse:collapse;border-spacing:0px;"&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style="width:550px;"&gt;
        &lt;img height="auto"
          src="https://aimeos.org/fileadmin/logos/logo-aimeos-blue.png"
          style="max-width: 300px; margin: auto; border: 0; display: block;
            outline: none; text-decoration: none; height: auto;
            width: 100%;" width="550"&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;</code></pre>
<p>Also, MJML adds some default inline styles to almost all generated HTML. If your application application supports themes like Aimeos does, this is a bit cumbersome because you have to enforce some styles with the &#8220;!important&#8221; modifier.</p>
<h2>Using tables in MJML</h2>
<p>For tabular data like the products bought with image, name, quantity and price for each line, HTML tables are still the best option. MJML offers the &#8220;&lt;mj-table&gt;&#8221; tag to add an HTML table. Within the &#8220;&lt;mj-table&gt;&#8221; tags, you must use the standard HTML tags like &#8220;&lt;tr&gt;&#8221;, &#8220;&lt;th&gt;&#8221; and &#8220;&lt;td&gt;&#8221;:</p>
<pre class="highlight xml tab-xml"><code><span class="nt">&lt;mjml&gt;</span>
  <span class="nt">&lt;mj-head&gt;</span>
    <span class="nt">&lt;mj-style&gt;</span>
      .order img { width: 100%; max-width: 100px; height: auto }
    <span class="nt">&lt;/mj-style&gt;</span>
  <span class="nt">&lt;/mj-head&gt;</span>
  <span class="nt">&lt;mj-body&gt;</span>
    <span class="nt">&lt;mj-section&gt;</span>
      <span class="nt">&lt;mj-column&gt;</span>
        <span class="nt">&lt;mj-table css-class="order"&gt;</span>
          <span class="nt">&lt;tr</span><span class="nt">&gt;</span>
            <span class="nt">&lt;th</span><span class="nt">&gt;</span><span class="nt">&lt;/th&gt;</span>
            <span class="nt">&lt;th</span><span class="nt">&gt;</span>Name<span class="nt">&lt;/th&gt;</span>
            <span class="nt">&lt;th</span><span class="nt">&gt;</span>Qty<span class="nt">&lt;/th&gt;</span>
            <span class="nt">&lt;th</span><span class="nt">&gt;</span>Price<span class="nt">&lt;/th&gt;</span>
          <span class="nt">&lt;/tr&gt;</span>
          <span class="nt">&lt;tr&gt;</span>
            <span class="nt">&lt;td</span><span class="nt">&gt;&lt;img width="100" src="https://demo.aimeos.org/media/1.jpg"/&gt;</span><span class="nt">&lt;/td&gt;</span>
            <span class="nt">&lt;td</span><span class="nt">&gt;</span>Demo product<span class="nt">&lt;/td&gt;</span>
            <span class="nt">&lt;td</span><span class="nt">&gt;</span>1<span class="nt">&lt;/td&gt;</span>
            <span class="nt">&lt;td</span><span class="nt">&gt;</span>100,00 €<span class="nt">&lt;/td&gt;</span>
          <span class="nt">&lt;/tr&gt;</span>
        <span class="nt">&lt;/mj-table&gt;</span>
      <span class="nt">&lt;/mj-column&gt;</span>
    <span class="nt">&lt;/mj-section&gt;</span>
  <span class="nt">&lt;/mj-body&gt;</span>
<span class="nt">&lt;/mjml&gt;</span></code></pre>
<p><strong>Note:</strong> Within the &#8220;&lt;mj-table&gt;&#8221; tags, you are totally on your own! No MJML tags are parsed within the table and you have to care about the responsiveness of images yourself for example. Some e-mail clients like Outlook doesn&#8217;t use width styles for images and for those, you should add a &#8220;width&#8221; attribute to the &#8220;img&#8221; tag directly.</p>
<h2>MJML to HTML</h2>
<p>As no e-mail client can parse MJML directly, you have to generate the HTML code before sending the e-mails to the recipients. There are several ways where you can choose from depending on your environment and preferences:</p>
<ul>
<li>Pasting your MJML code into the online form: <a href="https://mjml.io/try-it-live">https://mjml.io/try-it-live</a></li>
<li>Sending the code to the MJML API for processing: <a href="https://mjml.io/api">https://mjml.io/api</a></li>
<li>Using NPM in your build chain: <a href="https://mjml.io/documentation/#installation">https://mjml.io/documentation/#installation</a></li>
<li>Download the MJML extension for your editor: <a href="https://mjml.io/documentation/#tooling">https://mjml.io/documentation/#tooling</a></li>
<li>Install MJML for Visual Studio Code: <a href="https://github.com/attilabuti/vscode-mjml">https://github.com/attilabuti/vscode-mjml</a></li>
</ul>
<p>All of those will create an HTML document which you can add to your e-mails as HTML part. You can use placeholders or even PHP code within the MJML tags because it won&#8217;t get touched. That way, you can process the generated output and insert personalization or add dynamic content. You can have a look at the <a href="https://github.com/aimeos/ai-client-html/tree/master/client/html/templates/email">Aimeos MJML templates and the generated code</a>.</p>
<p><a style="display: block; width: 16em; margin: auto; text-align: center; padding: 0.75em; font-weight: bold; background-color: #ba9a5a; border: solid 1px #ba9a5a; color: #fff;" href="https://aimeos.org">More about Aimeos</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://aimeos.org/tips/responsive-emails-with-mjml-in-aimeos/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
