Description для множественного свойства файл в iblock.element.add.form

Как известно, компонент iblock.element.add, является одним из самых тупых и негибких в Битрикс. Но зачастую других альтернатив для добавления пользователями собственных элементов инфоблока — просто нету. По этому приходится брать в руки напильник и пилить-пилить-пилить. Например бывает нужно вывести для редактирования описание свойства типа «фото». Что делать в таком случае?

Во первых перенести компонент в свое пространство имен (я подозреваю, что каждый, кто пользуется iblock.element.add, делает это в первую очередь). В компоненте ищем строчки

$sAction = "EDIT";

и

$sAction = "ADD";

Это примерно 700 и 755 строчки соответственно. И перед ними вставляем код

foreach ($arUpdateValues['PROPERTY_VALUES'][53] as $key => &$value) {
	if (isset($_REQUEST['DESCRIPTION'][53][$key])) {
		$value = array(
			'VALUE' => $value,
			'DESCRIPTION' => $_REQUEST['DESCRIPTION'][53][$key],
		);
	}
}

где [53] — это номер вашего свойства.

Далее в шаблоне пишем примерно следующее:

<?
	$count = 0;
	if($arResult['ELEMENT_PROPERTIES'][53]){
		for($i=0; $i<count($arResult['ELEMENT_PROPERTIES'][53]); $i++){?>
			<?$file_id=$arResult['ELEMENT_PROPERTIES'][53][$i]['VALUE']?>
			<?$value_id=$arResult['ELEMENT_PROPERTIES'][53][$i]['VALUE_ID']?>
			<div class="bordered">
				<input type="hidden" name="PROPERTY[53][<?=$arResult['ELEMENT_PROPERTIES'][53][$i]['VALUE_ID']?>]" value="<?=$arResult['ELEMENT_PROPERTIES'][53][$i]['VALUE']?>" />
				<img class="img-responsive" style="margin: 10px auto" src="<?=CFile::GetPath($arResult['ELEMENT_PROPERTIES'][53][$i]['VALUE'])?>">
				<span class="btn btn-success btn-file">
					<i class="icon-plus"> </i><span>Выберите изображение</span>
					<input id="photo-input<?=$i?>" type="file" name="PROPERTY_FILE_53_<?=$arResult['ELEMENT_PROPERTIES'][53][$i]['VALUE_ID']?>" />
				</span>
				<input type="checkbox" name="DELETE_FILE[53][<?=$arResult['ELEMENT_PROPERTIES'][53][$i]['VALUE_ID']?>]" id="file_delete_53_<?=$i?>" value="Y" /><label for="file_delete_53_<?=$i?>">Удалить файл</label>
				<h5>Описание:</h5>
				<p id="photo-desc<?=$i?>"><?=$arResult['ELEMENT_FILES'][$file_id]['DESCRIPTION']?></p>
				<input id="desc-input<?=$i?>" type="text" name="DESCRIPTION[53][<?=$value_id?>]" class="form-control" value="<?=$arResult['ELEMENT_FILES'][$file_id]['DESCRIPTION']?>" style="display: none">
			</div>
			<script>
				$('#photo-input<?=$i?>').change(function(){
					//console.log('changed');
					$('#desc-input<?=$i?>').show();
					$('#photo-desc<?=$i?>').hide();
				});
			</script>
		<?
		$count = $i+1;
		}
	}
	for($k=$count; $k<($count+4); $k++){?>
		<div class="bordered">
			<input type="hidden" name="PROPERTY[53][<?=$k?>]" value="" />
			<span class="btn btn-success btn-file">
				<i class="icon-plus"> </i><span>Выберите изображение</span>
				<input type="file" name="PROPERTY_FILE_53_<?=$k?>" />
			</span>
			<h5>Описание:</h5>
			<input type="text" name="DESCRIPTION[53][<?=$k?>]" class="form-control" value="">
		</div>
	<?}
?>

Смотрим, что получилось

Вы великолепны!

Добавить комментарий