OXID eShop version 4.2.0

General hints for this package

  • Selection list name handling changed: it does not strip tags from it now, tags are stripped only from currency. Instead, tags are encoded to entities (e.g. >a<), so they look the same in frontend.
  • In new user registration form, SSL was activated in the moment the form was send. As one couldn’t determine whether the form was SSL encrypted or not, the form itself opens in SSL mode from now on.
  • Admin area SHOP_CONFIG_NROFCATARTICLES language constant changed, added a warning. Now it is set to: ‘Number of Products which can be shown in a Product List (Category Pages, Search Results)
    Warning: A large number of products per page (above 100) can cause serious performance issues!
  • Existing OXSAL fields of oxuser and oxaddress tables were updated: Default general values are “MR” and “MRS” (see developer notes for more information).


See http://www.oxid-esales.com/en/resources/help-faq/faq/how-update-one-release-another


Template changes have been made in this major release. For detailed information, see /templ_docu/index.html.

Fixed Bugs

  • 0001378: [Coupons] its not possible to export vouchers.
  • 0001360: [Import & Export] Export article data with SEO url
  • 0001339: [SEO] fixing of url disappears.
  • 0001374: [SEO] Some special chars in article name cause problems in SEO-Url.
  • 0001275: [SEO] oxcid is included in SEO urls for new CMS.
  • 0001018: [Files & Source code & Database] Security Warning in Internet Explorer 6.
  • 0000904: [Files & Source code & Database] Not existing DB field is still used in PE.
  • 0001176: [Content & CMS pages] Logout from CMS page.
  • 0000626: [GUI & Navigation & Sorting] The number of pages in $oView->getPageNavigation() is generated from all products, not only visible ones
  • 0000927: [GUI & Navigation & Sorting] If Variantparent is buyable -> obsolete DropDown appears in variantlist on details.tpl.
  • 0001015: [GUI & Navigation & Sorting] Drop down for selecting Delivery address not works in FF
  • 0001123: [GUI & Navigation & Sorting] Modifying shipping addresses
  • 0001020: [GUI & Navigation & Sorting] address-form resets all fields on error.
  • 0001336: [Manufacturers] Unnecessary repetition of query that causes a huge impact on performance.
  • 0001249: [Order processing] shippingtype not saved.
  • 0001114: [Order processing] no delivery charges for non logged in users.
  • 0000890: [Order processing] decimal precision not work (sometimes) in shopping cart.
  • 0001391: [Categories] ext. link for categories do not work.
  • 0000827: [Categories] Active but hidden categories are shown under “more” in horizontal navigation.
  • 0001404: [Admin area] order_list: Call to a member function quote() on a non-object.
  • 0001368: [Exceptions] EXCEPTION_LOG.txt stored to the wrong directory & robots.txt.
  • 0001376: [Setup] Problem because safe_mode=OFF and check for open_basedir status is needed in sys requirements.

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

New Features

  • Selection list name handling changed: it does not strip tags from it now, tags are stripped only from currency. Instead, tags are encoded to entities (e.g. >a<), so they look the same in frontend.
  • While fixing #0001368 introduced “log/” folder (where log files are kept) and oxUtils::getInstance()->writeToLog() method which should be called.
  • SEO link handling changed:
    • article links are built for every category the article is in.
    • each article has canonical links in details page which point to article url in main category.
    • rel=”nofollow” attributes are removed from most links.
  • Languages managing in admin changed:
    • Now on adding new language code checks if there exist multilang field for the new language. If not, the script scans all tables, finds all multilanguage fields and creates new ones with the new language ID as suffix. The ID of newly createdlanguage will be next available number (e.g. if there is language with ID = 4, next ID will be 5). So if there is a field in table “oxarticle” “oxtitle_4”, new field “oxtitle_5” will be created. Indexing data also will be copied for this field.
    • Deleting a language, multilanguage fields will not be removed from tables. Instead all multilang fields of that language will be cleared and reseted to its default value (value, that was defined on creating table).
  • Added help popups in admin area. Closed to input fields that have got additional help information, your will find a “?”. Clicking on it will show up a popup with help information.
  • Template Override System: New custom theme config option “sCustomTheme” added to conig.inc.php for easier customization maintenance.
    • Custom theme directory structure is the same as main theme, with all variations.
    • If there is a custom theme defined, the shop will try to locate resources in it first. This is also valid for files included in smarty temlates using [{include file=”***”}]
    • E.g., if you just want to change “start.tpl”, simply add it to /out/custom/tpl/start.tpl and set sCustomTheme to “custom”.
    • For directory based resources path getter like css or js, you will need to copy the complete tree to custom theme folder.
  • Multidimensional Variants: This new functionality enables OXID eShop to manage a variant of a product that can have variants. For example, a red T-Shirt can have different sizes. For related template changes and new configuration options see developer notes.
  • APS (Application Packaging Standard), which is a format designed to help implement Software-as-a-Service (SaaS) business models for all industry cloud service providers. You will also be able to install OXID eShop on a hosted environment of a provider offering APS.

