Aimeos 2023.10 LTS release

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:

  • Laravel 10 distributions
  • TYPO3 12 support
  • Kubernetes/Serverless support
  • Create managers easily
  • Merged order and order base
  • Stored basket panel
  • DB-based translations for type names
  • VueJS and GraphQL in backend
Read more Aimeos 2023.10 LTS release

AI revolution in eCommerce

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 in seconds and in almost the same quality. This is similar to how DeepL, a translation tool based on machine learning, changed the translation industry before.

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 Aimeos, 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.

Read more AI revolution in eCommerce

Aimeos 2022.10 LTS release

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
  • Headless Laravel distribution
  • Direct editing of marketplace items
  • Dynamic supplier filter
  • Customers can save baskets
  • Invoice numbers per site
  • Optimized performance
  • SEO and 404 improvements
Read more Aimeos 2022.10 LTS release

Aimeos 2022.07 release

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:

  • Bulk editing in admin backend
  • Customizable theme colors in backend
  • Uses Bootstrap icons instead of Fontawesome
  • No more need for factories
  • Scales images in media manager
  • More fractional quantity support
  • Improved debugging
Read more Aimeos 2022.07 release

Aimeos 2022.04 release

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:

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

Aimeos 2022 news

Since 2022.01 beta, the Aimeos core is using Upscheme for updating the database schema and migrating data between new releases. Upscheme is composer package for schema management based on Doctrine DBAL which offers an easy to use API. You can also integrate Upscheme it in your own application easily and this article explains the differences and how you can write migrations with only a few lines of code 🙂

Read more Aimeos 2022 news

Aimeos 2021.10 LTS release

The 2021.10 release of the Aimeos e-commerce framework with long term support is available for Laravel, Symfony and TYPO3. It contains a lot of small features repeatedly requested by developers and users and which improve user experience, usability for editors and security. The most important improvements are:

  • Laravel 8 distribution and TYPO3 11
  • Radius search and maps
  • “Price on request” feature
  • Product video support
  • Improved backend usability
  • Custom invoice numbers
  • Warehouse management
  • PDF with SEPA QR-code and images
  • Strict CSP and other improvements
Read more Aimeos 2021.10 LTS release

Aimeos 2021.07 release

The second stable release in 2021 of the Aimeos e-commerce framework is now available. The fantastic new default theme is the most notable change for sure but this release contains many more improvements, especially for multi-site environements. The most important points are:

  • New default theme
  • New settings panel in backend
  • Send order notification emails
  • Extended order management
  • Multi-site improvements
  • Improved security
  • Upgrade notes
Read more Aimeos 2021.07 release

Aimeos 2021.04 release

Aimeos release

The first stable release of the Aimeos e-commerce framework in 2021 contains some major improvements in the front-end and back-end as well as several breaking changes compared to the last LTS version. The new administration interface is the most visible of these improvements for sure:

  • New admin backend incl. dark mode
  • RTL support in frontend and admin backend
  • Full mobile optimization
  • New supplier detail component
  • Rule based dynamic pricing
  • Extensible CMS extension
  • Simplified configuration
Read more Aimeos 2021.04 release

PHP: Array > Map 2.0

The new 2.0 major release of the PHP map package is available which includes new methods and support for working with multi-dimensional arrays in an easy way. Additionally, it comes with the best documentation ever so you find everything you need quickly!

Instead of applying independent PHP functions on arrays, use the PHP Map object to stream array data through several methods to transform, order and shorten its elements until the result exactly conforms to your requirements, for example:

$data = [
    ['name' => 'Tom', 'dep' => 'Dev', 'qty' => 30],
    ['name' => 'Bob', 'dep' => 'Sales', 'qty' => 50],
    ['name' => 'Joe', 'dep' => 'Dev', 'qty' => 10]
];
 
// get the person with the highest quantity in "Dev" department
$name = map( $data )
    ->groupBy( 'dep' )->only( 'Dev' )
    ->flat( 1 )->col( 'name', 'qty' )
    ->ksort()->last();

To get the result in one statement is easier and much more elegant than the traditional way in PHP. The PHP Map object is perfectly suited to work on result sets returned by relational databases. You can transform them until you get a collection that exactly fits for your template generating the HTML for the frontend.

The PHP Map package combines the best from Laravel and CakePHP collections, jQuery, Backbone.js, and Lodash in an easy to use PHP package for every PHP application.

