Plugin-Fähigkeit von GX2: Ein Überblick und Ausblick

Thema wurde von Nonito (Gambio), 14. Juli 2011 erstellt.

  1. Steffen (indiv-style.de)
    Steffen (indiv-style.de) G-WARD 2013/14/15/16
    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.143
    Danke erhalten:
    1.466
    Danke vergeben:
    452
    Beruf:
    Systemadmin, Webentwickler bei Indiv-Style
    Ort:
    PhpStorm
    MANFRED!! Noch isses nicht soweit. Und diese Diskusion würde es nicht geben wenn wir zwei Deppen es verstehen würden. Vieleicht würden wir Luftsprünge machen. Ich denke halt manchmal sehr weit Hintergründig.

    Wenn du deinen Shop besser gestalten kannst als jetzt, d.h. du machtst ihn mit den neuen dingen atraktiver für deine Kunden, weil du dann die Möglichkeit hast es zu tun, dann gibts auch mehr Umsatz. Und das heist mehr Gewinn. Logisch oder.

    Übrigens ich hatte auch mal nen C64 und ehrlich, das will ich nicht mehr. Ich freuen mich immer wenn von Gambio sollche Ankündigungen kommen, weil da was passiert, es geht vorwärts. Und wenn dann noch von Avenger positive Beiträge dazu kommen. Dann mein bester kanns nur gut sein.
    Wir sollten die Stirnfalten vieleicht nicht ganz so schnell zusammenziehen nur weil wir es nicht raffen.
     
  2. Manni_HB
    Manni_HB G-WARD 2012/13/14/15
    Registriert seit:
    26. April 2011
    Beiträge:
    9.098
    Danke erhalten:
    1.540
    Danke vergeben:
    909
    Ort:
    Bremen
    Das hat was, ehrlich ... nehmen wir es als Motto zum Tage und wühlen weiter genüsslich in dem uns vertrauten Quellcode. :)
     
  3. Avenger
    Avenger G-WARD 2012/13/14/15
    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Sicher bringt das keinen zusätzlichen Umsatz, aber die Kosten der Shoppflege sinken dramatisch!

    Zum einen das Thema Updates...

    Es ist ein Alptraum neue (Sicherheits-)Updates einzuspielen, wen man ein paar Erweiterungen hat.

    Das gehört dann der Vergangenheit an, weil Änderungen des Kern-Shopsystems keine Auswirkungen mehr auf unsere Erweiterungen haben.

    Dann gibt es zum ersten Mal in der xxCommerce-Welt eine einheitliche Programmierschnittstelle, die den gräuslichen xxCommerce-Spaghetti-Code ablöst.

    Und schließlich: um Dinge wie zubuchbare Erweiterungen usw. zu ermöglichen braucht man halt so eine Technologie-Plattform, mit der jetzigen Pfriemelei beim Einbau von Modulen ist das schlicht unmöglich.

    Diese moderenen Technologien erlauben sogar die Anpassung von bestehenden Templates für neue Module, ohne diese ändern zu müssen! (Block-System von Smarty 3. Das dürfte aber noch Zukunftsmusik für Gambio sein....)

    Und für die Gambio GmbH ist Gambio in der alten Form einfach nicht mehr wartbar, vor allem wenn man die fortschrittlichen Wünsche der Anwender so sieht....

    Aus der OXID- und Shopware-Welt weiß ich, dass Shopbetreiber auch in solchen Umgebungen sich zu helfen wissen.

    Man braucht allerdings ein Mindest-Know-How, um sich da selbst zu betätigen.

    (Aber das ist ja nichts Neues: wenn ich meinen PKW oder Farbfernseher aufmotzen will, muss ich ja auch wissen, worum es geht...)

    Oder man erwirbt eben Module, die man einfach auf dieser Basis installieren kann.....

    Und für die hartnäckigen Verweigerer gibt es ja immer noch die Möglichkeit, es so zu machen wie bisher: immer schön direkt im Quellcode ändern.
     
  4. Avenger
    Avenger G-WARD 2012/13/14/15
    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Auch dieses Problem konnte ich lösen, so dass man hier gar nicht mehr eingreifen muss.....

    Bei diesen "alten" Klassen wird jetzt bei der Erstellung der Zuordnungsdaten "Klasen-Name=>Klassendatei", die die Factory benötigt, der Klassenname aus dem Klassen-Quellcode (und nicht dem Klassen-Dateinamen) ermittelt, so dass das nun auch so in Ordnung ist.

    Da diese Daten gecached werden, wird die Ermittlung dieser Zuordnungsdaten recht selten nötig, eigentlich nur dann, wenn neue Klassen hinzukommen. Dann löscht man einfach die Cache-Datei, und schon ist das wieder OK.

    (Sind immerhin 53 Klassendateien, die so angepasst werden müssen, diese Arbeit kann man sich also sparen.)

    Im Anhang zur Info eine Datei, die die insgesamt vorhandenen Klassen und ihre Zuordnung zu Dateien darstellt, und ebenso die Klassen zeigt, die auf die zuvor beschriebene Weise angepasst werden mussten.
     

    Anhänge:

  5. Manni_HB
    Manni_HB G-WARD 2012/13/14/15
    Registriert seit:
    26. April 2011
    Beiträge:
    9.098
    Danke erhalten:
    1.540
    Danke vergeben:
    909
    Ort:
    Bremen
    Ok ... Avenger,

    das sind durchaus plausible Argumente, die sogar ich verstehe! :)
    >...Man braucht allerdings ein Mindest-Know-How, um sich da selbst zu betätigen.
    Ist´ne Herausforderung - aber die lieben wir ja!
     
  6. Daniel (Gambio)
    Daniel (Gambio) Erfahrener Benutzer
    Registriert seit:
    8. April 2011
    Beiträge:
    1.901
    Danke erhalten:
    1.621
    Danke vergeben:
    424
    Spannend, wie die Diskussion sich entwickelt!
    Die Befürchtung, dass aus Gambio ein Shopsystem werden könnte, das nur studierte Entwickler anpassen können, kann ich euch nehmen. Aber es wird sich Einiges ändern und Anpassungen werden auch teilweise anspruchsvoller werden. Die Vorteile, die diese neuen Entwicklungen mitbringen, werden aber meiner Meinung nach bei Weitem überwiegen. Für kaum ein Shopsystem gibt es so viele Module wie für xt-commerce und für kaum ein Shopsystem ist der Begriff 'Modul' so unpassend wie für xt-commerce und darauf basierende Systeme. Sämtliche Erweiterungen, Anpassungen usw. sind 'dreckige' Hacks, die in den Kern des Systems eingreifen und es damit Update-unfähig machen.

    Ich glaube, ihr könnt Euch nicht vorstellen, wie viele Anfragen von Kunden wir jeden Tag erhalten, die liebend gern auf GX2 updaten möchten, es aber nicht können oder sich nicht trauen, da der Shop so extrem angepasst ist. Ich verspreche euch: Einige davon werden nicht updaten, bis es zu spät ist (zu spät = gehackt, da Sicherheits-Updates nicht eingespielt o.Ä.). Es kann also nicht die Lösung sein, dass sich jeder sein Shopsystem so zusammenfrickelt, wie er es gerade für richtig hält und am Ende haben wir 10.000 individuelle Shopsysteme im Einsatz.

    Die Lösung ist: Es müssen "Regeln" her, die festlegen, an welchen Stellen Anpassungen gemacht werden sollten und wo nicht. So werden Anpassungen nur noch dort vorgenommen, wo Sie von zukünftigen Updates nicht überschrieben werden und der Shop bleibt Update-sicher.

    Ein Beispiel: Eine der wesentlichen Veränderungen von osc zu xtc war die Einführung der Template Engine. Im osc waren PHP-Code (Funktionen) und HTML-Code (Design) miteinander vermischt. Das war zwar super einfach, da Anpassungen nur an einer Stelle vorgenommen werden mussten, wollte man aber nur eine Kleinigkeit am HTML-Code ändern, hatte dies auch immer Auswirkungen auf den PHP-Code.

    Die 'Regel' lautete nun also: Trenne PHP-Code von HTML-Code. Mache Funktionsänderungen an Stelle A und mache Designanpassungen an Stelle B. Plötzlich war es kinderleicht möglich, fertige Templates, die keinen Einfluss auf die Shopfunktionen hatten, einzuspielen und zu verwenden.

    Ein solches 'Regelwerk' macht also Sinn und ist eine logische Entwicklung. Unsere Aufgabe als Entwickler besteht aber nun darin:

    1. Die Regeln so sinnvoll aufzustellen, dass so viele Stellen wie möglich zukünftig Update-sicher sind, aber der Shop für Entwickler trotzdem flexibel genug für Anpassungen bleibt.

    2. Die Anzahl der Regeln und ihre Komplexität so gering wie möglich zu halten, damit es übersichtlich und praktikabel bleibt.

    Einige Shopsysteme treiben es mit den Regeln sehr weit. Dadurch ist zwar alles super standardisiert, aber der Aufwand für Entwickler ist enorm und insbesondere für kleine und mittelgroße Shops kaum zu rechtfertigen. Wir werden hier den Mittelweg suchen, da unser Augenmerk in erster Linie auf den kleineren und mittleren Shops liegt.

    Ganz wichtig: Ein solches Konzept kann noch so toll sein, es wird kaum jemand damit zurecht kommen, wenn es nicht ordentlich dokumentiert ist. Im Klartext: Die Regeln müssen niedergeschrieben werden und der Umgang und deren Interpretation müssen verständlich erklärt werden. Da haben wir momentan noch einige Defizite, welche wir nun in Angriff nehmen werden, denn es gibt bereits Stellen im Shop, die mit den neuen Konzepten umgebaut wurden, nur fehlt hier zum Großteil noch die Dokumentation.

    Liebe Entwickler, bitte verzeiht mir meine einfache und etwas verkürzte Darstellung. Hier lesen jedoch auch viele User mit, die gar nicht entwickeln können, aber trotzdem wissen möchten, wo die Reise hingeht und worüber hier eigentlich so heiß diskutiert wurde. Ich hoffe mit meiner eher einfachen und bildlichen Erläuterung konnte ich allen ein wenig näher bringen, worum es geht und warum wir diesen enormen Aufwand für absolut nötig halten.

    Und zum Schluss: Wer keinen Wert auf Update-Fähigkeit und die neuen Konzepte legt, kann natürlich auch weiterhin basteln, frickeln und hacken wie er will, wir zwingen ja keinen ;-)

    PS:
    Mehr Kunden: Nein
    Mehr Umsatz: Nein

    Aber: Weniger Aufwand = Weniger Kosten = Mehr GEWINN!
    Du wirst zukünftig etwas mehr Zeit für die einzelnen Änderungen brauchen, wenn du dich Regelkonform verhalten willst. Dafür musst du aber nicht sämtliche Anpassungen nach jedem Update erneut einspielen und an der Stelle wirst du ein Vielfaches an Zeit sparen.

    Fazit: Es macht wirtschaftlich definitiv Sinn!
     
  7. Steffen (indiv-style.de)
    Steffen (indiv-style.de) G-WARD 2013/14/15/16
    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.143
    Danke erhalten:
    1.466
    Danke vergeben:
    452
    Beruf:
    Systemadmin, Webentwickler bei Indiv-Style
    Ort:
    PhpStorm
    #27 Steffen (indiv-style.de), 18. August 2011
    Zuletzt bearbeitet: 18. August 2011
    Wow! Klasse Erklährung!
    Jetzt ist man in der Situation, wo man das nachvollziehen kann. Ich kann nur begrüssen wenn es so kommt.

    Vielen Dank @Daniel
    Vielen Dank @Avenger

    PS: Wieso ist Avenger nicht bei Gambio angestellt???? Wäre mit Sicherheit eine TOP-Ergänzung fürs Team! [schmunzel ON]
     
  8. Manni_HB
    Manni_HB G-WARD 2012/13/14/15
    Registriert seit:
    26. April 2011
    Beiträge:
    9.098
    Danke erhalten:
    1.540
    Danke vergeben:
    909
    Ort:
    Bremen
    Ok .... Daniel,

    sehr schön erklärt - Danke!

    PS: Und wenn ich eines fernen Tages nicht mehr 22,8 Std. in die Kartoffeln stecke - weiss ich was ich dann mache! :)
     
  9. silvio4444
    silvio4444 Mitglied
    Registriert seit:
    4. November 2011
    Beiträge:
    16
    Danke erhalten:
    2
    Hallo Gambio Team und Shopbetreiber,

    mal kurz noch eine Frage, damit ich weiß ob ich das alles richtig geschnallt habe.

    In Zukunft wird es so sein, das ich mir Plugins bzw. Module wie im Joomla per Klick installieren kann?


    install.jpg

    Wenn das so kommt seit ihr Götter für mich und ich werde euch jeden Abend vorm schlafen gehen anbeten!

    Wir haben 9 Shops und 4 Shopsysteme. Updates einspielen nimmt da immer eine Menge Zeit in Anspruch und mein Chef ist der Meinung das hat keine Priorität. Auch das installieren von neuen Modulen kostet viel Zeit und das versteht mein Chef nicht.
    Unsere XTC und Gambio stelle ich jetzt nach und nach auf Gambio GX2 um. Dann sind es nurnoch 2 verschiedene Systeme und es laufen 7 Shops unter GX2. Viel zu viel Arbeit für einen dessen Aufgabe es eigentlich garnicht ist sowas zu tun. Aber irgendeiner muss es ja machen.

    Gruß Silvio
     
  10. Avenger
    Avenger G-WARD 2012/13/14/15
    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Ob man das, mit vernünftigem Aufwand, so weit treiben kann, bin ich mir nicht sicher...

    Aber alleine die updatesichere Änderung von Shop-Code ist schon ein Quantensprung vorwärts.

    Für die automatische Plugin-Installation muss aber zusätzlich an vielen Stellen nachgebessert werden....
     
  11. Avenger
    Avenger G-WARD 2012/13/14/15
    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Das funktioniert halt leider nicht immer...

    Wenn sich 2 Leute über Quantenphysik austauschen, oder Chinesich reden, verstehe ich auch nur Bahnhof.

    Es muss halt immer eine solide Wissensbasis vorhanden sein, um etwas zu verstehen, das fortgeschrittene Themen betrifft...

    Wäre doch evtl. eine reizvolle Alternative :)
     
  12. Steffen (indiv-style.de)
    Steffen (indiv-style.de) G-WARD 2013/14/15/16
    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.143
    Danke erhalten:
    1.466
    Danke vergeben:
    452
    Beruf:
    Systemadmin, Webentwickler bei Indiv-Style
    Ort:
    PhpStorm
    Genau deswegen und der anderen vielen Fragen, hab ich mich jetzt für ein Fernstudium entschieden. Wie schon oft gesagt, man muss nicht alles können aber wenn man es zumindestens grob versteht, ist dies mehr als von Vorteil!
     
  13. Avenger
    Avenger G-WARD 2012/13/14/15
    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Das ist doch mal konsequent, Glückwunsch!

    Wo machst Du das?
     
  14. Steffen (indiv-style.de)
    Steffen (indiv-style.de) G-WARD 2013/14/15/16
    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.143
    Danke erhalten:
    1.466
    Danke vergeben:
    452
    Beruf:
    Systemadmin, Webentwickler bei Indiv-Style
    Ort:
    PhpStorm
    Bei ILS. Ist nicht gerade billig aber was ich in den letzten 2 Monaten gelernt habe ist echt top. Und soooo schwer isses ja auch nicht. Man muss halt nur dran bleiben und viel lernen.
     
  15. Daniel (Gambio)
    Daniel (Gambio) Erfahrener Benutzer
    Registriert seit:
    8. April 2011
    Beiträge:
    1.901
    Danke erhalten:
    1.621
    Danke vergeben:
    424
    Steffen, Du hast grundsätzlich recht, wir versuchen auch immer alles noch einmal so zu erklären, dass es auch Laien verstehen. Das Problem ist aber immer, dass bei Vereinfachungen die kleinen und wichtigen Details auf der Strecke bleiben. In diesem Fall geht es uns aber besonders auch um den Austausch mit Profis, wie z.B. Avenger, die verstehen worum es geht und mit deren Hilfe wir das Konzept noch besser machen möchten. In 'Kindergartensprache' geht das leider nicht, aber sobald das Konzept endgültig steht, werden wir das ganze natürlich noch einmal so kommunizieren, dass auch Otto-normal-Shopbetreiber versteht, worüber hier so lange und ausgibig diskutiert wurde.
     
  16. Daniel (Gambio)
    Daniel (Gambio) Erfahrener Benutzer
    Registriert seit:
    8. April 2011
    Beiträge:
    1.901
    Danke erhalten:
    1.621
    Danke vergeben:
    424
    PS: Das mit der ILS finde ich cool, hatte ich mir auch schon lange vorgenommen, es aber nie durchgezogen. Glückwunsch dazu!
     
  17. Steffen (indiv-style.de)
    Steffen (indiv-style.de) G-WARD 2013/14/15/16
    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.143
    Danke erhalten:
    1.466
    Danke vergeben:
    452
    Beruf:
    Systemadmin, Webentwickler bei Indiv-Style
    Ort:
    PhpStorm
    Da gebe ich dir recht. Es würde wieder viel zu viel Zeit benötigen um einen Entwicklungsprozess immer so zu dokumentieren, das es jeder versteht. Es war von mir etwas übereilt gefordert, das Ihr es so machen sollt. Ich weis nicht wie andere das ganze sehen, aber mich wurmt es nun mal wenn ich das nicht gebacken bekomme. Deswegen habe ich ja auch das mit ILS angefangen. Und das Thema Klassenüberladung ist mit dabei!!! JIPPI!!!

    Also @Daniel und @Avenger, schön weiter tüfteln und in fachchinesisch veröffentlichen!!!
     
  18. Avenger
    Avenger G-WARD 2012/13/14/15
    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Im Grunde muss der Laie das ja auch nicht verstehen...

    Der bekommt irgendwann mal ein Kochrezept, wie das anzuwenden ist, und gut ist.

    Man guckt ja auch Fernsehen, ohne zu wissen, wie das alles so funktioniert.
     
  19. Avenger
    Avenger G-WARD 2012/13/14/15
    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    In den letzten Tagen ist mir bewusst geworden, dass man auch heute(!) schon in gewissem Umfang updatesichere Änderungen an Gambio vornehmen kann, zumindest so weit es die (140) neuen Gambio-Klassen betrifft!

    Dabei kann man sich die Arbeitsweise der "Klassen-Factory" zunutze machen....

    Diese erstellt bei jedem Durchlauf durch einen Verzeichnisscan einen assoziativen Array, bei dem für jeden Klassennamen der Pfad zu seiner Klasse gespeichert wird. (Was unbedingt gecached werden sollte...)

    Die Verzeichnisse werden in folgender Reihenfolge gescannt:

    PHP:
    $t_scan_dirs_array = array(
      
    DIR_FS_CATALOG.'system/data/',
      
    DIR_FS_CATALOG.'system/controls/',
      
    DIR_FS_CATALOG.'system/views/',
      
    DIR_FS_CATALOG.'templates/'.CURRENT_TEMPLATE.'/source/classes/',
      
    DIR_FS_CATALOG.'gm/classes/',
      
    DIR_FS_CATALOG.'gm/properties/',
      
    DIR_FS_CATALOG.'user_classes/'
    );
    Wenn man nun einfach eine der Klassen in das Verzeichnis "user_classes" kopiert, würde deren Speicherort für die Klasse in diesem Array erscheinen, da dieses Verzeichnis als letztes gescanned wird!!

    Man kann dann in dieser Klasse die Änderungen vornehmen, die man braucht, und würde diese Änderungen auch über das nächste Update retten können.

    Ist zwar etwas grobschlächtig, da man nur die ganze Klasse überladen kann, aber besser als Nichts ist das allemal!

    Ich habe so die "'gm/classes/GMTabTokenizer.php'"-Klasse modifiziert, funktioniert prächtig!

    Folgende 140 Klassen kann man auf diese Art modifizieren:

    PHP:
    accountcontentview  => 'system/views/account/AccountContentView.inc.php'
    addaquickiecontentview  => 'templates/EyeCandy/source/classes/AddAQuickieContentView.inc.php'
    addressbookcontentview  => 'system/views/account/AddressBookContentView.inc.php'
    addressbookprocesscontentview  => 'system/views/account/AddressBookProcessContentView.inc.php'
    admincontentview  => 'templates/EyeCandy/source/classes/AdminContentView.inc.php'
    advancedsearchcontentview  => 'system/views/AdvancedSearchContentView.inc.php'
    alsopurchasedcontentview  => 'system/views/product_info/AlsoPurchasedContentView.inc.php'
    bestsellerscontentview  => 'templates/EyeCandy/source/classes/BestsellersContentView.inc.php'
    bookmarkscontentview  => 'templates/EyeCandy/source/classes/BookmarksContentView.inc.php'
    cachecontrol  => 'system/controls/CacheControl.inc.php'
    categoriesagent  => 'system/controls/CategoriesAgent.inc.php'
    categoriescontentview  => 'templates/EyeCandy/source/classes/CategoriesContentView.inc.php'
    categoriesfilter  => 'system/controls/FeatureFilter/CategoriesFilter.inc.php'
    categoriessubmenuscontentview  => 'templates/EyeCandy/source/classes/CategoriesSubmenusContentView.inc.php'
    categorysliderhandler  => 'system/controls/SliderSet/CategorySliderHandler.inc.php'
    class  => 'gm/classes/csstidy/class.csstidy_print.php'
    contentcontentview  => 'templates/EyeCandy/source/classes/ContentContentView.inc.php'
    contentview  => 'system/views/ContentView.inc.php'
    countercontentview  => 'templates/EyeCandy/source/classes/CounterContentView.inc.php'
    crosssellingcontentview  => 'system/views/product_info/CrossSellingContentView.inc.php'
    currenciescontentview  => 'templates/EyeCandy/source/classes/CurrenciesContentView.inc.php'
    data  => 'gm/classes/csstidy/data.inc.php'
    dataobjectcontainer  => 'system/controls/DataObjectContainer.inc.php'
    ebaycontentview  => 'templates/EyeCandy/source/classes/EbayContentView.inc.php'
    errorhandler  => 'gm/classes/ErrorHandler.php'
    extraboxescontentview  => 'templates/EyeCandy/source/classes/ExtraboxesContentView.inc.php'
    feature  => 'system/controls/FeatureFilter/Feature.inc.php'
    featurecontrol  => 'system/controls/FeatureFilter/FeatureControl.inc.php'
    featureproductfinder  => 'system/controls/FeatureFilter/FeatureProductFinder.inc.php'
    featurevalue  => 'system/controls/FeatureFilter/FeatureValue.inc.php'
    filelog  => 'gm/classes/FileLog.php'
    filtercontentview  => 'templates/EyeCandy/source/classes/FilterContentView.inc.php'
    filtercontrol  => 'system/controls/FeatureFilter/FilterControl.inc.php'
    filtermanager  => 'system/controls/FeatureFilter/FilterManager.inc.php'
    footercontentview  => 'system/views/FooterContentView.inc.php'
    giftcartcontentview  => 'system/views/shopping_cart/GiftCartContentView.inc.php'
    gmalttext  => 'gm/classes/GMAltText.php'
    gmattributescalculator  => 'gm/classes/GMAttributesCalculator.php'
    gmcat  => 'gm/classes/GMCat.php'
    gmcounter  => 'gm/classes/GMCounter.php'
    gmcssmonitor  => 'gm/classes/GMCSSMonitor.php'
    gmcssoptimizer  => 'gm/classes/GMCSSOptimizer.php'
    gmdataobject  => 'system/data/GMDataObject.inc.php'
    gmdataobjectgroup  => 'system/data/GMDataObjectGroup.inc.php'
    gmebay  => 'gm/classes/GMEbay.php'
    gmgmotion  => 'gm/classes/GMGMotion.php'
    gmgprintcartmanager  => 'gm/classes/GMGPrintCartManager.php'
    gmgprintconfiguration  => 'gm/classes/GMGPrintConfiguration.php'
    gmgprintcontentmanager  => 'gm/classes/GMGPrintContentManager.php'
    gmgprintelements  => 'gm/classes/GMGPrintElements.php'
    gmgprintfilemanager  => 'gm/classes/GMGPrintFileManager.php'
    gmgprintorderelements  => 'gm/classes/GMGPrintOrderElements.php'
    gmgprintordermanager  => 'gm/classes/GMGPrintOrderManager.php'
    gmgprintordersurfaces  => 'gm/classes/GMGPrintOrderSurfaces.php'
    gmgprintordersurfacesmanager  => 'gm/classes/GMGPrintOrderSurfacesManager.php'
    gmgprintproductmanager  => 'gm/classes/GMGPrintProductManager.php'
    gmgprintsurfaces  => 'gm/classes/GMGPrintSurfaces.php'
    gmgprintsurfacesgroupsmanager  => 'gm/classes/GMGPrintSurfacesGroupsManager.php'
    gmgprintsurfacesmanager  => 'gm/classes/GMGPrintSurfacesManager.php'
    gmgprintwishlistmanager  => 'gm/classes/GMGPrintWishlistManager.php'
    gmjanolaw  => 'gm/classes/GMJanolaw.php'
    gmjson  => 'gm/classes/GMJSON.php'
    gmlangfilemaster  => 'gm/classes/GMLangFileMaster.php'
    gmlightboxcontrol  => 'gm/classes/GMLightboxControl.php'
    gmlogomanager  => 'gm/classes/GMLogoManager.php'
    gmmeta  => 'gm/classes/GMMeta.php'
    gmproduct  => 'gm/classes/GMProduct.php'
    gmseoboost  => 'gm/classes/GMSEOBoost.php'
    gmsitemap  => 'gm/classes/GMSitemap.php'
    gmstatusbar  => 'gm/classes/GMStatusbar.php'
    gmtabtokenizer  => 'gm/classes/GMTabTokenizer.php'
    gmtracker  => 'gm/classes/GMTracker.php'
    gmtswidget  => 'gm/classes/GMTSWidget.php'
    graduatedpricescontentview  => 'system/views/product_info/GraduatedPricesContentView.inc.php'
    imageslidercontentview  => 'templates/EyeCandy/source/classes/ImageSliderContentView.inc.php'
    indexfeatureproductfinder  => 'system/controls/FeatureFilter/IndexFeatureProductFinder.inc.php'
    infoboxcontentview  => 'templates/EyeCandy/source/classes/InfoboxContentView.inc.php'
    informationcontentview  => 'templates/EyeCandy/source/classes/InformationContentView.inc.php'
    lang  => 'gm/classes/csstidy/lang.inc.php'
    languagescontentview  => 'templates/EyeCandy/source/classes/LanguagesContentView.inc.php'
    languagetextmanager  => 'system/controls/LanguageTextManager.inc.php'
    lastviewedcontentview  => 'templates/EyeCandy/source/classes/LastViewedContentView.inc.php'
    lightboxgallerycontentview  => 'system/views/product_info/LightboxGalleryContentView.inc.php'
    listingmanager  => 'system/controls/ListingManager.inc.php'
    loginboxcontentview  => 'templates/EyeCandy/source/classes/LoginboxContentView.inc.php'
    logincontentview  => 'system/views/LoginContentView.inc.php'
    logoffcontentview  => 'system/views/LogoffContentView.inc.php'
    manufacturerscontentview  => 'templates/EyeCandy/source/classes/ManufacturersContentView.inc.php'
    manufacturersinfocontentview  => 'templates/EyeCandy/source/classes/ManufacturersInfoContentView.inc.php'
    megaflyovercontentview  => 'system/views/MegaFlyoverContentView.inc.php'
    newslettercontentview  => 'templates/EyeCandy/source/classes/NewsletterContentView.inc.php'
    orderdetailscartcontentview  => 'system/views/shopping_cart/OrderDetailsCartContentView.inc.php'
    orderdetailswishlistcontentview  => 'system/views/wish_list/OrderDetailsWishListContentView.inc.php'
    orderhistorycontentview  => 'templates/EyeCandy/source/classes/OrderHistoryContentView.inc.php'
    pagetrack  => 'system/controls/PageTrack.inc.php'
    paypalcontentview  => 'templates/EyeCandy/source/classes/PayPalContentView.inc.php'
    priceoffercontentview  => 'system/views/product_info/PriceOfferContentView.inc.php'
    productattributescontentview  => 'system/views/product_info/ProductAttributesContentView.inc.php'
    productfeaturehandler  => 'system/controls/FeatureFilter/ProductFeatureHandler.inc.php'
    productinfocontentview  => 'system/views/product_info/ProductInfoContentView.inc.php'
    productmediacontentview  => 'system/views/product_info/ProductMediaContentView.inc.php'
    productnavigatorcontentview  => 'system/views/product_info/ProductNavigatorContentView.inc.php'
    productpropertiesdata  => 'gm/properties/data/ProductPropertiesData.php'
    productquantityunithandler  => 'system/controls/QuantityUnit/ProductQuantityUnitHandler.inc.php'
    productreviewscontentview  => 'system/views/product_info/ProductReviewsContentView.inc.php'
    productreviewsinfocontentview  => 'system/views/ProductReviewsInfoContentView.inc.php'
    propertiesadmincontrol  => 'gm/properties/controls/PropertiesAdminControl.php'
    propertiesadminview  => 'gm/properties/page_modules/PropertiesAdminView.php'
    propertiesbasket  => 'gm/properties/controls/PropertiesBasket.php'
    propertiescombisadmincontrol  => 'gm/properties/controls/PropertiesCombisAdminControl.php'
    propertiescombisadminview  => 'gm/properties/page_modules/PropertiesCombisAdminView.php'
    propertiescombisstructsupplier  => 'gm/properties/data/PropertiesCombisStructSupplier.php'
    propertiescontrol  => 'gm/properties/controls/PropertiesControl.php'
    propertiesdataagent  => 'gm/properties/data/PropertiesDataAgent.php'
    propertiesstructsupplier  => 'gm/properties/data/PropertiesStructSupplier.php'
    propertiesview  => 'gm/properties/page_modules/PropertiesView.php'
    ptcat  => 'gm/classes/PTCat.php'
    quantityunit  => 'system/controls/QuantityUnit/QuantityUnit.inc.php'
    quantityunitcontrol  => 'system/controls/QuantityUnit/QuantityUnitControl.inc.php'
    reviewscontentview  => 'templates/EyeCandy/source/classes/ReviewsContentView.inc.php'
    scrollercontentview  => 'templates/EyeCandy/source/classes/ScrollerContentView.inc.php'
    searchcontentview  => 'templates/EyeCandy/source/classes/SearchContentView.inc.php'
    securetoken  => 'gm/classes/SecureToken.php'
    shoppingcartcontentview  => 'system/views/shopping_cart/ShoppingCartContentView.inc.php'
    shoppingcartdropdown  => 'templates/EyeCandy/source/classes/ShoppingCartDropdown.inc.php'
    shopurlhandler  => 'system/controls/ShopURLHandler.inc.php'
    simpleboxesmaster  => 'system/data/SimpleBoxesMaster.inc.php'
    slidercontrol  => 'system/controls/SliderSet/SliderControl.inc.php'
    sliderimage  => 'system/controls/SliderSet/SliderImage.inc.php'
    sliderset  => 'system/controls/SliderSet/SliderSet.inc.php'
    specialscontentview  => 'templates/EyeCandy/source/classes/SpecialsContentView.inc.php'
    tellafriendcontentview  => 'system/views/product_info/TellAFriendContentView.inc.php'
    templatecontrol  => 'system/controls/TemplateControl.inc.php'
    topnavigationcontentview  => 'templates/EyeCandy/source/classes/TopNavigationContentView.inc.php'
    trustedcontentview  => 'templates/EyeCandy/source/classes/TrustedContentView.inc.php'
    trustedwidgetcontentview  => 'templates/EyeCandy/source/classes/TrustedWidgetContentView.inc.php'
    whatsnewcontentview  => 'templates/EyeCandy/source/classes/WhatsNewContentView.inc.php'
    wishlistcontentview  => 'system/views/wish_list/WishListContentView.inc.php'
    yoochoosealsoclicked  => 'templates/EyeCandy/source/classes/YoochooseAlsoClicked.inc.php'
    yoochoosetopselling  => 'templates/EyeCandy/source/classes/YoochooseTopSelling.inc.php'