Регистрация
Регистрируясь, вы подтверждаете свое согласие с соглашением об использовании персональных данных.
Восстановление пароля

YouTube BBCODE в Блогах и их комментариях

12.10.2009, 20:03
MipH
Спирин Дмитрий
MipH

Зарегистрирован:
2004-12-22
Сообщений: 252

Задача: добавить к стандартным неткетовским кнопкам BBCODE, реализуемым через вставку в нужное место функции nc_bbcode_bar(), еще одну кнопку для комфортной вставки видео с YouTube на страницу сайта. При этом решение должно работать и после любых обновлений неткета.

Решение:
Открываем шаблон Записи компонента Блоги. Идем в Шаблоны действий, Добавление. Ищем там (если вы вставляли сам или добавляем, если нет у вас такого) функцию:
Код:
 ".nc_bbcode_bar('this', 'addPost', 'blogMessage', 1)."

Она занимается тем, что в форме addPost над полем с именем blogMessage вставляет кнопки BBCODE. Прямо после этой функции пишем:
Код:
<input value='youtube' type='button' onmouseover="show_bbcode_tips('this','addPost','blogMessage','Вставить видео с YouTube: [youtube]URL[/youtube]');" onclick="insert_bbcode('this','addPost','blogMessage','[youtube]','[/youtube]'); return false;"/>

Все очевидно: это простая кнопка, которая использует функции и объекты, создаваемые nc_bbcode_bar().

После этого в форме добавления сообщения в блог должна появится кнопка, которая корректно работает. Можно вставить что-нибудь типа:
Код:
[youtube]http://www.youtube.com/watch?v=5L0VLbh6Kq4[/youtube]


Теперь необходимо этот код корректно обрабатывать. Все описанное не претендует на эстетичность и грамотность, но прекрасно работает и выполняет свое назначение! Вставляем в файл netcat/modules/default/function.inc.php свою функцию:
Код:
/**
* Функция обработки текста с BB-кодами
* заменяет youtube-коды на их HTML эквиваленты
* оригинал взят в s_common.inc.php
*
* @param string текст
* @param string ссылка на полный просмотр объекта
* @param bool полный вывод объекта?
* @param array массив допустимых кодов
* @return string;
*/
function nc_bbcode_youtube($text, $cut_link="", $cut_full="", $codes="") {

if ( function_exists("nc_personal_func") ) return nc_personal_func();

# массив допустимых BB-кодов
$allow_codes = array("youtube");


$BBcodes = array();

# url_accept_chars
$uac = "-A-Z0-9+&@#/%?=~_|!:,.;";

# RegExp array
$RegEx = array();
# replace array
$HtmlCodes = array();
# Условия на доступность BB-кодов
if( isset($codes['youtube']) || !$codes) {
$RegEx[] = "![youtube]http://(?:www.)?youtube.com/watch?v=([0-9A-Za-z-_]{11})[/youtube]!si";


$HtmlCodes[] = "<object width='425' height='355'>"
. "<param name='movie' value='http://www.youtube.com/v/$1"
. "&rel=1'></param>"
. "<param name='wmode' value='transparent'></param>"
. "<embed src='http://www.youtube.com/v/$1&rel=1' "
. "type='application/x-shockwave-flash' wmode='transparent' width='425' "
. "height='355'></embed>"
. "</object><br />"
. "<a href='http://youtube.com/watch?v=$1' target='_blank'>Ссылка на YouTube</a><br />";
}

# обработка
$t = $text;
$text = preg_replace($RegEx, $HtmlCodes, $text);
while ( $t != $text ) {
$t = $text;
$text = preg_replace($RegEx, $HtmlCodes, $text);
}

return $text;
}


Осталось эту функцию вызывать. Открываем сам шаблон Записей Блога, находим там использование функции nc_bbcode(). Если у вас ее нет, то сообщаю, что это дефолтовая функция системы, описанная в мануале. Она занимается преобразованием текста с BBCODE в конечный отформатированный в HTML текст. В общем,изначально у меня она выглядела вот так:
Код:
nc_bbcode($f_Text, $fullLink)

Ну и оборачиваем в ее во вновь созданную нами функцию:
Код:
nc_bbcode_youtube(nc_bbcode($f_Text, $fullLink))


Готово.

bbzone@gmail.com | bbz.ru | miph.info | miph.ruВы можете обратиться ко мне, если необходима разработка функционала на NetCat
12.10.2009, 20:06
MipH
Спирин Дмитрий
MipH

Зарегистрирован:
2004-12-22
Сообщений: 252

Аналогично делается с любыми другими сущностями в неткете:
• добавляется кнопка вставки кодов в форму добавления
• текст сообщения оборачивается помимо основной функции nc_bbcode ищи и созданной нами фунцией nc_bbcode_youtube для преобразования кода youtube в flash

bbzone@gmail.com | bbz.ru | miph.info | miph.ruВы можете обратиться ко мне, если необходима разработка функционала на NetCat
14.11.2009, 01:29
minimalis
Minimalis

Зарегистрирован:
2008-08-26
Сообщений: 13

Спасибо!То что надо.Ещё такой вопрос как такое реализовать,только что бы видео можно было добавлять на страницы сайта,то есть в новостях сайта,в статьях и ткд..
Спасибо!

minimalis
06.12.2010, 02:39
Гость
Гость

Код:
/**
* Функция обработки текста с BB-кодами
* заменяет youtube-коды на их HTML эквиваленты
* оригинал взят в s_common.inc.php
*
* @param string текст
* @param string ссылка на полный просмотр объекта
* @param bool полный вывод объекта?
* @param array массив допустимых кодов
* @return string;
*/
function nc_bbcode_youtube($text, $cut_link="", $cut_full="", $codes="") {

if ( function_exists("nc_personal_func") ) return nc_personal_func();

# массив допустимых BB-кодов
$allow_codes = array("youtube");


$BBcodes = array();

# url_accept_chars
$uac = "-A-Z0-9+&@#/%?=~_|!:,.;";

# RegExp array
$RegEx = array();
# replace array
$HtmlCodes = array();
# Условия на доступность BB-кодов
if( isset($codes['youtube']) || !$codes) {
$patterns[] = "#\[youtube\]http://(?:www\.)?youtube.com/watch\?v=([0-9A-Za-z-_]{11})[^[]*\[/youtube\]#is";



$HtmlCodes[] = "<object width='425' height='355'>"
. "<param name='movie' value='http://www.youtube.com/v/$1"
. "&rel=1'></param>"
. "<param name='wmode' value='transparent'></param>"
. "<embed src='http://www.youtube.com/v/$1&rel=1' "
. "type='application/x-shockwave-flash' wmode='transparent' width='425' "
. "height='355'></embed>"
. "</object><br />"
. "<a href='http://youtube.com/watch?v=$1' target='_blank'>Ссылка на YouTube</a><br />";
}

# обработка
$t = $text;
$text = preg_replace($patterns, $HtmlCodes, $text);
while ( $t != $text ) {
$t = $text;
$text = preg_replace($patterns, $HtmlCodes, $text);
}

return $text;
06.12.2010, 02:44
Гость
Гость

А кто нить подскажет, как оную функцию на форум прикрутить? Где и что обернуть?
198 196 2010-12-06 02:44:54 10106
Описание проекта