pragmaMx Support Forum pragmaMx Support Forum

Dokumentation - Mod Rewrite How To!

0 Mitglieder und 1 Gast betrachten dieses Thema.

Webfan

Dokumentation - Mod Rewrite How To!
« am: 05 November 2014, 21:44:03 »
Mir wurde gesagt ich könne/dürfe etwas zur Dokumentation beitragen, leider finde ich hier weder im Documents Modul noch in einem freigeschalteten Modul Submit_News eine Möglichkeit, deshalb hier zunächst in Lob und Meckerecke.

Dokumentation - Mod Rewrite How To
Benötigte Kenntnisse: Anfänger

SEO URLs - brauche ich die?
  • Zur Suchmaschinenoptimierung nicht unbedingt, auch wenn Sie im Internet etwas anderes gelesen haben. Aber dies ist ein anderes Thema, welches ich gerne an anderer Stelle erläutere.
  • Sie benötigen diese URLs nur aus einem einfachen, wie ich finde stichhaltigem Grund:
    Weil sie einfach besser aussehen!

Nice URLs mit PragmaMx realisieren!
Oft habe ich in früheren Thread bemängelt das das von PragmaMx mitgelieferte Mod Rewrite nicht meinen Vorstellungen entspricht. Jetzt, mit der neuen Version ist alles anders!
Früher mußte ich tiefer in das System eingreifen, nun kann ich fast mit Boardmitteln meine Wunsch URLs realisieren.

Im folgenden beschreibe ich wie ich ein benutzerdefiniertes Mod Rewrite für die Seite http://www.freizeittreffen.de/ realisiert habe.

Die Hauptprotagonisten sind hier:

Funktion:
Umschreiben der URLs für das Web_Links Modul in der Form:
http://www.freizeittreffen.de/aus-dem-bereich/postleitzahlbereich-vier-7/
http://www.freizeittreffen.de/eintrag/bochum-freizeit-und-singletreff-come-together-2/

Vorgehensweise:
Zunächst aktiviere ich das Core Mod Rewrite des PragmaMx in vollem Umfang.
Dann richte ich mir die zwei benötigten Unterordner "aus-dem-bereich" und "eintrag" im Katalog Modul ein und aktiviere sie:
http://example.com/webfan-op-admin-admin-wpmxdir.html
Im Formular Wähle ich für beide Verzeichnisse jeweils das Web_Links Modul als Modul aus.
Dabei darf nicht vergessen werden die Checkbox "online?" zu aktivieren und zu speichern!

Alle Anfragen der Form
http://example.com/aus-dem-bereich/*
http://example.com/eintrag/*
werden nun automatisch auf das Web_Links Modul umgeleitet.

Als nächstes müssen einzelne Parameter wie "lid" und "cid" und "op" aus der Folgeurl(*) interpretiert werden. Das Verzeichnis "aus-dem-bereich" soll dabei der Kategorieansicht und das Verzeichnis "eintrag" der Link-Detailansicht zugeordnet werden.
Zu diesem Zwecke erstelle ich mir eine Datei mit einer Router-Klasse:
(Diese Klasse verwendet meine Public Domain Klasse "wURI")
<?php
/**
 * This file belongs to php software provided by Webfan.de.
 * (c) Copyright Georg Wehowski
 * Webfan/TW/1249TRP1 2014/10
 */
namespace frdlweb;

