Сергей Стефанович (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Использование WebP изображений в 1С-Битрикс (на Битрикс: Веб окружение)
 
Можно использовать тег picture
я вот так намутил
https://gist.github.com/SeRGei93/2525f375acbf5ec8ec48d441611012a6#file-picture-bitrix-centos-7
Серия 7: Создание собственного компонента с нуля
 
и google recaptcha пожалуйста
Серия 5: Верстка пользовательских форм и доски объявлений #В режиме стрима
 
Михаил загулял))
Использование WebP изображений в 1С-Битрикс (на Битрикс: Веб окружение)
 
это всё очень круто. но ios остается в пролете
Пролог: Стрим о планах и сбор пожеланий.
 
Воу, круто. про компоненты поподробнее пожалуйста про D7. Знаю что на серьёзных проектах вообще не используют стандартные компоненты.
Ну и если можно, хотелось бы узнать как менять урл при просмотре товара. Чтобы была минимальная вложенность, например www.имясайта.ru/catalog/товар
Ленивая подгрузка картинок в компоненте, на vue js Битрикс
 
Михаил, даешь сайт без jquery ?)
Оптимизация компонента bitrix:catalog.section, Оптимизация компонента bitrix:catalog.section
 
Цитата
Михаил Базаров написал:
Цитата
Сергей Стефанович написал:
Друзья. Кто нибудь пытался оптимизировать сей компонент.
Ибо он совершает очень много запросов к БД. если нагрузить инфоблок под 10К товаров с ску, а в инфоблоке ску под 500 свойст все это дело начинает очень тормозить
Если штатные шаблоны используете или какое-нибудь готовое решение- то там только пересобирать. Все эти готовые шаблоны, созданы под большое количество настроек, которые как правило не нужны. Потому и много запросов/тормозов
Если шаблон свой- то смотрите где какие запросы и оптимизируйте их.
а вам самому никогда не приходилось оптимизировать? нету никаких мыслей на этот счет
Оптимизация компонента bitrix:catalog.section, Оптимизация компонента bitrix:catalog.section
 
Друзья. Кто нибудь пытался оптимизировать сей компонент.
Ибо он совершает очень много запросов к БД. если нагрузить инфоблок под 10К товаров с ску, а в инфоблоке ску под 500 свойст все это дело начинает очень тормозить
Кастомные поля в почтовые шаблоны, Нужно настроить отправку писем в отдел продаж
 
Нужно настроить отправку писем в отдел продаж.
Нужно чтобы в отдел продаж приходило письмо со всеми данными из профиля заказчика и списком купленных товаров
Есть у кого мысли?
Вывести свойство привязка к Яндекс Картам в Битрикс
 
Цитата
Михаил Базаров пишет:
Зачем нужен и как используется описано вот здесь. Вроде как и добавить нечего    
https://dev.1c-bitrix.ru/learning/course/?COURSE_ID=43&LESSON_ID=2975
Михаил, читал эту статью несколько раз уже, и блог читал)
но все равно не понял как решить данную задачу, что, куда и как вставлять  :)
Вывести свойство привязка к Яндекс Картам в Битрикс
 
Цитата
Михаил Базаров пишет:
Создать файл component_epilog.php рядом с template.php и вставить туда
а как потом вывести это всё в нужном месте в template.php ??

Михаил, не плохо было бы увидеть статью по component_epilog.php. С разъяснением зачем он и как работает.
Вывести свойство привязка к Яндекс Картам в Битрикс
 
Цитата
Михаил Базаров пишет:
Вставте карту не в template.php а в component_epilog.php тогда кеширование будет работать
а как это сделать??
bitrix:catalog.filter для копл. компонента news, bitrix:catalog.filter для копл. компонента news с самописным аякс
 
Перезагрузку по клику на чекбокс  удалось организовать, а вот аякс нет.  
bitrix:catalog.filter для копл. компонента news, bitrix:catalog.filter для копл. компонента news с самописным аякс
 
