Verzeichnisse und Anwendungen im Projekt einbinden

02.01.2013

Beliebige Verzeichnisse oder dynamische Anwendungen lassen sich über frei definierbare Pfade in die Webseite einbinden. So können z.B. externe Shop-Anwendungen, Produktkataloge und beliebige Verzeichnisstrukturen über die gewünschten Pfade angeboten werden.

Falls ein nicht existierender Pfad aufgerufen wird, versucht Weblication eine dynamische Quelle zu ermitteln

// Callback-Funktion, die aufgerufen wird, falls eine Seite unter der eingegebenen URL nicht existiert
$preVars['callback404'] = 'wMyProject::getPathDocument404';  


Die Funktion wMyProject::getPathDocument404 kann einen beliebigen Pfad liefern, welcher dann als Dokumentenpfad genutzt wird. Während über .htaccess mod_rewrite einfache Umschreibungsregeln erstellt werden können, sind mit diese Funktion beliebige Abfragen möglich. Pfade lassen sich nicht nur umschreiben, sondern können auch bedingt generiert werden.

Beispiel, um eine externe Produktdatenbank unter /wDeutsch/produkte in das Projekt einzubinden

//*********************************************************************************/
/**
* @method String getPathDocument404(String $file)
*
* @description Callback Funktion, die aufgerufen wird, wenn eine Seite nicht gefunden wurde
*
* @param file jeweilige Datei
*
* @return String
*
*
*/
//*********************************************************************************/

public static function getPathDocument404($pathNotFound$documentPath){

  
$mountingDirs['/wDeutsch/produkte'] = array('root' => '/products');  

  if(
is_array($mountingDirs)){      
    foreach(
$mountingDirs as $mountRoot => $mountData){
      
$mountRoot    $mountRoot;
      
$sourceRoot   $mountData['root'];

      
$mountPath    $sourceRoot.preg_replace('/^'.preg_quote($mountRoot'/').'/'''$pathNotFound);

      if(
is_dir($_SERVER['DOCUMENT_ROOT'].$mountPath)){
        
$mountPath $mountPath.'/index.php';
      }
      
      if(
is_file($_SERVER['DOCUMENT_ROOT'].$mountPath) && !preg_match('/\/weblication\//'$mountPath)){
        
$documentPath $mountPath;
        
$_SERVER['PHP_SELF'] = $documentPath;
        
$GLOBALS['wHasMounted'] = true;   
        
$contentPath  wReadWrite::readFile($documentPath);
        
// Falls es sich um eine eigene Anwendung handelt - SICHERHEIT beachten!
        //if(!preg_match('/<wd:document/', $contentPath)){  
        //  include($_SERVER['DOCUMENT_ROOT'].$documentPath);
        //  exit;  
        //}
        
break;
      }
    }
  }
  return 
$documentPath;
}


Die Ermittlung eines Pfades über die Callback-Funktion findet zu Beginn innerhalb der internen Steuerungsdatei statt, so dass die Online-Prüfung und die Personalisierung wie gewohnt durchgeführt werden. Handelt es sich um eine eigene Anwedung, kann der markierte Bereich des Skriptes auskommentiert werden. In diesem Fall muss sichergestellt werden, dass Inhalte nicht unberechtigt eingebunden werden können. 


Twitter
RSS-Feed