Tutorials/Theme Management im OXID eShop ab 4.5.0

Theme-Management im OXID eShop ab 4.5.0
Ab OXID eShop 4.5.0 sind die Theme-Einstellungen aus derconfig.inc.php ins Admin-Backend verlegt (Stammdaten -&gt; Grundeinstellungen -&gt; Themes), wo eine Liste aller verfügbaren Themes, deren Beschreibung, Vorschaubild und der jeweiligen Einstellungen zu finden ist. Diese Metadaten werden aus dem betreffenden Theme-Verzeichnis eingelesen, dazu gleich mehr.

Um ein Theme zu verwenden, einfach den entsprechenden Listeneintrag wählen und unten rechts auf "Aktivieren" klicken.



Die Struktur der Theme-Verzeichnisse mit den Templates, Sprachdateien, Bildern und Scripten wurde nicht verändert. Allerdings ist mit der 4.5 der Aufbau des Templates geändert worden. Das ist allerdings nicht Gegenstand dieses Tutorials.

Theme Meta-Daten
Azure Theme Dateien

Vorschaubild: out/azure/theme.jpg

Info-Texte: out/azure/theme.php

$aTheme = array( 'id'           =&gt; 'azure',  'title'        =&gt; 'Azure',  'description'  =&gt; 'Azure theme for OXID eShop 4.5.0 Beta',  'thumbnail'    =&gt; 'theme.jpg',  'version'      =&gt; '0.5',  'author'       =&gt; 'OXID', );

Es genügt diese beiden Dateien mit den individuellen Daten eines eigenen Themes in das Verzeichnis /out/mein_theme/ zu legen, um dieses in der Liste im Backend zu sehen. Dabei muss die Theme-id dem Namen des Ordners entsprechen, in dem das Theme liegt.

ACHTUNG - ab 4.7.x folgende Änderung: Die theme.php muss in das Verzeichnis /application/views/mein_theme/ gelegt werden, dort sind auch alle individuellen Templatedateien abzulegen (in der selben Ordnerstruktur wie Azure). Ins Verzeichnis /out/mein_theme/ legt man das theme.jpg sowie die Verzeichnisse /img und /src mit den benötigten Dateien.

Individuelle Themes
Um ein individuelles Theme zu erstellen bei dem lediglich einzelne Dateien verändert sind, genügt es auf das Eltern-Theme zu verweisen (parentTheme) ohne eine eigene id zu vergeben. Der Theme-Titel und die Beschreibung sind anzupassen. Wichtig ist außerdem die Angabe, auf welche Version des Eltern-Themes dies Abwandlung basiert (parentVersions).

$aTheme = array( 'title'          =&gt; 'Child of Azure',  'description'    =&gt; 'EXTENDED Azure theme for OXID eShop 4.5.0 Beta',  'thumbnail'      =&gt; 'theme.jpg',  'version'        =&gt; '0.5',  'author'         =&gt; 'OXID',  'parentTheme'    =&gt; 'azure',  'parentVersions' =&gt; array('0.5','0.6'), );

Solch ein Theme-Kind kann nur aktiviert werden, wenn das Eltern-Theme vorhanden ist und dessen Version mit den angegebenen Versionen übereinstimmt.

Ein solches Theme verwendet alle Template-Dateien und Einstellungsoptionen vom Eltern-Theme. Nur die Dateien, die auch im Verzeichnis des abgewandelten Themes liegen, werden vorrangig verwendet. Wenn also zum Beispiel die Produktansicht verändert wurde und das entsprechende Template details.tpl im Kinder-Verzeichnis liegt, dann wird dieses verwendet und nicht das Original aus dem Eltern-Verzeichnis

Bei einem auftretenden Fehler kann das Kinder-Theme nicht aktiviert werden, statt dem "Aktivieren"-Button wird eine Fehlermeldung gezeigt.



