OXID eShop version 4.5.0

General hints for this package

  • According to our workshop with Trusted Shops and Shoplupe, the OpenID-feature was removed. There will be a module instead a bit later.
  • Look & Feel was removed as well as this feature was old-fashioned and outdated. Also, for some adapted templates, it was dangerous to leave it in the admin area because this feature could overwrite the css file. You will find Look & Feel as an extension as well a bit later.
  • In the first step of the installation routine, you will now be asked for the installation language as well as for the standard shop language. Only this language will be activated in your shop installation. Of course, you can activate more languages later from the admin panel. The reason: in the past, many shop owners forgot to de-activate the language they didn’t need and in the result, the wrong content was delivered to clients with a different browser language.
  • In the second step of the installation routine, you can now select your default delivery country. Only this country will be active in your shop. Of course, you can activate more delivery countries via the admin panel. This change was made by a request of Trusted Shops.


See http://www.oxid-esales.com/en/support-services/documentation-and-help/oxid-eshop/installation/oxid-eshop-update-installation.html

Please note, that the structure of the folders changed for the template ‘basic’ as well as we removed some deprecated code. A script will help you sorting it out automatically. This script is included in the usual UpdateApp.


The template handling was changed massively. We introduced a new template set (theme) called ‘azure’ besides the basic theme you already know. You can switch the themes from admin panel now. Please gather more information from this screen cast:


Some admin templates were changed slightly due to bug fixes. Please find detailed information about template changes in directory “templ_docu/index.html” of this package.

Please remember the Template Override System we introduced with version 4.2.0. This system will help you saving a lot of time and work while updating your system.

Fixed Bugs

  • 0002082: Use the cart total as calculation basis for discount on payment
  • 0002255: Item Discounts add multiple times when editing Orders
  • 0002061: display price per unit in list view
  • 0002460: If “Display Variants in Assignment Lists in eShop admin” setting is activated, assignement popups aren’t scrollable anymore
  • 0002473: Remove duplicate option for Compare list activation
  • 0001954: Some SEO links formated incorrectly, like “…oxid-oxid-oxid-oxid-…”
  • 0002277: Fix oxSeoEncoder::markAsExpired()
  • 0002263: Session Problems with Facebook activated in CE/PE/EE
  • 0001985: “About Us” not reachable without being logged in if Private Sales Login is active
  • 0002712: VAT ID check URL changed again

You may find the complete list of bugfixes in our bugtracking system: https://bugs.oxid-esales.com/changelog_page.php.

New Features

Important information for developers

Bug #1706 fix introduces new changes in shop:

  1. SEO meta data (keywords, description) are moved to oxobject2seodata table;
  2. old object meta data (previously kept in oxseo table) is concatenated, only ONE language specific meta info record for all object views is written.
  3. oxSeonEncoder::_saveToDb() now does not accept keywords/description parameters. They are written/updated by oxSeonEncoder::addSeoEntry() method (please take a look at the source code documentation for more details).

Config options per module support

  • OXMODULE column is appended to oxConfig DB table, which allows to separate module config options from the ones of the OXID eShop base.
  • NOTE: During the runtime, the separated config options are *not* loaded automatically, and may only be loaded (overriding active options) by using the protected oxConfig method _loadVarsFromDb.
  • Currently this functionality is only used to support multiple themes, where OXMODULE field is theme:<theme name> and is loaded for the active theme only.
  • Also, the oxConfigDisplay table is created, which holds the info how to display the option in the admin GUI. It allows to add and manage config options without changes in admin template files – only the DB entries to oxConfig and oxConfigDisplay tables, with addition of providing language constants in <themedir>/<lang>/theme_options.php, are required.

Improvements in handling multiple languages

Architecture changes:

  • each multilanguage table will be splitted to multiple tables if language limit is reached. The additional tables will contain only the OXID field and multilanguage fields for specific language sets e.g. (languages from 8th to 15th);
  • the extra tables are named after the core table with language set suffix e.g. oxarticles_set1;
  • each language has its own DB view for each DB table, e.g. oxv_oxarticles_de, oxv_oxarticles_en;
  • to select all multilanguage fields (e.g. when setEnableMultilang(false)) there will also be views, joining all language set tables e.g. oxv_oxarticles. These views are basically large joins on OXID, which are slower, but contain whole object as one dataset – usually used for exporting data, and not in eShop frontend.

Most important API changes:

  • getLangTableName( $sTable, $iLangId ) – returns the table for given language fields.
  • getViewName( $sTable, $iLangId = null, $sShopId = null ) – changed to support multilanguage tables.
  • oxI18n::getViewName() – returns view name by object language.
  • oxBase::getSqlFieldName() – replaced by oxI18n::getUpdateSqlFieldName() as such functionality is only needed when updating multilingual object. (select fields are handled by DB views).

Changes regarding list sorting/filtering in admin

Filter and sorting data is send/received as multidimentional array. Sorting array:

           (1)                   (2)                     (3)
array( 'oxarticles'   => array( 'oxtitle'            => 'asc' ),
 'oxcategories'  => array( 'oxprice'            => 'desc' ),
 0               => array( 'user_defined_field' => 'asc' ),

1) base/real table name or leave empty if you are using column alias ( select x as y) ;
2) real table column name, if column is multilanguage, base name (without lanugage id) shoudl be used;
3) sorting direction - asc/desc.

