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