Important information for developers

  • Added two new methods to oxBasket class for getting formatted payment and wrapping costs
    • oxBasket::getFPaymentCosts()
    • oxBasket::getFWrappingCosts()
  • After #0001249 fix, oxOrder contains few constants, which are intended to use while returning order state
    • They are:
     oxOrder::ORDER_STATE_MAILINGERROR = 0;  - Error while sending order notification mail to customer;
     oxOrder::ORDER_STATE_OK = 1;            - Order finalization was completed without errors;
     oxOrder::ORDER_STATE_PAYMENTERROR = 2;  - Error during payment execution;
     oxOrder::ORDER_STATE_ORDEREXISTS = 3;   - Order with such id already exist.
    • New constants marking order state:
     oxOrder::ORDER_STATE_INVALIDDELIVERY = 4; - Delivery parameters used for order are invalid;
     oxOrder::ORDER_STATE_INVALIDPAYMENT = 5;  - Payment parameters used for order are invalid.
    • NOTICE: while implementing your own modules for oxorder which may return specific order state codes, please use values > 99 or so to avoid conflicts with standard (and newly implemented in future) state codes.
  • oxArticle class now has the getMainLink() method, which returns article url for its main category. This method should be used instead of getLink() if article main link is required e.g. in _right.tpl. This saves some computation time required to check if article exists in currently viewed category.
    • Note: if current category article link should be returned, use getLink(), which will return article main Url only if article is not assigned to currently viewed category.
  • All frontend view classes (extending oxUBase), has a new method getCanonicalUrl(), which should return null (default) if no canonical URL should be put to HTML HEAD section, or a string containing a canonical URL for currently viewed page.
  • YUI version was updated from 2.6 to 2.8 and package was minified by removing unused components, assets, raw and debug packages (size reduced form ~10MB to ~1MB).
    • Now it includes only:
      • reset-fonts/reset-fonts.css
      • base/base-min.css
      • assets/skins/sam/skin.css
      • assets/skins/sam/container.css
      • assets/skins/sam/*.[gif|png]
      • utilities/utilities.js
      • container/container-min.js + assets/*.gif
      • menu/menu-min.js + assets/*.png
      • button/button-min.js
      • datasource/datasource-min.js
      • datatable/datatable-min.js
      • json/json-min.js
      • stylesheet/stylesheet-min.js
      • slider/slider-min.js + assets/*.[gif|png]
      • colorpicker/colorpicker-min.js + assets/*.png
      • tabview/tabview-min.js + assets/*.gif
      • treeview/treeview-min.js
    • Note: If you are using components not listed before, just add them.
  • As a part of our salutation internationalisation solution (bug #535) we’ve changed the following:
    • In OXUSER and OXADDRESS tables now we store international values (which are translated in front end when it’s needed). The default DB values are MR and MRS. In order to represent existing user salutations correctly you should update existing DB values. For example existing german users could be updated by the following SQL statements:
     UPDATE oxuser SET OXSAL = "MRS" WHERE OXSAL = "Frau";
     UPDATE oxuser SET OXSAL = "MR"  WHERE OXSAL = "Herr";
     UPDATE oxaddress SET OXSAL = "MRS" WHERE OXSAL = "Frau";
     UPDATE oxaddress SET OXSAL = "MR"  WHERE OXSAL = "Herr";
    • Language constants which have been removed from front end:

and replaced by general constants:

    • Added language constants to admin:
    • Templates containing salutation select boxes (normally: register.tpl, account_user.tpl, contact.tpl, newsletter.tpl, user.tpl) now include general inc/salutation.tpl selector. Example call:
       [{include file="inc/salutation.tpl" name="deladr[oxaddress__oxsal]" value=$delivadr->oxaddress__oxsal->value}]
    • Template multilanguage constant now could be called with additional “alternative” param specifying alternative translation in case translation has not been found. Example call:
  [{oxmultilang ident="GENERAL_SALUTATION_MRS" alternative="Frau")}]
  • Implemented solution for multidimensional variant representation. The following elements were introduced:
    • New configuration option – Master settings/Core settings/System/Variants/Use multidimensional variants.
    • oxVariantHandler class – responsible for general variant handling.
    • oxMdVariant class – defines a structure for storing multidimensional variants.
    • oxvariantselect Smarty plugin – inits neccessary JavaScript, represents oxMdVariant structure as a set of select boxes.
    • inc/variant_selector.tpl template – a snippet including variant selector.
    • details.tpl include inc/variant_selector.tpl
    • details.tpl in multidimensional variant view case hides existing variant list under <noscript> tag.
    • Details::isMdVariantView() public method – Checks should it show MD variant selection.
    • oxArticle::getMdVariants public method – Returns multidimensional variant structure.
    • oxArticle::getMdSubvariants() – Returns first level variants from multidimensional variants list.