
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
GraphQL admin API
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.
A GraphQL mutation to store a new product and return its ID looks like:
mutation {
saveProduct(input: {
code: "test-graphql",
lists: {
media: [{
type: "test"
item: {
type: "download",
url: "https://local/test.jpg",
preview: "https://local/test-small.jpg"
property: [{
type: "copyright",
value: "Aimeos"
}]
}
}],
text: [{
type: "name",
item: {
type: "name",
languageid: "de",
content: "Some text"
}
}]
},
property: [{
type: "prodcode",
value: "abcd-1234"
}]
}) {
id
}
}
Headless Laravel distribution
The Aimeos headless distribution based on Laravel 9 is now stable and available with long term support too. It’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.
Get the Aimeos headless distribution
Edit marketplace items directly
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!
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.
Dynamic supplier filter
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’s not necessary to preload a limited set of items.
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.
Customers can save baskets
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.
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.
Invoice numbers per site
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.
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 ordernumber marco:
use \Aimeos\MShop\Order\Item\Standard as Order;
Order::method( 'ordernumber', function( \Aimeos\MShop\Order\Item\Iface $order ) {
return 'RE-' . date( 'Y' ) . '-' . $order->getInvoiceNumber();
} );
Optimized performance
Job controllers often iterate over a large result set and using the limit and offset values in slice() 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.
For optimal performance, Aimeos offers a cursor based iterate() method in each manager now:
$manager = \Aimeos\MShop::create( $this->context(), 'product' );
$cursor = $manager->cursor( $manager->filter()->add( 'product.instock', '==', 1 ) );
while( $items = $manager->iterate( $cursor, ['price'] ) ) {
// process items
}
The new iterate() method is most useful if you need to process a large result set completely.
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’s no LIKE condition involved.
SEO and 404 improvements
To get the best results in Google, the schema.org markup in the list and detail views has been improved. It’s telling the search engine what’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.
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 “404 not found” error.
Undoubtedly one of the best Laravel packages!