pragmaMx Support Forum

Off Topic & Alles andere => Kommerz => Thema gestartet von: Webfan in 05 Juni 2014, 08:14:45

Titel: Mod Rewrite für PragmaMx
Beitrag von: Webfan in 05 Juni 2014, 08:14:45
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/
Titel: Re:Mod Rewrite für PragmaMx
Beitrag von: Olaf / TerraProject in 07 Juni 2014, 12:10:22
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.....
Titel: Re:Mod Rewrite für PragmaMx
Beitrag von: Webfan in 07 Juni 2014, 12:25:22
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
Titel: Re:Mod Rewrite für PragmaMx
Beitrag von: Olaf / TerraProject in 07 Juni 2014, 14:58:01
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:
Titel: Re:Mod Rewrite für PragmaMx
Beitrag von: Webfan in 07 Juni 2014, 15:24:46
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
Titel: Re:Mod Rewrite für PragmaMx
Beitrag von: Webfan in 07 Juni 2014, 15:29:40
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
Titel: Re:Mod Rewrite für PragmaMx
Beitrag von: Webfan in 29 Juni 2014, 03:20:39
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