kointa: Vorschlag für eigenes Plugin

Beitrag lesen

Gegen eine zusätzliche Callback-Funktion für preg_replace() ist ja nichts einzuwenden, wenn die Ersetzung etwas komplexer ist,
aber den Ersetzungsstring nochmal zu durchsuchen und darin Teile zu ersetzen, erscheint mir irgendwie zu umständlich. Ich würde
das eher so lösen:

function own_plugin_callback($match) {
  // dieser Wert wird benutzt, wenn keine Breite oder der Wert '0' angegeben wurde
  static $default_width = '380';
  // dito fuer die Hoehe
  static $default_height = '313';
  return '<embed type="application/x-shockwave-flash" height="' .
    (empty($match[3]) ? $default_height : $match[3]) .
    '" width="' .
    (empty($match[2]) ? $default_width : $match[2]) .
    '" src="http://www.choiz.extra.hu/mediaplayer.swf?file=' .
    $match[1] .
  '&backcolor=0x000000&frontcolor=0xCCCCCC&lightcolor=0x000000&screencolor=0x000000&searchbar=false&autostart=false" ' .
    'loop="true" quality="high" bgcolor="#000000" name="flvplayer" align="middle" allowScriptAccess="sameDomain" ' .
    'allowFullScreen="true" pluginspage="http://www.macromedia.com/go/getflashplayer" /></embed>';
    // diese letzten drei Zeilen bitte zusammenfassen, ich hab die nur aufgeteilt,
    // damit der Quelltext in (d|m)einem Editor
    // etwas "uebersichtlicher" angezeigt wird.
    // fuer das Forum hier ist er auch schon zu breit ...
}

function own_plugin($content) {
  // moegliche BBCode-Muster: [own kurz-url] oder [own kurz-url breite hoehe]
  // own kann groß- oder kleingeschrieben werden ("case insensitive")
  return preg_replace_callback('/[own\s+([^]\s]+?)(?:\s+([0-9]+)\s+([0-9]+))?]/iS', 'own_plugin_callback', $content);
}


>   
>   
> > > Das ist gut. Dann lerne schnell preg\_replace() und PCRE in PHP anzuwenden. ;-)  
> > Werds versuchen :D Danke  
>   
> Hier mal noch einige weitere hilfreiche Links zum Verständnis:  
> \* [empty()](http://de.php.net/manual/de/function.empty.php)  
> \* [preg_replace_callback()](http://de.php.net/manual/de/function.preg-replace-callback.php)  
> \* Unterschiede zwischen [Stringliterale](http://de.php.net/manual/de/language.types.string.php) in [einfachen](http://de.php.net/manual/de/language.types.string.php#language.types.string.syntax.single) und [doppelten](http://de.php.net/manual/de/language.types.string.php#language.types.string.syntax.double) "Hochkommas"  
> \* [Zeichenkettenoperator](http://de.php.net/manual/de/language.operators.string.php)  
> \* Die [Handbuchseite zu den Vergleichsoperatoren](http://de.php.net/manual/de/language.operators.comparison.php) beschreibt kurz den Konditional- oder Trinitäts-Operator '?:'  
>   
> Wenn du dich dann noch mit der [HEREDOC-Notation](http://de.php.net/manual/de/language.types.string.php#language.types.string.syntax.heredoc) von Zeichenketten-Konstanten befasst hast, kannst du die Callback-Funktion auch anders schreiben:  
> ~~~php
  

> function own_plugin_callback($match) {  
>   $width = !empty($match[2]) ? $match[2] : '380'; // dieser Wert wird benutzt,  
>                                                   //wenn keine Breite oder der Wert '0' angegeben wurde  
>   $height = !empty($match[3]) ? $match[3] : '313'; // dito fuer die Hoehe  
>   $url = $match[1];  
>   
>   return <<<HTMLWUST  
> <embed type="application/x-shockwave-flash" height="$height" width="$width" src="http://www.choiz.extra.hu/mediaplayer.swf?file=$url&backcolor=0x000000&frontcolor=0xCCCCCC&lightcolor=0x000000&screencolor=0x000000&searchbar=false&autostart=false" loop="true" quality="high" bgcolor="#000000" name="flvplayer" align="middle" allowScriptAccess="sameDomain" allowFullScreen="true" pluginspage="http://www.macromedia.com/go/getflashplayer" /></embed>  
> HTMLWUST;  
> }

MffG
EisFuX

boah cool DANKE, das ist doch mal ne super hilfe, echt big thx !!!!
werd mich gleich mal dran setzen.