24.11.0
🎉🎉 Welcome to a new release of Maho, the ecommerce platform you already know! 🎉🎉
Remember our last release two months ago?
Well, time must be an illusion since we managed to pack two years' worth of changes (about 300 commits) into this new one!
For this reason we had to condense these release notes to spare you from a document that would make Lord of the Rings seem short.
🚨⚠ DISCLAIMER ⚠🚨
Maho is a big shift in the M1 paradigm so please, for the time being, handle it with care. As much as we'd love to see production stores going live on Maho, be sure to test everything very carefully.
Before starting, a word about the future
We had to remove a major new feature from this release, the global attribute editor, Justin worked extremely hard on this (and not only on this ❤️), but the task is huge, it will bring a whole new set of features to our platform, and it simply requires a bit more time. We're confident that it will be ready for Maho 25.01 along with many other revolutionary changes, we aim for Maho 25.01 to have the first prototypejs-free frontend since the beginning of the M1 platform!
This massive effort requires all the help possible - please consider joining our sponsorship program. It will make all the difference in the world!
Maho rocks! 🚀
https://mahocommerce.com
https://demo.mahocommerce.com
Foundation
Maho 24.9.0 is based on OpenMage 21.0-beta2 + all the patches merged in the main branch up to 24th Nov 2024
Visible from outside: changes to the frontend theme

- Completely removed jQuery,
- All icons are now SVG
- Converted all font-size to rem for enhanced accessibility
- Removed google font and replaced it with Tailwind default font rule
- Removed elevateZoom and rewrote basic zoom functionality in vanilla js
- Removed slideshow js and rewrote them in modern CSS + basic vanilla JS
- Avoided content layout shift
- Removed modernizr.js
- Removed imagesloaded.js completely and rewrote funcionality with modern js, added lazy load to image gallery in product view
And many, many other minor improvements.
🚀 New features and major improvements
Added back/forward cache support for CMS/category/product pages

This will allow extreme performance improvements when using the back/forward buttons, better pagespeed scores, and could lead to big bandwidth/load saving on your infrastructure. (read more)
Added support for AVIF images

AVIF is a modern, open-source image format that offers superior compression efficiency while maintaining excellent image quality. It's particularly important because it supports advanced features like HDR, wide color gamut, and transparency, necessary to highlight the characteristics of specific type of products on your store. (example)
Added possibility to set a file format (default WebP) for all images processing (resize, thumbnails etc)

Convert all your catalog to WebP with a single click. (read more)
SEO: Added automatic hreflang tag

This starts an effort to bring a complete set of SEO related tools to Maho. (read more)
From now on, multi store website will be linked across languages so that search engines will understand the language correlation between pages, out of the box.
Removed Mage_Persistent and improved cookie handling

Remember the "remember me"? Well, this change removed the ancient Mage_Persistent module, consolidate and merged all templates, cleaned up a lot of code and completely rewrote the cookie management for session, you may not see the difference with your naked eye, but you will know it will work so much better.
Replaced js calendar by Mihai Bazon with flatpickr with lazyload

The javascript library used for dates in all M1 installation was extremely old (last release was almost 20 years ago!) and it had to go, and it's now replaced with a lightweight, moderd looking and modernly coded one called flatpickr.
Massive improvements to Maho's autoloaders
The idea at the base of Maho itself was the new set of autoloaders that allow all of the platform to live inside composer's vendor
folder, like any other modern framework would and that was never possible in the Magento world. With this PR Justin took this concept and made it 10 times better.
Improved jstranslator.xml capabilities

Jstranslator gives you the possibility to add translation strings to frontend's javascript code, without having to write any javascript. It's a great feature but it needed some love. This new version separates frontend/backend strings, allows to define a string relatively to a module, scope or if a specific javascript file is included in the target page. (read more)
Added option to redirect to register page during checkout
When your customer registration form is too long, it's probably not the best to have it inside the checkout procedure, with this new option you can decide that your users will be redirected to the customer registration page if they choose to register during the checkout phase. Simple, but effective.
Added MahoCLI command to create a new command

When developing an ecommerce project, you will find yourself developing some quick command line scripts, you could already integrate them into Maho CLI but today this is easier than ever with ./maho create-command
.
Introduced ./maho health-check
and migrate to Maho guide

