Eigenen BBCode erstellen !?!

Hallo bplaced-Gemeinde,

ich arbeite gerade intensiv an einer neuen Joomla-Komponente (com_hiclip).
Sie ermöglicht User einer Community, Videos up-to-loaden, welche dann auf einen anderen Server gespeichert werden (hiclip.tv). All das funktioniert sogar mit allow_url_fopen = OFF.

Wer sich die momentane Alpha-Version ansehen will, hier der Link:
-> test.malouka.de/Joomla/index.php

Was will ich jetzt mit dem BBCode?
User können neben Video-Upload sich auch gegenseitig Private Videomessages zu senden, welche dann in ihrem Postfach (normaler Message-Komponente) angezeigt werden sollen. Da aber die meisten normalen Message-Komponenten HTML nicht erlauben, wollte ich jetzt fragen, wie ich folgenden Script evtl. in einen BBCode umwandle?

[code]

[/code]

Wobei dann später der user nur noch <?php echo $hiclip_VID?> und <?php echo $hiclip_vkey ?> eingeben muss.

Muss doch irgendwie über folgendes gehen:

$string = preg_replace("...","...",$string);

Bin - wie immer - für jede Hilfe dankbar :hail:

Willst du einen gegebenen BBCode in HTML umwandeln???
oder soll ein BBCode erzeugt werden, den man dann in die Nachricht einfügen kann, wobei du den BBCode nicht selbst abarbeitest???

Moin,

erstmal solltest du dir über die Formatierung klar werden. Denn dann können wir dir auch helfen. Grundsätzlich läuft das Ganze über preg_replace ab, aber es kommt da immer auf die Formatierung an, nach der gesucht werden soll.

Möglich wäre z.B.

[hiclip account=test1234 vid=1569723 vkey=4565asddf_546][/hiclip]

Das [/hiclip] könnte man je nach Aufbau eventuell auch wegfallen lassen. Es wäre hilfreich, wenn du ein wenig mehr üder die einzelnen Bedeutungen der Variablen sagen könntest (Integer, Strings, Mix). Mir fehlt es schwer mich da rein zu denken, da ich keinerlei Ahnung habe, wie diese hiclips aufgebaut sind bzw. erreichbar.

Also: Es läuft andersrum: Wir brauchen einen BBCode, den wir in HTML umwandeln :wink:

MfG
myPages

Das ist einfach :wink:

//BBCode ist "[hiclip account=test1234 vid=1569723 vkey=4565asddf_546]"

$bb=preg_replace("!\[hiclip(.*)\]!","$1",$bb);
$bb2=explode(" ",$bb);
if(count($bb2) != 3)
   die("BBCode Falsch!");
$bb=array();

foreach($bb2 as $one)
{
   $temp=explode("=",$one);
   $bb[$temp[0]]=$temp[1];
}
unset($bb2);

echo "<html param1='$bb[vid]' param2='$bb[vkey]' param3='$bb[account]' />";

Ungetestet :wink:

vielen Dank Für die Antworten.
Ich bin noch neu im Bereich BBCode (<- hab da noch keine Ahnung).

Also am Schluss sollte es dann so aussehen, dass der user eingibt:
[hiclip vid=1569723 vkey=4565asddf_546][/hiclip]
oder
[hiclip]1569723:4565asddf_546[/hiclip] (<- würde ich am besten finden)

Also hiclip_account ist schon über PHP definiert. Zum Beispiel: meinaccount

