In einem früheren Thread habe ich angesprochen, das das pmx von Haus aus keine Unterverzeichnisse in der Url erlaubt, die Pfade stimmen dann nicht. Leider wurde dies in Version 2 noch nicht eingeführt.
In dem Webfan for PragmaMx webdof library wurde diese Funktion nachgerüstet und wird demnächst bei neuen Modulen zum Einsatz kommen.
Wie für die vorherige Version auch kann ich somit individuelles Url rewriting für Deine Module anbieten.
Selbstverständlich kannst Du die library Funktion auch selbst für Deine Module in individuellen Unterverzeichnissen verwenden.
In Kürze in der neuen Version verfügbar...
http://pragmamx-demo.webfan3.de/pmxdemo-2/test/
ich weiß nicht, was du sonst meinst, aber pragmaMx kann ganz normal in Unterverzeichnissen installiert und betrieben werden und das auch in den älteren Versionen.....
Hallo Olaf,
Zitatich weiß nicht, was du sonst meinst, aber pragmaMx kann ganz normal in Unterverzeichnissen installiert und betrieben werden und das auch in den älteren Versionen.....
Ich meine nicht das pmx in einem Unterverzeichnis zu installieren, sondern das pmx ist im root installiert, Beispiel:
html/
und im Verzeichnis
html/test/
habe ich dann:
<?php
chdir('../');
require('mainfile.php');
require('header.php');
echo 'test';
require('footer.php');
Sieht in der Standardversion unschön aus, da dann alle Pfade kapuut sind.
Meine Lösung besteht in einem zusätzlichen Outputhandler unter Verwendung
des simple_html_dom Parsers:
<?php
public function obh2_repairpath($content)
{
$dom = new \simple_html_dom();
$dom->load($content);
$els1 = $dom->find('link');
$els2 = $dom->find('a');
$els = array_merge($els1, $els2);
foreach($els as $e)
{
if(!isset($e->href))continue;
$u = parse_url($e->href);
if(!isset($u['scheme']) || $u['scheme'] === '')
$e->href = PMX_HOME_URL.'/'.$e->href;
}
$els1 = $dom->find('img');
$els2 = $dom->find('script');
$els = array_merge($els1, $els2);
foreach($els as $e)
{
if(!isset($e->src))continue;
$u = parse_url($e->src);
if(!isset($u['scheme']) || $u['scheme'] === '')
$e->src = PMX_HOME_URL.'/'.$e-src;
}
$content = $dom->save();
return $content;
}
Simpel, aber effektiv.
Das vom pmx mitgelieferte mod rewrite ist unzureichend.
So sollen umschriebene urls aussehen:
http://schmeckts.at/restaurant-suche/kueche/russisch/
Viele Grüße
Till
Asooo...
Das ist ja für die Zukunft geplant, war aber noch kein Bestandteil der Planungen für pmx2.
Aber vielleicht stellst du uns deine Lösung zur Verfügung, um uns die weitere Entwicklung zu vereinfachen :BD:
Hallo Olaf,
aber der wesentliche Teil steht doch schon oben gepostet!
Du kannst Dir das Beispiel hier herunterladen:
http://www.webfan.de/Downloads-lid-Webfan-PragmaMx-Module-63.html
Der Outputhandler von oben findet sich in der Datei
modules/webfan/WebfanForPragmaMx.php
Aufruf in Modul (Beispiele beigefügt, aber nicht mit Unterverzeichnis):
ob_start(array('WebfanForPragmaMx', 'obh2_repairpath'));
Der Code von oben sollte eigentlich gut lesbar und verständlich sein?
Den Parser gibt es standalone und ursprünglich hier:
http://simplehtmldom.sourceforge.net/
Super Teil, hat mir schon viele Dienste erwiesen!
Die Datei für PragmaMx welche zu bearbeiten ist müßte mx_modrewrite.php oder so ähnlich sein!?
Viele Grüße
Till
Nachtrag:
In der Regel leite ich alle Anfragen welche keine css, js Dateien oder Bilder sind auf eine index-Datei um und erledige das Interpretieren der Url, das Routing per php.
Auf phpclasses.org gibt es auch einen kleinen Url Parser von mir...
Viele Grüße
Till
Hier ist noch ein Ansatz ohne den Parser basierend auf regular expressions:
public static function obh3_repairpath($content)
{
$regexp = "<link\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>";
preg_match_all("/$regexp/siU", $content, $links);
$regexp = "<img\s[^>]*src=(\"??)([^\" >]*?)\\1[^>]*>";
preg_match_all("/$regexp/siU", $content, $images);
$regexp = "<script\s[^>]*src=(\"??)([^\" >]*?)\\1[^>]*>";
preg_match_all("/$regexp/siU", $content, $scripts);
$regexp = "<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>";
preg_match_all("/$regexp/siU", $content, $hrefs);
$regexp = "<form\s[^>]*action=(\"??)([^\" >]*?)\\1[^>]*>";
preg_match_all("/$regexp/siU", $content, $forms);
$matches = array_merge($links, $images, $scripts, $hrefs, $forms);
foreach($matches[2] as $k => $m) {
$html = $matches[0][$k];
$url = $m;
$u = parse_url($url);
if(!isset($u['scheme']) || $u['scheme'] === ''){
$url_neu = PMX_HOME_URL.'/'.$url;
$html_neu = str_replace($url, $url_neu, $html);
$content = str_replace($html, $html_neu, $content);
}
}
return $content;
}
Neue Version verfügbar mit Cronjobverwaltung:
http://www.webfan.de/Downloads-lid-Webfan-PragmaMx-Module-63.html