joomla 3.0
Вы когда-нибудь сталкивались с такой задачей - нужно вставить в детальное описание елемента битрикса видео ролики, причем не стандартными средствами из админки ( при помощи доп. свойств) а чтоб человек, мог добавить любое количество видео роликов в елемент и разместить их где угодно (например после каждого абзаца в тексте) ?
На днях мне пришлось столкнутся с такой задачей, и вот как я поступил:
Первым этапом было создание инфоблока "Видео-ролики". Идея такова что каждый раздел данного инфоблока будет привязан к определенному елементу инфоблока. А его елементы будут не чем иным как видеоролками. Для этого в доп. свойствах елементов инфоблока "Видео-ролики" я задал новое свойство с типом "Видео" символьный код "video_file".
Далее было созданно дополнительное свойство в инфоблоке, в моём случае ето был инфоблок "Новости". Свойство имело тип "Привязка к разделам", символьный код "section_video" в свойствах которого я указал привязку к уже созданному инфоблоку "Видео-ролики".
На этом работа с админкой законченна, если не брать в счет наполнение инфоблоков роликами и статьями.
В следующем этапе я уже работал с шаблоном вывода детальной новости. У каждого путь к нему свой и он указан в настройках компонента "Новость детально".
В шаблоне я выполнил выборку роликов привязанных к данной новости и записал их в буфер:
<?
$arrVideo = array(); //обьявление массива видео роликов
$arSelect = Array("ID", "NAME", "PROPERTY_video_file"); //выборка елементов связанного раздела с елементом новости
$arFilter = Array("IBLOCK_ID"=>IntVal(3), "SECTION_ID"=>IntVal($arResult[PROPERTIES][section_video][VALUE]), "ACTIVE"=>"Y");
$res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nPageSize"=>50), $arSelect);
while($ob = $res->GetNextElement())
{
$arFields = $ob->GetFields();
ob_start();//обьявление о начале буферизации
$APPLICATION->IncludeComponent("bitrix:player","",Array(
"PLAYER_TYPE" => "auto",
"USE_PLAYLIST" => "N",
"PATH" => $arFields["PROPERTY_VIDEO_FILE_VALUE"]["path"],
"WIDTH" => $arFields["PROPERTY_VIDEO_FILE_VALUE"]["width"],
"HEIGHT" => $arFields["PROPERTY_VIDEO_FILE_VALUE"]["height"],
"FILE_TITLE" => $arFields["NAME"],
"FILE_AUTHOR" => $arFields["author"],
"FILE_DATE" => $arFields["date"],
"FILE_DESCRIPTION" => $arFields["descr"],
"SKIN_PATH" => "/bitrix/components/bitrix/player/mediaplayer/skins",
"CONTROLBAR" => "bottom",
"WMODE_WMV" => "window",
"VOLUME" => "90",
"HIGH_QUALITY" => "Y",
"ADVANCED_MODE_SETTINGS" => "N",
"ALLOW_SWF" => "Y",
)
);
$arrVideo[] = ob_get_contents(); //запись в буфер видеороликов
ob_end_clean(); //очистка буфера
}
?>
Далее в месте где у нас выводится детальный текст новости ($arResult["DETAIL_TEXT"];) я убрал его вывод и заменил на свой код который ищет в детальном тексте метки видео и заменяет на вывод видео роликов. И после етого выводит уже готовый текст новости со вставленными в ним видео-роликами.
<?
for($i = 1; $i <= count($arrVideo); $i++) //цикл перебирает все видео в массиве
$arResult["DETAIL_TEXT"] = preg_replace('/\{VIDEO'.$i.'\}/', $arrVideo[$i-1], $arResult["DETAIL_TEXT"]); //регулярным вырожением заменяем метки на видео ролики из буфера
?>
<?echo $arResult["DETAIL_TEXT"]; //выводим измененный текст новости с вставленными видео роликами?>
Теперь достаточно в тексте новости указать метку {VIDEO1} и в етом месте появится одноименный ролик из инфоблока "Видео-ролики". Цифра в метке может быть любой все зависит от того сколько у вас видео роликов в разделе и какой по номеру вы хотите вывести на сайте.
время Киев