Расширение видео-псто и аудио-псто

Позволяет вставлять видосики еще и с:
* vimeo.com
* smotri.com
* videoradar.ru

И аудио с любого линка по ссылке вида:
<audio>http://mahsaet.ru/123.mp3</audio>




Для аудио нужно со странички wpaudioplayer.com качнуть стандалон версию, поставить и в код страничек на которых будет показываться плеер поставить код (заменив пути на свои)

  <script type="text/javascript" src="/js/audio-player.js"></script>  
  <script type="text/javascript">  
    AudioPlayer.setup("http://mahsiet.ru/swf/player.swf",{width: 290});  
  </script>


Сам код:

<?php

include $_SERVER['DOCUMENT_ROOT'] . '../lib/jevix/jevix.class.php';

class TextparserModel extends AbstractModel
  {
    protected $oJevix;
    protected $audio_count = 0;

    /**
     * Инициализация модуля
     *
     */
    public function __construct($mode)
      {
        $this->oJevix = new Jevix();
        switch ($mode)
          {
            case 'text':
              $this->ConfigText();
              break;
            case 'comments':
              $this->ConfigComments();
              break;
            default:
              $this->ConfigComments();
              break;
          }
      }

    /**
     * Конфигурирует типограф для основного текста
     *
     */
    protected function ConfigText()
      {
        // Разрешённые теги
        $this->oJevix->cfgAllowTags(array('cut' , 'a' , 'img' , 'i' , 'b' , 'u' , 's' , 'video' , 'li' , 'ol' , 'ul' , 'h1' , 'h2' , 'h3' , 'br' , 'hr', 'audio'));
        // Коротие теги типа
        $this->oJevix->cfgSetTagShort(array('br' , 'img' , 'hr' , 'cut'));
        // Разрешённые параметры тегов
        $this->oJevix->cfgAllowTagParams('img', array('src' , 'alt' , 'title' , 'align'));
        $this->oJevix->cfgAllowTagParams('a', array('title' , 'href'));
        $this->oJevix->cfgAllowTagParams('cut', array('name'));
        // Параметры тегов являющиеся обязательными
        $this->oJevix->cfgSetTagParamsRequired('img', 'src');
        $this->oJevix->cfgSetTagParamsRequired('a', 'href');
        // Теги которые необходимо вырезать из текста вместе с контентом
        $this->oJevix->cfgSetTagCutWithContent(array('script' , 'object' , 'iframe' , 'style'));
        // Вложенные теги
        $this->oJevix->cfgSetTagChilds('ul', array('li'), false, true);
        $this->oJevix->cfgSetTagChilds('ol', array('li'), false, true);
        // Отключение авто-добавления 
        //$this->oJevix->cfgSetAutoBrMode(false);
        // Автозамена
        $this->oJevix->cfgSetAutoLinkMode(false);
        $this->oJevix->cfgSetAutoReplace(array('±' , '©' , '®' , '©' , '®'), array('±' , '©' , '®' , '©' , '®'));
        $this->oJevix->cfgSetXHTMLMode(true);
      }

    protected function ConfigComments()
      {
        // Разрешённые теги
        $this->oJevix->cfgAllowTags(array('img' , 'i' , 'b' , 'u' , 's' , 'br'));
        // Коротие теги типа
        $this->oJevix->cfgSetTagShort(array('br' , 'img' , 'hr'));
        // Разрешённые параметры тегов
        $this->oJevix->cfgAllowTagParams('img', array('src' , 'alt' , 'title' , 'align'));
        $this->oJevix->cfgSetTagParamsRequired('img', 'src');
        $this->oJevix->cfgSetTagCutWithContent(array('script' , 'object' , 'iframe' , 'style' , 'a'));
        // Отключение авто-добавления 
        // Автозамена
        $this->oJevix->cfgSetAutoReplace(array('±' , '©' , '®' , '©' , '®'), array('±' , '©' , '®' , '©' , '®'));
        $this->oJevix->cfgSetXHTMLMode(true);
      }

    /**
     * Парсинг текста с помощью Jevix
     *
     * @param string $sText
     * @param array $aError
     * @return string
     */
    public function JevixParser($sText, &$aError = null)
      {
        $sResult = $this->oJevix->parse($sText, $aError);
        return $sResult;
      }

    /**
     * Парсинг текста на предмет видео
     *
     * @param string $sText
     * @return string
     */
    public function VideoParser($sText)
      {
        /**
         * youtube.com
         */
        $sResult = preg_replace('/<video>http:\/\/youtube\.com\/watch\?v=([a-zA-Z0-9_\-]+)<\/video>/Ui', '<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/$1&hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/$1&hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="344"></embed></embed></param></param></embed></object>', $sText);
        $sResult = preg_replace('/<video>http:\/\/www\.youtube\.com\/watch\?v=([a-zA-Z0-9_\-]+)<\/video>/Ui', '<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/$1&hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/$1&hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="344"></embed></embed></param></param></embed></object>', $sResult);
        /**
         * rutube.ru
         */
        $sResult = preg_replace('/<video>http:\/\/rutube\.ru\/tracks\/\d+.html\?v=([a-zA-Z0-9_\-]+)<\/video>/Ui', '<OBJECT width="470" height="353"><PARAM name="movie" value="http://video.rutube.ru/$1"></PARAM><PARAM name="wmode" value="window"></PARAM><PARAM name="allowFullScreen" value="true"></PARAM><PARAM name="flashVars" value="uid=662118"></PARAM><EMBED src="http://video.rutube.ru/$1" type="application/x-shockwave-flash" wmode="window" width="470" height="353" allowFullScreen="true" flashVars="uid=662118"></embed></embed></param></param></EMBED></OBJECT>', $sResult);
        $sResult = preg_replace('/<video>http:\/\/www\.rutube\.ru\/tracks\/\d+.html\?v=([a-zA-Z0-9_\-]+)<\/video>/Ui', '<OBJECT width="470" height="353"><PARAM name="movie" value="http://video.rutube.ru/$1"></PARAM><PARAM name="wmode" value="window"></PARAM><PARAM name="allowFullScreen" value="true"></PARAM><PARAM name="flashVars" value="uid=662118"></PARAM><EMBED src="http://video.rutube.ru/$1" type="application/x-shockwave-flash" wmode="window" width="470" height="353" allowFullScreen="true" flashVars="uid=662118"></embed></embed></param></param></EMBED></OBJECT>', $sResult);
        
        /**
         * vimeo.com
         */        
        $sResult = preg_replace('/<video>http:\/\/vimeo\.com\/([a-zA-Z0-9_\-]+)<\/video>/', '<object width="400" height="302"><param name="allowfullscreen" value="true"></param><param name="allowscriptaccess" value="always"></param><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=$1&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1"></param><embed src="http://vimeo.com/moogaloop.swf?clip_id=$1&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="302"></embed></embed></embed></object><br /><a href="http://vimeo.com/2664111">5 new year vignettes</a> from <a href="http://vimeo.com/phatpapa">phat_papa</a> on <a href="http://vimeo.com">Vimeo</a>.', $sResult);
        $sResult = preg_replace('/<video>http:\/\/www\.vimeo\.com\/([a-zA-Z0-9_\-]+)<\/video>/', '<object width="400" height="302"><param name="allowfullscreen" value="true"></param><param name="allowscriptaccess" value="always"></param><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=$1&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1"></param><embed src="http://vimeo.com/moogaloop.swf?clip_id=$1&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="302"></embed></embed></embed></object><br /><a href="http://vimeo.com/2664111">5 new year vignettes</a> from <a href="http://vimeo.com/phatpapa">phat_papa</a> on <a href="http://vimeo.com">Vimeo</a>.', $sResult);
        
        /**
         * smotri.com
         */
        $sResult = preg_replace('/<video>http:\/\/smotri.com\/video\/view\/\?id\=([a-zA-Z0-9_\-]+)<\/video>/', ' <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="330"><param name="movie" value="http://pics.smotri.com/scrubber_custom8.swf?file=$1&bufferTime=3&autoStart=false&str_lang=rus&xmlsource=http%3A%2F%2Fpics.smotri.com%2Fcskins%2Fblue%2Fskin_color_lightaqua.xml&xmldatasource=http%3A%2F%2Fpics.smotri.com%2Fskin_ng.xml"></param><param name="allowScriptAccess" value="always"></param><param name="allowFullScreen" value="true"></param><param name="bgcolor" value="#ffffff"></param><embed src="http://pics.smotri.com/scrubber_custom8.swf?file=$1&bufferTime=3&autoStart=false&str_lang=rus&xmlsource=http%3A%2F%2Fpics.smotri.com%2Fcskins%2Fblue%2Fskin_color_lightaqua.xml&xmldatasource=http%3A%2F%2Fpics.smotri.com%2Fskin_ng.xml" quality="high" allowscriptaccess="always" allowfullscreen="true" wmode="window"  width="400" height="330" type="application/x-shockwave-flash"></embed></embed></embed></object>', $sResult);
        $sResult = preg_replace('/<video>http:\/\/www\.smotri.com\/video\/view\/\?id\=([a-zA-Z0-9_\-]+)<\/video>/', ' <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="330"><param name="movie" value="http://pics.smotri.com/scrubber_custom8.swf?file=$1&bufferTime=3&autoStart=false&str_lang=rus&xmlsource=http%3A%2F%2Fpics.smotri.com%2Fcskins%2Fblue%2Fskin_color_lightaqua.xml&xmldatasource=http%3A%2F%2Fpics.smotri.com%2Fskin_ng.xml"></param><param name="allowScriptAccess" value="always"></param><param name="allowFullScreen" value="true"></param><param name="bgcolor" value="#ffffff"></param><embed src="http://pics.smotri.com/scrubber_custom8.swf?file=$1&bufferTime=3&autoStart=false&str_lang=rus&xmlsource=http%3A%2F%2Fpics.smotri.com%2Fcskins%2Fblue%2Fskin_color_lightaqua.xml&xmldatasource=http%3A%2F%2Fpics.smotri.com%2Fskin_ng.xml" quality="high" allowscriptaccess="always" allowfullscreen="true" wmode="window"  width="400" height="330" type="application/x-shockwave-flash"></embed></embed></embed></object>', $sResult);
        
        /**
         * videoradar.ru 
         */
        $sResult = preg_replace('/<video>http:\/\/videoradar\.ru\/video\/([a-zA-Z0-9_\-]+)\.html<\/video>/', '<object width=468 height=396 id=flvplayer align=middle><param name=allowScriptAccess value=always /><param name=allowFullScreen value=true /><param name=quality value=high /><param name=wmode value=window /><param name=bgcolor value=#ffffff /><param name=movie value="http://videoradar.ru/player/vplayer.swf?v=$1&host=videoradar.ru&logo=http://videoradar.ru/player/logo.png&linkfromdisplay=true&streamscript=lighttpd" /><embed src="http://videoradar.ru/player/vplayer.swf?v=$1&host=videoradar.ru&logo=http://videoradar.ru/player/logo.png&linkfromdisplay=true&streamscript=lighttpd" quality=high wmode=window bgcolor=#ffffff width=468 height=396 name=flvplayer align=middle allowScriptAccess=always allowFullScreen=true type=application/x-shockwave-flash pluginspage=http://www.macromedia.com/go/getflashplayer></embed></object>', $sResult);
        $sResult = preg_replace('/<video>http:\/\/www\.videoradar\.ru\/video\/([a-zA-Z0-9_\-]+)\.html<\/video>/', '<object width=468 height=396 id=flvplayer align=middle><param name=allowScriptAccess value=always /><param name=allowFullScreen value=true /><param name=quality value=high /><param name=wmode value=window /><param name=bgcolor value=#ffffff /><param name=movie value="http://videoradar.ru/player/vplayer.swf?v=$1&host=videoradar.ru&logo=http://videoradar.ru/player/logo.png&linkfromdisplay=true&streamscript=lighttpd" /><embed src="http://videoradar.ru/player/vplayer.swf?v=$1&host=videoradar.ru&logo=http://videoradar.ru/player/logo.png&linkfromdisplay=true&streamscript=lighttpd" quality=high wmode=window bgcolor=#ffffff width=468 height=396 name=flvplayer align=middle allowScriptAccess=always allowFullScreen=true type=application/x-shockwave-flash pluginspage=http://www.macromedia.com/go/getflashplayer></embed></object>', $sResult);

        return $sResult;
      }
      
    public function AudioParser($sText)
      {
        preg_match('/<audio>http:\/\/([a-zA-Z0-9\\_\\-\\.\\/\\:]+)<\/audio>/Ui',$sText, $matches);
        if(sizeof($matches)>0)
          {
            $this->audio_count = $this->audio_count+1;
          }
        $sResult = preg_replace('/<audio>http:\/\/([a-zA-Z0-9\\_\\-\\.\\/\\:]+)<\/audio>/Ui', '<p id="audioplayer_'.$this->audio_count.'">Тут должен быть аудиоплеер, но что-то пошло не так!</p><script type="text/javascript">AudioPlayer.embed("audioplayer_'.$this->audio_count.'", {soundFile: "http://$1", titles:""});</script>', $sText);        
        return $sResult;
      }
      
    /**
     * Парсит текст
     *
     * @param string $sText
     */
    public function Parse($sText)
      {
        $sResult = $this->JevixParser($sText);
        $sResult = $this->VideoParser($sResult);
        $sResult = $this->AudioParser($sResult);
        return $sResult;
      }
  }
