Tipps & Tricks: Modul in eigenem Verzeichnis

Begonnen von Webfan, 03 Juni 2012, 11:10:26

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

Webfan

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ß!


Webfan

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