What’s new in PHP Map 2.0

One of the biggest new feature is the ability to pass a path of keys as parameter to several PHP Map methods to work on nested arrays directly. Instead of writing own code for diving into multi-dimensional arrays, you can now use the available methods to e.g. get a value by using:

map( ['key' => ['to' => ['value' => 'yes!']]] )
    ->get( 'key/to/value' ); // returns "yes!"

This also works for more advanced methods like col() to reindex an array by using a nested key:

$data = [
    ['name' => 'Tom', 'addr' => ['zip' => '12AB', 'city' => 'NY']],
    ['name' => 'Bob', 'addr' => ['zip' => '23WD', 'city' => 'LA']]
];
 
$map = map( $data )->col( 'name', 'addr/zip' );
// ['12AB' => 'Tom', '23WD' => 'Bob']

By default, a dot (“/”) is used as seperator between the array key names but you can change that for the current map using the sep() method:

$map = map( $data )->sep( '.' )->col( 'name', 'addr.zip' );

If you want to use another seperator in all new PHP Map objects (existing ones will keep their separator), you can change the delimiter globally with the delimiter() method:

Map::delimiter( ',' );

It also returns the delimiter used before if you want to revert the used delimiter later in your code.

Breaking changes in PHP Map 2.0

The new major version contains a few breaking changes to avoid potential problems that came up in the past. You won’t be affected by most of them but you should have a look to prevent unexpected behaviour.

New slash separator

The most important change affects parameter values including slashes because they are now treated as path separators for nested arrays.

$data = [
    'item/id' => 1,
    'item/code' => 'test',
    'item/name' => 'Test'
];
 
map( $data )->col( 'item/code', 'item/id' );
 
// 1.x
[1 => 'test']
 
// 2.x
[]
// use instead
map( $data )->sep( '.' )->col( 'item/code', 'item/id' );

jQuery style method calls

You can call methods of objects in a map like this:

// MyClass implements setStatus() (returning $this) and
// getCode() (initialized by constructor)
 
$map = Map::from( [
    'a' => new MyClass( 'x' ),
    'b' => new MyClass( 'y' )
] );
$map->setStatus( 1 )->getCode()->toArray();

Before, the objects had been checked if they really implement the setStatus() and getCode() methods.

To avoid returning an empty map if the method name is wrong or the called method is catched by the __call() magic method, this isn’t the case any more. If the method isn’t implemented by all objects, PHP generates a fatal error now for better error tracing.

Second equals() parameter

The $assoc parameter of the equals() method to compare keys too has been removed and now, you must use the is() method instead:

// 1.x
map( ['one' => 1] )->equals( ['one' => 1], true );
 
// 2.x
map( ['one' => 1] )->is( ['one' => 1] );

New find() argument

The find() method now accepts a default value or exception object as second argument and the $reverse argument is at the third position now:

// 1.x
Map::from( ['a', 'c', 'e'] )->find( function( $value, $key ) {
    return $value >= 'b';
}, true );
 
// 2.x
Map::from( ['a', 'c', 'e'] )->find( function( $value, $key ) {
    return $value >= 'b';
}, null, true );

Semantic change in groupBy()

Before, items have been grouped by the key string itself if the key passed to groupBy() didn’t exist. To offer easier checking and sorting of the keys, an empty string is used as key now:

Map::from( [
    10 => ['aid' => 123, 'code' => 'x-abc'],
] )->groupBy( 'xid' );
 
// 1.x
[
    'xid' => [
        10 => ['aid' => 123, 'code' => 'x-abc']
    ]
]
 
// 2.x
[
    '' => [
        10 => ['aid' => 123, 'code' => 'x-abc']
    ]
]

Semantic change in offsetExists()

The offsetExists() method uses isset() instead of array_key_exists() now to be in line with typical PHP behavior. Thus, keys with NULL values are now treated differently:

$m = Map::from( ['foo' => null] );
 
// 1.x
isset( $m['foo'] ); // true
 
// 2.x
isset( $m['foo'] ); // false

Renamed split() to explode()

To avoid conflicts with the Laravel split() method and to be in line with the PHP explode() method, the static Map::split() method has been renamed to Map::explode(). Also, the argument order has changed:

// 1.x
Map::split( 'a,b,c', ',' );
 
// 2.x
Map::explode( ',', 'a,b,c' );