[php] preg_replace_callback Problem

quicksilver

Lt. Junior Grade
Registriert
Jan. 2004
Beiträge
363
Ich habe folgendes Szenario. Ich habe eine BBcode Funktion mit der ich per bbcode aus meiner Galerie ein bild in meinem Text einfügen und ausgeben kann. Per klick öffnet sich dann ein neues Fenster und das Bild wird angezeigt.

Die Funktionen:
PHP:
<?php

function bbthumb($pic)
{
$picture ="<a href=\"pic.php?pic=org&amp;id=".$pic["1"]."&amp;popup=2\" onclick=\"return popup('pic.php?pic=org&amp;id=".$pic["1"]."&amp;popup=2')\"><img src=\"pic.php?pic=thumb&amp;id=".$pic["1"]."\" alt=\"\" style=\"border: 3px solid #c0c0c0;\" /></a>";

return $picture;
}

function bbcode($string)
{
..
.
// BBcode Thumbnail
$string = preg_replace_callback("#\[bbthumb=(.*?)\]#","bbthumb",$string);

return $string;
}
?>

Der Bbcode:
Code:
[bbthumb=51]

Nun wird halt das bild mit der Id als Thumbnail angezeigt und per Klick öffnet sich ein Neues Fenster mit dem Bild in Originalgrösse. Das funktioniert alles wunderbar.

Nun zu meinem Problem. Ich möchte in dem bbcode irgendwie z.b. So [bbthumb=51,left]
Optional ein Float wert mit übergeben. Das ich wenn ich hinter dem 1. wert eine position wie left, right oder so angebe oben bei Style noch z.b. ein float:left; eingefügt wird.

Kann mir da jemand helfen?

Vielen Dank
 
Hi,
na dann mach doch. In der Variablen $pic der Funktion bbthumb() müsste dann soetwas wie "51,left" stehen. Das brauchst du dann nur noch auseinandernehmen und die Ausgabe anpassen. Echt Baby!

Für Erwachsene: pass den regulären Ausdruck an! Etwa in der Form:
Code:
"#\[bbthumb=(.+),(.+)\]#"
Dann steht in $pic[1] der Inhalt der ersten Klammer und in $pic[2] der Inhalt der zweiten Klammer.

Für den Fall, dass der zweite Parameter optional sein soll, könnte es so klappen:
Code:
"#\[bbthumb=(.+)(,(.+))?\]#"
Wenn der zweite Parameter also vorhanden ist, steht der Inhalt in $pic[3]. Ist kein zweiter Paramter vorhanden, ist $pic[3] nicht gesetzt oder leer. Einfach probieren...

MfG, Gobble-G
 
Hm so nun hab ich das mal probiert. Aber entweder ich habe was falsch gemacht oder :( hm

PHP:
function bbthumb($pic)
{
if($pic["3"]){$float = " float:".$pic["3"].";";}

$picture ="<a href=\"pic.php?pic=org&amp;id=".$pic["1"]."&amp;popup=2\" onclick=\"return popup('pic.php?pic=org&amp;id=".$pic["1"]."&amp;popup=2')\"><img src=\"pic.php?pic=thumb&amp;id=".$pic["1"]."\" alt=\"\" style=\"border: 3px solid #c0c0c0;".$float."\" /></a>";

return $picture;
}


function bbcode($string)
	{
		// BBcode Thumbnail
		$string = preg_replace_callback("#\[bbthumb=(.+)(,(.+))?\]#","bbthumb",$string);

		return $string;
	}
 
Hallo,
ja, stimmt. Ich vergesse immer das gierige Verhalten der regulären Ausdrücke. Also, einfach noch den Modifikator "U" (ungreedy) einsetzen und schon geht es. Außerdem macht es sich gut, wenn man den Quantifikator "+" in der dritten Klammer durch durch ein "*" ersetzt. Dadurch bleibt $pic[1] auch konsistent, wenn im BBCode zwar ein Komma aber kein weiterer Wert angegeben wurde:
Code:
"#\[bbthumb=(.+)(,(.*))?\]#U"

MfG...
 
Zurück
Oben