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: Shopversion 2.0.0.0 - Neues für Module

    webald

    • modified Team
    • Beiträge: 2.791
    Shopversion 2.0.0.0 - Neues für Module
    am: 05. April 2016, 10:06:26
    Es hat sich ja einiges geändert, was die Modulerstellung anbelangt. Es steht nun ein Autoinclude-System zur Verfügung, was Änderungen an den Shop-Dateien in Zukunft verhindern sollte. In Kürze funktioniret das so:

    Es gibt unter includes/extra/ bzw, admin/includes/extra/ weitere Unterverzeichnisse. Dateien in diesen Unterverzeichnissen werden automatisch an den jeweiligen Stellen im Code eingebunden und ausgeführt. Die Stellen im Code kann man anhand des Verzeichnisnamens ablesen. Die Mödlichketen solcher Stellen werden in weiteren Versionen vermutlich zunehmen.

    Im Code selber wird an Stellen wie
    Code: PHP  [Auswählen]
    foreach(auto_include(DIR_FS_ADMIN.'includes/extra/application_top/application_top_end/','php') as $file) require ($file);
    eingebunden.

    Eine weitere Stelle für die Einbindung von Dateien ist lang/SPRACHE/extra/. Damit ist auch die Mehrsprachigkeit ohne Code-Änderungen möglich.

    Ebenfalls möglich ist die Erweiterung im Backend. Hierzu bitte die "example"-Dateien in den Unterordnern von admin/includes/extra/ beachten. Hier lassen sich neue Funktionen im Backend inkl. Menüeinträgen nachrüsten, ohne dass Code-Änderungen notwendig sind.

    Ein Problem gibt es allerdings bei Erweiterungen: Es besteht die Gefahr, dass mehrere Modulherstller oder Eigenentwicklungen gleiche Funktionsnamen verwenden (z. b. print_order()). Um das zu vermeiden hatte ich in Ticket 801 bereits vorgeschlagen den Usernamen hier im Forum als Präfix zu nutzen, also statt print_order() ein webald_print_order(). Gleiches gilt auch für die Benenung der Dateien in den autoinclude-Ordnern. Ist aber derzeit nur ein Vorschlag.

    Linkback: https://www.modified-shop.org/forum/index.php?topic=34700.0
    Werbung / Banner buchen

    GTB

    • modified Team
    • Gravatar
    • Beiträge: 6.225
    • Geschlecht:
    Re: Shopversion 2.0.0.0 - Neues für Module
    Antwort #1 am: 05. April 2016, 10:11:40
    Hallo webald,

    danke für deinen Beitrag.

    Ein Problem gibt es allerdings bei Erweiterungen: Es besteht die Gefahr, dass mehrere Modulherstller oder Eigenentwicklungen gleiche Funktionsnamen verwenden (z. b. print_order()). Um das zu vermeiden hatte ich in Ticket 801 bereits vorgeschlagen den Usernamen hier im Forum als Präfix zu nutzen, also statt print_order() ein webald_print_order(). Gleiches gilt auch für die Benenung der Dateien in den autoinclude-Ordnern. Ist aber derzeit nur ein Vorschlag.

    Entwickler sollten grundsätzlich für Dateien, Funktionen, Klassen eine eigen Namenskonvention verwenden.

    Gruss Gerhard

    Angeal

    • Fördermitglied
    • Beiträge: 411
    • Geschlecht:
    Re: Shopversion 2.0.0.0 - Neues für Module
    Antwort #2 am: 05. April 2016, 10:43:46
    Wird es zu diesem neuen Modulsystem (welches ich übrigens super finde) noch eine Dokumentation geben oder einen Beitrag im FAQ?

    Weil so muss man sich das jetzt alles mühsam zusammensuchen wo was geht und was nicht.

    webald

    • modified Team
    • Beiträge: 2.791
    Re: Shopversion 2.0.0.0 - Neues für Module
    Antwort #3 am: 05. April 2016, 13:01:40
    DAS IST NUR FÜR DEMO-ZWECKE! NICHT LIVE NUTZEN!!

    Mal ein Beispiel-Modul für den Adminbereich. Mit dem Modul kann man zusätzliche Indizes setzen, Umstellen auf InnoDB bzw. myISAM und Foreign-Keys setzen. Es ist nicht schön und nicht besonders sauber, zeigt aber wohl was so alles möglich ist.

    1. Einfach alle Dateien in die entsprechenden Verzeichnisse kopieren.
    2. dem Admin das Modul bekanntmachen (es wird eine neue Spalte in derTabelle admin_access angelegt)
    3. dem Admin das Recht geben das Modul zu nutzen
    4. Fertig - Modul ist nun über das Menü aufrufbar.

    Ich wiederhole:

    DAS IST NUR FÜR DEMO-ZWECKE! NICHT LIVE NUTZEN!!

    karsta.de

    • Experte
    • Beiträge: 3.048
    Re: Shopversion 2.0.0.0 - Neues für Module
    Antwort #4 am: 05. April 2016, 17:14:58
    Danke webald für die nützliche Darstellung.

    webald

    • modified Team
    • Beiträge: 2.791
    Re: 2.0 - Neues für Module
    Antwort #5 am: 05. April 2016, 17:35:53
    Ich mach hier mal weiter:

    Es kann immer mal wieder vorkommen, dass im Code ein redirect stattfindet und somit Daten die übergeben wurden noch nicht verarbeitet wurden. Normalerweise ist das kein Problem, da dies dem normalen Shopablauf entspricht. Allerdings weiss der Shop von evtl. Erweiterungen nichts. GET-Parameter bleiben bei einem Redirect in der Regel erhalten. Bei POST-Daten ist das anders. Hier sollte man eine Lösung suchen diese Daten zu puffern. Eine Möglichkeit könnte ein neuer Eintrag in der Session sein.

    webald

    • modified Team
    • Beiträge: 2.791
    Re: Shopversion 2.0.0.0 - Neues für Module
    Antwort #6 am: 05. April 2016, 18:16:59
    Reihenfolge in der die Dateien in den Autoinclude-Ordnern geladen werden herausfinden:

    Code: PHP  [Auswählen]
    define('WEBALD_LOG_AUTOINCLUDE_DIR_ACCESS','1');
    if(WEBALD_LOG_AUTOINCLUDE_DIR_ACCESS == '1'){
            trigger_error('autoinclude_sorting');
    }
     

    o. g. Code einfach in eine Datei in den Autoinclude-Ordner speichern und Seiten im Shop aufrufen.

    in shoproot/log/ wird daduch eine Datei mod_custom_CurrentDate.log erzeugt. Hierin stehen nun die o.g. AEinträge in der Reihen folge des Aufrufs zusammen mit den passenden Dateinamen.

    Edit:
    in includes/filenames/
    Code: PHP  [Auswählen]
    define('WEBALD_LOG_AUTOINCLUDE_DIR_ACCESS','0');
     
    und das logging für diesen Fall ist deaktiviert.

    Kneumi

    • Fördermitglied
    • Beiträge: 134
    Re: Shopversion 2.0.0.0 - Neues für Module
    Antwort #7 am: 05. April 2016, 18:18:01
    Wenn Module ab 2.0 nach einer anderen Systematik funktionieren, wäre dann nicht ein eigenes Unterforum in der Modulecke sinnvoll? So könnte man auf einen Blick sehen, welche module modified2.0-fähig sind.

    Bonner

    • Fördermitglied
    • Beiträge: 848
    • Geschlecht:
    Re: Shopversion 2.0.0.0 - Neues für Module
    Antwort #8 am: 05. April 2016, 19:14:46
    :pro:

    Angeal

    • Fördermitglied
    • Beiträge: 411
    • Geschlecht:
    Re: Shopversion 2.0.0.0 - Neues für Module
    Antwort #9 am: 06. April 2016, 09:29:29
    ebenfalls :pro:
    Eigene Modulecke für Module für Version 2.0 die entsprechend auf das neue Modulsystem angepasst wurden.

    webald

    • modified Team
    • Beiträge: 2.791
    Re: Shopversion 2.0.0.0 - Neues für Module
    Antwort #10 am: 06. April 2016, 09:51:42
    Übersetzungen im Template, vgl. hierzu z. B. template/tpl_modified/module/product_reviews.html

    Wichtig ist die 2. Zeile: 
    Code: PHP  [Auswählen]
    {config_load file="lang_`$language`.custom"}

    Es handelt sich hierbei um Dateien in template/tpl_modified/lang/

    Damit sind keine Einträge mehr in shoproot/lang/SPRACHE/lang_SPRACHE.conf für eigene Erweiterungen erforderlich bzw. werden templatebezogen (=unterschiedliche Einstellungen je Template) aufgerufen.

    TobStar

    • Neu im Forum
    • Beiträge: 17
    Re: Shopversion 2.0.0.0 - Neues für Module
    Antwort #11 am: 06. Mai 2016, 13:30:21
    Hallo zusammen,

    ich versuche mich gerade an dem Beispiel von webald, vielen Dank erstmal für das gute Beispiel. Soweit klappt alles ganz gut, allerdings benötige ich für mein Modul diverse neue Tabellen in der Datenbank und frage mich wie man diese an dieser Stelle installieren lassen kann?

    webald

    • modified Team
    • Beiträge: 2.791
    Re: Shopversion 2.0.0.0 - Neues für Module
    Antwort #12 am: 06. Mai 2016, 13:57:28
    Aus einem anderen Modul in admin/includes/extra/menu:

    Code: PHP  [Auswählen]
    defined( '_VALID_XTC' ) or die( 'Direct Access to this location is not allowed.' );

    //Sprachabhaengiger Menueeintrag, kann fuer weiter Sprachen ergaenzt werden
    switch ($_SESSION['language_code']) {
      case 'de':
        define('MENU_NAME_CHECKSUMSCANNER','Prüfsummenscanner');
        break;
      default:
        define('MENU_NAME_CHECKSUMSCANNER','Checksum Scanner');
        break;
    }

    function check_adminaccess_for_checksum(){
           
            $webald_query = xtDBquery("show columns from ".TABLE_ADMIN_ACCESS." where Field='checksum_scanner'");
            if (!xtc_db_num_rows($webald_query, true)) {
                    $webald_query = xtDBquery("ALTER TABLE ".TABLE_ADMIN_ACCESS." ADD checksum_scanner INT(1) NOT NULL DEFAULT '0'");
                           
            }
    }

    check_adminaccess_for_checksum();

    //BOX_HEADING_TOOLS = Name der box in der der neue Menueeintrag erscheinen soll
    $add_contents[BOX_HEADING_TOOLS][] = array(
        'admin_access_name' => 'checksum_scanner',          //Eintrag fuer Adminrechte
        'filename' => 'checksum_scanner.php',               //Dateiname der neuen Admindatei
        'boxname' => MENU_NAME_CHECKSUMSCANNER,                     //Anzeigename im Menue
        'parameters' => '',                                         //zusaetzliche Parameter z.B. 'set=export'
        'ssl' => ''                                                 //SSL oder NONSSL, kein Eintrag = NONSSL
      );

    oder aus admin/checksum_scanner.php (ist nich im Standard vorhadnen):

    Code: PHP  [Auswählen]
    require('includes/application_top.php');

    function check_checksum_db_table(){
            $webald_query = xtDBquery("SHOW TABLES LIKE 'checksum_scanner'");
            if (!xtc_db_num_rows($webald_query, true)) {
            $webald_query = xtDBquery("CREATE TABLE `checksum_scanner` (
                            `id` int(11) NOT NULL,
                            `filepath` varchar(1000) NOT NULL,
                            `filetype` varchar(15) DEFAULT NULL,
                            `hash` varchar(32) NOT NULL,
                            `status` int(1) NOT NULL,
                            `filedate` datetime NOT NULL,
                            `filesize` bigint(20) NOT NULL,
                            `date_added` datetime NOT NULL,
                            `last_check` datetime DEFAULT NULL,
                            `last_filesize` bigint(20) NULL);
                            ALTER TABLE `checksum_scanner` ADD PRIMARY KEY (`id`), ADD KEY `filepath` (`filepath`(767)), ADD KEY `filetype` (`filetype`), ADD KEY `status` (`status`);
                            ALTER TABLE `checksum_scanner` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
                            "
    );
            }
    }
    ...
            check_checksum_db_table();
    ...

    TobStar

    • Neu im Forum
    • Beiträge: 17
    Re: Shopversion 2.0.0.0 - Neues für Module
    Antwort #13 am: 06. Mai 2016, 16:28:02
    Kann es sein das die Funktionsreferenz an dieser Stelle auch nicht mehr stimmt? Um die Datenbank dann schlussendlich zu erstellen ( den Query auszuführen ) müsste doch die Funktion xtc_db_query_installer() ausgeführt werden:

    Code: PHP  [Auswählen]
    $query = xtDBquery(
                           
            "CREATE TABLE `appix_blog` (
              `id` int(11) NOT NULL,
              `title` text NOT NULL,
              `content` mediumtext NOT NULL,
              `author` varchar(10) NOT NULL,
              `time` int(11) NOT NULL;
              ALTER TABLE `appix_blog` ADD PRIMARY KEY (`id`);
              ALTER TABLE `appix_blog` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
           
          "
    );
         
          xtc_db_query_installer($query);

    Gibt aber nur "Fatal error: Call to undefined function xtc_db_query_installer()" zurück.

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Re: Shopversion 2.0.0.0 - Neues für Module
    Antwort #14 am: 06. Mai 2016, 17:27:41
    Zitat von: wiki
    function xtc_db_install($database, $sql_file)

    Führt eine SQL-Datei aus.

    Versuch mal das:
    Code: PHP  [Auswählen]
    $egal = xtc_db_fetch_array($query);
    oder auch nur
    Code: PHP  [Auswählen]
    xtc_db_fetch_array($query);
    2 Antworten
    3159 Aufrufe
    03. September 2014, 16:11:30 von billybob
    18 Antworten
    10009 Aufrufe
    01. Februar 2016, 11:21:26 von Marcel86
               
    anything