class 
Router
{

protected $opKey;

function __construct($rewrite true){

 if($rewrite===true && defined('WPMXDIR_REQUEST_URI')){
  $this->rewrite($this->parse(WPMXDIR_REQUEST_URIWPMXDIR));
 }
}


protected function rewrite($GET){
global $module_name;
$module_name 'Web_Links';
 foreach($GET as $key => $value){
        $_GET[$key] = $value;
  $_REQUEST[$key] = $value;
     }

 $_REQUEST = ($_SERVER['REQUEST_METHOD']==='POST') ? $_POST $_GET;  
     
}


public function parse($uri WPMXDIR_REQUEST_URI$dir WPMXDIR){

$g = array();

$dir basename($dir);

$opKey null;
$opKey = ($dir === 'eintrag') ? 'lid' $opKey;
$opKey = ($dir === 'aus-dem-bereich') ? 'cid' $opKey;

if($opKey === 'lid'){
$g['op'] = 'view';
}

if($opKey === 'cid'){

}

$wURI = \wURI::getInstance();
$u $wURI::parse_uri($wURI->getU()->protocoll$_SERVER['SERVER_NAME'], $uri);
       

if(is_numeric($u->file))$g['min'] = $u->file;
if(is_numeric($u->dirs_rev[0]))$g['min'] = $u->dirs_rev[0];
if(isset($u->dirs_rev[1]) && is_numeric($u->dirs_rev[1]) && $u->dirs_rev[0] === '')$g['min'] = $u->dirs_rev[1];

foreach($u->dirs_rev as $num => $dir){
if(is_numeric($dir) || $dir==='')continue;
$p explode('-',$dir);
if(count($p)<2)continue;
if(!is_numeric($p[count($p)-1]))continue;
$g[$opKey] = $p[count($p)-1];
break;
}

return $g;
}
}
Nun werden aus der Folgeurl die IDs interpretiert, z.B.:
http://example.com/aus-dem-bereich/meine-kategorie-123/
http://example.com/eintrag/ein-eintrag-456/

Am Anfang der index.php des Web_Links Modules include ich meine Routerklasse und benutze sie über den Constructor:
$Router = new \frdlweb\Router(true);
Nun werden die schönen URLs wenn Sie aufgerufen werden richtig interpretiert,

Damit diese neuen schönen URLs auch auf der Seite angezeigt werden, hilft der
 mod rewrite hook
      foreach ($cat as $key => $link) {
            if (isset($titles[$link['cid']])) {
                /**
                 * schreibt alle Parameter um in das normale pragmaMx mod_rewrite Format,
                 * also getrennt mit den Bindestrichen
                 * Einstellung:
                 * alle Parameter, die nicht benötigt werden, weil sie z.B. anderweitig
                 * in der URL verwendet werden, als zusätzlichen Parameter der Funktion
                 * übergeben
                 */
                $new_url = pmxModrewrite::title_parameters($link, 'cid');

$new_url= str_replace(array('-min-','.html'),array('',''),$new_url);

               // $title = $name . '-lid-' . $title . '-' . $lid . $end; // Original m-t
              //   $new_url = $name . '-' . $titles[$link['cid']] . '-category-' . $link['cid'] . $new_url;
                 $new_url = 'aus-dem-bereich/' . $titles[$link['cid']] . '-' . $link['cid'] .'/'. $new_url;
und
       foreach ($view as $key => $link) {
            if (isset($titles[$link['lid']])) {
                /* schreibt alle Parameter um in das normale pragmaMx mod_rewrite Format */
                $new_url = pmxModrewrite::title_parameters($link, 'lid', 'op');
                /* den neuen URL zusammensetzen */
           //     $new_url = $name . '-' . $titles[$link['lid']] . '-view-' . $link['lid'] . $new_url;
              $new_url= str_replace(array('-min-','.html'),array('',''),$new_url);
              $new_url = 'eintrag/' . strtolower($titles[$link['lid']]) . '-' . $link['lid'] .'/'. $new_url;
                /* die globalen Ersetzungsparameter mit den neuen Werten überschreiben */
                $replaces[$key] = $link['prefix'] . $new_url . $link['suffix'];
            }

Fertig!
Ok, ich hab noch was vergessen, in der Web_Links index bitte ändern:
viewdetails($_GET['lid']);Das diese Modifikation nötig ist laste ich der Philosophie des PMX Teams/nuke an, inflationär globale Variablen zu verwenden, aber das wird sicher in kommenden Versionen verbessert.

Dieses Beispiel sollte Dir helfen Deine Wunsch URLs anbieten zu können, wenn Du Fragen hast helfen wird Dir im Forum gerne weiter.

---------------------------------------

So könnte so eine Dokumentationshilfe von mir aussehen.
Der Beitrag darf vom PragmaMx Team nach Belieben zur Dokumentation verwendet, verschlimmbessert oder schönformuliert werden.