+0.79
Рейтинг
1.67
Сила

PHPFOX 1.6.21

Кстати, а почему люди забили на phpfox 1.6.21. Ведь реально крутой скрипт, даже для 2020. В нем всё есть, и не похож на вконтакт или фейсбук(как сеичас все скрипты равняютса под них, обидно).

Я вот себе сейчас поставил его для тестов и всё в нём работает и очень даже быстро.

Чиним Пост-Опрос, Пост-Фотосет и Пост-Ссылка

Как вы уже заметили на 1.0.3 не работают «Пост-Опрос, Пост-Фотосет и Пост-Ссылка»

Чиним так. В файле: /classes/modules/topic/entity/Topic.entity.class.php

Заменить функции на вот эти:(Извеняйте, что не описал что именно менять, тут лимит стоит 15000. Но там всё идёт по порядку. Найдите начало и конец, и замените на этот код)
/**
     * Извлекает сериализованные данные топика
     */
    protected function extractExtra() {

        if (null === $this->aExtra) {
            $aData = @unserialize($this->getExtra());
            if (is_array($aData)) {
                $this->aExtra = $aData;
            }
        }
    }

    /**
     * Устанавливает значение нужного параметра
     *
     * @param string $sName    Название параметра/данных
     * @param mixed  $data     Данные
     */
    protected function setExtraValue($sName, $data) {

        $this->extractExtra();
        $this->aExtra[$sName] = $data;
        $this->setExtra($this->aExtra);
    }

    /**
     * Извлекает значение параметра
     *
     * @param string $sName    Название параметра
     *
     * @return null|mixed
     */
    protected function getExtraValue($sName) {

        $this->extractExtra();
        if (isset($this->aExtra[$sName])) {
            return $this->aExtra[$sName];
        }
        return null;
    }

    /* *** ******************** *** */
    /* *** SOURCE LINK OF TOPIC *** */

    /**
     * Returns URL of topic's source link
     *
     * @param bool $bShort    Shorten URL
     *
     * @return null|string
     */
    public function getSourceLink($bShort = false) {

        if ($sUrl = $this->getExtraValue('url')) {
            if ($bShort) {
                $sUrl = htmlspecialchars($sUrl);
                if (preg_match('/^https?:\/\/(.*)$/i', $sUrl, $aMatch)) {
                    $sUrl = $aMatch[1];
                }
                $sUrlShort = substr($sUrl, 0, 30);
                if (strlen($sUrlShort) != strlen($sUrl)) {
                    return $sUrlShort . '...';
                }
                return $sUrl;
            } else {
                if (!preg_match('/^https?:\/\/(.*)$/i', $sUrl, $aMatch)) {
                    $sUrl = 'http://' . $sUrl;
                }
            }
            return $sUrl;
        }
        return null;
    }

    /**
     * Set URL of topic's source link
     *
     * @param string $data
     */
    public function setSourceLink($data) {

        $this->setExtraValue('url', strip_tags($data));
    }

    /**
     * Возвращает количество переходов по ссылке в топике-ссылке
     *
     * @return int
     */
    public function getSourceLinkCountJump() {

        return (int)$this->getExtraValue('count_jump');
    }

    /**
     * Устанавливает количество переходов по ссылке в топике-ссылке
     *
     * @param string $data
     */
    public function setSourceLinkCountJump($data) {

        $this->setExtraValue('count_jump', $data);
    }

    /* *** ********************** *** */
    /* *** QUESTIONNAIRE OF TOPIC *** */

    /**
     * Устанавливает вопрос
     *
     * @param string $data
     */
    public function setQuestionTitle($data) {

        $this->setExtraValue('question_title', $data);
    }

    /**
     * Возвращает вопрос, если вопрос не указан - заголовок топика
     *
     * @return int|null
     */
    public function getQuestionTitle() {

        if ($this->getExtraValue('question_title')) {
            return $this->getExtraValue('question_title');
        }
        return $this->getTitle();
    }

    /**
     * Добавляет вариант ответа в опросе топика
     *
     * @param string $data
     */
    public function addQuestionAnswer($data) {

        $this->extractExtra();
        $this->aExtra['answers'][] = array('text' => $data, 'count' => 0);
        $this->setExtra($this->aExtra);
    }

    /**
     * Очищает варианты ответа в опросе топика
     */
    public function clearQuestionAnswer() {

        $this->setExtraValue('answers', array());
    }

    /**
     * Возвращает варианты ответа в опросе топика
     *
     * @param bool $bSortVote
     *
     * @return array|null
     */
    public function getQuestionAnswers($bSortVote = false) {

        $aAnswers = $this->getExtraValue('answers');
        if ($aAnswers && $bSortVote) {
            uasort(
                $aAnswers, create_function(
                    '$a,$b',
                    "if (\$a['count'] == \$b['count']) { return 0; } return (\$a['count'] < \$b['count']) ? 1 : -1;"
                )
            );
        }
        return $aAnswers ? $aAnswers : array();
    }

    /**
     * Увеличивает количество ответов на данный вариант в опросе топика
     *
     * @param int $sIdAnswer  ID варианта ответа
     */
    public function increaseQuestionAnswerVote($sIdAnswer) {

        if ($aAnswers = $this->getQuestionAnswers()) {
            if (isset($aAnswers[$sIdAnswer])) {
                $aAnswers[$sIdAnswer]['count']++;
                $this->aExtra['answers'] = $aAnswers;
                $this->setExtra($this->aExtra);
            }
        }
    }

    /**
     * Возвращает максимально количество ответов на вариант в опросе топика
     *
     * @return int
     */
    public function getQuestionAnswerMax() {

        $aAnswers = $this->getQuestionAnswers();
        $iMax = 0;
        foreach ($aAnswers as $aAns) {
            if ($aAns['count'] > $iMax) {
                $iMax = $aAns['count'];
            }
        }
        return $iMax;
    }

    /**
     * Возвращает в процентах количество проголосовавших за конкретный вариант
     *
     * @param int $sIdAnswer ID варианта
     *
     * @return int|string
     */
    public function getQuestionAnswerPercent($sIdAnswer) {

        if ($aAnswers = $this->getQuestionAnswers()) {
            if (isset($aAnswers[$sIdAnswer])) {
                $iCountAll = $this->getQuestionCountVote() - $this->getQuestionCountVoteAbstain();
                if (!$iCountAll == 0) {
                    return number_format(round($aAnswers[$sIdAnswer]['count'] * 100 / $iCountAll, 1), 1, '.', '');
                }
            }
        }
        return 0;
    }

    /**
     * Возвращает общее число принявших участие в опросе в опросе топика
     *
     * @return int
     */
    public function getQuestionCountVote() {

        return (int)$this->getExtraValue('count_vote');
    }

    /**
     * Устанавливает общее число принявших участие в опросе в опросе топика
     *
     * @param int $data
     */
    public function setQuestionCountVote($data) {

        $this->setExtraValue('count_vote', $data);
    }

    /**
     * Возвращает число воздержавшихся от участия в опросе
     *
     * @return int
     */
    public function getQuestionCountVoteAbstain() {

        return (int)$this->getExtraValue('count_vote_abstain');
    }

    /**
     * Устанавливает число воздержавшихся от участия в опросе
     *
     * @param int $data
     *
     * @return mixed
     */
    public function setQuestionCountVoteAbstain($data) {

        $this->setExtraValue('count_vote_abstain', $data);
    }
