كيفية إنشاء [youtube]-علامة PECL bbcode التمديد ؟
سؤال
يمكنني استخدام PECL bbcode امتداد لتحليل BBCode-العلامات.
أي شخص يمكن أن تظهر لي طريقة استبدال النص بين BBCode الكلمات بدلا من المحيطة مع HTML العلامات ؟ أريد بناء [youtube]
العلامة:
[youtube]w0ffwDYo00Q[/youtube]
التهيئة لهذا الوسم يبدو مثل هذا:
$tags = array(
'youtube' => array(
'type' => BBCODE_TYPE_NOARG,
'open_tag' =>
'<object width="425" height="350">
<param name="movie" value="http://www.youtube.com/v/{CONTENT}"></param>
<embed src="http://www.youtube.com/v/{CONTENT}" type="application/x-shockwave-flash" width="425" height="350"></embed>
</object>',
'close_tag' => '',
),
);
المشكلة:النص بين [youtube]
فئة (Youtube ID) مطلوب مرتين (على موضوع تضمين العلامات) لذا لا يمكن استخدام close_tag
على النحو المقصود.
النتيجة:العلامات إدراج يوتيوب لاعب يتم إنشاؤه بشكل صحيح ولكن بعد أن يوتيوب-معرف المطبوعة:
<object width="425" height="350">
<param name="movie" value="http://www.youtube.com/v/w0ffwDYo00Q"></param>
<embed src="http://www.youtube.com/v/w0ffwDYo00Q" type="application/x-shockwave-flash" width="425" height="350"></embed>
</object>w0ffwDYo00Q
أي شخص يعرف كيفية حل هذه المشكلة ؟
شكرا مقدما!
المحلول
أنا لا يمكن اختبار الآن, لذلك لست متأكدا من أنه يعمل...ولكن ربما يمكنك أن تجرب هذا :
وثائق bbcode_create
يصف المفاتيح/القيم التي يمكنك استخدامها لتكوين العلامة الخاصة بك.
واحد من هذه المفاتيح هي :
content_handling
اختياري - يعطي رد تستخدم لتعديل المحتوى.وجوه المنحى التدوين معتمدة فقط منذ 0.10.1 رد النموذج هو اسم سلسلة(string $المحتوى ، سلسلة $الحجة)
حتى ما إذا كنت تحديد تلك الممتلكات ، بحيث يكون رابط وظيفة تعديل المحتوى...تعديل كان بواسطة إعداد إلى سلسلة فارغة على سبيل المثال ؟
شيء من هذا القبيل ، ربما :
$tags = array(
'youtube' => array(
'type' => BBCODE_TYPE_NOARG,
'open_tag' =>
'<object width="425" height="350">
<param name="movie" value="http://www.youtube.com/v/{CONTENT}"></param>
<embed src="http://www.youtube.com/v/{CONTENT}" type="application/x-shockwave-flash" width="425" height="350"></embed>
</object>',
'close_tag' => '',
'content_handling' => 'remove_handler',
),
);
وإعلان remove_handler
وظيفة هذه الطريقة :
function remove_handler($content, $argument) {
return '';
}
أو ربما بهذه الطريقة :
function remove_handler(& $content, $argument) {
$content = '';
}
مع القليل من الحظ, هذا قد يكون كافيا لإزالة المحتوى ؟
تحرير بعد تعليق عن الاقتراح السابق
مرحبا مرة أخرى ،
هذه المرة حاولت ما أقترحه, و يبدو أن العامل ;-)
أولا, يمكنك تعيين ''
لكل من open_tag
و close_tag
;هذا الطريق ، content_handling
رد سوف تكون مسؤولة عن كل عمل.
شيئا من هذا القبيل, لذلك :
$tags = array(
'youtube' => array(
'type' => BBCODE_TYPE_NOARG,
'open_tag' => '',
'close_tag' => '',
'content_handling' => 'generate_youtube_tag',
),
);
وظيفة رد الاتصال ثم تبدو مثل هذا :
function generate_youtube_tag($content, $argument) {
// TODO some security checks on $content !
// Here, I've assumed that a youtube id only contains letters and numbers
// But I don't know it that's always the case
if (preg_match('/^[\d\w]+$/', $content)) {
return <<<NEW_CONTENT
<object width="425" height="350">
<param name="movie" value="http://www.youtube.com/v/{$content}"></param>
<embed src="http://www.youtube.com/v/{$content}" type="application/x-shockwave-flash" width="425" height="350"></embed>
</object>
NEW_CONTENT;
}
else {
return '';
}
}
فإنه في الواقع يولد كله <object>
الوسم ، بما في ذلك أحداثا من youtube id.
وإذا كنت اسميها مثل هذا :
$text = '[youtube]w0ffwDYo00Q[/youtube]';
$bbHandler = bbcode_create($tags);
$output = bbcode_parse($bbHandler, $text);
var_dump($output);
يمكنك الحصول على هذا الناتج :
string '<object width="425" height="350">
<param name="movie" value="http://www.youtube.com/v/w0ffwDYo00Q"></param>
<embed src="http://www.youtube.com/v/w0ffwDYo00Q" type="application/x-shockwave-flash" width="425" height="350"></embed>
</object>' (length=246)
الذي يبدو وكأنه شيء ينبغي أن تكون على ما يرام ;-)
في الواقع, إذا كنت فقط ouput ذلك :
echo $output;
الفيديو يتم تحميلها ، هذا يسمى سيمون القط 'القط الرجل لا', للمعلومية ;-)
نأمل أن يكون هذا يحل مشكلتك بشكل أفضل هذه المرة :-)