Mod Rewrite für PragmaMx

Begonnen von Webfan, 05 Juni 2014, 08:14:45

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

Webfan

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/

Olaf

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.....
g

Olaf

Kein Support über PN, Mail etc.!
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

Webfan

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

Olaf

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:
g

Olaf

Kein Support über PN, Mail etc.!
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

Webfan

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

Webfan

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

Webfan

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