OXID eShop version 4.1.0

General hints for this package

Version numbers

The version numbers will consist of three digits from now on: 4.1.0

“Save-on-Tab” functionality

Due to complexity of implementation, maintenance and bugs “Save-on-Tab” functionality was removed.

EUR sign

In previous update due to general shop encoding change (from ISO-8859-1 to ISO-8859-15) euro character may be broken in shop after Saving data at “Master Settings -> Core Settings -> Settings -> Other settings”. Please check this value after version update and fix it if needed.


See our instructions for detailed information about patching/updating.

Fixed Bugs

  • 0000562: [Admin area] Generic CSV – import does not work
  • 0000766: [Admin area] “System Info” throws Fatal Error in admin area
  • 0000570: [Security] Unauthorized user may gain admin privileges by adding parameter to URL (see Security Bulletin 2009-001)
  • 0000711: [Admin area] Packing list only shows one product
  • 0000712: Other newsletter e-mail: wrong image dir
  • 0000550: [Admin area] SEO Administration does not support more then 2 Languages
  • 0000574: [GUI & Navigation & Sorting] some elements are not displayed correct in shop frontend while using IE6
  • 0000579: [Core Settings] Currency signs are displayed incorrectly after Save of Core settings, what leads to corruption
  • 0000591: [3rd party libraries] incorrect SSL encryption
  • 0000628: [Products] Variants are not shown in Details page when option “Load Variants in Lists” is off
  • 0000632: Other Saving shopping basket for user does not work
  • 0000633: [VAT] VAT for shipping calculated wrong
  • 0000652: [SEO] SEO URLs ar not deleted if articles, categories or cms-elements are deleted
  • 0000669: [SEO] SEO URLs to variants generation erratic (language-mix)
  • 0000692: Other IE7 with ICQ Toolbar User’s aren’t able to order something
  • 0000701: [Products] Variant product text doesn’t overwrite parent text

You may find the complete list of bugfixes in OXID eSales bugtracker.

New features in this revision

Managing languages in admin area

Managing languages was moved from Master settings->Core settings tab “Settings” to separate menu Master settings->Languages. In the upper part, the installed languages are listed. In the lower part the settings for a language can be changed:

  • Active: set if language is active. This option is used in fronted where list of active languages are shown at the top of the page.
  • Abbreviation: Language suffix
  • Name: Language name
  • Is default: Set language as default
  • Base URL: Language Base URL’s
  • Base SSL URL: Language Base SSL URL’s per language
  • Language ID: Base language ID. This ID represents multi language fields suffix in DB: 0 – no suffix, 1 – DB field with suffix _1 and so on …
  • Sorting: According this number languages array will be sorted and shown in front end

On creating new language this ID assigns automatically to new language. When creating new language, user must create language translation files in out/[language abbreviation] folder.

Performance improvements, special attention was payed to shops having many variants

  • Lazy loading mechanism improvements
  • Template getters caching improvements
  • For variants in lists oxArticle class was substituted with newly introduced oxSimpleVariant class.
  • Skipped variant list loading for some cases like prev/next articles in details page.
  • Skipped long description loading and parsing for category tree items.
  • Deleted empty src values in templates as img src=”” was calling shop again (x2 worse performance).
  • Bug fix: empty tag cloud was not cached.

Manufacturers and vendors

We decided to split manufacturers and vendors into different data bases. Before proceeding please backup your database and make sure ‘oxmanufacturers’ and ‘oxvendor’ tables has same structure. The following SQLs can be executed only once!

to move vendors data to manufacturers table execute following SQLs:

INSERT INTO 'oxmanufacturers' SELECT * FROM 'oxvendor'; 
UPDATE 'oxmanufacturers' SET 'oxmanufacturers'.'oxid' = MD5( 'oxmanufacturers'.'oxid' ); 
UPDATE 'oxarticles' SET 'oxarticles'.'oxmanufacturerid' = MD5( 'oxarticles'.'oxvendorid' ) WHERE 'oxarticles'.'oxvendorid' != ``;`` 
DELETE FROM 'oxvendor'; 
UPDATE 'oxarticles' SET 'oxarticles'.'oxvendorid' = ``;``

