Dev changes in 4.5.0

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 look at source code documentation for more details).

Config options per module support

1. 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:&lt;theme name&gt;" and is loaded for the active theme only.

2. 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 "&lt;themedir&gt;/&lt;lang&gt;/theme_options.php", are required.

3. Improvements in handling multiple languages.

Architecture changes

1. each multilanguage table will be splitted to multiple tables if language limit is reached. The additional tables will contain only oxid field and multilanguage fields for specific languages set e.g. (languages from 8th to 15th);

2. extra tables are named after the core table with language set suffix e.g. oxarticles_set1;

3. each language has its own DB view for each DB table, e.g. oxv_oxarticles_de, oxv_oxarticles_en;

4. 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

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

(1)                     (2)                     (3)     array( 'oxarticles'   =&gt; array( 'oxtitle'            =&gt; 'asc' ),            'oxcategories' =&gt; array( 'oxprice'            =&gt; 'desc' ),            0              =&gt; array( 'user_defined_field' =&gt; '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'   =&gt; array( 'oxartnum'           =&gt; '1126' ),            0              =&gt; array( 'user_defined_field' =&gt; 'Test' ),            ..          )

3) filter value.

Due to this change templates 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-&gt;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-&gt;_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).

removed:

oxAdminList::_setFilterParams.