The goal of this beta1 release is to give module and theme developers the possibility to port their products to the new OXID eShop core.
The OXID eShop V6.0 Beta1 release includes OXID eShop core (CE/PE/EE), the Flow theme and the Azure theme. It does not contain any other modules like PayPal or Payone.
The target group of the release is developers (software engineers, software architects and the like) of the community and developers of the OXID partners. The OXID eShop V6.0 Beta1 release is not ready for production.
The OXID eShop installation process was changed. Information on the installation procedure can be found here.
The installation will be done via Composer, we will not ship any packages (ZIP files) anymore. In order to access the PE/EE repositories for Composer, we set up a so-called SATIS server. Partners will have to provide login credentials to access the PE/EE repositories.
The code for PE and EE will not be encrypted any more. The PE and EE sources will be found in the vendor/oxid-esales directory.
System Requirements changes
We noticed that hosters tend to upgrade their servers to new stable versions much earlier than they did in the past. The advantages for applications running on those servers are many. New versions tend to be faster, better and the support period for bug fixes and security upgrades increases. The OXID eShop V6 follows this trend. The most important changes:
- PHP 5.6 or 7.0
- MySQL 5.5 or 5.7. We do not recommend to use MySQL 5.6 because we found some issues with EE. See this blog post for details.
No ZendLoader is required as OXID eShop V6 will no longer be encoded.
For detailed information regarding the systems requirements, see here.
No Encoding OXID eShop PE and EE
From OXID eShop Version 6, the OXID eShop will no longer be encoded.
Namespaces were introduced into the OXID eShop. The CE, PE and EE Editions hereby each have their own base namespace.
Virtual namespace classmap
VirtualNamespaceClassMap.php has been introduced for OXID eShop classes. Using a virtual namespaced class allows writing code only once for all editions. At runtime it is checked, which eShop Edition is currently active and the correct eShop class for the edition is instantiated.
This means, that from now on it is possible for developers to use/reference the correct edition of an OXID eShop class without specifying the edition. For example the virtual namespace class ‘OxidEsales\Eshop\Application\Model\Article’ is automatically mapped (VirtualNamespaceClassMap) to the correct edition’s class.
For backwards compatibility we still support use of the deprecated oxarticle and similar classes.
The oxSomething classes that can be extended by a module are mapped (classMap) to the related virtual namespace classes.
Using Namespaces in Modules
A module can use its own custom namespace(s). In order to do this, the namespace just needs to be registered, no module autoloader is required,
A module may of course also reference the OXID eShop namespaces, the namespaces of other modules and the namespaces of external libraries.
Adapting Modules to Namespaces
When adapting modules to namespaces, the classMap.php and the VirtualNamespaceClassMap.php can be consulted to identify the correct namespaced OXID eShop class to be used to replace the reference to the old
Dependency Handling with Composer
Composer is the de facto standard for handling dependencies in PHP. The OXID eShop V6 uses Composer to handle all its dependencies. Hereby the term compilation is used to mean the set of all components included in an OXID eShop release. Themes, modules, demo data, CE Core, PE Core, EE Core etc. are now each separate components with their own version number. These components all must adher to strict semantic versioning. The compilation is defined by its metapackage, which lists all components and their version numbers, which are included in an OXID eShop release.
The OXID eShop V6 will be UTF-8 only in code, data and DB. This improves support for internationalisation. In order to achieve this, some further changes will be made for the final release. In order to support upgrade to the V6, a conversion script for OXID eShop DB tables will be provided by OXID.
Unify Code and DB for all Editions
The code and DB was unified between editions. Hereby: the EE code builds on the PE code which in turn builds on the CE code – similary for tables, fields and field definitions.
The advantages are that module writers no longer need to differentiate between editions when writing code for all editions and that upgrades from CE to PE to EE are now much simpler.
InnoDB in all OXID eShop Tables
InnoDB offers many operational and application advantages such as row locking instead of table locking for writes, improved performance or better replication.
All remaining OXID eShop MyISAM tables have been converted to InnoDB tables.
Doctrine DBAL as Database Access Layer
ADOdb lite has been replaced by Doctrine DBAL as database access layer, the de facto standard in PHP.
Upgrade from CE to PE to EE
The possibility was added to easily upgrade the shop from CE to PE/EE via migrations script.
Be aware that the migration scripts drop some tables/fields. Detailed information will follow in a separate post.
The OXID eShop V6.0 Beta1 release comes with Azure and Flow theme. Flow theme has some bug fixes regarding to the flow theme version used for OXID eShop 5.3. All V6.0. template changes were introduced in parallel for Azure and Flow. Keep in mind that Flow is now the default theme and that at some point in the future, Azure will be removed and no longer be supported.
Features & Improvements
- Varnish cache flush only for active sub-shop
By default the eShop flushes the cache independently from the host so that the
cache will always be flushed from all sub-shops even if they have different domains.
Now we added the possibility to clean the cache only for the active sub-shop by setting the
following config option: $this->reverseProxyFlushStrategy = 1 in config.inc.php.
Important: This feature shouldn’t be used when sub-shops use inherited products.
- Multiple theme support for modules: New feature
The possibility for a module to support several themes was introduced.
- Theme settings: New feature
With pull request #381 the new feature – “Theme Settings” was added. File theme.php now supports a section ‘settings’ where settings can be added analog to how it is done in the module’s metadata.php file.
- “Newsletters” in EE: New feature
Newsletters feature was moved from CE and PE to EE. To do this new table oxnewsletter was introduced.
- Hidden articles: New feature
With pull request #259 the new feature “Hidden Articles” was added. Now by checking the “hidden article” checkbox in the article edit page the article will not be displayed in frontend categories, but still will be available via direct link for search engines.
- Explicit sorting for discounts: New feature
There is a new field OXSORT in the table oxdiscounts, which defines the order in which discounts are applied to products and the basket. The order matters in case of combining absolute and percentage discounts on a product resp. in the basket. Before introducing this feature the order was defined implicitly, now the shop administrators can define the order. The eShop updater will migrate existing discounts by adding an explicit sorting. Existing discounts will have the same order after migration as before.
- Threshold for sending offline warning e-mails: New feature
An offline warning was sent to the eShop admin every time the maintenance page is shown. As there is an auto refresh of 60 seconds now on the maintenance page, this e-mail would have been sent every 60 seconds. A threshold has been introduced and the offline warning is not re-sent before this threshold is reached.
There is a new config option $this->offlineWarningInterval = 60 * 5 in config.inc.php which defines the time interval in seconds warnings are sent during the shop is offline. Defaults to 5 minutes.
- The possibility to save Sessions to the eShop application database was removed.
This was a feature of ADOdb Lite which was replaced by Doctrine DBAL. A blog post about session handling and storage in OXID eShop V6.0 and can be found on oxidforge.
- The possibility to log MySQL queries was removed. There were some issues with this feature (such as performance). As the functionality was based on ADOdb Lite, which was replaced by Doctrine DBAL, it was not reimplemented for now.
- OXID eShop is now installed in UTF8 mode. The possibility to chose a different ISO mode was removed from the setup wizard.
- composer.json has been removed from /modules directory. The call to registerModuleDependenciesAutoload method and the method itself has been removed as well. From now on if developers want some kind of run-time dependencies they must update /composer.json instead.
- The DynPages are not available for the OXID eShop V6.0 Beta1 anymore.
- Shop features that were extracted into contrib modules
While unifying the OXID eShop Editions, we encapsulated functionality that was scattered in different places in the code and sometimes differed between editions and moved this functionality to modules. The functionality of these modules is, in our evaluation, not often used or there are already good extensions in existence that offer similar solutions. These extracted modules are contrib modules and underly a community support process.
With the OXID eShop 6.0 stable release latest, the github repositories holding those features will be made public so that the OXID community can contribute (hence the name contrib module) with feedback and improvements.
- Lexware export
- Order administration
- Shop Statistics
- Trusted shops – more information on this trusted shops page
New File Structure
The architecture of OXID eShop is constantly growing, so the structure of the application needs constant updates to make it more clear and understandable. Please find below the major changes in structure and architecture:
# Former file structure: /eshop /application /models /controllers /components /widgets /views /translations /core # core directory contained also the third party libraries /modules /out /tmp /...
# File structure for new major version: /eshop /Application /views /translations /modules /out /tmp /... /vendor /... /oxid-esales /oxid-esales /oxideshop-ce /oxideshop-pe /oxideshop-ee /...
The goal was to have independent components inside the eShop managed by composer. Those components are now located inside the vendor directory. We renamed/uppercased some directory names to make use of PSR-4 autoloading support in composer.
- The storage engine for all tables was switched from MyISAM to InnoDB.
Please keep in mind that with InnoDB as storage engine, data fetched from the DB without explicit order by parameter might come in a different order than with the former storage Engine MyISAM. Thus it is possible, that data will now be fetched from Database in a different order than it was inserted. This can affect the order data is displayed in the shop frontend. See for example stackoverflow.
- The following tables do not exist any more (see section about contrib modules for details)
- New table in Enterprise Edition:
- All shopids are purely numeric from now on. Most of the tables in OXID eShop CE/PE editions had field `OXSHOPID` with entry ‘oxbaseshop’. Now we changed it to int(11) with default value 1.
- Some fields were removed that belonged to features that were moved to contrib modules.
- Very few new fields were introduced:
- Column OXSORT was added to table oxdiscounts.
- Column OXTHEME was added to table oxtplblocks.
- Column OXHIDDEN was added to table oxarticles.
- Column OXBUNDLEID added to table oxarticles (EE only) .
- Smarty (2.6.28 => 2.6.29)
- PHPMailer (5.0.2 => 5.2.14)
- ADOdb Lite was replaced by Doctrine DBAL
All changes are visible in the composer.json file.
As PHP7 has removed mysql extension, usages had to be changed.
In shop setup PDO driver were used instead, and thus PDO and PDO-mysql extensions became as a requirement to the shop. This requirement is not noted anywhere yet and might change until release.
New config options
- reverseProxyFlushStrategy – if it is set to 1, then cache is flushed only on active sub-shop.
- dbPort – The port used for the connection to the database. Default is port 3306.
- dbType – This config option is still in the config.inc.php but is not really configurable with the eShop 6.0 any more. With eShop 6.0 and Doctrine DBAL, the only possible value is pdo_mysql. With eShop 5.x, the value mysql was used by default.
- offlineWarningInterval – defines the time interval in seconds warnings are sent while the shop is offline.
See here for all bugs fixed in the OXID eShop 6.0.0 Beta1.
Important information for developers
- Details about changes in code, templates, translations improved methods can be found on the changelog details page.
- (Virtual) namespaces were introduced, see above in section about new features. Detailed information will be provided soon.
- The database abstraction layer was changed from ADOdb Lite to Doctrine DBAL leading to slight changes in behavior. Detailed information will be provided soon.