Kategorie:PHP-Wrapper

Aus OpenEstate-Wiki

Wechseln zu: Navigation, Suche
Website-Export via ImmoTool
PHP-Wrapper

Inhaltsverzeichnis

Was ist ein Wrapper?

Die aus dem ImmoTool erzeugten PHP-Skripte können mit geringem Programmieraufwand in bestehende PHP-Webseiten integriert werden. Der Mechanismus zur Einbindung wird als Wrapper bezeichnet.

„Als Wrapper bezeichnet man in der Informationstechnik ein Stück Software, welches ein anderes Stück Software umgibt. Dies kann sich sowohl auf ganze Programme, als auch nur auf einzelne Programmteile bis Klassen beziehen. Die "Umhüllung" kann sowohl visueller als auch technischer Natur sein.“

Wikipedia

PHP-Wrapper für Content Management Systeme

Im Laufe der weiteren Entwicklung werden an dieser Stelle fertige Wrapper-Lösungen für verbreitete CMS-Software zusammengetragen und dokumentiert.

Modul für Webseite
CMS made simple cmsmadesimple.org
Contenido contenido.org
Joomla joomla.org
WebsiteBaker websitebaker2.org
WordPress wordpress.org

Ein allgemeiner PHP-Wrapper

Der folgende PHP-Code kann in jede PHP-basierten Webseite verwendet werden.

  1. <?php
  2. /**
  3.  * Website-Export.
  4.  * Wrapper zur Einbindung der Website-Skripte in PHP-Anwendungen.
  5.  * $Id: wrapper.php 2055 2013-02-12 08:01:19Z andy $
  6.  *
  7.  * @author Andreas Rudolph & Walter Wagner
  8.  * @copyright 2009-2013, OpenEstate.org
  9.  * @license http://www.gnu.org/licenses/gpl-3.0.txt
  10.  */
  11.  
  12. // ImmoTool-Umgebung konfigurieren
  13. define( 'IMMOTOOL_BASE_PATH', '../' );  // Server-Pfad zu den ImmoTool-Skripten
  14. define( 'IMMOTOOL_BASE_URL', '../' );   // URL zu den ImmoTool-Skripten
  15.  
  16. // Script ermitteln
  17. if (isset($_REQUEST['wrap']) && $_REQUEST['wrap']=='expose') {
  18.   $wrap = 'expose';
  19.   $script = 'expose.php';
  20. }
  21. else {
  22.   $wrap = 'index';
  23.   $script = 'index.php';
  24. }
  25.  
  26. // Script ausführen
  27. ob_start();
  28. include( IMMOTOOL_BASE_PATH . $script );
  29. $page = ob_get_contents();
  30. ob_clean();
  31.  
  32. // Stylesheets
  33. $setup = new immotool_setup();
  34. if (is_callable(array('immotool_myconfig', 'load_config_default'))) 
  35.   immotool_myconfig::load_config_default( $setup );
  36. $stylesheets = array( IMMOTOOL_BASE_URL . 'style.php?wrapped=1' );
  37. if (is_string($setup->AdditionalStylesheet) && strlen($setup->AdditionalStylesheet)>0)
  38.   $stylesheets[] = $setup->AdditionalStylesheet;
  39.  
  40. // Ausgabe erzeugen
  41. echo immotool_functions::wrap_page( $page, $wrap, $_SERVER['SCRIPT_NAME'], IMMOTOOL_BASE_URL, $stylesheets );
  42. ?>
  • In der Konstanten IMMOTOOL_BASE_PATH (Zeile 11) muss der Serverpfad zum PHP-Export des ImmoTools hinterlegt werden. Die Konstante wird benötigt, um die Skripte PHP-Exports einbinden zu können (Zeile 28).
  • In der Konstanten IMMOTOOL_BASE_URL (Zeile 12) muss eine URL zum PHP-Export des ImmoTools hinterlegt werden. Diese Konstante wird benötigt, um gültige Verlinkungen auf Bilder & PDF-Exposés zu erzeugen.
  • Mit Hilfe des Parameter wrap wird entschieden, ob die Exposéansicht (Zeile 15) oder Immobilienübersicht (Zeile 20) eingebunden werden soll.
  • Mit dem Aufruf der Hilfsfunktion immotool_functions::wrap_page (Zeile 39) werden verschiedene Ersetzungen im HTML-Code der eingebundenen Webseite durchgeführt.
    • Der Inhalt zwischen <body> und </body> wird ermittelt. Der <head>-Bereich wird ignoriert.
    • Der HTML-Code von Links & Formularen wird umgeschrieben und dabei auf das Wrapper-Skript selbst verlinkt.
    • Der HTML-Code von PDF-Downloads & Bildern wird umgeschrieben um korrekte Darstellung im Browser zu gewährleisten.
    • Die übermittelten Stylesheets werden in den HTML-Code eingefügt.