/**
	 * Возвращает фотографии из топика-фотосета
	 *
	 * @param int|null $iFromId	ID с которого начинать  выборку
	 * @param int|null $iCount	Количество
	 * @return array
	 */
	public function getPhotosetPhotos($iFromId = null, $iCount = null) {
		return $this->Topic_getPhotosByTopicId($this->getId(), $iFromId, $iCount);
	}
	/**
	 * Возвращает количество фотографий в топике-фотосете
	 *
	 * @return int|null
	 */
	public function getPhotosetCount() {
		return $this->getExtraValue('count_photo');
	}
	/**
	 * Возвращает ID главной фото в топике-фотосете
	 *
	 * @return int|null
	 */
	public function getPhotosetMainPhotoId() {

        $oImage = $this->getPhotosetMainPhoto();
        if ($oImage) {
            return $oImage->getMresourceId();
        }

        return $this->getExtraValue('main_photo_id');
    }
	/**
	 * Устанавливает ID главной фото в топике-фотосете
	 *
	 * @param int $data
	 */
	public function setPhotosetMainPhotoId($iPhotoId) {

        $this->setExtraValue('main_photo_id', $iPhotoId);
        $this->setProp('_photoset_photos', null);
    }
	/**
	 * Устанавливает количество фотографий в топике-фотосете
	 *
	 * @param int $data
	 */
	public function setPhotosetCount($iCount) {

        $this->setExtraValue('count_photo', $iCount);
        $this->setProp('_photoset_photos', null);
    }