?>

9 комментариев

avatar
Я решил не париться с парсерами и вставка видео у мну работает по тегу embed. И работает любое, с любого сайта — вообще без разницы.
avatar
А можно у уважаемой общественности пару слов о минусах?) Может я что-то не понимаю, дак расскажите, обсудим.
avatar
может общественности слово «мну» не понравилось? тут вообще хрен поймёшь настроения у народа
avatar
клёви, сочни потс! карме ++
avatar
Кстати, несколько треков в один псто вставить нельзя, тк почему-то $this->audio_count всегда равна единице и количество вхождений тега аудио на эту переменую не влияет
avatar
Ты прав, о придирчивый друг… поправил))
avatar
Сказал было я… но понял… пятница… вечер… лень… Может на выходных добью)))
avatar
За аудио спасибо!

Парсер vimeo уже был.
avatar
появился вопрос куда писать
Сам код:

заменить этим text.class.php?

Я реализовал на embed, но autostart=«false» не работает, это плохо, я так понимаю от плагина зависит, вот если кому интересно:

добавляем строчку в templates/skin/new/actions/ActionTopic/add.tpl, после
<a href="#" onclick="lsPanel.putTagUrlsound('topic_text','Введите ссылку'); return false;" class="button"><img src="{$DIR_STATIC_SKIN}/images/panel/sound.gif" width="20" height="20"  title="звук"></a>

Надо будет сделать и положить картинку images/panel/sound.gif

Далее добавить в templates/skin/new/js/panel.js после putTagUrl: function(obj,sPromt) {
obj=$(obj);
if (url=prompt(sPromt,'http://')) {
var sel=obj.getSelectedText();
this.putText(obj,''+sel+'');
}
}
,
	putTagUrlsound: function(obj,sPromt) {
		obj=$(obj);
		if (url=prompt(sPromt,'http://')) {
			var sel=obj.getSelectedText();
        	this.putText(obj,'<embed src="'+url+'" type="audio/x-mpeg" width="145" height="45" autostart="false"></embed>'+sel+'</embed>');
        }
	}
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.