|
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
|
|
MipH
Спирин Дмитрий
Зарегистрирован: 2004-12-22
Сообщений: 252
|
Аналогично делается с любыми другими сущностями в неткете:
• добавляется кнопка вставки кодов в форму добавления • текст сообщения оборачивается помимо основной функции nc_bbcode ищи и созданной нами фунцией nc_bbcode_youtube для преобразования кода youtube в flash
bbzone@gmail.com | bbz.ru | miph.info | miph.ruВы можете обратиться ко мне, если необходима разработка функционала на NetCat
|
|
Гость
Гость
|
Код:/**
* Функция обработки текста с 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;
|