immotool_functions::wrap_page

Die Hilfsfunktion immotool_functions::wrap_page wird mit der Datei include/functions.php mitgeliefert, um die PHP-Exporte mit geringem Aufwand 'wrappen' zu können. Bei Bedarf kann hier auch eine eigene Funktion implementiert werden. Die Hilfsfunktion sieht wie folgt aus.

  1.   /**
  2.    * Hilfsfunktion zum 'wrappen' einer erzeugten Webseite.
  3.    * Diese Funktion wird von den PHP-Wrapper-Modulen verwendet.
  4.    * @param string $page HTML-Code der einzubindenden Seit
  5.    * @param string $wrapType Art der eingebundenen Seite
  6.    * @param string $wrapperScriptUrl URL zum umgebenden Script
  7.    * @param string $immotoolBaseUrl URL zum ImmoTool-Export
  8.    * @param array $stylesheets Liste mit verwendeten Stylesheets
  9.    * @param array $hiddenParams Key-Value-Paar mit zusätzlichen Parametern
  10.    * @return string HTML-Code der 'gewrappten' Seite
  11.    */
  12.   function wrap_page( &$page, $wrapType, $wrapperScriptUrl, $immotoolBaseUrl, $stylesheets, $hiddenParams=null ) {
  13.     // Stylesheets importieren
  14.     $header = '';
  15.     if (is_array($stylesheets) && count($stylesheets)>0) {
  16.       $header = "\n<style type=\"text/css\">";
  17.       foreach ($stylesheets as $style) $header .= "\n@import \"$style\";";
  18.       $header .= "\n</style>";
  19.     }
  20.  
  21.     // HACK: Einbindung der Galerie-Skripte in Exposés
  22.     if ($wrapType=='expose') {
  23.       $setup = new immotool_setup_expose();
  24.       if (is_callable(array('immotool_myconfig', 'load_config_expose'))) immotool_myconfig::load_config_expose( $setup );
  25.       $galleryHandler = immotool_functions::get_gallery( $setup->GalleryHandler );
  26.       if (!is_object($galleryHandler)) $galleryHandler = immotool_functions::get_gallery( 'html' );
  27.       $header .= "\n" . $galleryHandler->getHeader();
  28.     }
  29.  
  30.     // Haupt-URL ohne Parameter ermitteln
  31.     $pos = strpos($wrapperScriptUrl,'?');
  32.     $wrapperBaseUrl = ($pos!==false)? substr($wrapperScriptUrl,0,$pos): $wrapperScriptUrl;
  33.     $sep = ($pos!==false)? '&amp;': '?';
  34.  
  35.     // Zusätzliche Hidden-Parameter zur Verwendung in Formularen vorbereiten
  36.     $hiddenInputs = '';
  37.     if (is_array($hiddenParams)) {
  38.       foreach ($hiddenParams as $key=>$value) {
  39.         $hiddenInputs .= '<input type="hidden" name="'.$key.'" value="'.$value.'"/>';
  40.       }
  41.     }
  42.  
  43.     // Ersetzungen
  44.     $replacements = array(
  45.             // Inhalt des BODY-Tags ermitteln
  46.             '/(.*)<body([^>]*)>(.*)<\/body>(.*)/is' => '<div\2>'.$header.'\3</div>',
  47.  
  48.             // Verlinkungen innerhalb der aktuellen Seite
  49.             '/<a([^>]*)href="\?([^"]*)"/is' => '<a\1href="'.$wrapperScriptUrl.$sep.'wrap='.$wrapType.'&amp;\2"',
  50.  
  51.             // index.php => Links
  52.             '/<a([^>]*)href="index\.php"/is' => '<a\1href="'.$wrapperScriptUrl.$sep.'wrap=index"',
  53.             '/<a([^>]*)href="index\.php\?([^"]*)"/is' => '<a\1href="'.$wrapperScriptUrl.$sep.'wrap=index&amp;\2"',
  54.  
  55.             // index.php => Formulare
  56.             //'/<form([^>]*)action="index\.php"/is' => '<form\1action="'.$wrapperScriptUrl.$sep.'wrap=index"',
  57.             '/<form([^>]*)action="index\.php([^"]*)"([^>]*)>/is' => '<form\1action="'.$wrapperBaseUrl.'\2"\3><input type="hidden" name="wrap" value="index"/>'.$hiddenInputs,
  58.  
  59.             // expose.php => Links
  60.             '/<a([^>]*)href="expose\.php"/is' => '<a\1href="'.$wrapperScriptUrl.$sep.'wrap=expose"',
  61.             '/<a([^>]*)href="expose\.php\?([^"]*)"/is' => '<a\1href="'.$wrapperScriptUrl.$sep.'wrap=expose&amp;\2"',
  62.  
  63.             // expose.php => Formulare
  64.             //'/<form([^>]*)action="expose\.php([^"]*)"/is' => '<form\1action="'.$wrapperScriptUrl.$sep.'wrap=expose\2"',
  65.             '/<form([^>]*)action="expose\.php([^"]*)"([^>]*)>/is' => '<form\1action="'.$wrapperBaseUrl.'\2"\3><input type="hidden" name="wrap" value="expose"/>'.$hiddenInputs,
  66.  
  67.             // captcha.php
  68.             '/<img([^>]*)src="captcha\.php"/is' => '<img\1src="'.$immotoolBaseUrl.'captcha.php"',
  69.             '/<img([^>]*)src="captcha\.php\?([^"]*)"/is' => '<img\1src="'.$immotoolBaseUrl.'captcha.php?\2"',
  70.             '/src=\'captcha\.php([^\']*)\'/is' => 'src=\''.$immotoolBaseUrl.'captcha.php\1\'',
  71.  
  72.             // Includeverzeichnis
  73.             '/<script([^>]*)src="include\/([^"]*)"/is' => '<script\1src="'.$immotoolBaseUrl.'include/\2"',
  74.             '/<link([^>]*)href="include\/([^"]*)"/is' => '<link\1href="'.$immotoolBaseUrl.'include/\2"',
  75.  
  76.             // Datenverzeichnis
  77.             '/<a([^>]*)href="data\/([^"]*)\.([^"]*)"/is' => '<a\1href="'.$immotoolBaseUrl.'data/\2.\3"',
  78.             '/<img([^>]*)src="data\/([^"]*)"/is' => '<img\1src="'.$immotoolBaseUrl.'data/\2"',
  79.  
  80.             // Bildverzeichnis
  81.             '/<img([^>]*)src="img\/([^"]*)"/is' => '<img\1src="'.$immotoolBaseUrl.'img/\2"',
  82.             '/\'img\/([^\']*)\'/is' => '\''.$immotoolBaseUrl.'img/\1\'',
  83.             '/\'\.\/img\/([^\']*)\'/is' => '\''.$immotoolBaseUrl.'img/\1\'',
  84.     );
  85.     return preg_replace( array_keys($replacements), array_values($replacements), $page );
  86.   }

Seiten in der Kategorie „PHP-Wrapper“

Es werden 5 von insgesamt 5 Seiten in dieser Kategorie angezeigt:

P

Persönliche Werkzeuge