to copy vendors data to manufacturers table execute following SQLs:

INSERT INTO `oxmanufacturers` SELECT * FROM `oxvendor`; 
UPDATE `oxmanufacturers` SET `oxmanufacturers`.`oxid` = MD5( `oxmanufacturers`.`oxid` ); 
UPDATE `oxarticles` SET `oxarticles`.`oxmanufacturerid` = MD5( `oxarticles`.`oxvendorid` ) WHERE `oxarticles`.`oxvendorid` != ``;``

Full UTF8 Support

During the installation process, it is possible to decide if you want UTF-8 support or not. UTF-8 character encoding provides better support for special chars than other character encodings. This is particularly important for multilingual eShops. However, UTF-8 is slightly slower than the standard encoding (ISO 8859-15). If you plan to provide your eShop in many different languages, you should use UTF-8. If you just want to provide a few languages using related symbol sets (e. g. English, German, French), you don’t need UTF-8.

It is possible to switch to UTF-8 with an already existing shop as well, please find a detailed instructions in OXID eShop handbook.

Importer scripts for XT:Commerce and osCommerce

As we have a final release now, we can finish the work and the tests on the importer scripts. Please find them in a few days ready to download on this place.

Diagnosis area in admin menu

Checks system requirements as well as collations in database from the admin site. This is very helpful in case you switched your server environment.

Admin performance update

We added a new checkbox in admin area -> performance tab for selecting if content cache will be cleared only on logout from admin. If checked, cache will not be deleted on each saving of anything in admin, but only when logging out.

Favicon 🙂

Finally, we added a favicon.ico file to the shop root directory. Simply build your own favicon and overwrite the file in shop root dir.

Important information for developers

  • Removed vendor list class methods getArticleCnt(), getRecommList(), getPageNavigation()
  • Table “oxarticles” field “OXREMINDACTIV” renamed to “OXREMINDACTIVE”
  • Newly introduced oxConfig::isUtf() method returns TRUE if shop works in UTF-8 mode
  • Due to performance reasons most of front end views related functionality was moved from oxView to oxUBase class. oxView class currently keeps methods which are global for admin and shop views. View components (oxCmp_*) now are only loaded in front end and extends only oxView class.
  • WYSIWYG PRO editor now does not automatically set paths to urls (it was disabled in oxadmindetails::_generateTextEditor(), $this->_oEditor->urlFormat = ‘preserve’;). It helps to avoid unexpected behaviour, when editor adds sdditional pathes to urls etc. Thus, when editing content in editors you SHOULD write urls by hand or use oxViewConfig methods to set them dynamically.
  • Since current update SEO URLs are not prefixed with language ident. This helps to prevent possible problems with primary language changes, various import problems etc.
    • Core changes in SEO engine:
    • when opening non SEO URLs which has no SEO alternative 404 header is not send any more;
      • instead page meta contains “noindex” attribute;
    • Changes in code:
      • oxSeoDecoder::_getIdent() – calculates MD5 of passed URL;
    • New methods:
      • oxSeoEncoder::fetchSeoUrl() – searches for SEO URL in SEO table. If not found – FALSE is returned
    • Removed methods:
      • oxSeoDecoder::_removeLangPrefix();
      • oxSeoDecoder::fetchSeoUrl();
      • oxSeoEncoder::getLanguageParam();

If you have any problem with SEO after update, please go to Admin => Master Settings => Core Settings => SEO and press “Reset SEO IDs” button.

  • New method intoduced oxBase::_isInList() which returns
  • oxSimpleVariant now handles variants in lists instead of oxArticle instance. true in case oxbase (or derived) instance is loaded from oxList.
  • oxUtils::fromFileCache() returns null when cache is not found instead of false how it was before