Wie muss denn jetzt das dann aussehen?
$string = preg_replace("/[hiclip] vid=([0-9][0-9][0-9][0-9][0-9][0-9]) vkey(.*?)[/hiclip]/si","

",$string);

Ich kenn mich da überhaupt nicht aus, und hab auch nirgendwo eine Anleitung gefunden, wie man einen BBCode schreibt.

Versteht ihr ungefähr was ich mein?

Dann solltest du besser eine Anleitung finden, denn wenn du dich dranmachst, ohne richtig eine Ahnung zu haben, kann es sein, dass Leute HTML einschleusen können.

sry, dass ich jetzt nochmal schreib

Als HTML sieht sieht der Code folgendermaßen aus:

[code]

[/code]

und diesen möchte ich jetzt gerne genauso in BBCode haben, weil ich den als HTML nicht bei einer bestimmter Komponente einbinden kann. Wäre gut, wenn man dann nur vid und vkey angeben muss, und das andere gleich automatisch mitgeliefert wird.

kann mir bitte da jemand das “umcoden”, damit ich das hernehmen kann.

hab jetzt einfach mal selber getestet. Aber es funktioniert nicht. Woran kann es liegen?

So sieht es momentan aus:

// hiClipTV-Videos sieht dann so aus [video vid=123456]vkey=123456asdfgh[/video] $string = preg_replace("/\[video vid=(.*?)\]vkey=(.*?)\[\/video\]/si","<script type=\"text/javascript\"> var hiclip_account=\"videoandfun\"; var hiclip_vid=\"1\"; var hiclip_vkey=\"2\"; <script type=\"text/javascript\" mce_src=\"http://www.hiclip.de/api/player_v10/\" src=\"http://www.hiclip.de/api/player_v10/\"></script>",$string);

okay, hab was im Code vergessen:

Jetzt würde der Code theoretisch schon gehen, nur leider hab ich jetzt das Problem, dass er anzeigt: var hiclip_vkey=“2” und var hiclip_vid=“1”

Wie kann ich jetzt das noch ändern, dass er das anzeigt, was eingeben wird?

Moin,

du musst im zweiten Argument von preg_replace die Variablen angeben, in denen der andere Wert gespeichert wurde. ($1 für den ersten Wert, $2 für den zweiten, usw.)

MfG
myPages

dankeschöööööööööööööööööööööön,
endlich funktioniert das, was ich nun schon seit 10 Stunden versuche.

// hiClipTV-Videos sieht dann so aus [video vid=123456]vkey=123456asdfgh[/video] $string = preg_replace("/\[video vid=(.*?)\]vkey=(.*?)\[\/video\]/si","<script type=\"text/javascript\"> var hiclip_account=\"videoandfun\"; var hiclip_vid=\"$1\"; var hiclip_vkey=\"$2\"; </script><script type=\"text/javascript\" mce_src=\"http://www.hiclip.de/api/player_v10/\" src=\"http://www.hiclip.de/api/player_v10/\"></script>",$string);

Benutzt ihr Joomla? Wenn ja, dann werdet ihr von der baldigen Komponente com_hiclip begeistert sein :wink:

:hail: :hail: :hail: :hail: :hail: :hail: :hail: :hail: :hail:

könnt ihr mal wieder nen Gefallen tun?

Diesesmal wollt ich wieder einen BBCode in einer PMS(Message)-Komponente hinzufügen. nur leider ist bei derer der BBCode-Aufbau wieder total anders.

So sieht die Datei aus, wo die bisherigen BBCodes drinn sind:

<?php

//Anzahl der Bilder, die umgewandelt werden sollen
if ($SM_BBCODE_IMAGECOUNT == "") {$SM_BBCODE_IMAGECOUNT = 11;}

// Zeilenumbrüche verschiedener Betriebsysteme vereinheitlichen
function convertlinebreaks ($bb_msg) {
    return preg_replace ("/\015\012|\015|\012/", "\n", $bb_msg);
}

// Alles bis auf Neuezeile-Zeichen entfernen
function bbcode_stripcontents ($bb_msg) {
    return preg_replace ("/[^\n]/", '', $bb_msg);
}

function do_bbcode_url ($action, $attributes, $content, $params, $node_object) {
    if ($action == 'validate') {
        return true;
    }
    if (!isset ($attributes['default'])) {
        return '<a href="'.htmlspecialchars ($content).'">'.htmlspecialchars ($content).'</a>';
    }
    return '<a href="'.htmlspecialchars ($attributes['default']).'">'.$content.'</a>';
}

// Funktion zum Einbinden von Bildern
function do_bbcode_img ($action, $attributes, $content, $params, $node_object) {
    if ($action == 'validate') {
        return true;
    }
    return '<img src="'.htmlspecialchars($content).'" alt=">>Image<<">';
}

$bbcode = new StringParser_BBCode ();
//$bbcode->addFilter (STRINGPARSER_FILTER_PRE, 'convertlinebreaks');

$bbcode->addParser (array ('block', 'inline', 'link', 'listitem'), 'htmlspecialchars');
$bbcode->addParser (array ('block', 'inline', 'link', 'listitem'), 'nl2br');
//$bbcode->addParser ('list', 'bbcode_stripcontents');

$bbcode->addCode ('marquee', 'simple_replace', null, array ('start_tag' => '<marquee>', 'end_tag' => '</marquee>'),
                  'inline', array ('listitem', 'block', 'inline', 'link'), array ());
$bbcode->addCode ('shout', 'simple_replace', null, array ('start_tag' => '<h2>', 'end_tag' => '</h2>'),
                  'inline', array ('listitem', 'block', 'inline', 'link'), array ());
$bbcode->addCode ('b', 'simple_replace', null, array ('start_tag' => '<b>', 'end_tag' => '</b>'),
                  'inline', array ('listitem', 'block', 'inline', 'link'), array ());
$bbcode->addCode ('i', 'simple_replace', null, array ('start_tag' => '<i>', 'end_tag' => '</i>'),
                  'inline', array ('listitem', 'block', 'inline', 'link'), array ());
$bbcode->addCode ('u', 'simple_replace', null, array ('start_tag' => '<u>', 'end_tag' => '</u>'),
                  'inline', array ('listitem', 'block', 'inline', 'link'), array ());
$bbcode->addCode ('bl', 'simple_replace', null, array ('start_tag' => '<blink>', 'end_tag' => '</blink>'),
                  'inline', array ('listitem', 'block', 'inline', 'link'), array ());
$bbcode->addCode ('url', 'usecontent?', 'do_bbcode_url', array (),
                  'url', array ('listitem', 'block', 'inline'), array ('url'));
$bbcode->addCode ('link', 'callback_replace_single', 'do_bbcode_url', array (),
                  'link', array ('listitem', 'block', 'inline'), array ('link'));
$bbcode->addCode ('img', 'usecontent', 'do_bbcode_img', array (),
                  'image', array ('listitem', 'block', 'inline', 'link'), array ());
$bbcode->addCode ('bild', 'usecontent', 'do_bbcode_img', array (),
                  'image', array ('listitem', 'block', 'inline', 'link'), array ());
$bbcode->setOccurrenceType ('img', 'image');
$bbcode->setOccurrenceType ('bild', 'image');
$bbcode->setMaxOccurrences ('image', $SM_BBCODE_IMAGECOUNT);
$bbcode->addCode ('list', 'simple_replace', null, array ('start_tag' => '<ul>', 'end_tag' => '</ul>'),
                  'list', array ('block', 'listitem'), array ());
$bbcode->addCode ('*', 'simple_replace', null, array ('start_tag' => '<li>', 'end_tag' => '</li>'),
                  'listitem', array ('list'), array ());
$bbcode->setCodeFlag ('*', 'closetag', BBCODE_CLOSETAG_OPTIONAL);
$bbcode->setCodeFlag ('*', 'paragraphs', true);
$bbcode->setCodeFlag ('list', 'paragraph_type', BBCODE_PARAGRAPH_BLOCK_ELEMENT);
$bbcode->setCodeFlag ('list', 'opentag.before.newline', BBCODE_NEWLINE_DROP);
$bbcode->setCodeFlag ('list', 'closetag.before.newline', BBCODE_NEWLINE_DROP);
$bbcode->setRootParagraphHandling (true);
?>

Am Ende sollte man den BBcode so eingeben können:
[video=videoandfun]357542:42dd4c29ef8dda91a7fa9[/video]
Wobei videoandfun der account ist, 357542 die vid und 42dd4c29ef8dda91a7fa9 der vkey.

folgender Maßen sieht dazu der HTML-Code aus:

<br><div align=\"center\"><script type=\"text/javascript\">
var hiclip_account=\"$1\";
var hiclip_vid=\"$2\";
var hiclip_vkey=\"$3\";
</script><script type=\"text/javascript\" mce_src=\"http://www.hiclip.de/api/player_v10/\" src=\"http://www.hiclip.de/api/player_v10/\"></script></div>

:hail: Wäre echt gütig, wenn mir wieder jemand helfen könnte :hail:

Ach du bist auch bei bplaced g habe dir ja auch alles bei Joomlaportal.de schon geschrieben :wink:

http://www.joomlaportal.de/joomla-module/24507-site-messenger-v1-3-fuer-joomla-45.html#post641045

Anwednung:

Codeanpassung:

[code]function do_bbcode_video ($action, $attributes, $content, $params, $node_object) {
if ($action == ‘validate’) {
return true;
}
if (!isset ($attributes[‘default’])) {
$return = ‘

’;
$return .= ‘
’;
}

$return = '<br><div align="center"><script type="text/javascript">var hiclip_account="'.htmlspecialchars ($attributes['account']).'";var hiclip_vid="'.htmlspecialchars($content).'";var hiclip_vkey="'.htmlspecialchars ($attributes['vkey']).'";</script>';
$return .= '<script type="text/javascript" mce_src="http://www.hiclip.de/api/player_v10/" src="http://www.hiclip.de/api/player_v10/"></script></div>';
return $return;

}[/code]

$bbcode->addCode ('video', 'usecontent?', 'do_bbcode_video', array (), 'video', array ('listitem', 'block', 'inline', 'link'), array ('video'));

Vielen Dank für deine bemühungen, aber ich bekomms trotzdem nicht zum laufen. kann das sein, dass der Sitemessenger garkeinen javaScript anzeigt?

Hi!
Doch, ich habe ja selbst sehr viel Javascript mit dem Site Messenger eingesetzt.
Und der Code wird ja auch ausgegeben. Ich weiß nur nicht, wie dein “hiclip” funktioniert, ich kenne es einfach gar nicht.
Aber ich gehe mal davon aus, dass einfach noch wesentlich mehr dazu gehört, als das bischen Javascript, dass du angegeben hattest.

Ausgegeben wird alles, was ich dir als Beispiel schon mitgeliefert habe.
Das kannst du dir im Firefox ganz gut ansehen, wenn du dir eine IM schickst und den schienbar leeren Berecih markierst, dann rechte Maustaste --> Auswahl-Quelltext anzeigen

[code]

[/code]

um zum beispiel ein Video einzubinden genügt folgender Code:

<div align="center"><script type="text/javascript">
var hiclip_account="videoandfun";
var hiclip_vid="357542";
var hiclip_vkey="42dd4c29ef8dda91a7fa9";
</script><script type="text/javascript" mce_src="http://www.hiclip.de/api/player_v10/" src="http://www.hiclip.de/api/player_v10/"></script></div>

Siehe hier zu auch videoandfun.bplaced.net/video.html
Aber irgendwie wird im Sitemessenger das Video nicht angezeigt.

hmmm OK, also wenn du statt

return $return;

echo $return;

verwendest, wird das Video immerhin über der ganzen Nachricht gezeigt.
Warum er das innen nicht macht weiß ich nicht.