Script zum Kopieren ausschließlich veränderter Template-Dateien
Normalerweise ist es beim Entwickeln eines Templates meistens leichter direkt in einer vollständigen Kopie eines Templates zu arbeiten. Aggrosoft hat deshalb ein Script entwickelt, das nachdem die Template-Arbeiten abgeschlossen sind, automatisch nur die geänderten Dateien extrahiert und in einem extra Ordner ablegt - dieser Ordner kann dann als sCustomTheme gesetzt werden. Die Verwendung ist einfach, geändertes und original Template wählen (es muss eine unveränderte Version des Templates auf dem Server liegen), Zielordner eingeben und Start drücken. &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt; &lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de"&gt; &lt;head&gt; &lt;title&gt;Template Override generieren&lt;/title&gt; &lt;link rel="stylesheet" href="http://twitter.github.com/bootstrap/assets/css/bootstrap-1.1.1.min.css"&gt; &lt;meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"&gt; &lt;/head&gt; &lt;?php

function makeAll($dir, $mode = 0777, $recursive = true) { if( is_null($dir) || $dir === "" ){ return FALSE; }       if( is_dir($dir) || $dir === "/" ){ return TRUE; }       if( makeAll(dirname($dir), $mode, $recursive) ){ return mkdir($dir, $mode); }       return FALSE; }   function smartCopy($source, $dest, $options=array('folderPermission'=&gt;0755,'filePermission'=&gt;0755)) {       $result=false; //For Cross Platform Compatibility if (!isset($options['noTheFirstRun'])) { $source=str_replace('\\','/',$source); $dest=str_replace('\\','/',$dest); $options['noTheFirstRun']=true; }       if (is_file($source)) { if ($dest[strlen($dest)-1]=='/') { if (!file_exists($dest)) { makeAll($dest,$options['folderPermission'],true); }               $__dest=$dest."/".basename($source); } else { $__dest=$dest; }           if (!file_exists($__dest)) { $result=copy($source, $__dest); chmod($__dest,$options['filePermission']); }       } elseif(is_dir($source)) { if ($dest[strlen($dest)-1]=='/') { if ($source[strlen($source)-1]=='/') { //Copy only contents } else { //Change parent itself and its contents $dest=$dest.basename($source); @mkdir($dest); chmod($dest,$options['filePermission']); }           } else { if ($source[strlen($source)-1]=='/') { //Copy parent directory with new name and all its content @mkdir($dest,$options['folderPermission']); chmod($dest,$options['filePermission']); } else { //Copy parent directory with new name and all its content @mkdir($dest,$options['folderPermission']); chmod($dest,$options['filePermission']); }           }            $dirHandle=opendir($source); while($file=readdir($dirHandle)) {               if($file!="." &amp;&amp; $file!="..") {                   $__dest=$dest."/".$file; $__source=$source."/".$file; //echo "$__source ||| $__dest&lt;br /&gt;"; if ($__source!=$dest) { $result=smartCopy($__source, $__dest, $options); }               }            }            closedir($dirHandle); } else { $result=false; }       return $result; }

function compareDirectories( $path = '.', $changePath = '.', $level = 0 ){ $ignore = array( 'cgi-bin', '.', '..' ); $dh = @opendir( $path ); while( false !== ( $file = readdir( $dh ) ) ){ // Loop through the directory if( !in_array( $file, $ignore ) ){ if( is_dir( "$path/$file" ) ){ // Its a directory, so we need to keep reading down… compareDirectories( "$path/$file", "$changePath/$file", ($level+1),$time ); } else { compareFiles("$path/$file", "$changePath/$file"); }//elseif }//if in array }//while closedir( $dh ); }   function compareFiles( $path = '.', $changePath = '.' ){ $vanilla_path = $path; $branch_path = $changePath; if( !file_exists($branch_path) || strcmp(file_get_contents($vanilla_path),file_get_contents($branch_path)) ){ if($_REQUEST["displayonly"] == 1){ echo "$vanilla_path &gt;&gt; $branch_path&lt;br/&gt;"; }else{ $tPath = str_replace($_REQUEST['modifiedtpl']."/",'',$vanilla_path); makeAll(dirname("out/".$_REQUEST['targetfolder']."/$tPath")); smartCopy($vanilla_path, "out/".$_REQUEST['targetfolder']."/$tPath"); }       }           return true; }

$aTemplates = array; foreach ( glob("out/**",GLOB_ONLYDIR) as $tplfolder ) { if(file_exists($tplfolder."/theme.php")){ $aTemplates[] = $tplfolder; }   }    if($_REQUEST['fnc'] == 'create'){ compareDirectories( $_REQUEST['modifiedtpl'], $_REQUEST['originaltpl']); $blCopied = true; } ?&gt; &lt;body style="padding-top: 60px"&gt;

&lt;div class="topbar-wrapper noprint" style="z-index: 5"&gt; &lt;div class="topbar"&gt; &lt;div class="fill"&gt; &lt;div class="container"&gt; &lt;h3&gt;&lt;a href="http://www.aggrosoft.de" target="_blank"&gt;Aggrosoft Override Generator&lt;/a&gt;&lt;/h3&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;

&lt;div class="container"&gt; &lt;?php if($blCopied) :?&gt; &lt;div class="alert-message success"&gt; &lt;p&gt;&lt;strong&gt;Kopiervorgang erfolgreich!&lt;/strong&gt; Sie finden das neue Template jetzt im Ziel Ordner.&lt;/p&gt; &lt;/div&gt; &lt;?php endif; ?&gt; &lt;form action="tploverride.php" method="post"&gt; &lt;input type="hidden" name="fnc" value="create"&gt; &lt;fieldset&gt; &lt;legend&gt;Custom Theme generieren&lt;/legend&gt; &lt;div class="clearfix"&gt; &lt;label for="username"&gt;Ge&amp;auml;ndertes Template&lt;/label&gt; &lt;div class="input"&gt; &lt;select name="modifiedtpl"&gt; &lt;?php foreach ($aTemplates as $sTemplate) : ?&gt; &lt;option value="&lt;?php echo $sTemplate; ?&gt;"&gt;&lt;?php echo $sTemplate; ?&gt;&lt;/option&gt; &lt;?php endforeach; ?&gt; &lt;/select&gt; &lt;/div&gt; &lt;/div&gt;&lt;!-- /clearfix --&gt; &lt;div class="clearfix"&gt; &lt;label for="username"&gt;Original Template&lt;/label&gt; &lt;div class="input"&gt; &lt;select name="originaltpl"&gt; &lt;?php foreach ($aTemplates as $sTemplate) : ?&gt; &lt;option value="&lt;?php echo $sTemplate; ?&gt;"&gt;&lt;?php echo $sTemplate; ?&gt;&lt;/option&gt; &lt;?php endforeach; ?&gt; &lt;/select&gt; &lt;/div&gt; &lt;/div&gt;&lt;!-- /clearfix --&gt; &lt;div class="clearfix"&gt; &lt;label for="username"&gt;Ziel Ordner (in out)&lt;/label&gt; &lt;div class="input"&gt; &lt;input type="text" size="30" name="targetfolder" class="xlarge"&gt; &lt;/div&gt; &lt;/div&gt;&lt;!-- /clearfix --&gt; &lt;div class="clearfix"&gt; &lt;label for="username"&gt;Simulieren&lt;/label&gt; &lt;div class="input"&gt; &lt;div class="input-prepend"&gt; &lt;label class="add-on"&gt;&lt;input type="checkbox" name="displayonly" value="1"&gt;&lt;/label&gt; &lt;input class="small" readonly="readonly" value="Nur anzeigen" type="text"&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;!-- /clearfix --&gt; &lt;div class="actions"&gt; &lt;button class="btn primary" type="submit"&gt;Start&lt;/button&gt;&amp;nbsp;&lt;button class="btn" type="reset"&gt;Cancel&lt;/button&gt; &lt;/div&gt; &lt;/fieldset&gt; &lt;/form&gt;

&lt;/div&gt; &lt;script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"&gt;&lt;/script&gt; &lt;script type="text/javascript" src="http://autobahn.tablesorter.com/jquery.tablesorter.min.js"&gt;&lt;/script&gt; &lt;script type="text/javascript"&gt; $(function{         $("table").tablesorter({ sortList: 1,1 });      }); &lt;/script&gt; &lt;/body&gt; &lt;/html&gt; Danke an Aggrosoft für die Bereitstellung des Scripts; Forenthread:http://www.oxid-esales.com/forum/showthread.php?p=70414

Theme-spezifische Einstellungen
OXID eShop Themes sind immer abhängig von verschiedenen Parameter-Einstellungen, die im Backend gesetzt werden. Mit Entwicklung des neuen Azure-Templates wurden die Theme-spezifischen Einstellungen eingeführt.

Ab OXID eShop 4.5.0 ist es Theme-Entwicklern somit möglich, eigene Einstellungsoptionen ohne Änderungen der Backend-Templates zu ergänzen.

Diese Optionen werden in der existierenden Datenbank-Tabelle oxconfig gespeichert, in der Spalte oxmodule mit dem Wert "theme:azure" gekennzeichnet. Zusätzliche Anzeige-Parameter haben eine eigene Tabelle "oxconfigdisplay", in der die Einstellungen von Sortierung, Gruppierung und Drop-Down-Werten festgelegt werden. Die Sprachbausteine für die Theme-Einstellungen müssen in Sprach-Dateien mit dem Namen theme_options.php hinterlegt werden.

Einige spezifische Einstellungen werden im eShop Sourcecode verwendet, um korrekte Bildgrößen zu generieren oder Seitenzahlen zu berechnen. Es wird empfohlen, diese vom Azure-Theme zu kopieren (nach "theme:azure" in den SQL-inserts in setup/sql/database.sql suchen).

Beispiel
Eine neue Theme-spezifische Einstellungsoption zu Azure hinzufügen: "Header-Slogan anzeigen/nicht anzeigen"

1. Option zur Tabelle oxconfig hinzufügen

SQL ausführen zum Eintragen der Werte:

INSERT INTO `oxconfig` (`OXID`,`OXSHOPID`,`OXMODULE`,`OXVARNAME`,`OXVARTYPE`,`OXVARVALUE`) VALUES ('azure.blShowSlogan.1', 1, 'theme:azure', 'blShowSlogan', 'bool', ); ''

2. Anzeige-Optionen festlegen in Tabelle oxconfigdisplay

Die Anzeige der Option im Backend richtet sich nach dem Typ, welcher in oxconfig.OXVARTYPE festgelegt wurde.

Vordefinierte Werte für eine Drop-Down-Auswahl legt man in oxconfigdisplay.OXVARCONSTRAINT fest:

Eigene Optionsgruppen werden automatisch erzeugt, wenn in oxconfigdisplay.OXGROUPING ein Name angegeben ist und die Übersezung zu theme_options.php hinzugefügt wurde (nach folgendem Muster: 'SHOP_THEME_GROUP_meinegruppe').

SQL ausführen zum Eintragen der Werte:

INSERT INTO `oxconfigdisplay` (`OXID`,`OXCFGMODULE`,`OXCFGVARNAME`,`OXGROUPING`,`OXVARCONSTRAINT`,`OXPOS`) VALUES ('azure.blShowSlogan.1', 'theme:azure', 'blShowSlogan', 'display', , 0); 

3. Übersetzung hinzufügen in out/azure/[en|de]/theme_options.php

'SHOP_THEME_blShowSlogan'  =&gt; 'Slogan anzeigen',

4. Slogan mit Prüfung der Options-Einstellung in Template out/azure/tpl/layout/header.tpl einbauen

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

/tmp leeren und Service -&gt; Tools -&gt; Views aktualisieren

Im Backend ist die neue Option zu sehen, im Frontend bei angehaktem Kontrollkästchen der Slogan:





Ein eigenständiges Theme "klonen"
Um ein eigenes Theme mit allen Config-Möglichkeiten unabhängig vom Eltern - Theme zu erhalten, muss man alle Dateien des Ausgangs-Theme in einen neuen Ordner kopieren ( /meinTheme) und dann das passende Script ausführen (natürlich vorher mit den eigenen Werten/Pfaden angepasst):


 * für Shopversionen 4.5.x: http://wiki.oxidforge.org/Snippet_collection/clone_theme_with_config_4-5


 * für Shopversionen 4.7.x : http://wiki.oxidforge.org/Snippet_collection/clone_theme_with_config_4-7_5-0

Verzeichnisbaum /tpl
tpl ├── custom ├── email │  ├── html │   │   ├── footer.tpl │   │   ├── forgotpwd.tpl │   │   ├── header.tpl │   │   ├── invite.tpl │   │   ├── newsletteroptin.tpl │   │   ├── order_cust.tpl │   │   ├── order_owner.tpl │   │   ├── owner_reminder.tpl │   │   ├── pricealarm_owner.tpl │   │   ├── register.tpl │   │   ├── senddownloadlinks.tpl │   │   ├── sendednow.tpl │   │   ├── suggest.tpl │   │   └── wishlist.tpl │   └── plain │       ├── forgotpwd.tpl │       ├── invite.tpl │       ├── newsletteroptin.tpl │       ├── order_cust.tpl │       ├── order_owner.tpl │       ├── pricealarm_owner.tpl │       ├── register.tpl │       ├── senddownloadlinks.tpl │       ├── sendednow.tpl │       ├── suggest.tpl │       └── wishlist.tpl ├── form │   ├── account_newsletter.tpl │   ├── contact.tpl │   ├── fieldset │   │   ├── order_newsletter.tpl │   │   ├── order_remark.tpl │   │   ├── salutation.tpl │   │   ├── state.tpl │   │   ├── user_account.tpl │   │   ├── user_billing.tpl │   │   ├── user_email.tpl │   │   ├── user_noaccount.tpl │   │   └── user_shipping.tpl │   ├── forgotpwd_change_pwd.tpl │   ├── forgotpwd_email.tpl │   ├── formparams.tpl │   ├── guestbook.tpl │   ├── login_account.tpl │   ├── login.tpl │   ├── newsletter.tpl │   ├── pricealarm.tpl │   ├── privatesales │   │   ├── accept_terms.tpl │   │   ├── basketexcl.tpl │   │   └── invite.tpl │   ├── recommendation_add.tpl │   ├── recommendation_edit.tpl │   ├── register.tpl │   ├── suggest.tpl │   ├── user_checkout_change.tpl │   ├── user_checkout_noregistration.tpl │   ├── user_checkout_registration.tpl │   ├── user_password.tpl │   ├── user.tpl │   ├── wishlist_publish.tpl │   ├── wishlist_search.tpl │   └── wishlist_suggest.tpl ├── layout │   ├── base.tpl │   ├── footer.tpl │   ├── header.tpl │   ├── page.tpl │   ├── popup.tpl │   └── sidebar.tpl ├── message │   ├── err_404.tpl │   ├── errors.tpl │   ├── error.tpl │   ├── err_setup.tpl │   ├── err_unknown.tpl │   ├── exception.tpl │   ├── inputvalidation.tpl │   ├── notice.tpl │   ├── success.tpl │   └── user_blocked.tpl ├── page │   ├── account │   │   ├── dashboard.tpl │   │   ├── downloads.tpl │   │   ├── forgotpwd.tpl │   │   ├── inc │   │   │   ├── account_menu.tpl │   │   │   └── file_attributes.tpl │   │   ├── login.tpl │   │   ├── newsletter.tpl │   │   ├── noticelist.tpl │   │   ├── order.tpl │   │   ├── password.tpl │   │   ├── recommendationadd.tpl │   │   ├── recommendationedit.tpl │   │   ├── recommendationlist.tpl │   │   ├── register_confirm.tpl │   │   ├── register_success.tpl │   │   ├── register.tpl │   │   ├── user.tpl │   │   └── wishlist.tpl │   ├── checkout │   │   ├── basket.tpl │   │   ├── inc │   │   │   ├── basketcontents.tpl │   │   │   ├── options.tpl │   │   │   ├── payment_other.tpl │   │   │   ├── payment_oxidcashondel.tpl │   │   │   ├── payment_oxidcreditcard.tpl │   │   │   ├── payment_oxiddebitnote.tpl │   │   │   ├── steps.tpl │   │   │   ├── trustedshops.tpl │   │   │   └── wrapping.tpl │   │   ├── order.tpl │   │   ├── payment.tpl │   │   ├── thankyou.tpl │   │   └── user.tpl │   ├── compare │   │   ├── compare.tpl │   │   └── inc │   │       └── compareitem.tpl │   ├── details │   │   ├── ajax │   │   │   ├── fullproductinfo.tpl │   │   │   └── productmain.tpl │   │   ├── details.tpl │   │   └── inc │   │       ├── attributes.tpl │   │       ├── compare_links.tpl │   │       ├── deliverytime.tpl │   │       ├── editTags.tpl │   │       ├── fullproductinfo.tpl │   │       ├── media.tpl │   │       ├── morepics.tpl │   │       ├── priceinfo.tpl │   │       ├── productmain.tpl │   │       ├── related_products.tpl │   │       ├── tabs.tpl │   │       ├── tags.tpl │   │       └── zoompopup.tpl │   ├── guestbook │   │   └── guestbook.tpl │   ├── info │   │   ├── contact.tpl │   │   ├── content_plain.tpl │   │   ├── content.tpl │   │   ├── links.tpl │   │   ├── newsletter.tpl │   │   ├── news.tpl │   │   └── suggest.tpl │   ├── list │   │   ├── list.tpl │   │   └── morecategories.tpl │   ├── privatesales │   │   ├── invite.tpl │   │   └── login.tpl │   ├── recommendations │   │   ├── inc │   │   │   └── list.tpl │   │   └── recommlist.tpl │   ├── review │   │   ├── review_login.tpl │   │   └── review.tpl │   ├── search │   │   └── search.tpl │   ├── shop │   │   ├── mallstart.tpl │   │   └── start.tpl │   ├── tags │   │   └── tags.tpl │   └── wishlist │       └── wishlist.tpl ├── rdfa │   ├── content │   │   ├── content.tpl │   │   └── inc │   │       ├── business_entity.tpl │   │       ├── delivery_charge.tpl │   │       └── payment_charge.tpl │   ├── details │   │   ├── details.tpl │   │   └── inc │   │       ├── delivery.tpl │   │       ├── object.tpl │   │       ├── payment.tpl │   │       └── price.tpl │   └── rdfa.tpl └── widget    ├── address    │   ├── billing_address.tpl    │   └── shipping_address.tpl    ├── breadcrumb.tpl    ├── dynscript.tpl    ├── facebook    │   ├── comments.tpl    │   ├── connect.tpl    │   ├── enable.tpl    │   ├── facepile.tpl    │   ├── init.tpl    │   ├── invite.tpl    │   ├── like.tpl    │   └── share.tpl    ├── footer    │   ├── categorieslist.tpl    │   ├── info.tpl    │   ├── manufacturers.tpl    │   ├── newsletter.tpl    │   ├── services.tpl    │   └── vendors.tpl    ├── header    │   ├── currencies.tpl    │   ├── languages.tpl    │   ├── loginbox.tpl    │   ├── search.tpl    │   ├── servicebox.tpl    │   └── topcategories.tpl    ├── locator    │   ├── attributes.tpl    │   ├── itemsperpage.tpl    │   ├── listdisplaytype.tpl    │   ├── listlocator.tpl    │   ├── paging.tpl    │   └── sort.tpl    ├── manufacturersslider.tpl    ├── minibasket    │   ├── countdown.tpl    │   ├── minibasketmodal.tpl    │   ├── minibasket.tpl    │   └── newbasketitemmsg.tpl    ├── product    │   ├── bargainitems.tpl    │   ├── boxproducts.tpl    │   ├── compare_links.tpl    │   ├── listitem_grid.tpl    │   ├── listitem_infogrid.tpl    │   ├── listitem_line.tpl    │   ├── list.tpl    │   └── selectbox.tpl    ├── promoslider.tpl    ├── reviews    │   ├── rating.tpl    │   └── reviews.tpl    ├── rss.tpl    ├── shoplupe    │   └── ratings.tpl    ├── sidebar    │   ├── adminbanner.tpl    │   ├── categoriestree.tpl    │   ├── news.tpl    │   ├── partners.tpl    │   ├── recommendation.tpl    │   └── tags.tpl    └── trustedshops        ├── info.tpl        └── ratings.tpl

Änderungen in der Struktur vom Theme "Basic"
Mit der Version 4.5 wurde das bisher alleinige Theme "Basic" ein wenig in der Struktur verändert. Dabei gab es sowohl Änderungen der Pfadstruktur, wie auch einige Änderungen in den Dateinamen. Hat man nun ein modifiziertes Theme auf Basis von Basic, muss man dies an die neue Struktur anpassen. http://www.oxid-esales.com/de/resources/help-faq/eshop-manual/template-struktur-des-themes-basic-ab-450

Wer nun nicht die Update-App aus den Cumulative-Patches verwenden möchte, kann dies mit diesem kleinen Batchscript erledigen. Dabei werden die alten Dateien in die neue Ordernstruktur verschoben und ggf. umbenannt. Sollten in den Templates Links enthalten sein, so muss man die ebenfalls selbst noch anpassen.

Vielen Dank an KristianH(D3) für das bereitstellen der Batch-Datei!

copy+paste - speichern als 'basic45templateschubser.bat'

@echo off md email md email\html md email\plain md message md page md page\account md page\checkout md page\compare md page\details md page\guestbook md page\info md page\list md page\privatesales md page\recommendations md page\search md page\shop md page\tags md page\wishlist md widget

move account_login_alt.tpl page/privatesales/login.tpl move account_login.tpl page/account/login.tpl move account_main.tpl page/account/dashboard.tpl move account_newsletter.tpl page/account/newsletter.tpl move account_noticelist.tpl page/account/noticelist.tpl move account_order.tpl page/account/order.tpl move account_password.tpl page/account/password.tpl move account_recommlist.tpl page/account/recommendationedit.tpl move account_user.tpl page/account/user.tpl move account_wishlist.tpl page/account/wishlist.tpl move basket.tpl page/checkout/basket.tpl move compare_popup.tpl compare_popup.tpl move compare.tpl page/compare/compare.tpl move contact.tpl page/info/contact.tpl move content_plain.tpl page/info/content_plain.tpl move content.tpl page/info/content.tpl move details.tpl page/details/details.tpl move email_forgotpwd_html.tpl email/html/forgotpwd.tpl move email_forgotpwd_plain.tpl email/plain/forgotpwd.tpl move email_invite_html.tpl email/html/invite.tpl move email_invite_plain.tpl email/plain/invite.tpl move email_newsletteroptin_html.tpl email/html/newsletteroptin.tpl move email_newsletteroptin_plain.tpl email/plain/newsletteroptin.tpl move email_order_cust_html.tpl email/html/order_cust.tpl move email_order_cust_plain.tpl email/plain/order_cust.tpl move email_order_owner_html.tpl email/html/order_owner.tpl move email_order_owner_plain.tpl email/plain/order_owner.tpl move email_owner_reminder_html.tpl email/html/owner_reminder.tpl move email_pricealarm_owner.tpl email/html/pricealarm_owner.tpl move email_register_html.tpl email/html/register.tpl move email_register_plain.tpl email/plain/register.tpl move email_sendednow_html.tpl email/html/sendednow.tpl move email_sendednow_plain.tpl email/plain/sendednow.tpl move email_suggest_html.tpl email/html/suggest.tpl move email_suggest_plain.tpl email/plain/suggest.tpl move email_wishlist_html.tpl email/html/wishlist.tpl move email_wishlist_plain.tpl email/plain/wishlist.tpl move err_404.tpl message/err_404.tpl move err_accessdenied.tpl message/err_accessdenied.tpl move err_expired_days.tpl message/err_expired_days.tpl move err_mandates_exceeded.tpl message/err_mandates_exceeded.tpl move err_setup.tpl message/err_setup.tpl move err_unknown.tpl message/err_unknown.tpl move err_unlicensed.tpl message/err_unlicensed.tpl move err_update.tpl message/err_update.tpl move forgotpwd.tpl page/account/forgotpwd.tpl move guestbook_login.tpl page/guestbook/guestbook_login.tpl move guestbook.tpl page/guestbook/guestbook.tpl move guestbookentry.tpl page/guestbook/guestbookentry.tpl move invite.tpl page/privatesales/invite.tpl move links.tpl page/info/links.tpl move list_more.tpl page/list/morecategories.tpl move list.tpl page/list/list.tpl move mallstart.tpl page/shop/mallstart.tpl move moredetails.tpl moredetails.tpl move news.tpl page/info/news.tpl move newsletter.tpl page/info/newsletter.tpl move order.tpl page/checkout/order.tpl move payment.tpl page/checkout/payment.tpl move pricealarm.tpl pricealarm.tpl move recommadd.tpl page/account/recommendationadd.tpl move recommlist.tpl page/recommendations/recommlist.tpl move register_confirm.tpl page/account/register_confirm.tpl move register_success.tpl page/account/register_success.tpl move register.tpl page/account/register.tpl move rss.tpl widget/rss.tpl move search.tpl page/search/search.tpl move security_info.tpl security_info.tpl move start.tpl page/shop/start.tpl move suggest.tpl page/info/suggest.tpl move tags.tpl page/tags/tags.tpl move thankyou.tpl page/checkout/thankyou.tpl move user.tpl page/checkout/user.tpl move wishlist.tpl page/wishlist/wishlist.tpl

echo ende pause