Teil 3 "Usermods in Templates" aus der Serie "updatesichere Anpassungen in GX2"

Thema wurde von Nonito (Gambio), 31. Januar 2012 erstellt.

  1. Danny

    Danny Erfahrener Benutzer

    Registriert seit:
    17. Juni 2011
    Beiträge:
    1.398
    Danke erhalten:
    179
    Danke vergeben:
    213
    Ok, danke MOritz. Nun kann ich mich um die Dateien kümmern.
     
  2. Muecke

    Muecke Erfahrener Benutzer

    Registriert seit:
    26. April 2011
    Beiträge:
    556
    Danke erhalten:
    16
    Danke vergeben:
    72
    Das schone daran ist, dass man beim Update nichts mehr versehentlich updaten kann.

    @Moritz, könntest du nicht mal kurz zusammenfassen in welechen Dateitypen und Verzeichnissen dies möglich ist? Ich meine auch die Phpfiles. Sitze immer wiederdavor und überlege ob es hier und da möglich ist.
     
  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
    #43 Avenger, 26. Mai 2012
    Zuletzt bearbeitet: 26. Mai 2012
    Dieser Mechanismus ist nur für Template-HTML- und -Javascript-Dateien möglich.

    Für PHP-Dateien gibt es, soweit diese schon als Klasse vorhanden sind, den Mechanismus der Klassenüberladung.

    @Gambio

    Wenn man die PHP-Anweisungen "include/require[_once]" durch Funktionen wie "gm_include/gm_require[_once]" ersetzt, könnte man auch für solche PHP-Dateien ein "USERMOD"-Konzept realisieren...

    Also z.B. statt

    require_once (DIR_FS_INC.'xtc_input_validation.inc.php');

    gm_require_once (DIR_FS_INC.'xtc_input_validation.inc.php');

    "gm_require_once" könnte prüfen, ob es die Datei "DIR_FS_INC.'xtc_input_validation.inc-USERMOD.php'" gibt, und dann alternativ diese laden, sonst die "DIR_FS_INC.'xtc_input_validation.inc.php'".....
     
  4. Moritz (Gambio)

    Moritz (Gambio) Administrator
    Mitarbeiter

    Registriert seit:
    26. April 2011
    Beiträge:
    5.329
    Danke erhalten:
    2.380
    Danke vergeben:
    776
    Die Diskussion hatten wir schon einmal. gm_require_once scheitert, da sich damit der Namensraum ändert (es sei denn, es wird nicht dateiübergreifend auf Variablen des gleichen Namensraums zugegriffen ;)). Wenn überhaupt, dann so, wie es bisher implementiert ist: require_once(get_usermod(DIR_FS_INC.'xtc_input_validation.inc.php'));
     
  5. HolgerNils (xycons.de)

    HolgerNils (xycons.de) G-WARD 2013/2014

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.958
    Danke erhalten:
    449
    Danke vergeben:
    367
    Also eine Lösung für PHP-Dateien wäre natürlich nun das Sahnehäubchen. Gerade dort finden doch auch eine Menge Änderungen statt und die Dateien sind derzeit aussen vor.
     
  6. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Die Lösung gibt es doch:

    http://www.gambio-forum.de/threads/...n-PHP-Programmen?p=38698&viewfull=1#post38698

    Habe das jetzt in 2 Shops im Einsatz, funktioniert prächtig....

    Ein sehr viel entspannteres Arbeiten.

    Die htaccess wurde zwischenzeitlich noch etwas optimiert:

    PHP:
    ## Gambio SEO Boost
    ## www.gambio.de

    RewriteEngine on

    RewriteRule 
    ^(.*\.php)$ pt_shop_control.php?pt_shop_control_url=$1&%{QUERY_STRING} [L]

    RewriteCond %{REQUEST_FILENAME} ^(.*)\.(css|js|gif|jpg|jpeg|png|pdf)$ [NC]
    RewriteRule ^(.+) - [L]

    RewriteCond %{REQUEST_URI} (.*)?/admin/(.*)
    RewriteRule ^(.+) - [L]

    RewriteCond %{REQUEST_URI} (.*)?/images/(.*)
    RewriteRule ^(.+) - [L]

    RewriteCond %{REQUEST_URI} (.*)?/templates/(.*)
    RewriteRule ^(.+) - [L]

    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule 
    ^(.+) - [L]

    RewriteCond %{REQUEST_FILENAME} -l
    RewriteRule 
    ^(.+) - [L]

    ##boosted CONTENT
    RewriteRule (.*/)?info/([A-Za-z0-9_-]+)\.html.* pt_shop_control.php?pt_shop_control_url=shop_content.php&gm_boosted_content=$2&%{QUERY_STRING} [PT,L]

    ##boosted PRODUCTS
    RewriteRule (.*/)?([A-Za-z0-9_-]+)\.html pt_shop_control.php?pt_shop_control_url=product_info.php&gm_boosted_product=$2&%{QUERY_STRING} [PT,L]

    ##boosted CATEGORIES
    RewriteRule (.*/)?([A-Za-z0-9_-]+)[/,\.htmlpt_shop_control.php?pt_shop_control_url=index.php&gm_boosted_category=$2&%{QUERY_STRING} [L]
     
  7. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
  8. HolgerNils (xycons.de)

    HolgerNils (xycons.de) G-WARD 2013/2014

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.958
    Danke erhalten:
    449
    Danke vergeben:
    367
    Hi Avenger,
    das habe ich wahrgenommen seinerzeit. Eine geniale Vorgehensweise, zudem einfach zu durchschauen und anzuwenden! Nur kann man Shop-Updates ja auch hier nur begrenzt einfach reinklatschen, da in den Original-Dateien jeweils der Aufruf geändert werden muss, oder habe ich das falsch verstanden? Wir ersetzen die direkten Änderungen in den Originalen durch veränderte Aufrufe und verlagern die Änderung in die Arbeitskopie. Aber es bleibt dabei: das Original muss auch hier verändert werden, wenn auch in deutlich geringerem Umfang.

    Das meinte ich seinerzeit auch mit dem Hinweis an das Gambio-Team, dass es an dieser Stelle prima wäre die Lösung intern zu diskutieren und ggf. entsprechend einzubauen, so dass die geänderten Aufrufe (ab da funzt das Ganze ja ohne weiteres Zutun) direkt mitgeliefert werden; man sich also zu Deiner Lösung comitted und diese offiziell einbaut.

    Deine Lösung ist schon eine Granate und das Sahnehäubchen wäre jetzt, dass auch Gambio es einbaut (was subjektiv gesehen der Weg des geringsten Widerstands wäre) oder eine alternative Lösung anbietet (was sicherlich heftig Arbeit machen würde, daher erstmal diskutieren, ob Deine Lösung nicht den Vogel schon abschiesst).

    Denn genau an dieser Stelle hakt das Konzept der Updatesicherheit noch enorm. Alles andere hat eine Lösung, nur die PHPs nicht. Und Dein Vorschlag funzt, ist pflegeleicht und nachvollziehbar; warum also nicht den letzten Schritt machen...
     
  9. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Ja, sicher, das ist auch meine Hoffnung....

    Aber bis das so weit ist, kann man auch so sehr gut damit leben....

    (Sehr viel besser jedenfalls als jetzt.)

    Man lässt WinMerge die die beiden Verzeidnisse vergleichen (USERMOD und Shop-Root), bekommt bequem alle Unterschiede angezeigt und kann die dann einfach übernehmen lassen....

    Das würde das Problem natürlich auch sehr elegant lösen....

    Mal schauen...

    Hab' einfach zu wenig Zeit
     
  10. HolgerNils (xycons.de)

    HolgerNils (xycons.de) G-WARD 2013/2014

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.958
    Danke erhalten:
    449
    Danke vergeben:
    367
    hehe, da hoff ich doch, dass bald die Wehen bei Dir einsetzen ;-)
     
  11. MJ

    MJ Erfahrener Benutzer

    Registriert seit:
    28. April 2011
    Beiträge:
    476
    Danke erhalten:
    50
    Danke vergeben:
    52
    Haha :D

    Hiho Avenger, gib kurz Bescheid, wenn die Fruchtblase geplatzt ist. ;)
     
  12. C h r i s t i a n

    C h r i s t i a n G-WARD 2012

    Registriert seit:
    26. April 2011
    Beiträge:
    3.456
    Danke erhalten:
    330
    Danke vergeben:
    551
    Kann es sein das in der general.js dann auch die Reihenfolge der zu ladenen Javascripte angepasst werden muß?
     
  13. Moritz (Gambio)

    Moritz (Gambio) Administrator
    Mitarbeiter

    Registriert seit:
    26. April 2011
    Beiträge:
    5.329
    Danke erhalten:
    2.380
    Danke vergeben:
    776
    Hallo,

    die general.js nutze ich nie. Was ist dein konkreter Fall?
     
  14. C h r i s t i a n

    C h r i s t i a n G-WARD 2012

    Registriert seit:
    26. April 2011
    Beiträge:
    3.456
    Danke erhalten:
    330
    Danke vergeben:
    551
    #54 C h r i s t i a n, 24. Oktober 2012
    Zuletzt bearbeitet: 24. Oktober 2012
    Hallo Moritz,

    hatte einen tooltip eingebaut und an mehreren Stellen versucht das einzubauen. Das nur in die /usermod/javascript/Global/ zu kopieren hatte nur Fehler mit den anderen Javascripten hervorgerufen. Nun gehts und klasse Ergebnis mit meinen neuen Baby, da mit Avengers {pt_load_cms_data coID=xxxx set_title=false} Smarty die Tooltips wunderbar über den Contentmanager gefüllt werden können.
     
  15. THR

    THR Erfahrener Benutzer

    Registriert seit:
    1. Juni 2011
    Beiträge:
    276
    Danke erhalten:
    13
    Danke vergeben:
    22
    Bei mir werden leider keine JS Dateien aus dem Verzeichnis usermod/javascript/global geladen.

    v2.0.10g r6545
     
  16. wölfin

    wölfin Erfahrener Benutzer

    Registriert seit:
    16. Juni 2011
    Beiträge:
    173
    Danke erhalten:
    5
    Danke vergeben:
    38
    Woran kann es liegen, wenn ich bei Umbenennung der geänderten Dateien in -USERMOD Smarty-Fehler erhalte? Z.B. unable to read resource: "/var/www/web57/html/gx/templates/EyeCandy/objects...
     
  17. Steffen (indiv-style.de)

    Steffen (indiv-style.de) G-WARD 2013/14/15/16

    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.139
    Danke erhalten:
    1.461
    Danke vergeben:
    449
    Beruf:
    Systemadmin, Webentwickler bei Reifen24.de
    Ort:
    PhpStorm
    Das original muss aber trotzdem vorhanden sein!!!
     
  18. wölfin

    wölfin Erfahrener Benutzer

    Registriert seit:
    16. Juni 2011
    Beiträge:
    173
    Danke erhalten:
    5
    Danke vergeben:
    38
    Danke Steffen, das war mein Trugschluss. Ich nahm an, dass die Dateien anstelle der Originaldatei verwendet würden und wenn dann ein Update erfolgt, bleibt das Template erst mal so, wie gehabt, bis man die Anpassungen gemacht hat. Hab das mit dem JTL-Shop verwechselt, da benennt man die geänderten Templatedateien um.
     
  19. basti2

    basti2 Mitglied

    Registriert seit:
    25. Januar 2013
    Beiträge:
    16
    Danke erhalten:
    0
    Danke vergeben:
    3
    #59 basti2, 6. März 2013
    Zuletzt bearbeitet: 6. März 2013
    Javascript wird nicht geladen

    Ich habe ein kleines Javasript in Anlehnung an Michaels Code unter http://www.gambio-forum.de/threads/8206-Text-kürzen. In einer Demodatei auf meinem Rechner, in der das Javascript im Head eingetragen ist, funktioniert das einwandfrei. Wenn ich es allerdings in den Ordner templates/EyeCandy/usermod/javascript/Global/hello_world.js eintrage und den body-Teil meiner Demodatei im Contenmanager im HTML Modus einsetze, dann funktioniert es leider nicht. Ich befürchte, das Javascipt wird nicht geladen. Weiß jemand Rat, was ich ändern kann?
     
  20. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Nö.