CMS Eleanor - Поиск
Полная версия этой страницы: Официальный форум Eleanor CMS » Добавление BB кодов
Официальный форум Eleanor CMS » Поддержка пользователей системы Eleanor CMS » Первые шаги
DeD
Решил добавить в систему вставку mp3, точнее портировать mp3-player с DLE, столкнулся с проблемой: не получается загрузить bb код (вида audio=сылка на файл,сылка на файл и т.д) во время редактирования например новости. Сохранение кода происходит так:
 '#\[audio\s*=\s*(\S.+?)\s*\]#ie'=>'$this->BuildAudio(\'\1\')',
Сама функция формируется так:
function BuildAudio($url)


   {
 	  if (!Strings::XssCheckUrl($url))
 		  return '';
 	  if( preg_match( "/[?&;%<\[\]]/", $url ) ) {
 		  return "[audio=" . $url . "]";
 	  }
 	  $list = explode( ",", $url );
 	  $url = array ();
 	  foreach ( $list as $value ) {
 		  $url[] = "{url:&#39;" . trim( $value ) . "&#39;}";
 	  }
 	  $url = implode( ", ", $url );
 	  $list = implode( ",", $list );
 	  return "<object classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" \"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0\" width=\"425\" height=\"45\">
 			  <param name=\"movie\" value=\"addons/flashplayer/flv_player.swf?config={embedded:true,playList:[{$url}],initialScale:&#39;fit&#39;,showMenu:false,backgroundColor:&#39;-1&#39;,controlsOverVideo:&#39;locked&#39;,controlBarGloss:&#39;low&#39;,controlBarBackgroundColor:0,showFullScreenButton:false,usePlayOverlay:false,showOnLoadBegin:false,loop:false,autoRewind:true,autoBuffering:false,autoPlay:false}\" />
 			  <param name=\"allowFullScreen\" value=\"true\" />
 			  <param name=\"quality\" value=\"high\" />
 			  <param name=\"bgcolor\" value=\"#000000\" />
 			  <param name=\"wmode\" value=\"transparent\" />
 			  <embed src=\"addons/flashplayer/flv_player.swf?config={embedded:true,playList:[{$url}],initialScale:&#39;fit&#39;,showMenu:false,backgroundColor:&#39;-1&#39;,controlsOverVideo:&#39;locked&#39;,controlBarGloss:&#39;low&#39;,controlBarBackgroundColor:0,showFullScreenButton:false,usePlayOverlay:false,showOnLoadBegin:false,loop:false,autoRewind:true,autoBuffering:false,autoPlay:false}\" quality=\"high\" bgcolor=\"#000000\" wmode=\"transparent\" allowFullScreen=\"true\" width=\"425\" height=\"45\" align=\"middle\" type=\"application/x-shockwave-flash\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" />
 			  </object>";
 	 }
Проблема в загрузке, собственно вопрос как правильно в данной ситуации вызвать все ссылки из переменной {$url}, в виде привиденном выше?
Alexander
Цитата (DeD @ 20.3.2009, 0:58)
как правильно в данной ситуации вызвать все ссылки из переменной {$url}, в виде привиденном выше?

