Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Mithilfe der Community erwünscht - Dokumentation des auto_include Modul Systems

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.185
    • Geschlecht:
    Hallo ihr lieben,

    mir wurde neulich der folgende Beitrag gemeldet und darum gebeten das doch irgendwo sinnvoll zu verlinken: DATA BASE ERROR AT

    Dabei kam mir in den Sinn, dass es doch schön wäre, wenn sich die Experten der Community mal an einen Beitrag bei uns im Wiki machen, wo sie das neue auto_include Plugin System etwas erklären. Gerne anhand von Beispielen, damit eben solche Beiträge wie der verlinkte nicht in Vergessenheit geraten.

    Hier geht es zur Wiki-Seite, die gerne bearbeitet und mit Content gefüllt werden darf: Auto include Modul System

    Vielen Dank vorab allen Mitwirkenden. :thx:

    Grüße

    Torsten

    Linkback: https://www.modified-shop.org/forum/index.php?topic=37393.0

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.185
    • Geschlecht:
    Vielen lieben Dank oneQ für deine großartige Mithilfe bei der Erstellung der Wiki-Seite! :thx:

    Grüße

    Torsten

    Q

    • Fördermitglied
    • Beiträge: 1.502
    Gerne. Ist zwar sehr einfach formuliert und nicht ganz das Niveau was man so erwartet, aber schon einmal ein Anfang.

    Danke für das Formatieren! Ich war schon froh überhaupt herauszufinden wie man den Code in eine Box bekommt.

    Ein paar Fragen habe ich aber noch. Mir ist aufgefallen, dass die auto includes zum Teil unterschiedlich sind.

    Es gibt am Ende der Codezeilen die Varianten:

    Code: PHP  [Auswählen]
    as $file) require ($file);
    as $file) require_once ($file);

    Machen das in den Fällen einen Unterschied und wenn ja, welchen?

    *EDIT*: Hier kommen beide Varianten in einer Datei vor:
    \~\includes\modules\categories_listing.php

    Line 71:

    Code: PHP  [Auswählen]
          foreach(auto_include(DIR_FS_CATALOG.'includes/extra/modules/categories_listing/categories_content/','php') as $file) require ($file);

    Line 89:

    Code: PHP  [Auswählen]
      foreach(auto_include(DIR_FS_CATALOG.'includes/extra/modules/categories_listing/categories_smarty/','php') as $file) require_once ($file);

    oder zwei "besondere"

    \~\admin\includes\functions\general.php

    Code: PHP  [Auswählen]
        foreach(auto_include(DIR_FS_CATALOG.'includes/extra/cache/','php') as $file) {
          $name = substr(basename($file), 0, strrpos(basename($file), '_cache.php'));
          $cache_array[] = array('id' => $name, 'text' => ucwords(str_replace(array('.', '_'), ' ', $name)));
        }

    und

    \~\admin\includes\classes\categories.php

    Code: PHP  [Auswählen]
          foreach(auto_include(DIR_FS_CATALOG.'templates/'.CURRENT_TEMPLATE.$path, 'html') as $file) {
            $files[] = array (
              'id' => basename($file),
              'text' => basename($file),
            );
          }

    Da werde ich auch nicht ganz schlau draus.

    Werden da im letzten Fall zusätzlich die 'id' und 'text' aus dem Dateinamen definiert?
    Vielleicht können mir die Profis hier etwas "Nachhilfe" geben.

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.185
    • Geschlecht:
    [...]
    Es gibt am Ende der Codezeilen die Varianten:

    Code: PHP  [Auswählen]
    as $file) require ($file);
    as $file) require_once ($file);

    Machen das in den Fällen einen Unterschied und wenn ja, welchen?

    *EDIT*: Hier kommen beide Varianten in einer Datei vor:
    \~\includes\modules\categories_listing.php

    Line 71:

    Code: PHP  [Auswählen]
          foreach(auto_include(DIR_FS_CATALOG.'includes/extra/modules/categories_listing/categories_content/','php') as $file) require ($file);

    Line 89:

    Code: PHP  [Auswählen]
      foreach(auto_include(DIR_FS_CATALOG.'includes/extra/modules/categories_listing/categories_smarty/','php') as $file) require_once ($file);
    [...]

    Hier ist es ganz gut erklärt: Unterschied zwischen require, include, require_once und include_once?
    In 99,9% der Fälle wird ein require_once() ausreichen. Wieso wir an der ersten Stelle ein require() verwenden kann ich dir nicht sagen.

    [...]
    oder zwei "besondere"

    \~\admin\includes\functions\general.php

    Code: PHP  [Auswählen]
        foreach(auto_include(DIR_FS_CATALOG.'includes/extra/cache/','php') as $file) {
          $name = substr(basename($file), 0, strrpos(basename($file), '_cache.php'));
          $cache_array[] = array('id' => $name, 'text' => ucwords(str_replace(array('.', '_'), ' ', $name)));
        }
    [...]

    $name wird gebildet aus dem Dateinamen abzüglich "_cache.php"
    Beispiel:
    Der Dateiname lautet "redis_cache.php", dann ist $name = redis

    Für die Anzeige im Dropdown unter "Erw. Konfiguration" -> "Cache Optionen" -> "Cache Engine" wird "text" aus dem Dateinamen gebildet.
    Der Code besagt beispielsweise aus "redis_test_datei_cache.php" wird im Dropdown stehen: "Redis Test Datei"
    ucwords() wandelt jeden ersten Buchstaben eines Wortes innerhalb eines Strings in einen Großbuchstaben.
    Punkte und Kommata werden gegen Leerzeichen ersetzt.

    [...]
    und

    \~\admin\includes\classes\categories.php

    Code: PHP  [Auswählen]
          foreach(auto_include(DIR_FS_CATALOG.'templates/'.CURRENT_TEMPLATE.$path, 'html') as $file) {
            $files[] = array (
              'id' => basename($file),
              'text' => basename($file),
            );
          }

    Da werde ich auch nicht ganz schlau draus.

    Werden da im letzten Fall zusätzlich die 'id' und 'text' aus dem Dateinamen definiert?
    Vielleicht können mir die Profis hier etwas "Nachhilfe" geben.

    id und text werden auf den Dateinamen gesetzt. Somit hast du in der Kategoriebearbeitung im Dropdown für die Vorlagen immer den Dateinamen stehen.

    Grüße

    Torsten

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.743
    • Geschlecht:
    Sollen in dem Wiki-Beitrag auch Klassenerweiterungen behandelt werden oder wird das ein eigener Content ?

    Gruß,
    noRiddle

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.185
    • Geschlecht:
    Dafür würde ich eine neue Wiki-Seite erstellen: Klassenerweiterungen Module System

    Grüße

    Torsten

    RobinTheHood

    • Experte
    • Beiträge: 204
    • Geschlecht:
    Mir gefällt, dass es hier (im Wiki) mehr Dokumentation dazu gibt. Schön, dass ihr das macht. :-)

    Mit besten Grüßen
    Robin

    Q

    • Fördermitglied
    • Beiträge: 1.502
    :thx: für die Erklärung Torsten.
    Den Link werde ich mir bei Gelegenheit am PC mal zu Gemüte führen. Unterwegs ist das immer doof.

    Q

    • Fördermitglied
    • Beiträge: 1.502
    Updated.

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.185
    • Geschlecht:
    Danke für die Mühe, die du dir gemacht hast! :thx:
    Das war sicherlich einiges an Arbeit! :thumbs:

    Grüße

    Torsten

    Q

    • Fördermitglied
    • Beiträge: 1.502
    2h Zugfahrt und ein Tatort. ;-)

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.185
    • Geschlecht:
    Ja das dachte ich mir... jede Menge Arbeit und damit auch verbundene Zeit!
    Vielen lieben Dank nochmal! :thx:

    Grüße

    Torsten

    Q

    • Fördermitglied
    • Beiträge: 1.502
    Gerne. War dann doch etwas spät. Ich habe noch ein paar Fragen.

    Mit 2.0.6.0 sind jetzt Einträge wie

    Code: PHP  [Auswählen]
    foreach(auto_include($module_directory, substr($file_extension, 1)) as $file)
    Code: PHP  [Auswählen]
    foreach(auto_include($module_directory, $file_extension) as $file)
    Code: PHP  [Auswählen]
    foreach(auto_include($module_dir.$module_type.'/','php') as $file)

    vom bisherigen auto_include Syntax abweichen und meist mit switch/case auch unterschiedlich initialisiert sind.

    Wurde hier bewusst mal module_dir und mal mudule_directory verwendet?
    Bei module_dir wird module_type als Variable mitgegeben, bei module_directory das Unterverzeichnis/Type jeweils "hardgecoded" dran gehangen. Ist der Effekt nicht der gleiche?
    Wenn ja, sollte das dann nicht einheitlich umgesetzt werden (Stichwort: "System")?

    Als "Nicht-Profi" fehlt mir da vielleicht auch das programmiertechnische Verständnis und lerne gerne dazu.  :-)

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.185
    • Geschlecht:
    Kannst du dafür bitte mal ein Ticket eröffnen vom Typ "Frage"?

    Grüße

    Torsten

    Q

    • Fördermitglied
    • Beiträge: 1.502
    :arrow: Ticket #2011 erstellt.
    69 Antworten
    37335 Aufrufe
    01. Februar 2017, 19:00:40 von mahagma
    9 Antworten
    6965 Aufrufe
    02. September 2011, 15:22:47 von Tomcraft
    1 Antworten
    879 Aufrufe
    24. August 2020, 12:47:49 von webald
    0 Antworten
    1869 Aufrufe
    05. März 2017, 19:10:34 von Q