Не дадим 1.0.3 умереть!

LSGallery и Мобильный шаблон

Если вы используете галерею в мобильном шаблоне, то загрузка изображений просто не работает или устарела. Чиним так:

В templates/skin/mobile/settings/config/config.php

Меняем:
$config['head']['default']['js']  = array(
	"___path.root.engine_lib___/external/html5shiv.js" => array('browser'=>'lt IE 9'),
	"___path.root.engine_lib___/external/jquery/jquery.js",
	"___path.root.engine_lib___/external/jquery/jquery.jqmodal.js",
	"___path.root.engine_lib___/external/jquery/jquery-ui.js",
	"___path.root.engine_lib___/external/jquery/jquery.notifier.js",
	"___path.root.engine_lib___/external/jquery/jquery.scrollto.js",
	"___path.root.engine_lib___/external/jquery/jquery.rich-array.min.js",
	"___path.root.engine_lib___/external/jquery/markitup/jquery.markitup.js",
	"___path.root.engine_lib___/external/jquery/jquery.form.js",
	"___path.root.engine_lib___/external/jquery/jquery.jqplugin.js",
	"___path.root.engine_lib___/external/jquery/jquery.cookie.js",
	"___path.root.engine_lib___/external/jquery/jquery.serializejson.js",
	"___path.root.engine_lib___/external/jquery/jquery.file.js",
	"___path.root.engine_lib___/external/jquery/jquery.placeholder.min.js",
	"___path.root.engine_lib___/external/jquery/jquery.charcount.js",
	"___path.root.engine_lib___/internal/template/js/main.js",
	"___path.root.engine_lib___/internal/template/js/favourite.js",
	"___path.root.engine_lib___/internal/template/js/blocks.js",
	"___path.root.engine_lib___/internal/template/js/talk.js",
	"___path.root.engine_lib___/internal/template/js/vote.js",
	"___path.root.engine_lib___/internal/template/js/poll.js",
	"___path.root.engine_lib___/internal/template/js/subscribe.js",
	"___path.root.engine_lib___/internal/template/js/geo.js",
	"___path.root.engine_lib___/internal/template/js/wall.js",
	"___path.root.engine_lib___/internal/template/js/usernote.js",
	"___path.root.engine_lib___/internal/template/js/comments.js",
	"___path.root.engine_lib___/internal/template/js/blog.js",
	"___path.root.engine_lib___/internal/template/js/user.js",
	"___path.root.engine_lib___/internal/template/js/userfeed.js",
	"___path.root.engine_lib___/internal/template/js/userfield.js",
	"___path.root.engine_lib___/internal/template/js/stream.js",
	"___path.root.engine_lib___/internal/template/js/photoset.js",
	"___path.root.engine_lib___/internal/template/js/toolbar.js",
	"___path.root.engine_lib___/internal/template/js/settings.js",
	"___path.root.engine_lib___/internal/template/js/topic.js",
	"___path.root.engine_lib___/internal/template/js/hook.js",
	"___path.static.skin___/js/template.js",
	"___path.static.skin___/js/lightbox.js",
	"___path.static.skin___/js/libs/jquery.touchswipe.js",
	"___path.static.skin___/js/libs/jquery.swipegallery.js",
	"___path.static.skin___/js/libs/jquery.fitvids.js",
	"http://yandex.st/share/share.js" => array('merge'=>false),
);

На:
$config['head']['default']['js'] = Config::Get('head.default.js');
    $config['head']['default']['js'][] = '___path.root.engine_lib___/external/html5shiv.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/external/jquery/jquery.jqmodal.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/external/jquery/jquery-ui.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/external/jquery/jquery.notifier.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/external/jquery/jquery.scrollto.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/external/jquery/jquery.rich-array.min.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/external/jquery/markitup/jquery.markitup.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/external/jquery/jquery.form.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/external/jquery/jquery.jqplugin.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/external/jquery/jquery.cookie.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/external/jquery/jquery.serializejson.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/external/jquery/jquery.file.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/external/jquery/jquery.placeholder.min.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/external/jquery/jquery.charcount.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/main.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/favourite.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/blocks.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/talk.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/vote.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/poll.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/subscribe.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/geo.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/wall.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/usernote.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/comments.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/blog.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/user.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/userfeed.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/userfield.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/stream.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/photoset.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/toolbar.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/settings.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/topic.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/hook.js';
	$config['head']['default']['js'][] = '___path.static.skin___/js/template.js';
	$config['head']['default']['js'][] = '___path.static.skin___/js/lightbox.js';
	$config['head']['default']['js'][] = '___path.static.skin___/js/libs/jquery.touchswipe.js';
	$config['head']['default']['js'][] = '___path.static.skin___/js/libs/jquery.swipegallery.js';
	$config['head']['default']['js'][] = '___path.static.skin___/js/libs/jquery.fitvids.js';
	$config['head']['default']['js'][] = '___http://yandex.st/share/share.js';

