Меню

Вывести множественное свойство типа файл с названием и весом файла в Битрикс

RSS
Вывести множественное свойство типа файл с названием и весом файла в Битрикс
 
Вывести множественное свойство типа файл с названием и весом файла в Битрикс

В этой заметке расскажу как красиво вывести множественное свойство типа файл в инфоблоке 1С-Битрикс. С показом оригинального названия файла, его транслитированной версии, размера файла в килобайтах и, само собой, ссылкой на скачивание.
 
Спасибо. Но есть косяк. Если файл один, то не выводит.
 
Вот решение проблемы с одиночными файлами.
Код
<?if(count($arItem["DISPLAY_PROPERTIES"]["FILES"]["FILE_VALUE"]["SRC"]) == 1):?>
            <a href="<?echo $arItem["DISPLAY_PROPERTIES"]["FILES"]["FILE_VALUE"]["SRC"]?>" class="file" target="_blank" style="margin-top: 0" >
               <strong> <?echo $arItem["DISPLAY_PROPERTIES"]["FILES"]["FILE_VALUE"]["ORIGINAL_NAME"] ?>
                     <span> —
                        <?= round((intval($arItem["DISPLAY_PROPERTIES"]["FILES"]["FILE_VALUE"]["FILE_SIZE"]) / 1024), 1); ?> Кб
                     </span>
                  </strong>
                  <br>
                  <i>
                     <?echo $arItem["DISPLAY_PROPERTIES"]["FILES"]["FILE_VALUE"]["FILE_NAME"] ?>
                  </i>
            </a>

         <?else:?>
            
            <? foreach ($arItem["DISPLAY_PROPERTIES"]['FILES']['FILE_VALUE'] as $pid => $arProperty): ?>
               <a href="<? echo $arProperty['SRC']; ?>" class="file" title="Скачать <? echo $arProperty['FILE_NAME']; ?>"> 
                  <strong> <? echo $arProperty['ORIGINAL_NAME']; ?>
                     <span> —
                        <?
                           $strKb = $arProperty['FILE_SIZE']/1024;
                           echo round($strKb) . ' Кб';
                        ?>
                     </span>
                  </strong>
                  <br>
                  <i>
                     <? echo $arProperty['FILE_NAME']; ?>
                  </i>
               </a>
               <br>
            <?endforeach;?>
            
         <?endif?>
 
Изменено: Михаил Базаров - 08.11.2023 00:40:43
 
Михаил, спасибо за отличную статью!
Сергей, спасибо за не менее важное дополнение!
Для вывода списка файлов на детальной странице комплексного компонента catalog у меня получился такой код:
Код
<?if(count($arResult["DISPLAY_PROPERTIES"]["FILES"]["FILE_VALUE"]["SRC"]) == 1):?>
    <a href="<?echo $arResult["DISPLAY_PROPERTIES"]["FILES"]["FILE_VALUE"]["SRC"]?>" class="file" target="_blank" style="margin-top: 0" >
        <strong> <?echo $arResult["DISPLAY_PROPERTIES"]["FILES"]["FILE_VALUE"]["ORIGINAL_NAME"];?>
            <span> — <?= round((intval($arResult["DISPLAY_PROPERTIES"]["FILES"]["FILE_VALUE"]["FILE_SIZE"]) / 1024), 1); ?> Кб</span>
        </strong>
        <br>
        <i><?echo $arResult["DISPLAY_PROPERTIES"]["FILES"]["FILE_VALUE"]["FILE_NAME"] ?></i>
    </a>

 <?else:?>
            
   <?foreach ($arResult["DISPLAY_PROPERTIES"]['FILES']['FILE_VALUE'] as $pid => $arProperty):?>
       <a   href="<? echo $arProperty['SRC'];?>"   title="Скачать <? echo $arProperty['FILE_NAME'];?>">
          <strong>
             <? echo $arProperty['ORIGINAL_NAME'];?>
             <span> —<?$strKb = $arProperty['FILE_SIZE']/1024; echo round($strKb) . ' Кб';?></span>
          </strong>
          <i><? echo $arProperty['FILE_NAME'];?></i>
       </a>
      <br>
    <?endforeach?>
         
<?endif;?>
 
