Da müssen die Standard "get_usermod"-Routine und der Cache-Verwalter etwas modifiziert werden... Aber das muss m.E. unbedingt gemacht werden, weil man damit eine dramatisch einfachere Update-Prozedur fahren kann: man kann dann nämlich ein Service-Pack einfach komplett in den Shop kopieren, und dann mit z.B. WinMerge das "USERMOD"- mit dem "Shop-Root"-Verzeichnis abgleichen lassen. (Zur Erinnerung: nach meinem Konzept werden die geänderten Dateien mit demselben Namen in der gleichen Verzeichnis-Hierarchie des Originals im "USERMOD"-Verzeichnis gespeichert!) Und man kann dann direkt in WinMerge die Programm-Variante(n) im "USERMOD"-Verzeichnis semi-automtisch mit den neuen gleichnamigen SP-Modulen abgleichen, um dort vorhandene Änderungen zu integrieren! Und muss nicht erst mal überall in der Verzeichnis-Struktur nachschauen, ob und wo man was geändert hat! Gegenüber dem jetzigen Verfahren m.E. ein Quantensprung an Update-Produktivität..... Um das zu erreichen, muss man direkt in 2 Programme eingreifen (diese Änderungen müssen daher unbedingt in den Core-Gambio-Code integriert werden): "inc/get_usermod.inc.php" und "system\core\CachedDirectory.inc.php"
Juhu, freu mich! Dann macht die Geschichte wirklich Sinn. Das Vorgehen, nur nochmal zur Sicherheit: Zipilein ziehen entpacken und auf den FTP-Server kopieren. danach lege ich das Verzeichnis USERMOD an, in der dann alle USERMOD Dateien in derselben Hierachi wie die normalen Dateien kopiert werden. Soweit ok, aber nun bin ich mir nicht so sicher: - Das USERMOD Verzeichnis liegt dann im Shop-Root? - die darin enthaltenen Verzeichnisse enden immer mit USERMOD?
1. Ja. 2. Nein, ohne "-USERMOD". Einfach so, wie die Verzeichnisse und Programme in/relativ zur Shop-Root heißen.
Code: Nehmen wir mal an, wir brauchen eine geänderte Version der "default.php": nichts leichter als das! In der "index.php" wird der Aufruf PHP-Code: include (DIR_WS_MODULES.'default.php'); ersetzt mit PHP-Code: include (get_usermod(DIR_WS_MODULES.'default.php')); So. Die ersten Änderungen an den Originalen kommen ja schon mit den Versionen die in deinem Archiv sind. Wenn diese seitens Gambio geändert werden steht man(n) Frau doch auch wieder im Dunkeln. Auch die besagte Änderung in der originale index.php? Also werden die dann beim Update überschrieben? Oder! Die Archiv Dateien sollten bereits in das USERMOD Verzeichnis Dieser neue Aufruf kommt in die /USERMOD/index.php und die "neue" default.php soll auch im USERMOD liegen ?????
Ich habe das jetzt mal mit der /admin/includes/column_left.php getestet. Meine Variante habe ich in /USERMOD/admin/includes/column_left.php abgelegt. Leider wird die Änderung aus meiner Datei nicht übernommen. Was habe ich falsch gemacht?? Ich dachte es wird geprüft ob in der USERMOD Struktur eine Variante vorhanden ist. Wenn ja dann diese ansonsten die originale. Richtig?
Bis Du sicher, dass datt auch für den /admin/-Pfad gilt?? Ich denke es betrifft "nur" den /templates/...Pfad!??
Avenger hatte doch geschrieben Wobei die aktuelle Version ja theoretisch/praktisch im USERMOD die ganze Shop Struktur abbilden könnte.
Leider funktioniert das nach mehrmaligen Test nicht. Obwohl alle Dateien nun an ihrem vorgesehenen Plätzen sind wird die USERMOD struktur nicht genutzt. mmmhhhh....???
Zunächst mal: für das Admin-Menü gibt es eine wesentlich bessere Möglichkeit der Anpassung, die man auf jeden Fall nutzen sollte... Aber zum Verfahren selbst noch einmal eine Erläuterung: automatisch auf veränderte Programm-Module prüfen kann man (nach dem im ersten Post hier beschriebenen Verfahren) alle Programme, die vom Server direkt aktiviert werden. Das sind also alle Programme, die in der "Shop-Root" (Beispiele: index.php, products_info.php, checkout_xxx.php, usw.), oder im "admin"-Verzeichnis (Beispiele: start.php, categories.php, customers.php, orders.php, usw.,) liegen. PHP-Programme, die von diesen Programmen aufgerufen werden, können nicht automatisch geprüft werden, sondern müssen über die "get_usermod"-Routine geladen werden! Im genannten Beispiel müsste also in einem geänderten Admin-Programm der Aufruf PHP: require(DIR_WS_INCLUDES . 'column_left.php'); ersetzt werden mit: PHP: require(get_usermod(DIR_WS_INCLUDES . 'column_left.php')); (Was man aber tunlichst vermeiden sollte, da 'column_left.php' ja in jedem Admin-Modul integriert werden muss....) Anderes Beispiel: wenn man in dem (geänderten) "categories.php"-Programm im Admin eine andere "categories.php"-Klasse verwenden will (um z.B. zusätzliche Felder im Kategorie/Artikel-Stammsatz zu behandeln), muss man das "categories.php"-Programm als USERMOD bereit stellen, und dort den Aufruf PHP: require_once('includes/classes/categories.php'); ersetzen mit PHP: require_once(get_usermod('includes/classes/categories.php')); Und natürlich auch eine geänderte Variante der "categories.php"-Klasse bereit stellen. (Ideal wäre es natürlich, wenn der Gambio Core-Code komplett auf diese Aufrufe über "get_usermod" umgestellt würde... Dann könnte man sich im genannten Beispiel ersparen, das "categories.php"-Programm auch als USERMOD zu definieren...)
Ok. War nur ein Test mit einer nicht Shop gefärdenden Datei. ;-) Hoffentlich habe ich das nun richtig verstanden. Egal wie ich das USERMOD Verzeichnis verwenden will - ich muss die neuen Versionen in den Originaldateien über. Code: require_once(get_usermod('pfad/xy.php')); aufrufen.
Außer denen in der Shop-Root und im "admin"-Verzeichnis, da geht das automatisch... Und nicht in den "Originaldateien", sondern einer "USERMOD"-Version der Originaldatei... Sonst macht das ja keinen Sinn.
Ich habe das jetzt mal entsprechend dem beschriebenen Verfahren bei mir reorganisiert. Alleine im Shop-Frontend habe ich 26 Dateien in das "USERMOD"-Verzeichnis verlagert, aus dem Admin werden noch eine ganze Reihe weiterer dazu kommen. Dabei habe ich festgestellt, dass es für die Flexibilität sinnvoll wäre, wenn im Gambio-Core mehr Programme schon mit "get_usermod" aufgerufen würden. Heiße Kandidaten dafür sind in der "application_top" enthalten: PHP: require_once(DIR_FS_INC . 'get_usermod.inc.php');require_once (DIR_FS_INC.'xtc_db_connect.inc.php');require_once (DIR_FS_INC.'xtc_db_close.inc.php');require_once (DIR_FS_INC.'xtc_db_error.inc.php');require_once (DIR_FS_INC.'xtc_db_perform.inc.php');require_once (DIR_FS_INC.'xtc_db_query.inc.php');require_once (DIR_FS_INC.'xtc_db_queryCached.inc.php');require_once (DIR_FS_INC.'xtc_db_fetch_array.inc.php');require_once (DIR_FS_INC.'xtc_db_num_rows.inc.php');require_once (DIR_FS_INC.'xtc_db_data_seek.inc.php');require_once (DIR_FS_INC.'xtc_db_insert_id.inc.php');require_once (DIR_FS_INC.'xtc_db_free_result.inc.php');require_once (DIR_FS_INC.'xtc_db_fetch_fields.inc.php');require_once (DIR_FS_INC.'xtc_db_output.inc.php');require_once (DIR_FS_INC.'xtc_db_input.inc.php');require_once (DIR_FS_INC.'xtc_db_prepare_input.inc.php');require_once (DIR_FS_INC.'xtc_get_top_level_domain.inc.php');require_once (DIR_FS_INC.'xtc_hide_session_id.inc.php');// include needed functionsrequire_once(DIR_FS_INC . 'xtc_create_random_value.inc.php');require_once(DIR_FS_INC . 'xtc_get_prid.inc.php');require_once(DIR_FS_INC . 'xtc_draw_form.inc.php');require_once(DIR_FS_INC . 'xtc_draw_input_field.inc.php');require_once(DIR_FS_INC . 'xtc_image_submit.inc.php');require_once(DIR_FS_INC . 'xtc_get_prid.inc.php');// html basicsrequire_once (DIR_FS_INC.'xtc_href_link.inc.php');require_once (DIR_FS_INC.'xtc_draw_separator.inc.php');require_once (DIR_FS_INC.'xtc_php_mail.inc.php');require_once (DIR_FS_INC.'xtc_product_link.inc.php');require_once (DIR_FS_INC.'xtc_category_link.inc.php');require_once (DIR_FS_INC.'xtc_manufacturer_link.inc.php');// html functionsrequire_once (DIR_FS_INC.'xtc_draw_checkbox_field.inc.php');require_once (DIR_FS_INC.'xtc_draw_form.inc.php');require_once (DIR_FS_INC.'xtc_draw_hidden_field.inc.php');require_once (DIR_FS_INC.'xtc_draw_input_field.inc.php');require_once (DIR_FS_INC.'xtc_draw_password_field.inc.php');require_once (DIR_FS_INC.'xtc_draw_pull_down_menu.inc.php');require_once (DIR_FS_INC.'xtc_draw_radio_field.inc.php');require_once (DIR_FS_INC.'xtc_draw_selection_field.inc.php');require_once (DIR_FS_INC.'xtc_draw_separator.inc.php');require_once (DIR_FS_INC.'xtc_draw_textarea_field.inc.php');require_once (DIR_FS_INC.'xtc_image_button.inc.php');require_once (DIR_FS_INC.'xtc_not_null.inc.php');require_once (DIR_FS_INC.'xtc_update_whos_online.inc.php');require_once (DIR_FS_INC.'xtc_activate_banners.inc.php');require_once (DIR_FS_INC.'xtc_expire_banners.inc.php');require_once (DIR_FS_INC.'xtc_expire_specials.inc.php');require_once (DIR_FS_INC.'xtc_parse_category_path.inc.php');require_once (DIR_FS_INC.'xtc_get_product_path.inc.php');require_once (DIR_FS_INC.'xtc_get_category_path.inc.php');require_once (DIR_FS_INC.'xtc_get_parent_categories.inc.php');require_once (DIR_FS_INC.'xtc_redirect.inc.php');require_once (DIR_FS_INC.'xtc_get_uprid.inc.php');require_once (DIR_FS_INC.'xtc_get_all_get_params.inc.php');require_once (DIR_FS_INC.'xtc_has_product_attributes.inc.php');require_once (DIR_FS_INC.'xtc_image.inc.php');require_once (DIR_FS_INC.'xtc_check_stock_attributes.inc.php');require_once (DIR_FS_INC.'xtc_currency_exists.inc.php');require_once (DIR_FS_INC.'xtc_remove_non_numeric.inc.php');require_once (DIR_FS_INC.'xtc_get_ip_address.inc.php');require_once (DIR_FS_INC.'xtc_setcookie.inc.php');require_once (DIR_FS_INC.'xtc_check_agent.inc.php');require_once (DIR_FS_INC.'xtc_count_cart.inc.php');require_once (DIR_FS_INC.'xtc_get_qty.inc.php');require_once (DIR_FS_INC.'create_coupon_code.inc.php');require_once (DIR_FS_INC.'xtc_gv_account_update.inc.php');require_once (DIR_FS_INC.'xtc_get_tax_rate_from_desc.inc.php');require_once (DIR_FS_INC.'xtc_get_tax_rate.inc.php');require_once (DIR_FS_INC.'xtc_add_tax.inc.php');require_once (DIR_FS_INC.'xtc_cleanName.inc.php');require_once (DIR_FS_INC.'xtc_calculate_tax.inc.php');require_once (DIR_FS_INC.'xtc_input_validation.inc.php');require_once (DIR_FS_INC.'xtc_js_lang.php');require_once (DIR_FS_INC.'xtc_get_products_name.inc.php');require_once (DIR_FS_CATALOG . 'gm/modules/gm_gprint_application_top.php');require_once (DIR_FS_CATALOG . 'gm/classes/GMCounter.php');require_once (DIR_FS_CATALOG . 'gm/classes/GMLightboxControl.php');require_once (DIR_FS_CATALOG . 'admin/gm/classes/GMOpenSearch.php');require_once (DIR_FS_CATALOG . 'gm/inc/gm_clear_string.inc.php');require_once (DIR_FS_CATALOG . 'gm/inc/gm_prepare_string.inc.php');require_once (DIR_FS_CATALOG . 'gm/inc/gm_set_conf.inc.php');require_once (DIR_FS_CATALOG . 'gm/inc/gm_get_conf.inc.php');require_once (DIR_FS_CATALOG . 'gm/inc/gm_set_content.inc.php');require_once (DIR_FS_CATALOG . 'gm/inc/gm_get_content.inc.php');require_once (DIR_FS_CATALOG . 'gm/inc/gm_get_content_by_group_id.inc.php');require_once (DIR_FS_CATALOG . 'gm/inc/gm_get_categories_icon.inc.php');require_once (DIR_FS_CATALOG . 'gm/inc/gm_mega_flyover_prepare.inc.php');require_once (DIR_FS_CATALOG . 'gm/inc/gm_is_valid_trusted_shop_id.inc.php');require_once (DIR_FS_CATALOG . 'gm/inc/gm_convert_qty.inc.php');require_once (DIR_FS_CATALOG . 'gm/inc/gm_create_corner.inc.php');require_once (DIR_FS_CATALOG . 'gm/inc/gm_get_privacy_link.inc.php'); Auch die 'cart_actions.php' ist ein Kandidat dafür, da man da auch sehr oft Änderungen vorsehen muss. PHP: require (DIR_WS_INCLUDES.FILENAME_CART_ACTIONS);
Beim Testen der Funktionalität ist mir aufgefallen, dass "gm_javascript.js.php" und "gm_ajax.php" die standard "application_top.php" einbinden. Da wird m.E. viel unnötiger Ballast eingebunden, der viel Zeit kostet und gar nicht verwendet wird. Hier wäre eine angepasste Variante sicher sehr ratsam.
Die neue application_top.php haben wir schon fertig. Die kommt dem nächsten großen Feature-Service Pack.
Avenger, hi! Ich habe die zweite Option aktiviert und die erste auskommentiert, damit ich xxx-USERMOD.php benutzen kann. Aber dann bekomme ich folgenden Fehler: Code: FATAL ERROR(256): "CachedDirectory scan_dir failed, because p_path is not a valid absolute path: /var/www/web1413/html/USERMOD" in /var/www/web1413/html/system/core/CachedDirectory.inc.php:203 ([URL="http://www.esmokerstore2012.alfahosting.org/logoff.php#"]Details[/URL]) Backtrace: #0 trigger_error called at [/var/www/web1413/html/system/core/CachedDirectory.inc.php:203] #1 (#CachedDirectory) scan_dir called at [/var/www/web1413/html/system/core/CachedDirectory.inc.php:150] #2 (#CachedDirectory) rebuild_cache called at [/var/www/web1413/html/system/core/CachedDirectory.inc.php:225] #3 (#CachedDirectory) load_cache called at [/var/www/web1413/html/system/core/CachedDirectory.inc.php:55] #4 (#CachedDirectory) CachedDirectory called at [/var/www/web1413/html/system/core/ClassRegistry.inc.php:49] #5 (#ClassRegistry) scan_dir called at [/var/www/web1413/html/system/core/MainFactory.inc.php:92] #6 (#MainFactory) get_class_registry called at [/var/www/web1413/html/system/core/MainFactory.inc.php:121] #7 (#MainFactory) load_class called at [/var/www/web1413/html/system/core/MainFactory.inc.php:155] #8 (#MainFactory) create_object called at [/var/www/web1413/html/includes/application_top.php:228] #9 include called at [/var/www/web1413/html/logoff.php:33] Hm, sieht so aus als wenn er zumindest ein leeres "USERMOD"-Verzeichnis braucht in der Root ;-) So ist der Fehler weg, aber ich kriegs nicht ans Fliegen. Weder mit -USERMOD noch im jeweiligen Verzeichnis "USERMOD". z. B. meine "create_account.php" habe ich in modifizierter Version ins "USERMOD"-Dir gelegt (von der Basis aus) und wird ums verrecken nicht gezogen.