Транслит для LS 1.0.3

Обыкновенный транслит. Не плагин. Для людей у кого нету русской клавиатуры, ну или не умеют печатать на русском(как я дурак). Короче пишем русские слова английским шрифтом, и при нажатии на «Транслит» он переводица в русский.

Делал давно, так что если не будет работать я подправлю.

Создаём /templates/skin/Ваш_скин/js/translit.js
var CapsState = false;

function copy() {
  let textarea = document.getElementById("textarea");
  textarea.select();
  document.execCommand("copy");
}

function initArray() 
{
	this.length = initArray.arguments.length
	for (var i = 0; i < this.length; i++)   
		this[i+1] = initArray.arguments[i]
}

eng_letters = new initArray(1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1042,1065,1061,1067,1047,91,92,93,94,95,96,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1074,1097,120,1099,1079);
second_order = new initArray(72,79,69,85,65,72,77,79,85,65,72,104,111,101,117,97,104,109,111,117,97,104);
first_order  = new initArray(1062,1049,1049,1049,1049,1057,1065,1067,1067,1067,1047,1094,1081,1081,1081,1081,1089,1097,1099,1099,1099,1079);
two_result = new initArray(1063,1025,1069,1070,1071,1064,1068,1025,1070,1071,1046,1095,1105,1101,1102,1103,1096,1100,1105,1102,1103,1078);

var nexto = 1;
var language = (navigator.appName=='Netscape');

function getlanguagename()
{
	if (language==1) return "Eng";
	if (language==0) return "Rus";
}

function changelanguage()
{
if (language==1) {language=0; document.searchform.rus_eng.value="Rus"; document.searchform.comment_text.focus();return 0}
if (language==0) {language=1; document.searchform.rus_eng.value="Eng"; document.searchform.comment_text.focus();return 0}
}

function translate_letter()
{
	if(navigator.appName=='Netscape')
	{
		if (language==0) 
		{
			changelanguage();
			alert("The language is swithched to English. Please complete the text and press 'TRANSLITERATE ALL' button");
		}
		return true;
	}
        if (language==1) {return true;}
	var txt = document.searchform.comment_text.value;
	l1 = txt.substr(txt.length - 1,1);
	var code = l1.charCodeAt(0); 
	l2 = txt.substr(txt.length-2,1);
	var code2 = l2.charCodeAt(0);
	if ((code==39)||(code==35))
	//' and '' and # and ## treatment
	{
		if (code==39) 
		{
			var newcode =1100;
			var doublecode =1068;
		}
		if (code==35) 
		{
			var newcode =1098;
			var doublecode =1066;
		}

		var res = String.fromCharCode(newcode);		
		txt = txt.substr(0, txt.length-1);
		if (code2==newcode) 
		{ 
			res = String.fromCharCode(doublecode);
			txt = txt.substr(0, txt.length-1);
		}

		document.searchform.comment_text.value = txt + res;
                document.searchform.comment_text.focus();
	}

	if ((code<123) && (code>64)) 
	{
		var res = String.fromCharCode(eng_letters[code-64]);
		var rus_code = eng_letters[code-64];
		txt = txt.substr(0, txt.length-1);
		if (nexto==0)
		{ 
			nexto = 1;
			for (i = 1; i<25; i++)
			{
				if (rus_code == first_order[i]) nexto = 0; 
				if ((code==second_order[i])&&(code2==first_order[i])) 
				{ 
					res = String.fromCharCode(two_result[i]);
					txt = txt.substr(0, txt.length-1);
					break;
				}
			}
		}
		else nexto = 0;

                document.searchform.comment_text.focus();
		document.searchform.comment_text.value = txt + res;

	}
}


