We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 10190
    • 187 Posts
    Hallo zusammen,

    ich habe ein neues Modul im Manager angelegt, und die index.php einer bestehenden PHP Applikation (PHPMailer-ML) inkludiert:

    $basePath = $modx->config['base_path'];
    include $basePath."assets/modules/phpmailer-ml/_acp-ml/index.php";


    Ich kriege aber nur einen leeren Frame. Nichts im php error log oder dem des Webservers.

    Ich weiß nicht wie ich weiter vorgehen sollte - gibt es modx logging Mechanismen, die ich nutzen kann?

    Gibt es außerdem bestimmte modx Funktionen, die ich benutzen sollte, ein Modul-Skelett dass ich als Ausgangsbasis nutzen könnte oder irgendwelche Ressourcen, die mir den Einstieg in die Modulprogrammierung in modx erleichtern können?

    Frisco
      • 4172
      • 5,888 Posts
      wenn der Pfad stimmt, sollte eigentlich der php-code in der Datei uasgeführt werden.
      was steht denn in der Datei index.php?
        -------------------------------

        you can buy me a beer, if you like MIGX

        http://webcmsolutions.de/migx.html

        Thanks!
        • 10190
        • 187 Posts
        Der Pfad stimmt, hab ich mir schon mit echo ausgeben lassen.

        Hier der Code aus der index.php (der natürlich anderen inkludiert).

        Ich hab versuchsweise das output buffering auskommentiert, weil ich dachte dass es damit zusammen hängen könnte, brachte aber keinen Unterschied (Kommentarblock am Anfang gelöscht):

        <?php
        error_reporting(0); //error_reporting(E_ALL);
        /*~ _acp-ml/index.php
        ...
        
        /**
         * PHPMailer-ML - PHP mailing list manager
         * @package PHPMailer-ML
         * @author Andy Prevost
         * @copyright 2004 - 2009 Andy Prevost. All Rights Reserved.
         */
        
        if ( ini_get( 'zlib.output_compression' ) ) {
          if ( ini_get( 'zlib.output_compression_level' ) != 5) {
            ini_set( 'zlib.output_compression_level', '5' );
          }
          ob_start();
        } else {
          if(strstr($_SERVER['HTTP_ACCEPT_ENCODING'],"gzip")) {
            ob_start("ob_gzhandler");
          } else {
            ob_start();
          }
        }
        
        session_start();
        if (floatval(phpversion()) < 5.3) {
          session_register("return_msg");
          session_register("def_list");
          session_register("acp");
        }
        
        if ($_SESSION['acp'] == '') {
          $_SESSION['acp'] = '_acp-ml';
        }
        
        if ($_GET['pg'] == '') {
          $_GET['pg'] == 'lists';
        }
        
        require_once('inc.settings.php');
        require_once('inc.functions.php');
        
        if ( $def_list == '' ) {
          if ( trim($_SESSION['def_list']) != '' ) {
            $def_list = $_SESSION['def_list'];
          } else {
            $def_list = 1;
            $_SESSION['def_list'] = $def_list;
          }
        }
        
        $pgArr['title'] = "PHPMailer-ML Admin";
        
        $address = $_REQUEST['email'];
        
        ob_start();
        if ($_GET['pg'] == "campaigns") {
          require_once("inc.campaigns.php");
          exit(); // exiting here so that we don't display default page
        } elseif ($_GET['pg'] == "opt") {
          require_once("inc.configuration.php");
          exit(); // exiting here so that we don't display default page
        } elseif ($_GET['pg'] == "subscribers") {
          require_once("inc.subscribers.php");
          exit(); // exiting here so that we don't display default page
        } elseif ($_GET['pg'] == "upld") {
          require_once("inc.import.php");
          exit(); // exiting here so that we don't display default page
        } elseif ($_GET['pg'] == "lists" || $_GET['pg'] == "") {
          require_once("inc.lists.php");
          exit(); // exiting here so that we don't display default page
        }
        
        $url = $phpml['ReturnPage'];
        echo "<meta http-equiv=\"Refresh\" content=\"0; URL=$url\">";
        exit();
        
        /* FUNCTIONS ************************************ */
        
        function send_message($address, $message) {
          // global $return_msg;
          global $phpml;
          global $PHPML_LANG;
        
          $rc = false;
          if ($phpml['EmailSend']) {
            $mail = new MyMailer;
            $mail->Subject = stripslashes('[' . $phpml['ListName'] . '] Mailing List' );
            $mail->Body = stripslashes($message);
            $mail->AddAddress($address);
            if(!$mail->Send()) {
              $_SESSION['return_msg'] = $PHPML_LANG["error_sending"] . " (" . $address . "): " . $mail->ErrorInfo;
            } else {
              $rc = true;
            }
            $mail->ClearAddresses();
          }
          return $rc;
        }
        
        function is_subscribed($address) {
          //global $return_msg;
          global $phpml;
          global $PHPML_LANG;
        
          $query  = "SELECT *
                       FROM " . $phpml['dbMembers'] . "
                      WHERE email = '" . $address . "'";
          $result = mysql_query($query) or die($PHPML_LANG["error_query"] . mysql_error());
          $num    = mysql_num_rows($result);
          if ($num == 0) {
            return false;
          } else {
            return true;
          }
        }
        
        ?>
          • 10449
          • 956 Posts
          Quote from: Frisco at Nov 23, 2009, 10:46 AM

          Gibt es außerdem bestimmte modx Funktionen, die ich benutzen sollte, ein Modul-Skelett dass ich als Ausgangsbasis nutzen könnte oder irgendwelche Ressourcen, die mir den Einstieg in die Modulprogrammierung in modx erleichtern können?

          http://svn.modxcms.com/docs/display/MODx096/Modules
          http://www.sottwell.com/create-module.html
            • 10190
            • 187 Posts
            ich Schaaf sehe gerade dass in Zeile 1 dass error logging ausgeschaltet wird, jetzt kommen auch Fehlermeldungen (falsche Pfade bei den includes) - hatte ich mir schon gedacht, dass muss ich wohl mit base_path arbeiten.
              • 10190
              • 187 Posts
              Quote from: ganeshXL at Nov 23, 2009, 11:55 AM

              http://svn.modxcms.com/docs/display/MODx096/Modules
              http://www.sottwell.com/create-module.html

              Danke, den ersten kannte ich schon, da geht’s ja nur drum wie man das im Manager macht - der 2. könnte ein paar wertvolle tipps enthalten, gucke ich mir an, danke!
                • 10190
                • 187 Posts
                Hm,

                ich bekomme Fehlermeldungen, die wohl damit zusammenhängen dass eine Session gestartet werden soll, aber (ich nehme an durch modx) bereits eine läuft:

                Notice: A session had already been started - ignoring session_start() in /var/www/cms/modx-0.9.6.3/assets/modules/PHPMailer-ML_v1.7.1_core/_acp-ml/index.php on line 26
                
                Notice: Undefined index: pg in /var/www/cms/modx-0.9.6.3/assets/modules/PHPMailer-ML_v1.7.1_core/_acp-ml/index.php on line 37
                
                Notice: Undefined index: pg in /var/www/cms/modx-0.9.6.3/assets/modules/PHPMailer-ML_v1.7.1_core/_acp-ml/index.php on line 38
                
                Notice: Undefined variable: def_list in /var/www/cms/modx-0.9.6.3/assets/modules/PHPMailer-ML_v1.7.1_core/_acp-ml/index.php on line 44
                
                Notice: Undefined index: email in /var/www/cms/modx-0.9.6.3/assets/modules/PHPMailer-ML_v1.7.1_core/_acp-ml/index.php on line 55


                Der dazu gehörende Code:
                <?php
                //error_reporting(0);
                error_reporting(E_ALL);
                /*~ _acp-ml/index.php
                
                /**
                 * PHPMailer-ML - PHP mailing list manager
                 * @package PHPMailer-ML
                 * @author Andy Prevost
                 * @copyright 2004 - 2009 Andy Prevost. All Rights Reserved.
                 */
                
                 if ( ini_get( 'zlib.output_compression' ) ) {
                  if ( ini_get( 'zlib.output_compression_level' ) != 5) {
                    ini_set( 'zlib.output_compression_level', '5' );
                  }
                  ob_start();
                } else {
                  if(strstr($_SERVER['HTTP_ACCEPT_ENCODING'],"gzip")) {
                    ob_start("ob_gzhandler");
                  } else {
                    ob_start();
                  }
                }
                
                session_start();
                if (floatval(phpversion()) < 5.3) {
                  session_register("return_msg");
                  session_register("def_list");
                  session_register("acp");
                }
                
                if ($_SESSION['acp'] == '') {
                  $_SESSION['acp'] = '_acp-ml';
                }
                
                if ($_GET['pg'] == '') {
                  $_GET['pg'] == 'lists';
                }
                
                require_once('inc.settings.php');
                require_once('inc.functions.php');
                
                if ( $def_list == '' ) {
                  if ( trim($_SESSION['def_list']) != '' ) {
                    $def_list = $_SESSION['def_list'];
                  } else {
                    $def_list = 1;
                    $_SESSION['def_list'] = $def_list;
                  }
                }
                
                $pgArr['title'] = "PHPMailer-ML Admin";
                
                $address = $_REQUEST['email'];


                Der Zugriff auf Arrays wie $_GET oder $_REQUEST klappt also nicht.

                Wie kriege ich das hin mit der Session? Sollte ich die von modx benutzen (wie), oder kann ich doch noch ’ne eigene starten?

                Frisco
                  • 5254
                  • 2 Posts
                  Die erste Fehlermeldung wird ja durch den erneuten Start einer Session ausgelöst, wie du schon richtig gedeutet/gelesen hast: php.net/session_start
                  Die Abfragen für die Variablen/Arrayindexes solltest du mit isset und empty erstellen:
                  <?php
                  if (!isset($_GET['pg']) && empty($_GET['pg'])) {
                    $_GET['pg'] == 'lists';
                  } ?>


                  Nun zu deinen Fragen:
                  Du solltest deinen Code so gestalten, dass er evtl. MODx Variablen unberührt lässt, daher musst du ein Prefix für dein Modul wählen und konsequent bei globalen Variablen anwenden. PHP unterstützt zwar ab Version 5.3 Namespaces, aber die noch mit MODx 0.9 zu implementieren ist zu aufwendig. Lies dir mal auch die offizielle PHP-Dokumentation durch und geh mal in Buchhandlungen um in aktuellen Büchern zu stöbern(meistens hat Thalia auch eine Computer"wand").
                  Du kannst keine zweite Session parallel starten, außer du implementierst eine eigene Sessionverwaltung mit allem drum und dran. Benutze einfach die vorhandene Session, achte aber auf Konflikte mit doppelten Sessionvariablen. Näheres findest du auch in der PHP-Dok. Link siehe oben

                  ChrKo