Не понял, что имеется ввиду.
DeD
Объясню на примере: например я создал новость с со следующим кодом
Цитата
Какой то текст!!!!
[audio=http://eleanor/Akon_Lonely.mp3,http://eleanor/Akcent_Kylie.mp3]
Еще какой то текст!!!!
Песня

Она сохранилась в БД, и все работает, включая плеер. Теперь мне нужно отредактировать ее заходим нажимаем править, вот здесь и проялвяется проблемка, теперь мой код выглядит так:
Цитата
Какой то текст!!!!




Еще какой то текст!!!!
Песня

Т.е. тег audio не загрузился. Сслыки из {$url} нужно извлеч либо от сюда:
				<param name="movie" value="addons/flashplayer/flv_player.swf?config={embedded:true,playList:[{url:&#39;http://eleanor/Akon_Lonely.mp3&#39;}, {url:&#39;http://eleanor/Akcent_Kylie.mp3&#39;}],initialScale:&#39;fit&#39;,showMenu:false,backgroundColor:&#39;-1&#39;,controlsOverVideo:&#39;locked&#39;,controlBarGloss:&#39;low&#39;,controlBarBackgroundColor:0,showFullScreenButton:false,usePlayOverlay:false,showOnLoadBegin:false,loop:false,autoRewind:true,autoBuffering:false,autoPlay:false}" />
или отсюда
<embed src="addons/flashplayer/flv_player.swf?config={embedded:true,playList:[{url:&#39;http://eleanor/Akon_Lonely.mp3&#39;}, {url:&#39;http://eleanor/Akcent_Kylie.mp3&#39;}],initialScale:&#39;fit&#39;,showMenu:false,backgroundColor:&#39;-1&#39;,controlsOverVideo:&#39;locked&#39;,controlBarGloss:&#39;low&#39;,controlBarBackgroundColor:0,showFullScreenButton:false,usePlayOverlay:false,showOnLoadBegin:false,loop:false,autoRewind:true,autoBuffering:false,autoPlay:false}" quality="high" bgcolor="#000000" wmode="transparent" allowFullScreen="true" width="425" height="45" align="middle" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
. Т.е. записать плейлист mp3 в изначальном виде:
[audio=http://eleanor/Akon_Lonely.mp3,http://eleanor/Akcent_Kylie.mp3]
Alexander
Это из-за того, что не прописано правила обратного преобразования. Напоминаю, что в базе хранится хранится в виде уже отформатированных HTML тегов, а не BB кодов. Поэтому нужно прописать правило, как преобразовывать ХТМЛ обратно в BB. Для примера можно посмотреть в эту тему: http://forum.eleanor-cms.ru/index.php?showtopic=340
DeD
Мне необходимо получить вот такую строку в массиве сохранения bb кода:
&#39;#\[audio\s*=\s*(\S.+?)\s*\]#ie&#39;=>&#39;$this->BuildAudio(&#39;\\1&#39;)&#39;,
вот здесь возникает ошибка:
\\1

а в массиве загрузки bb кода такая же запись проходит нормально, например вот так:
&#39;# ..... #is&#39;	=>	&#39;[audio=\\1]&#39;,

Как тут быть? или может есть способ записать подругому?
Alexander
Цитата (DeD @ 21.3.2009, 21:27)
вот здесь возникает ошибка:

Убери один \, чтобы получилось \1.
DeD
Даже после удаления все равно жалуется на слэш.
Alexander
А. Все, понял.
&#39;$this->BuildAudio(&#39;\\1&#39;)&#39;,

Замени на:
&#39;$this->BuildAudio(\&#39;\1\&#39;)&#39;,
DeD
Такую подстановку уже делал в данном случае обработка идет не верно. Функция сейчас выглядит так:
function BuildAudio($url)
 {
  if($url == "") return;
  if(preg_match("/[?&;%<\[\]]/", $url)) {
  return "[audio=".$url."]";
  }
  $list = explode(",", $url);
  $url = array ();
  foreach ($list as $value) {
  $url[] = "{url:&#39;".trim($value)."&#39;}";
  }
  $url = implode(", ", $url);
  $list = implode(",", $list);
  return "<!--el_audio_begin:{$list}--><center><object classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" \"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0\" width=\"425\" height=\"45\">
  <param name=\"movie\" value=\"/addons/flashplayer/flv_player.swf?config={embedded:true,playList:[{$url}],initialScale:&#39;fit&#39;,showMenu:false,backgroundColor:&#39;-1&#39;,controlsOverVideo:&#39;locked&#39;,controlBarGloss:&#39;low&#39;,controlBarBackgroundColor:0,showFullScreenButton:false,usePlayOverlay:false,showOnLoadBegin:false,loop:false,autoRewind:true,autoBuffering:false,autoPlay:false}\" />
  <param name=\"allowFullScreen\" value=\"true\" />
  <param name=\"quality\" value=\"high\" />
  <param name=\"bgcolor\" value=\"#000000\" />
  <param name=\"wmode\" value=\"transparent\" />
  <embed src=\"/addons/flashplayer/flv_player.swf?config={embedded:true,playList:[{$url}],initialScale:&#39;fit&#39;,showMenu:false,backgroundColor:&#39;-1&#39;,controlsOverVideo:&#39;locked&#39;,controlBarGloss:&#39;low&#39;,controlBarBackgroundColor:0,showFullScreenButton:false,usePlayOverlay:false,showOnLoadBegin:false,loop:false,autoRewind:true,autoBuffering:false,autoPlay:false}\" quality=\"high\" bgcolor=\"#000000\" wmode=\"transparent\" allowFullScreen=\"true\" width=\"425\" height=\"45\" align=\"middle\" type=\"application/x-shockwave-flash\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" />
  </object></center><!--el_audio_end-->";
  }

Код загрузки bb:
&#39;#<!--el_audio_begin:(.+?)-->(.+?)<!--el_audio_end-->#is&#39; => &#39;[audio=\\1]&#39;,

Код сохранения bb:
&#39;#\[audio\s*=\s*(\S.+?)\s*\]#ie&#39;=>&#39;$this->BuildAudio(\&#39;\1\&#39;)&#39;,

Если '$this->BuildAudio(\'\1\')', то выдится новость так:
Цитата
Какой то текст!!!!
http://eleanor/Akon_Lonely.mp3,http://elea...ylie.mp3-->
Непосредственно ПЛЕЕР
Еще какой то текст!!!!

но вот этой строки не должно быть:

Она должна записываться в базу в виде (служит для вызова при редактировании):
<!--el_audio_begin:http://eleanor/Akon_Lonely.mp3,http://eleanor/Akcent_Kylie.mp3-->

Может в самой функции BuildAudio ошибка где-то? Проверил вроде все в норме.
Alexander
Какой HTML формирует код?
DeD
Если я правильно понял вопрос, то вот такой:
Какой то текст!!!!<br />
[url]http://eleanor/Akon_Lonely.mp3[/url],http://elea...nt_Kylie.mp3--><center><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="425" height="45">
				<param name="movie" value="/addons/flashplayer/flv_player.swf?config={embedded:true,playList:[{url:&#39;http://eleanor/Akon_Lonely.mp3&#39;}, {url:&#39;http://eleanor/Akcent_Kylie.mp3&#39;}],initialScale:&#39;fit&#39;,showMenu:false,backgroundColor:&#39;-1&#39;,controlsOverVideo:&#39;locked&#39;,controlBarGloss:&#39;low&#39;,controlBarBackgroundColor:0,showFullScreenButton:false,usePlayOverlay:false,showOnLoadBegin:false,loop:false,autoRewind:true,autoBuffering:false,autoPlay:false}" />
				<param name="allowFullScreen" value="true" />
				<param name="quality" value="high" />
				<param name="bgcolor" value="#000000" />
				<param name="wmode" value="transparent" />
				<embed src="/addons/flashplayer/flv_player.swf?config={embedded:true,playList:[{url:&#39;http://eleanor/Akon_Lonely.mp3&#39;}, {url:&#39;http://eleanor/Akcent_Kylie.mp3&#39;}],initialScale:&#39;fit&#39;,showMenu:false,backgroundColor:&#39;-1&#39;,controlsOverVideo:&#39;locked&#39;,controlBarGloss:&#39;low&#39;,controlBarBackgroundColor:0,showFullScreenButton:false,usePlayOverlay:false,showOnLoadBegin:false,loop:false,autoRewind:true,autoBuffering:false,autoPlay:false}" quality="high" bgcolor="#000000" wmode="transparent" allowFullScreen="true" width="425" height="45" align="middle" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
				</object></center><!--el_audio_end--><br />
Еще какой то текст!!!!

А должен:
Какой то текст!!!!<br />
<!--el_audio_begin:http://eleanor/Akon_Lonely.mp3,http://eleanor/Akcent_Kylie.mp3--><center><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="425" height="45">
				<param name="movie" value="/addons/flashplayer/flv_player.swf?config={embedded:true,playList:[{url:&#39;http://eleanor/Akon_Lonely.mp3&#39;}, {url:&#39;http://eleanor/Akcent_Kylie.mp3&#39;}],initialScale:&#39;fit&#39;,showMenu:false,backgroundColor:&#39;-1&#39;,controlsOverVideo:&#39;locked&#39;,controlBarGloss:&#39;low&#39;,controlBarBackgroundColor:0,showFullScreenButton:false,usePlayOverlay:false,showOnLoadBegin:false,loop:false,autoRewind:true,autoBuffering:false,autoPlay:false}" />
				<param name="allowFullScreen" value="true" />
				<param name="quality" value="high" />
				<param name="bgcolor" value="#000000" />
				<param name="wmode" value="transparent" />
				<embed src="/addons/flashplayer/flv_player.swf?config={embedded:true,playList:[{url:&#39;http://eleanor/Akon_Lonely.mp3&#39;}, {url:&#39;http://eleanor/Akcent_Kylie.mp3&#39;}],initialScale:&#39;fit&#39;,showMenu:false,backgroundColor:&#39;-1&#39;,controlsOverVideo:&#39;locked&#39;,controlBarGloss:&#39;low&#39;,controlBarBackgroundColor:0,showFullScreenButton:false,usePlayOverlay:false,showOnLoadBegin:false,loop:false,autoRewind:true,autoBuffering:false,autoPlay:false}" quality="high" bgcolor="#000000" wmode="transparent" allowFullScreen="true" width="425" height="45" align="middle" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
				</object></center><!--el_audio_end--><br />
Еще какой то текст!!!!
DeD
Я тут покумекал над хаком, теперь работает))) единственный глюк, то что работать можно только без плейлистов(( ну я думаю ето не сильно большое упущение. Также добавил вставку видео в формате flv.
Alexander, куда залить сие творение или может здесь на форуме прикрепить? Если здесь, то 100kb не хватит хотя бы 150 нужно.
Alexander
DeD, все дошло.. Тут загвоздка в следующем: все еще работает механизм преобразования текстовых ссылок в нормальные. Чтобы избавится от этого "глюка". Достаточно, спереди ссылки поставить любую букву. Т.е.
Вместо:
return "<!--el_audio_begin:{$list}-->...

Написать:
return "<!--el_audio_begin:q{$list}-->...


Соответственно, вместо:
&#39;#<!--el_audio_begin:(.+?)-->(.+?)<!--el_audio_end-->#is&#39; => &#39;[audio=\\1]&#39;,

Написать:
&#39;#<!--el_audio_begin:q(.+?)-->(.+?)<!--el_audio_end-->#is&#39; => &#39;[audio=\\1]&#39;,


Примерно так.

Цитата (DeD @ 24.3.2009, 0:04)
Alexander, куда залить сие творение или может здесь на форуме прикрепить? Если здесь, то 100kb не хватит хотя бы 150 нужно.

ммм. А ужать архиватором не судьба? Почему бы Вам просто не зарегистрировать сайт и не попасть в группу Eleanor User?
DeD
1. ето в архиве
2. для теста зарегаю какой-нить, а то и в прям не порядок)))
Alexander
Так подошел мой вариант?
DeD
К сожалению нет, тоже самое. Ну я думаю потеря использования плеилистов не такая уж и большая, без работает как часы. Все таки мало кто ими пользуется
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.