function translatesymbol(pretxt,txt)
{
	var res = pretxt+txt;
	var code = txt.charCodeAt(0); 
	var code2 = pretxt.charCodeAt(0);

	if ((code==39)||(code==35))
	//' and '' and # and ## treatment
	{
		if (code==39) 
		{
			var newcode =1100;
			var doublecode =1068;
		}
		if (code==35) 
		{
			var newcode =1098;
			var doublecode =1066;
		}

		res = pretxt+String.fromCharCode(newcode);		

		if (code2==newcode) 
		{ 
			res = String.fromCharCode(doublecode);
		}
	}

	if ((code<123) && (code>64)) 
	{
		res = pretxt+String.fromCharCode(eng_letters[code-64]);
		for (i = 1; i<25; i++)
		{ 
			if ((code==second_order[i])&&(code2==first_order[i])) 
			{ 
				res = String.fromCharCode(two_result[i]);
				break;
			}
		}
	}
	return res;
}

function translateAll()
{
	var txt = document.searchform.comment_text.value;
	var txtnew = translatesymbol("",txt.substr(0,1));
	var symb = "";
	for (kk=1;kk<txt.length;kk++)
	{
		symb = translatesymbol(txtnew.substr(txtnew.length-1,1),txt.substr(kk,1));
		txtnew = txtnew.substr(0,txtnew.length-1) + symb;
	}
	document.searchform.comment_text.value = txtnew;
	document.searchform.comment_text.focus();
}

     function onClickKBButtonEx(btn)
     {
	if (btn == 'Caps')
		CapsState = !(CapsState)
        else
	{ 
		var txt = document.searchform.comment_text.value;
		if (btn == 'BkSp')
		{
			txt = txt.substr(0, txt.length - 1);
		}
		else
		{
			txt = txt + btn;
		}
		document.searchform.comment_text.value = txt;
	}
		document.searchform.comment_text.focus();
     }
     function onClickKBButton(btn)
     {
	var code = btn.charCodeAt(0);
	if (CapsState == false)
	{
		if (code == 168) 
                   code = 184;
		else if (code == 1025)
		   code = 1105;
		else
                   code = code + 32;
	}
	btn = String.fromCharCode(code);
	onClickKBButtonEx(btn);
	 }


Далее дебавляем теги в Ну и кнопку транслит. Я добавил транслит себе только в Коментарии. Но можете добавить его куда угодно делея это по схеме с этим. Если есть очень умные люди то можно добавить кнопку транслит в сам ББкод на верх где болд/ италик/. Но я не знаю как.

В конфиге скина добавить:

$config['head']['default']['js'][] = '___path.static.skin___/js/translit.js';


После:

$config['head']['default']['js'][] = '___path.static.skin___/js/template.js';


В форме ответа заменить код на этот.

<form method="post" id="form_comment" onsubmit="return false;" name="searchform" enctype="multipart/form-data">
				<textarea name="comment_text" id="form_comment_text" onkeyup="translate_letter()" class="mce-editor markitup-editor input-width-full"></textarea>
				<input name="tr_all" onclick="translateAll()" type="button" class="button" value="Транслит">

Вставка видео через ссылку Youtube, mp4, avi, webm, flv и т.д.(Готовое решение)

Поддержка видео для таких сайтов как:
  • youtube.com
  • vimeo.com
  • rutube.ru
  • coub.com
  • ok.ru
  • vk.com
  • dailymotion.com

Для: LS 1.0.3

В /engine/modules/text/Text.class.php

Меняем функцию public function VideoParser($sText)

