ProductInfoContentView.inc.php Änderung

Thema wurde von tomm, 12. September 2011 erstellt.

  1. tomm

    tomm Aktives Mitglied

    Registriert seit:
    26. Juli 2011
    Beiträge:
    29
    Danke erhalten:
    1
    Danke vergeben:
    3
    Hallo zusammen,

    hab da mal ne Frage:
    Normalerweise kann ich in der Datei /system/views/product_info/ProductInfoContentView.inc.php eine stinknormale PHP Anweisung wie z.B.
    PHP:
    echo "test"
    einfügen und dies sollte doch dann auch auf der Artikelseite angezeigt werden. Schön und gut - funzt auch auf meinem lokalen Testsystem, jedoch nicht auf dem Liveserver (Seitencache geleert, ebenfalls Inhalte in /templates_c gelöscht).
    Hat da jemand eine Erklärung dafür? Finde ich sehr komisch.

    thx tom

    ---
    Gambio GX2 v2.0.6h r3647
     
  2. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    "cache"-Verzeichnis geleert?
     
  3. tomm

    tomm Aktives Mitglied

    Registriert seit:
    26. Juli 2011
    Beiträge:
    29
    Danke erhalten:
    1
    Danke vergeben:
    3
    #3 tomm, 12. September 2011
    Zuletzt bearbeitet: 12. September 2011
    Yep, nix mehr drin.

    Kapier´s einfach nicht!

    Ach ja, verwende EyeCandy Template.
    Aber was jetzt ganz lustig ist: Wenn ich einen FatalError provoziere (z.B. erste Zeile require_once(...) -> require_onc(...)) und die Seite neu lade, erhalte ich online keine Fehlermeldung (auch nicht im Apache errorlog).

    Wo wird denn die Seite noch gecached außer unter cache/ oder templates_c/ ?
     
  4. tomm

    tomm Aktives Mitglied

    Registriert seit:
    26. Juli 2011
    Beiträge:
    29
    Danke erhalten:
    1
    Danke vergeben:
    3
    #4 tomm, 12. September 2011
    Zuletzt bearbeitet: 12. September 2011
    So, jetzt wird´s lustig:

    Ich habe spaßeshalber der ProductInfoContentView.inc.php die Leserechte genommen -> die Seite wird trotzdem angezeigt!
    Habe dann der ProductInfoContentView.inc.orig.php die Leserechte genommen -> Fehler

    D.h. online wird die ProductInfoContentView.inc.orig.php verwendet, offline die ProductInfoContentView.inc.php!

    Wie kann das sein? Kann man das irgendwo einstellen?

    Wenn ich der ProductInfoContentView.inc.php die Leserechte wieder gebe, wird trotzdem versucht auf die ProductInfoContentView.inc.orig.php zuzugreifen!

    Is it a bug or a feature?

    thx tom
     
  5. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Danke erhalten:
    2.693
    Danke vergeben:
    903
    Hallo tom,

    it's a feature. Die ClassRegistry (system/core/ClassRegistry.inc.php) liest alle php-Dateien z. B. aus dem system/views Verzeichnis aus, so dass deine ProductInfoContentView.inc.orig.php die ProductInfoContentView.inc.php überschreibt. Das System ermöglicht die Plugin-Fähigkeit des Shops. Nonito hat das hier genauer beschrieben: http://www.gambio-forum.de/threads/834-Plugin-Fähigkeit-von-GX2-Ein-Überblick-und-Ausblick

    Dein Offline-System sortiert die Dateien beim Auslesen der Dateien vermutlich anders, als dein Online-System, was das unterschiedliche Verhalten erklärt.
     
  6. tomm

    tomm Aktives Mitglied

    Registriert seit:
    26. Juli 2011
    Beiträge:
    29
    Danke erhalten:
    1
    Danke vergeben:
    3
    Hallo Moritz,

    ok, aber sollte man sich als Programmierer eben nicht darauf verlassen, wie ein System sortiert, sondern die Sortierung sollte vernünftigerweise durch das Programm vorgenommen werden, sonst kommt es zu eben solchen Abweichungen wie diesem (für mich ein Bug)!

    Werde jetzt die ClassRegistry bzw. Registry umprogrammieren müssen, damit ich weiterhin auf einem lokalen System (WinXP/WAMP) testen und entwickeln kann .- sehr ärgerlich.

    tom
     
  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
    Nun, daran kann der Programmierer nicht viel ändern, wie das OS die Dateien anlegt.....

    Und da das Klassensystem davon ausgeht, dass der erste Teil des Dateinamens der Klassenname ist, und die Zuordnung Klassenname/Klassenpfad in einem assoziativen Array erfolgt, wird halt nur eine Klasse "ProductInfoContentView" erkannt.

    Und welche das ist, hängt eben davon ab, in welcher Reihenfolge das OS die Dateien bei einer Verzeichnisabfrage anliefert.

    Es ist allerdings auch nicht sinnvoll eine "ProductInfoContentView.inc.orig.php" und eine "ProductInfoContentView.inc.php" im selben Verzeichnis zu haben (auch nicht in einem Unterverzeichnis dieser Hierarchie).....

    Die "ProductInfoContentView.inc.orig.php" solltest Du anderswo sichern...
     
  8. tomm

    tomm Aktives Mitglied

    Registriert seit:
    26. Juli 2011
    Beiträge:
    29
    Danke erhalten:
    1
    Danke vergeben:
    3
    Nun, da man den modularen Weg beschreiten möchte, müsste man doch nicht einfach ein scandir() nach der Extension '.php', sondern zusätzlich einen nach '.orig.php' machen und dann beide Arrays abgleichen, ob bereits der Klassenname im ersten Array (.php) schon vorhanden ist (z.B. mit array_diff_key()). Und falls nicht, das zweite Array (.orig.php) dazufügen.
     
  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
    Na ja, man kann sich auch in's Knie schießen... :)

    Nimm die "orig" raus, und das Problem ist gelöst....
     
  10. tomm

    tomm Aktives Mitglied

    Registriert seit:
    26. Juli 2011
    Beiträge:
    29
    Danke erhalten:
    1
    Danke vergeben:
    3
    Nee, ist klar ;) Das war ja auch nur ein Ansatz für Gambio bzw. so wie ich das machen würde, damit sowas auf unterschiedlichen System immer korrekt läuft.

    Habe jetzt einfach die Extension umbenannt, sodaß diese nicht mehr über die dir() funktion gefunden wird. Klappt jetzt auch alles wie gewünscht.

    Danke Avenger für den Hinweis