Включил фильтр в компоненте новости, настроил по свойству список. Хотелось бы сделать фильтрацию сразу при активации чекбокса, без перезагрузки страницы. Перечитал все форумы по битриксу, ничего дельного не нашел.
Так же нужно чтобы это все дело работало без включения галочки Аякс в настройках компонента.



Тема интересная, нигде реализации такой не нашел
Изменено: Сергей Стефанович - 11 Апреля 2018 14:47:07
Вывод элементов с помощью API битрикс
 
Цитата
Михаил Базаров написал:
Тоже самое на D7

Подключаем модуль

use Bitrix\Main\Loader; Loader::includeModule('iblock');
$dbItems = \Bitrix\Iblock\ElementTable::getList(array(
А можно полный пример кодом? не совсем понял что нужно сделать.
Дополнительные картинки в новостях Битрикс, почти фотогалерея.
 
Решил вопрос


Код
<?
// События которые срабатывают при создании или изменении элемента инфоблока
AddEventHandler("iblock", "OnAfterIBlockElementAdd", "ResizeUploadedPhoto");
AddEventHandler("iblock", "OnAfterIBlockElementUpdate", "ResizeUploadedPhoto");

function ResizeUploadedPhoto($arFields) {
  global $APPLICATION;
  CModule::IncludeModule('iblock');
  $IBLOCK_ID = 32; // ID инфоблока свойство которых нуждается в масштабировании
  $PROPERTY_CODE = "MORE_PHOTO";  // код свойства
  $imageMaxWidth = 1280; // Максимальная ширина картинки
  $imageMaxHeight = 720; // Максимальная высота картинки
  
  // для начала убедимся, что изменяется элемент нужного нам инфоблока (в данном случае нескольких инфоблоков)

  if(($arFields["IBLOCK_ID"] == 32) || ($arFields["IBLOCK_ID"] == 31) || ($arFields["IBLOCK_ID"] == 17)) { 
   $VALUES = $VALUES_OLD = array();
   //Получаем свойство значение сво-ва $PROPERTY_CODE
   $res = CIBlockElement::GetProperty($arFields["IBLOCK_ID"], $arFields["ID"], "sort", "asc", array("CODE" => $PROPERTY_CODE));
   while ($ob = $res->GetNext()) {
      $file_path = CFile::GetPath($ob['VALUE']); // Получаем путь к файлу
      if($file_path) {
         $imsize = getimagesize($_SERVER["DOCUMENT_ROOT"].$file_path); //Узнаём размер файла
         // Если размер больше установленного максимума
         if($imsize[0] > $imageMaxWidth or $imsize[1] > $imageMaxHeight) {
            // Уменьшаем размер картинки
            $file = CFile::ResizeImageGet($ob['VALUE'], array(
                  'width'=>$imageMaxWidth,
                  'height'=>$imageMaxHeight
               ), BX_RESIZE_IMAGE_PROPORTIONAL, true);
            // добавляем в массив VALUES новую уменьшенную картинку
            $VALUES[] = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"].$file["src"]);
         } else {
            // добавляем в массив VALUES старую картинку
            $VALUES[] = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"].$file_path);
         }
         // Собираем в массив ID старых файлов для их удаления (чтобы не занимали место)
         $VALUES_OLD[] = $ob['VALUE']; 
      }
   }
   // Если в массиве есть информация о новых файлах
   if(count($VALUES) > 0) {
      $PROPERTY_VALUE = $VALUES;  // значение свойства
      // Установим новое значение для данного свойства данного элемента
      CIBlockElement::SetPropertyValuesEx($arFields["ID"], $arFields["IBLOCK_ID"], array($PROPERTY_CODE => $PROPERTY_VALUE));
      // Удаляем старые большие изображения
      foreach ($VALUES_OLD as $key=>$val) {
         CFile::Delete($val);
      }
   }
   unset($VALUES);
   unset($VALUES_OLD);
  }
}
?>
 
Дополнительные картинки в новостях Битрикс, почти фотогалерея.
 
Код
<?
// События которые срабатывают при создании или изменении элемента инфоблока
AddEventHandler("iblock", "OnAfterIBlockElementAdd", "ResizeUploadedPhoto";
AddEventHandler("iblock", "OnAfterIBlockElementUpdate", "ResizeUploadedPhoto";

function ResizeUploadedPhoto($arFields) {
  global $APPLICATION;
  CModule::IncludeModule('iblock');
  $IBLOCK_ID = 6; // ID инфоблока свойство которых нуждается в масштабировании
  $PROPERTY_CODE = "FOTO";  // код свойства
  $imageMaxWidth = 1000; // Максимальная ширина картинки
  $imageMaxHeight = 800; // Максимальная высота картинки
  // для начала убедимся, что изменяется элемент нужного нам инфоблока
  if($arFields["IBLOCK_ID"] == $IBLOCK_ID) {
   $VALUES = $VALUES_OLD = array();
   //Получаем свойство значение сво-ва $PROPERTY_CODE
   $res = CIBlockElement::GetProperty($arFields["IBLOCK_ID"], $arFields["ID"], "sort", "asc", array("CODE" => $PROPERTY_CODE));
   while ($ob = $res->GetNext()) {
      $file_path = CFile::GetPath($ob['VALUE'] // Получаем путь к файлу
      if($file_path) {
         $imsize = getimagesize($_SERVER["DOCUMENT_ROOT"].$file_path); //Узнаём размер файла
         // Если размер больше установленного максимума
         if($imsize[0] > $imageMaxWidth or $imsize[1] > $imageMaxHeight) {
            // Уменьшаем размер картинки
            $file = CFile::ResizeImageGet($ob['VALUE'], array(
                  'width'=>$imageMaxWidth,
                  'height'=>$imageMaxHeight
               , BX_RESIZE_IMAGE_PROPORTIONAL, true);
            // добавляем в массив VALUES новую уменьшенную картинку
            $VALUES[] = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"].$file["src"]
         } else {
            // добавляем в массив VALUES старую картинку
            $VALUES[] = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"].$file_path);
         }
         // Собираем в массив ID старых файлов для их удаления (чтобы не занимали место)
         $VALUES_OLD[] = $ob['VALUE']; 
      }
   }
   // Если в массиве есть информация о новых файлах
   if(count($VALUES) > 0) {
      $PROPERTY_VALUE = $VALUES;  // значение свойства
      // Установим новое значение для данного свойства данного элемента
      CIBlockElement::SetPropertyValuesEx($arFields["ID"], $arFields["IBLOCK_ID"], array($PROPERTY_CODE => $PROPERTY_VALUE));
      // Удаляем старые большие изображения
      foreach ($VALUES_OLD as $key=>$val) {
         CFile:elete($val);
      }
   }
   unset($VALUES);
   unset($VALUES_OLD);
  }
}
?>
Дополнительные картинки в новостях Битрикс, почти фотогалерея.
 
и как отресайзить все загружаемые фото сразу при загрузке в инфоблок ?
нашел вот такой способ

Код
<? // События которые срабатывают при создании или изменении элемента инфоблока AddEventHandler("iblock", "OnAfterIBlockElementAdd", "ResizeUploadedPhoto"); AddEventHandler("iblock", "OnAfterIBlockElementUpdate", "ResizeUploadedPhoto"); function ResizeUploadedPhoto($arFields) { global $APPLICATION; CModule::IncludeModule('iblock'); $IBLOCK_ID = 6; // ID инфоблока свойство которых нуждается в масштабировании $PROPERTY_CODE = "FOTO"; // код свойства $imageMaxWidth = 1000; // Максимальная ширина картинки $imageMaxHeight = 800; // Максимальная высота картинки // для начала убедимся, что изменяется элемент нужного нам инфоблока if($arFields["IBLOCK_ID"] == $IBLOCK_ID) {    $VALUES = $VALUES_OLD = array();    //Получаем свойство значение сво-ва $PROPERTY_CODE    $res = CIBlockElement::GetProperty($arFields["IBLOCK_ID"], $arFields["ID"], "sort", "asc", array("CODE" => $PROPERTY_CODE));    while ($ob = $res->GetNext()) {       $file_path = CFile::GetPath($ob['VALUE']); // Получаем путь к файлу       if($file_path) {          $imsize = getimagesize($_SERVER["DOCUMENT_ROOT"].$file_path); //Узнаём размер файла          // Если размер больше установленного максимума          if($imsize[0] > $imageMaxWidth or $imsize[1] > $imageMaxHeight) {             // Уменьшаем размер картинки             $file = CFile::ResizeImageGet($ob['VALUE'], array(                   'width'=>$imageMaxWidth,                   'height'=>$imageMaxHeight                ), BX_RESIZE_IMAGE_PROPORTIONAL, true);             // добавляем в массив VALUES новую уменьшенную картинку             $VALUES[] = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"].$file["src"]);          } else {             // добавляем в массив VALUES старую картинку             $VALUES[] = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"].$file_path);          }          // Собираем в массив ID старых файлов для их удаления (чтобы не занимали место)          $VALUES_OLD[] = $ob['VALUE'];       }    }    // Если в массиве есть информация о новых файлах    if(count($VALUES) > 0) {       $PROPERTY_VALUE = $VALUES; // значение свойства       // Установим новое значение для данного свойства данного элемента       CIBlockElement::SetPropertyValuesEx($arFields["ID"], $arFields["IBLOCK_ID"], array($PROPERTY_CODE => $PROPERTY_VALUE));       // Удаляем старые большие изображения       foreach ($VALUES_OLD as $key=>$val) {          CFile::Delete($val);       }    }    unset($VALUES);    unset($VALUES_OLD); } } ?>
 

как бы грамотнее настроить его для обработки нескольких инфоблоков
Свойство привязка к элементам
 
Создаешь множественное свойство "привязка к элементам в виде списка" и выводишь его вот так

<?foreach($arResult["PROPERTIES"]["TRENER"]["VALUE"] as $analog):?>
       <?$res = CIBlockElement::GetByID($analog);?>
       <?if($ar_res = $res->GetNext())?>

       <?$db_props = CIBlockElement::GetProperty(12, $ar_res['ID'], "sort", "asc", Array("CODE"=>"TEL_TRENER")); //свое свойство
       if ($ar_props = $db_props->Fetch());?>


       <? //фотка
       $renderImage = CFile::ResizeImageGet($ar_res["PREVIEW_PICTURE"], Array("width" => 200, "height" => 300), BX_RESIZE_IMAGE_EXACT, false);
       echo '<img alt="'.$ar_res["NAME"].'" src="'.$renderImage["src"].'" class="person-img img-responsive" />';
       ?>
       <span class="name"><?=$ar_res["NAME"];?></span>
       <span class="descr"><?=$ar_res["PREVIEW_TEXT"];?></span>
       < a href="<?=$ar_props['VALUE']?>">Свое свойство</a >


<?endforeach;?>
Изменено: Сергей Стефанович - 6 Февраля 2018 14:52:42
Как вывести свойства инфоблока по отдельности и немного плюшек не в тему
 
Вывести множественное свойство привязка к элементам в виде списка.


Код
<?foreach($arResult["PROPERTIES"]["TRENER"]["VALUE"] as $analog):?>
    <?$res = CIBlockElement::GetByID($analog);?>
    <?if($ar_res = $res->GetNext())?>

        <img src="<?=CFile::GetPath($ar_res["PREVIEW_PICTURE"])?>">
        <?=$ar_res["NAME"];?>
        <?=$ar_res["PREVIEW_TEXT"];?>

        <p><?=$ar_res["DISPLAY_PROPERTIES"]["TEL_TRENER"]["VALUE"];?></p>
<?endforeach;?>
 

Стандартные свойства выводятся, последнее (тип строка) не выводится
Вывести множественное свойство типа файл с названием и весом файла в Битрикс
 
Вот решение проблемы с одиночными файлами.


Код
<?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?>
 
Изменено: Михаил Базаров - 26 Января 2018 19:00:50 (По просьбе пользователя ))
Вывести множественное свойство типа файл с названием и весом файла в Битрикс
 
Цитата
Сергей Стефанович пишет:
Спасибо. Но есть косяк. Если файл один, то не выводит.
Использую в news.list
Вывести множественное свойство типа файл с названием и весом файла в Битрикс
 
Спасибо. Но есть косяк. Если файл один, то не выводит.
Серия 18: Реализация персонального раздела пользователя
 
а как вывести все товары добавленные данным пользователем?
нужно для создания персонального раздела в Доске объявлений
Дополнительные картинки в новостях Битрикс, почти фотогалерея.
 
Тоже хороший способ. без result_modifier.php
только как прикрутить сюда ресайз


Код
<?if(count($arResult['PROPERTIES']['MORE_PHOTO']['VALUE']) > 0 && intval($arResult['PROPERTIES']['MORE_PHOTO']['VALUE']) > 0):?>
   <?if(count($arResult['PROPERTIES']['MORE_PHOTO']['VALUE']) > 4):?>
      <div class="owl-carousel owl-theme">


               <?foreach($arResult['PROPERTIES']['MORE_PHOTO']['VALUE'] as $num=>$arItems):?>
                  <?$img_href = CFile::GetPath($arItems);?>
                  <a href="<?=$img_href?>" class="item" data-lightbox="example-set"><img src="<?=$img_href?>" class="img-responsive" alt="фото <?=$arResult['PROPERTIES']['MORE_PHOTO']['DESCRIPTION'][$num]?>"/></a>
               <?endforeach;?>


      </div>
   <?else:?>
      <div class="owl-carousel owl-theme">

            <?foreach($arResult['PROPERTIES']['MORE_PHOTO']['VALUE'] as $num=>$arItems):?>
               <?$img_href = CFile::GetPath($arItems);?>
               <a href="<?=$img_href?>" class="item"  data-lightbox="example-set"><img src="<?=$img_href?>" class="img-responsive" alt="фото <?=$arResult['PROPERTIES']['MORE_PHOTO']['DESCRIPTION'][$num]?>" /></a>
            <?endforeach;?>

      </div>
   <?endif;?>
<?endif;?>
 
Основные функции вывода в шаблонах Битрикс
 
Цитата
Михаил Базаров пишет:

Код
 <?if (
($APPLICATION->GetCurDir()=='/') ||
(CSite::InDir('/catalog/'))
){?>
   Главная и каталог
<?} else {?>
   Все остальные
<?}?> 
Спасибо, помогли!
Основные функции вывода в шаблонах Битрикс
 
Кстати хотел бы расширить эту запись несколькими полезными функциями.


//инклюд
<?$APPLICATION->IncludeFile(SITE_DIR."include/file.php", Array(), Array("MODE" => "html", "NAME" => "заголовок"  ;)  );?>
//инклюд2
<?$APPLICATION->IncludeFile(SITE_DIR."include/file.php"  ;)  ;?>


подключение скриптов из папки шаблона
<? $this->addExternalJS($this->__folder."/form_script.js" ;) ;?>
<? $this->addExternalCss($this->__folder."/form_script.css" ;) ;?>
Основные функции вывода в шаблонах Битрикс
 
хочу сделать разную разметку на некоторых страницах сайта. к примру на главной и в каталоге хочу .col-md-12, а на остальных .col-md-8+col-md-4.
но никак не получается.
<?if($APPLICATION->GetCurDir()==SITE_DIR || $APPLICATION->GetCurDir()==SITE_DIR.'catalog/' ):?>на главной и в каталоге<?else:?>на остальных<?endif;?>>

данная функция на главной и на корневой странице раздела каталог делает col-md-12, а вот внутренние страницы каталога всё равно col-md-8+col-md-4
можно ли победить?
Вывести минимальную цену торговых предложений в Битрикс
 
Михаил, не подскажете. Почему при вставке этой функции в цене выводятся нули после запятой. Хотя на всем сайте цена выводится без их

Кроме создания сайтов, я так же веду блог с заметками о вебразработке, записываю бесплатные видеоуроки и содержу форум, на котором можно задавать вопросы и просто общаться. Заметки, преимущественно - это короткие или подробные рецепты, по реализации часто требуемого функционала- в рамках разработки сайтов на 1С-Битрикс

Показать еще