You asked us for a migration guide and we delivered, but we thought we needed something more, that's why we created ./maho health-check
, which will help you keep your project in good health, but also will ./maho health-check
that a project could have.
❗ Major changes you need to know
- Products count is now disabled by default in layered navigation
- Removed CSS/JS merging, useless since HTTP2
- Merged openmage backend theme into the default one, which is now the only one available
- Rewrote a huge amount of
phtml
files removing prototypejs - Added support for Maho-specific install scripts (#38)
- Added JsonSerializable interface to Varien_Object
🛡️ Security improvements
- Fixed CodeQL warning in js/mage/adminhtml/wysiwyg/tinymce/setup.js
- Fixed CodeQL warning in js/mage/adminhtml/uploader/instance.js
- Fixed CodeQL warning in js/mage/adminhtml/sales/packaging.js
- Fixed CodeQL warning in validate-url
- Fixed CodeQL warning in insertAdvice() in js/validation.js
🐛 Minor bugfix, improvements and changes
- Added new events:
controller_action_predispatch_$routeName_$controllerName
andcontroller_action_postdispatch_$routeName_$controllerName
- Added catalog/tags/enable_adding_tags_in_frontend configuration, disabled by default
- API: added
maho_version
to deprecatedmagentoInfo
method, also addedmahoInfo
method (#45) - Removed Array.From from prototype.js since it is a penalization by lighthouse and not necessary
- A bug with extjs tree and missing blank image was solved
- Fixed a bug with Varien_Profiler and added MB information about used memory
- Minor refactor of public/api.php
- Used Mage_Core_Model_App_Area constants instead of string literals
- Removed map files since there are no SCSS anymore
- Removed possibility to disable "Use Web Server Rewrites" from backend
- Fixed a bug with year formatting in Mage_Customer_Block_Widget_Dob
- Added
setTranslationHelper
method toMage_Core_Block_Abstract
- Moved minicart.js to skin/frontend/rwd/default/js since it is used only by RWD
- Added border-collapse:collapse to "Additional Information" table in product view, for a better visual layout
- Simplified product grid templates removing first/lass CSS classes and made RWD template responsive
- Rewrote truncateOptions() javascript function without prototypejs
- Backend: default font is now TailWind's default font-family directive, removed OpenSans files
- Backend: Removed ajax-loader.gif and ajax-loader-tr.gif and migrated to loading.svg
- Moved logo.svg and loading.svg to the skin folder of the base theme
- Frontend: removed ajax-loader.gif and opc-ajax-loader.gif in favor of loading.svg
- RWD: Removed unused class "no-js"
🧹 Cleanup and deprecations
- Removed unused jscolor
- Removed all "inheritDoc" from docblocks
- Directpost does not exist anymore
- Removed unneeded line
- Removed deprecated controllers
- PHP 8.2: Added #[\SensitiveParameter] to all the codebase
- Removed unused file
app/design/adminhtml/default/default/template/system/info.phtml
(#33) - Removed old, almost unused and undocumented lib/Unserialize
- Removed unused Magento_Profiler (Varien_Profiler is the used one)
- Removed unused public/js/varien/menu.js
- Removed deprecated protected variable
- Removed deprecated Mage_Cms_Helper_Data::isSwfDisabled()
- Removed all ECG related lines
- Removed unused and unclear validate-clean-url
- Removed unused methods from js/varien/form.js
- Removed deprecated class Varien_File_Uploader_Image
- Removed deprecated code from Varien_File_Uploader
- Backend removed deprecated and unused hash.js
- Removed all deprecated phtml files
- Removed unused file skin/frontend/base/default/js/giftmessage.js
- Removed deprecated template/page/html/top.links.phtml
- Removed deprecated Mage_Page_Block_Html_Toplinks
- Removed unused skin/adminhtml/default/default/custom.css
- Removed deprecated Mage_Adminhtml_Model_System_Config_Source_Shipping_Allowedmethods
- Removed lib/Magento since almost completely unused. Migrated Magento_Db_Adapter_Pdo_Mysql to Varien_Db_Adapter_Pdo_Mysql.
- RWD: removed useless font-family rules
- RWD: Removed outdated default social_icons
- Removed unused folder skin/frontend/rwd/default/scss
- RWD: removed ununsed file default/css/scaffold-forms.css
- RWD: removed ununsed stock pictures from default/images/media
🛠️ Technical updates
- All dependencies are updated to the last available version
- Updated to PHPStan 2.0.2
- PHPStan: added result cache
- Moved rector to dev-main waiting for official support for PHPStan2
- Synced required PHP extensions from composer.json to Mage/Install/etc/install.xml
- Updated CodeQL configuration reflecting new project structure
- Added workflow to avoid committing \r line ending
- Bumped pelago/emogrifier 7.3.0
- Bumped htmlpurifier to 4.18.0
- Better configuration for PHPCS
- Replaced CRLF with LF line separators
- Moved composer patches to Maho repository
Full Changelog: 24.9.0...24.11.0