pragmaMx Support Forum

pragmaMx => Coder und Bastlerecke => Thema gestartet von: Webfan am 03 Juni 2012, 11:10:26

Titel: Tipps & Tricks: Modul in eigenem Verzeichnis
Beitrag von: Webfan am 03 Juni 2012, 11:10:26
Hallo,
da ich meine veralteten PragmaMx Tipps und Tricks auf meiner Seite geschlossen habe, mach ich einfach mal hier weiter mit einem Tipp geshared aus einer aktuellen Auftragsarbeit.

Problem: Ein bestimmtes Modul soll in einem eigenen Verzeichnis ausgeführt werden.
Beispiel: http://outshop.de/testmodul/

Lösung: Meine Lösung empfinde ich als "schnell und schmutzig" (deshalb wird sie auch geshared ;-) ), aber sie scheint zu funktionieren. (Wahrscheinlich nur mit im PMX eingeschaltetem mod_rewrite)

Das Problem im Detail: Wenn man das PragmaMx (mainfile.php) in einem fremden Verzeichnis aufruft, stimmen die Pfade nicht mehr.
Meine Lösung im Detail: Im Modul wird eine Konstante deklariert die signalisiert, daß das System sich im benutzerdefinierten Pfad befindet, in der Datei includes/classes/Modrewrite.php können dann wenn die Konstande definiert ist die Pfade umgeschrieben werden.

/testmodul/index.php:
<?php
define
('__WEBFAN_MODULE_DIR_HACK__'TRUE);
chdir('../');
require(
'mainfile.php');
require(
'header.php');
echo 
'Testmodul.<br />Demonstration einer Modrewrite Modifikation für das PragmaMx (Modul in eigenem Verzeichnis).';
require(
'footer.php');
?>


In includes/classes/Modrewrite.php suche:
        /* zur Kontrollausgabe, um zu sehen, welche Regeln importiert wurden und was in $content steht */
        if (isset($_GET['mod_rewrite_check']) && MX_IS_ADMIN) {
            die(mxDebugFuncVars($replace_arr, $replaces));
        }


Darunter anfügen:
            /* webfan modul driectory hack begin */
            if(defined('__WEBFAN_MODULE_DIR_HACK__') && __WEBFAN_MODULE_DIR_HACK__ == TRUE)
            {
             $content = str_replace('href="', 'href="../', $content);
             $content = str_replace('src="', 'src="../', $content);
             
             $content = str_replace('href="../http://', 'href="http://', $content);
             $content = str_replace('src="../http://', 'src="http://', $content);
             
             $content = str_replace('href="../https://', 'href="https://', $content);
             $content = str_replace('src="../https://', 'src="https://', $content);   
             
             $content = str_replace('href="../mailto:', 'href="mailto:', $content);                       
            }
           /* webfan modul driectory hack end */


Womöglich sollte/könnte man noch MX_MODULE und/oder so nachdeklarieren und so weiter, in das Verzeichnis /testmodul/ kann man eine eigene .htaccess legen.

Viel Spaß!

Titel: Re:Tipps & Tricks: Modul in eigenem Verzeichnis
Beitrag von: Webfan am 07 Juni 2012, 13:02:00
Ergänzung zum Beitrag (und Werbung  ;)  ):

Wie gesagt, die obige Lösung ist zwar "richtig" aber auch "schnell und schmutzig".

Wenn mehrere Unterverteichnisse involviert sind, funktioniert obige Lösung noch nicht.
Eine Möglichkeit:
- statt
$content = str_replace('href="', 'href="../', $content);
schreibe:
$content = str_replace('href="', 'href="http://deinedomain.de/', $content);
- Eine "saubere" Lösung um alle Links einer Seite zu ermitteln:
  function lpFetchLinks()
  {
   $regexp = "<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>";
   preg_match_all("/$regexp/siU", $this->content, $matches);
   $this->links = $matches;
   return $matches;
   }

http://www.phpclasses.org/browse/file/39891.html

Praktisches Anwendungsbeispiel: http://schmeckts.at/kategorien/alpenlaendische_kueche/

mfg