• Как встроить \Bitrix\Main\UI\FileInput в iblock.element.add.form?

    @PetrPo
    Akorolev, че-то я сам запарился, вообщем в component.php все правильно, в в template.php case F надо заменить
    case "F":
    	$arValues = array();
    
    	if(intval($propertyID) > 0) {
    		if($arResult["ELEMENT_PROPERTIES"][$propertyID]) {
    			foreach($arResult["ELEMENT_PROPERTIES"][$propertyID] as $key => $arValue) {
    				if($arValue['VALUE'])
    					$arValues['PROPERTY_FILE_'.$propertyID.'['.$arValue['VALUE_ID'].']'] = $arValue['VALUE'];
    			}
    		}
    	}
    	else {
    		if($arResult["ELEMENT"][$propertyID]) {
    			$arValues['PROPERTY_FILE_'.$propertyID.'_0'] = $arResult["ELEMENT"][$propertyID];
    		}
    	}
    
    	echo \Bitrix\Main\UI\FileInput::createInstance(array(
    		'name' => intval($propertyID) > 0 ? 'PROPERTY_FILE_'.$propertyID.'['.($inputNum == 1 ? '0' : '#IND#').']' : 'PROPERTY_FILE_'.$propertyID.'_0',
    		'description' => true,
    		'upload' => true,
    		'allowUpload' => 'F',
    		'medialib' => true,
    		'fileDialog' => true,
    		'cloud' => true,
    		'delete' => true,
    		'maxCount' => $inputNum == 1 ? 1 : 0
    	))->show(
    		$arValues ? $arValues : 0,
    		false
    	);
    break;
  • Как встроить \Bitrix\Main\UI\FileInput в iblock.element.add.form?

    @PetrPo
    Akorolev, теперь все ясно, я еще смотрел на это удаление, думаю ну в вопросе простой компонент указан, он когда один без комплексного стоит там нет редактирования, только сохранение и не стал заморачиваться, вообщем-то поэтому и из show параметры убрал)) ожидай, ща запилю, напишу
  • Как встроить \Bitrix\Main\UI\FileInput в iblock.element.add.form?

    @PetrPo
    Akorolev, давай сначала разберемся, я делал только для добавления (простой компонент iblock.element.add.form), у тебя как я понял стоит комплексный iblock.element.add ?
  • Как встроить \Bitrix\Main\UI\FileInput в iblock.element.add.form?

    @PetrPo
    Akorolev, а что значит при изменении?
    В вопросе ты указывал iblock.element.add.form, я на нем тестил. А как ты изменяешь? комплексный компонент iblock.element.add ??
  • Как встроить \Bitrix\Main\UI\FileInput в iblock.element.add.form?

    @PetrPo
    Akorolev, если поможет, функция show описана здесь /bitrix/modules/main/lib/ui/fileinput.php
  • Как встроить \Bitrix\Main\UI\FileInput в iblock.element.add.form?

    @PetrPo
    Akorolev, какие именно контакты и зачем? Про шоколадку - шутка
  • Как встроить \Bitrix\Main\UI\FileInput в iblock.element.add.form?

    @PetrPo
    Akorolev,
    единственное что забыл это вывод файлов

    тут уже сам, я и так за тебя всю задачу сделал... с тебя шоколадка))
  • Как встроить \Bitrix\Main\UI\FileInput в iblock.element.add.form?

    @PetrPo
    Akorolev, Вообщем в template.php снова case F
    case "F":
    	echo \Bitrix\Main\UI\FileInput::createInstance(array(
    		'name' => intval($propertyID) > 0 ? 'PROPERTY_FILE_'.$propertyID.'['.($inputNum == 1 ? '0' : '#IND#').']' : 'PROPERTY_FILE_'.$propertyID.'_0',
    		'description' => true,
    		'upload' => true,
    		'allowUpload' => 'F',
    		'medialib' => true,
    		'fileDialog' => true,
    		'cloud' => true,
    		'delete' => true,
    		'maxCount' => $inputNum == 1 ? 1 : 0
    	))->show();
    break;

    component.php найди комментарий
    // for file properties
    после него в else
    $keyProperty = 'PROPERTY_FILE_'.$propertyID;
    $arUpdatePropertyValues[$propertyID] = array();
    
    if(isset($_REQUEST[$keyProperty]) && $_REQUEST[$keyProperty]) {
    	if(is_array($_REQUEST[$keyProperty])) {
    		foreach($_REQUEST[$keyProperty] as $key => $arProperty) {
    			$arFile = CIBlock::makeFileArray(
    				$arProperty,
    				$_REQUEST[$keyProperty.'_del'][$key] === 'Y',
    				$_REQUEST[$keyProperty.'_descr'][$key]
    			);
    			
    			$arUpdatePropertyValues[$propertyID][$key] = $arFile;
    			
    			if(($arParams["MAX_FILE_SIZE"] > 0) && ($arFile["size"] > $arParams["MAX_FILE_SIZE"]))
    				$arResult["ERRORS"][] = GetMessage("IBLOCK_ERROR_FILE_TOO_LARGE");
    		}
    	}
    }
    else {
    	foreach ($arPropertyValue as $key => $value)
    	{
    		$arFile = $_FILES["PROPERTY_FILE_".$propertyID."_".$key];
    		$arFile["del"] = $_REQUEST["DELETE_FILE"][$propertyID][$key] == "Y" ? "Y" : "";
    		$arUpdatePropertyValues[$propertyID][$key] = $arFile;
    		if(($arParams["MAX_FILE_SIZE"] > 0) && ($arFile["size"] > $arParams["MAX_FILE_SIZE"]))
    			$arResult["ERRORS"][] = GetMessage("IBLOCK_ERROR_FILE_TOO_LARGE");
    	}
    }
    
    if (empty($arUpdatePropertyValues[$propertyID]))
    	unset($arUpdatePropertyValues[$propertyID]);
  • Как встроить \Bitrix\Main\UI\FileInput в iblock.element.add.form?

    @PetrPo
    Akorolev, Попробую, но видимо там не так все просто)) сегодня уже точно не отпишусь, завтра посмотрю
  • Как встроить \Bitrix\Main\UI\FileInput в iblock.element.add.form?

    @PetrPo
    Akorolev, Напиши, свой вариант для удаления и описания, пока писал ты уже коммент изменил))
  • Как встроить \Bitrix\Main\UI\FileInput в iblock.element.add.form?

    @PetrPo
    Akorolev,
    $arFile = ($_FILES["PROPERTY_FILE_".$propertyID."_0"] ? $_FILES["PROPERTY_FILE_".$propertyID."_0"] : CIBlock::makeFileArray($_REQUEST["PROPERTY_FILE_".$propertyID."_0"], $_REQUEST["PROPERTY_FILE_".$propertyID."_0_del"] === "Y", $_REQUEST["PROPERTY_FILE_".$propertyID."_0_descr"]));

    На счет 2-го параметра в CIBlock::makeFileArray не уверен, что правильно, а 3-ий параметр для сохранения описания.
    Описание задается, также как и в админке, загрузил картинку --> внизу слева карандаш --> клик, там описание.
    Как-то можно было настроить, чтобы это окно сразу при загрузке открывалось и чтобы описание показывалось, не видел такой настройки в админке?
  • Как вывести $arrVALUES на экран?

    @PetrPo
    Вадим Тимошенко, $_SERVER["DOCUMENT_ROOT"]."/log.txt" ))
    /корень сайта/log.txt, если событие сработает, создастся файл log.txt
  • Как отобразить две цены в блоке?

    @PetrPo
    а если до старого варианта откатываешься, то работает?
  • Как отобразить две цены в блоке?

    @PetrPo
    kelFiz, че-то тогда не знаю, я к себе закинул, все развалилось нахрен, но сам код рабочий
  • Как отобразить две цены в блоке?

    @PetrPo
    kelFiz, в каком плане не изменилось? осталась одна позиция Нижнее меню пропало и возможность редактирования на странице как и без проверки? или внешний вид цены не изменился?
  • Как отобразить две цены в блоке?

    @PetrPo
    kelFiz,
    , А через что?)

    ну типа там по ftp, не через админку

    добавь проверку, видимо компонент >1 раза подключается
    if(!function_exists('formatPrice')) {
    		function formatPrice($m) {
    			return $m[1].number_format($m[2], 0, '.', ' ').' р.'.$m[3];
    		}
    	}
  • Как отобразить две цены в блоке?

    @PetrPo
    kelFiz, блин хотел коммент поправить и удалил, вообщем можешь в файле /bitrix/.settings.php поставить debug => true тогда ошибки будут видны на сайте и скинуть мне ошибку, только файлик этот не через битрикс правь, а то косякнешь и сайт упадет
  • Как отобразить две цены в блоке?

    @PetrPo
    kelFiz, да че-то самому интересно стало, думал на раз-два сделаю, оказалось не так все просто
    Если все же надо код под спойлером
    spoiler

    <? if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();
    
    use \Bitrix\Main;
    
    /**
     * @global CMain $APPLICATION
     * @var array $arParams
     * @var array $arResult
     * @var CatalogProductsViewedComponent $component
     * @var CBitrixComponentTemplate $this
     * @var string $templateName
     * @var string $componentPath
     * @var string $templateFolder
     */
    
    $this->setFrameMode(true);
    
    if (isset($arResult['ITEM']))
    {
      $item = $arResult['ITEM'];
      $areaId = $arResult['AREA_ID'];
    
      $productTitle = isset($item['IPROPERTY_VALUES']['ELEMENT_PAGE_TITLE']) && $item['IPROPERTY_VALUES']['ELEMENT_PAGE_TITLE'] != ''
        ? $item['IPROPERTY_VALUES']['ELEMENT_PAGE_TITLE']
        : $item['NAME'];
    
      $imgTitle = isset($item['IPROPERTY_VALUES']['ELEMENT_PREVIEW_PICTURE_FILE_TITLE']) && $item['IPROPERTY_VALUES']['ELEMENT_PREVIEW_PICTURE_FILE_TITLE'] != ''
        ? $item['IPROPERTY_VALUES']['ELEMENT_PREVIEW_PICTURE_FILE_TITLE']
        : $item['NAME'];
    
      $showSlider = is_array($item['MORE_PHOTO']) && count($item['MORE_PHOTO']) > 0;
    
      $itemHasDetailUrl = isset($item['DETAIL_PAGE_URL']) && $item['DETAIL_PAGE_URL'] != '';
      
    	function formatPrice($m) {
    		return $m[1].number_format($m[2], 0, '.', ' ').' р.'.$m[3];
    	}
    	
    	$arProductPrice = array();
    	if(isset($arParams['PROPERTY_PRICE']) && $arParams['PROPERTY_PRICE']) {
    	  foreach((array) $arParams['PROPERTY_PRICE']  as $priceCode) {
    		  if(isset($item['PROPERTIES'][$priceCode]) && $item['PROPERTIES'][$priceCode]['VALUE']) {
    			  $arProductPrice[$priceCode] = preg_replace_callback('/^(\D*)(\d*)(\D*)$/', 'formatPrice', $item['PROPERTIES'][$priceCode]['VALUE']);
    		  }
    	  }
    	}
      //$productPrice = ( !empty($item['PROPERTIES'][$arParams['PROPERTY_PRICE']]['VALUE']) ? $item['PROPERTIES'][$arParams['PROPERTY_PRICE']]['VALUE'] : false );
      
      //echo_r($item);
      ?>
      <div class="product-item-wrap" id="<?=$areaId?>" data-entity="item">
        <div class="product-item">
          <a href="<?=$item['DETAIL_PAGE_URL']?>" class="full"></a>
          <? if ($showSlider) { ?>
          <div class="product-thumb" id="product-thumb-<?=$areaId?>">
          <? 
            foreach ($item['MORE_PHOTO'] as $key => $photo) { 
              if ($key > 4) continue;
          ?>
            <div><a href="<?=$item['DETAIL_PAGE_URL']?>"><img src="<?=$photo['SRC']?>" alt=""></a></div>
          <? 	} ?>
          </div>
          <? } ?>
          <div class="product-body">
            <div class="product-head text-primary">
              <h5 class="product-title"><a href="<?=$item['DETAIL_PAGE_URL']?>"><?=$productTitle?></a></h5>
            </div>
            <div class="product-option">
              <? if (!empty($item['DISPLAY_PROPERTIES'])) { ?>
              <ul class="list-inline">
                <? foreach ($item['DISPLAY_PROPERTIES'] as $code => $displayProperty) { ?>
                <li class="list-inline-item">
                  <span><?=$displayProperty['NAME']?></span>
                  <strong class="text-primary"><?=(is_array($displayProperty['DISPLAY_VALUE']) ? implode(' / ', $displayProperty['DISPLAY_VALUE']) : $displayProperty['DISPLAY_VALUE'])?></strong>
                </li>
                <? } ?>
              </ul>
              <? } ?>
            </div>
            <div class="product-price text-primary">
              <?/*if ($productPrice) { ?>
              <span><? echo number_format($productPrice, 0, '.', ' '); ?> р.</span>
              <? }*/ ?>
    		  <?if($arProductPrice):?>
    				<?foreach($arProductPrice as $priceCode => $productPrice):?>
    					<div class="price_<?=strtolower($priceCode);?>"><?=$productPrice;?></div>
    				<?endforeach;?>
    		  <?endif;?>
    		  
            </div>
            <? if ($itemHasDetailUrl): ?>
            <a href="<?=$item['DETAIL_PAGE_URL']?>" class="btn btn-outline-primary">Подробнее</a>
            <? endif; ?>
          </div>
        </div>
        <script>
          $(document).ready(function(){    
            $('#product-thumb-<?=$areaId?>').slick({
              slidesToShow: 1,
              slidesToScroll: 1,               
              dots: true,
              arrows:false,
              infinite: true,
              touchMove: true,
              draggable:true,
              lazyLoad: 'ondemand',
              fade:true
            });
          });
        </script>
      </div>
    <?
    }

  • Как отобразить две цены в блоке?

    @PetrPo
    ну да, я тупанул там же в коде
    <? echo number_format($productPrice, 0, '.', ' '); ?> р.

    number_format обрезает, подумаю отпишусь