Вывести дату создания файла в формате сайта

Что бы это сделать можно воспользоваться методом
CFile::GetFileArray

В параметр передаем ID нужного файла или переменную с нужным ID и классом DateTime
приводим к строке:
Код
<?
$arItem = 123; // ID нужного файла
$rsFile = CFile::GetFileArray($arItem);
echo $rsFile['TIMESTAMP_X']->toString();
?>
Если нужна вся информация о конкретном файле (вес, формат, путь на сервере, описание итд)
Распечатываем массив
Код
<?
print_r($rsFile);
?>
 
Добрый день
код не работает - если элемент один загружен.
как быть, есть загружаю во множественное поле только один элемент?
 
Цитата
Damir написал:
Добрый день
код не работает - если элемент один загружен.
как быть, есть загружаю во множественное поле только один элемент?

Damir имел в виду скорее всего что с переходом в добровольно-принудительном порядке битрикса на php8, данный код перестал выводить одиночно загруженные файлы. Ругается на
count(): Argument #1 ($value) must be of type Countable|array, string given (0)
Изменено: Михаил Базаров - 08.11.2023 00:37:46
 
Никогда не думал что обращусь за помощью, но в данной ситуации что-то реально затык...Михаил, коллеги, может у кого была подобная ситуация... Прошу помощи! Help!
Ситуация как кажется на первый взгляд проще некуда. Есть свойство типа файл, множественное, "PHOTOS_OBJECT", компонент комплексный news, вывожу в деталке.
Может содержать в себе как одно так и несколько значений и все варианты значений должны работать в слайдере футурамы, все работало, до того как "пришли они" со своей 8-кой.  
Вот моя конструкция:

Код
<div class="fotorama" data-transition="crossfade" data-allowfullscreen="native" data-nav="thumbs" data-width="100%" data-minheight="300" data-ratio="1500/1000">
                  
                     <//? var_dump ($arResult["DISPLAY_PROPERTIES"]["PHOTOS_OBJECT"]["FILE_VALUE"]);?>
                     
                     <?if (count($arResult["DISPLAY_PROPERTIES"]["PHOTOS_OBJECT"]["FILE_VALUE"]) > 1) { ?>
                        <?if (is_array($arResult["DISPLAY_PROPERTIES"]["PHOTOS_OBJECT"]["FILE_VALUE"])) : ?>
                           <?foreach($arResult["DISPLAY_PROPERTIES"]["PHOTOS_OBJECT"]["FILE_VALUE"] as $pid=>$arProperty):?>
                              <img width="356" alt="<?echo $arProperty["ORIGINAL_NAME"];?>" src="<?echo $arProperty["SRC"];?>" height="200" title="<?echo $arProperty["ORIGINAL_NAME"];?>" class="foto-in-objects">
                           <?endforeach;?>
                        <?endif;?>
                     <?}{?>
                     
                     <img width="356" alt="<?echo $arResult["ORIGINAL_NAME"];?>" src="<?echo $arResult["DISPLAY_PROPERTIES"]["PHOTOS_OBJECT"]["VALUE"]["SRC"];?>" height="200" title="<?echo $arResult["ORIGINAL_NAME"];?>" class="foto-in-objects">
                     
                     <?}?>
                     
                  </div> 


Сколько только вариантов уже не перепробовал, выводит фотку в слайдере или где одно значение, или где несколько, поочередности, вместе вообще никак не хотят дружить...
Изменено: Михаил Базаров - 29.11.2023 01:13:45
 
Точнее вот так:

Код
<?if (count($arResult["DISPLAY_PROPERTIES"]["PHOTOS_OBJECT"]["FILE_VALUE"]) > 1) { ?>
                        <?if (is_array($arResult["DISPLAY_PROPERTIES"]["PHOTOS_OBJECT"]["FILE_VALUE"])) : ?>
                           <?foreach($arResult["DISPLAY_PROPERTIES"]["PHOTOS_OBJECT"]["FILE_VALUE"] as $pid=>$arProperty):?>
                              <img width="356" alt="<?echo $arProperty["ORIGINAL_NAME"];?>" src="<?echo $arProperty["SRC"];?>" height="200" title="<?echo $arProperty["ORIGINAL_NAME"];?>" class="foto-in-objects">
                           <?endforeach;?>
                        <?else:?>
                           <img width="356" alt="<?echo $arResult["ORIGINAL_NAME"];?>" src="<?echo $arResult["DISPLAY_PROPERTIES"]["PHOTOS_OBJECT"]["FILE_VALUE"];?>" height="200" title="<?echo $arResult["ORIGINAL_NAME"];?>" class="foto-in-objects">
                        <?endif;?>
                     <?}?>