Data filter array:

           (1)                      (2)                     (3)
array( 'oxarticles'   => array( 'oxartnum'           => '1126' ),
  0              => array( 'user_defined_field' => 'Test' ),

3) filter value.

Due to this change templates (basic) were changed also:

  • Sorting:
old: document.search.sort.value='oxactive';
new: top.oxid.admin.setSorting( document.search, 'oxarticles', 'oxactive', 'asc');
  • Filtering:
old: name="where[[{$listTable}].oxshortdesc]" value="[{ $where->oxarticles__oxshortdesc}]"
new: name="where[oxarticles][oxshortdesc]" value="[{ $where.oxarticles.oxshortdesc}]"

Also custom templates should include filter data:

[{assign var="where" value=$oView-&gt;getListFilter()}]

New/highly updated methods for admin list administration (you should review your own code if it possibly covers mentioned places):

oxAdminList::getListSorting()  - returns list sorting array;
oxAdminList::getListFilter()   - returns list filter array;
oxAdminList::getViewListSize() - returns list items count;
oxAdminList::getItemList() - returns list items, MUST be used instead of $this->_aViewData['mylist'];
oxAdminList::getItemListBaseObject() - returns base list item object, can be used to get table info, active languag etc.
oxAdminList::buildWhere() - builds filter array used in list loading;
oxAdminList::_prepareOrderByQuery() - prepares sorting part for sql query (list building).



Category list performance update

Reworked sorting of categories tree to use initial SQL based sorting. This makes additional sorting previously implemented as php class methods deprecated and saves 30% performance for loading categories tree.

API changes



Deprecated and not used internally:


Removed methods:

oxAdminList::_setFilterParams() - was removed due to refactoring of oxadminlist class.
Register::_addFakeAddress() / User::_addFakeAddress() - due to changes in new layout there is no need to have selection which says "use billing address for delivery". There is check box to use different delivery address or no. Similarly were update to basic theme template - selection option was removed and button (which tells to use billing address for delivery) title was updated. So "fake" address is not needed any more;
User::setShowShipAddress() - wes deprecated long time ago, so just removed;
User::getDelAddress() / Account_user::getDeliverAddress() / User::_getSelectedAddress(): These methods were removed because of change in template and improved user address list getter oxUser::getUserAddresses(). Methods were used to get active/user selected delivery address object. Given example clearifies how active delivery address is taken (from basic theme user.tpl):
[{foreach from=$oxcmp_user->getUserAddresses() item=address}]
<option ... [{ if $address->isSelected()}][{assign var="delivadr" value=$address}]SELECTED[{/if}]>[{$address}]</option>
<input ... name="deladr[oxaddress__oxstreet]" value="[{$delivadr->oxaddress__oxstreet->value}]">
<input ... name="deladr[oxaddress__oxstreetnr]" value="[{$delivadr->oxaddress__oxstreetnr->value}]">

oxCategoryList::sortCats() - category sorting is implemented via the initial tree building sql.

Updated method:

oxCategory::getAttributes() - returns oxAttributeList object;

Changes in long descriptions smarty parsing:

  • introduced [{oxeval var=[(accepts oxField/string)] }] smarty function, which should be called in templates to process long descriptions containing smarty tags;
  • long description fields are not automaticaly processed by smarty, thus saving from non admin does not break original content;
  • introduced new getters which returns smarty processed long description data:
"oxarticle::oxlongdesc" field does not exist in oxarticles table, but due to backwards compatability
"oxarticles::oxarticle__oxlongdesc" field was still supported by emulating it. Since current release it is highly recommended to use oxArticle::getArticleLongDesc() for getting its original value,
oxArticle::setArticleLongDesc() for setting its db value and oxArticle::getLongDesc() for smarty
processed db value.

Changes in session regeneration

Since this release session id is regenerated after user logs in, session regeneration is forced in oxcmp_user::_afterLogin():

if ( $this-&gt;getLoginStatus() === USER_LOGIN_SUCCESS ) {

Override Support for theme blocks in modules

The new theme ‘azure’ has a set of predefined blocks, that can be overwritten by any module. The block definitions in templates (and usage in modules) are Smarty3 syntax compatible.

More info: http://wiki.oxidforge.org/Tutorials/Customize_OXID_eShop_With_oxBlocks

Implemented theme options getter and usage in templates

[{if $oViewConf->getViewThemeParam('blShowSlogan') }]
   <h1 style="margin:0 10px 15px;padding:10px;color:#fff;background:#000;">Slogan text</h1>

More info: http://wiki.oxidforge.org/Tutorials/Understanding_theme_management_in_OXID_eShop_from_4.5.0

The thumbnail picture of category will be multilingual for Version 4.5.0.

For this we added multilingual fields oxthumb_1, oxthumb_2 and oxthumb_3 in oxcategory table. Changes:

  1. For new shop install: if you want to show category picture in top of selected category list, you will have to assign this picture for all languages.
  2. For shops, who will update to 4.5.0: your assigned thumbnail will be automatically updated to all languages when you’ll run UpdateApp. So, nothing changes for you.

Cache hit count now is not recorded

this way DB is not accessed on every cache request, thus increasing caching efficiency.