На это:
public function VideoParser($sText) {
		
		// Размеры и атрибуты окна вставленного видео.
        $iWidth = 620;
        $iHeight = 360;
        $iAlign = "center";
        $sIframeAttr = 'frameborder="0" webkitAllowFullScreen mozallowfullscreen allowfullscreen="allowfullscreen"';
		/**
         * youtube.com fixed
         */
        $sText = preg_replace(
        '/<video>(?:http(?:s|):|)(?:\/\/|)(?:www\.|m.|)youtu(?:\.|)be(?:-nocookie|)(?:\.com|)\/(?:e(?:mbed|)\/|v\/|watch\?(?:.+&|)v=|)([a-zA-Z0-9_\-]+?)(&.+)?<\/video>/Ui',
        '<div align="'.$iAlign.'"><iframe width="'.$iWidth.'" height="'.$iHeight.'" '.$sIframeAttr.' src="//www.youtube.com/embed/$1?modestbranding=1&" frameborder="0" allowfullscreen ></iframe></div>',
        $sText
        );
		/**
         * vimeo.com fixed
         */
        $sText = preg_replace(
		    '/<video>http(?:s|):\/\/(?:www\.|)vimeo\.com\/(\d+).*<\/video>/i',
            '<div align="'.$iAlign.'"><iframe src="//player.vimeo.com/video/$1" width="'.$iWidth.'" height="'.$iHeight.'" '.$sIframeAttr.'></iframe></div>',
            $sText
        );
		/**
         * rutube.ru fixed
         */
        $sText = preg_replace(
            '/<video>http(?:s|):\/\/(?:www\.|)rutube\.ru\/tracks\/(\d+)\.html.*<\/video>/Ui',
            '<div align="'.$iAlign.'"><iframe src="//rutube.ru/play/embed/$1" width="'.$iWidth.'" height="'.$iHeight.'" '.$sIframeAttr.'></iframe></div>',
            $sText
        );
        $sText = preg_replace(
            '/<video>http(?:s|):\/\/(?:www\.|)rutube\.ru\/video\/(\w+)\/?<\/video>/Ui',
            '<div align="'.$iAlign.'"><iframe src="//rutube.ru/play/embed/$1" width="'.$iWidth.'" height="'.$iHeight.'" '.$sIframeAttr.'></iframe></div>',
            $sText
        );
		/**
	    * coub.com fixed
	    */
	    $sText = preg_replace(
		    '/<video>http(?:s|):\/\/(?:www\.|)coub\.com\/view\/(\w+).*<\/video>/i', 
		    '<div align="'.$iAlign.'"><iframe src="//coub.com/embed/$1?muted=false&autostart=false&originalSize=false&hideTopBar=false&noSiteButtons=false&startWithHD=false" width="'.$iWidth.'" height="'.$iHeight.'" '.$sIframeAttr.'></iframe></div>', 
		$sText
		);
		/**
	    * ok.ru fixed
	    */
	    $sText = preg_replace(
		    '/<video>http(?:s|):\/\/(?:www\.|)ok\.ru\/video\/(\w+).*<\/video>/i', 
		    '<div align="'.$iAlign.'"><iframe src="//ok.ru/videoembed/$1" width="'.$iWidth.'" height="'.$iHeight.'" '.$sIframeAttr.'></iframe></div>', 
		$sText
		);
		/**
	    * vk.com HASH not working, embeded link only
	    */
		$sText = preg_replace(
		    '/<video>(https:\/\/(?:www\.|)vk\.com\/video_ext\.php.*)<\/video>/i', 
			'<div align="'.$iAlign.'"><iframe src="$1" width="'.$iWidth.'" height="'.$iHeight.'" '.$sIframeAttr.'></iframe></div>', 
		$sText
		);
            /**
	    * dailymotion.com fixed
	    */
	    $sText = preg_replace(
		    '/<video>http(?:s|):\/\/(?:www\.|)dai\.ly\/(\w+).*<\/video>/i', 
		    '
<div align="'.$iAlign.'"><iframe src="//dailymotion.com/embed/video/$1" width="'.$iWidth.'" height="'.$iHeight.'" '.$sIframeAttr.'></iframe></div>', 
		$sText
		);
		return $sText;
	}

Конечно же в /config/jevix.php добавляем нехватающие сайты.

Свои параметры сюда:
// Размеры и атрибуты окна вставленного видео.
        $iWidth = 620;
        $iHeight = 360;
        $iAlign = "center";
        $sIframeAttr = 'frameborder="0" webkitAllowFullScreen mozallowfullscreen allowfullscreen="allowfullscreen"';


Готово!

Языковые пакеты?

Приветствую! Я тут новенький, и не могу найти где и как поменять язык на английский? Есть ли он вообще?

Если нету — то укажите в какий файлах они находятса — буду сам переводить.

П.С, в админке не нашел например «Главные конфигурации» или «Конфигурации Рейтинга», «Разрешение к доступам»?

Админка

Управление плагинами
Настройка пользовательских полей
Перестроение дерева комментариев
Пересчитать счетчики избранных
Пересчитать счетчики голосований
Пересчитать количество топиков в блогах

Это всё что прилагаетса к админке? Как то маловато. Да и есть ли какой нибудь мануал по использованию? Как из новых сообшений переносить на главную? И где голосовать? Кнопок голосов как тут у меня нету, только «0» везде.

Блин, тут еще и админку покупать надо?

Спасибо за скрипт, очень им рад. Надеюсь на ваш ответ.