Изменено: Михаил Базаров - 29.11.2023 01:14:02
 
При работе под php 8+ если проверяете один файл или несколько.
В целом если использовали проверку count для массивов (не только в случае этой заметки)

Что бы не получать ошибку типа array must be of type Countable|array, string given (0)
проверяем вот так:
Код
if(count((array)$вашМассив) > 1){
     ....
}

Вместо:
Код
if(count($вашМассив) > 1){
     ....
}
Изменено: Михаил Базаров - 29.11.2023 13:07:28
 
Михаил, спасибо огромное!!!  :)
Вот так все заработало как положено:


Код
<div class="fotorama" data-transition="crossfade" data-allowfullscreen="native" data-nav="thumbs" data-width="100%" data-minheight="300" data-ratio="1500/1000">
      <?if(count((array)$arResult["DISPLAY_PROPERTIES"]["PHOTOS_OBJECT"]["FILE_VALUE"]["SRC"]) == 1):?>
          <img width="356" alt="<?echo $arResult["ORIGINAL_NAME"];?>" src="<?echo $arResult["DISPLAY_PROPERTIES"]["PHOTOS_OBJECT"]["FILE_VALUE"]["SRC"];?>" height="200" title="<?echo $arResult["ORIGINAL_NAME"];?>" class="foto-in-objects">
     <?else:?>
          <?foreach($arResult["DISPLAY_PROPERTIES"]["PHOTOS_OBJECT"]["FILE_VALUE"] as $pid=>$arProperty):?>
               <img width="356" alt="<?echo $arProperty["ORIGINAL_NAME"];?>" src="<?echo $arProperty["SRC"];?>" height="200" title="<?echo $arProperty["ORIGINAL_NAME"];?>" class="foto-in-objects">
         <?endforeach;?>
     <?endif?>
</div>
Изменено: Михаил Базаров - 30.11.2023 12:30:22
Читают тему
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
Загрузить файлы
 

Блог-note: заметки разработчика

Настройка выгрузки товаров в Яндекс Маркет с сайта Битрикс

Настройка выгрузки в Яндекс маркет в формате yml, выполняется достаточно просто, кроме одной заморочки: в типовой постав...

Получить список элементов инфоблока с ценами с помощью D7

Задача: использовать D7 в 1С-Битрикс для получения списка элементов инфоблока вместе с их ценами. Это может быть полезно...

Автоматически отгрузить заказ и сменить статус отгрузки, при выполнении заказа.

Проблема: Заказы, на сайте, обрабатываются только в 1С. При этом 1С не работает с отгрузками и обменивается только стату...

E-mail вместо логина при регистрации и оформлении заказа в 1C-Битрикс

Задача: при регистрации нового пользователя и оформлении заказа нужно убрать поле Логин и использовать электронную почту...

Заполнить свойство заказа выбранным пунктом самовывоза и передать в 1С

Задача: При оформлении заказа пользователь может выбрать пункт самовывоза (склады магазина). Нужно заполнить сво...

CAPTCHA с возможностью обновления без перезагрузки страницы в 1C-Битрикс

Задача: Так как стандартная капча в 1С-Битрикс, может отобразиться не удачно (символы уходят за грань капчи или не у...

Вывести множественное свойство типа файл с названием и весом файла в Битрикс

В этой заметке расскажу как красиво вывести множественное свойство типа файл в инфоблоке 1С-Битрикс. С показом оригиналь...

Создание PWA для сайта на 1С-Битрикс

Технология PWA позволяет создать приложение для любого сайта. Не обязательно работающего на 1С-Битрикс, данная заметка ...

Создание скидки на общую сумму покупки в Битрикс корзине

Функционал интернет-магазина, работающего под управлением 1С Битрикс, позволяет задавать множество условий скидок в корз...