Блог

  • 27 Июля 2017

    Вывести привязку к элементу в detail.news

    <!--Для простого-->
    <? if(!empty($arResult["PROPERTIES"]["СВОЙСТВО"]["VALUE"])):?>
    Сотрудники автосалона: "<?=$arResult["DISPLAY_PROPERTIES"]["СВОЙСТВО"]["DISPLAY_VALUE"];?>"
    <? else:?>
    <? endif?>
    <!--Для множественного-->

    <?foreach($arResult["PROPERTIES"]["СВОЙСТВО"]["VALUE"] as $analog):?>
    <?$res = CIBlockElement::GetByID($analog);?>
    <?if($ar_res = $res->GetNext())?>
    <li><b><a href='<?=$ar_res["DETAIL_PAGE_URL"];?>'><?=$ar_res["NAME"];?></a></b></li>
    <?endforeach;?>

    Начать сотрудничество
    Связаться со мной
  • 7 Июня 2017

    Создание раздела пользователя в инфоблоке при регистрации

    В файле init.php добавить код с указанием ID инфоблока, в котором будут создаваться разделы прикрепленные к пользователю

    <?
    // Регистрируем обработчик AddSectionInBlock
    AddEventHandler("main", "OnAfterUserAdd", Array("AddSectionInBlock", "OnAfterUserAddHandler"));
    class AddSectionInBlock
    {
    // создаем обработчик события "OnAfterUserAdd"
    function OnAfterUserAddHandler(&$arFields)
    {
    if (CModule::IncludeModule('iblock')) {
    $bs = new CIBlockSection;
    $arFieldsi = Array(
    "ACTIVE" => "Y",
    "IBLOCK_ID" => 23, //ID инфоблока в котором создастся раздел
    "NAME" => $arFields["LOGIN"], //Название раздела с логином пользователя
    "CODE" => $arFields["LOGIN"], //Символьный код раздела с логином пользователя
    "SORT" => $SORT,
    );

    if ($ID > 0) {
    $res = $bs->Update($ID, $arFieldsi);
    } else {
    $ID = $bs->Add($arFieldsi);
    $res = ($ID > 0);
    }

    if (!$res)
    echo $bs->LAST_ERROR;
    }
    }
    }
    ?>

    Начать сотрудничество
    Связаться со мной
  • 15 Января 2017

    Фильтрация новостей по популярности (Битрикс)

    В настройках компонента "Новости", в Поле для первой сортировки новостей выбрать "Другое" и добавить "SHOW_COUNTER"

    Начать сотрудничество
    Связаться со мной
  • 8 Января 2017

    Регистрация при многосайтовости (Битрикс)

    Добавить в init.php:

    <?
    AddEventHandler("main", "OnBeforeUserRegister", "OnBeforeUserRegisterHandler");
    // создаем обработчик события "OnBeforeUserRegister"
    function OnBeforeUserRegisterHandler(&$arFields)
    {
    // если пользователь регистрируется на сайте s1
    if(SITE_ID=="s1")
    {
    // добавляем его в группу с id=6
    $arFields["GROUP_ID"][] = 6;
    }
    elseif(SITE_ID=="s2")
    {
    // добавляем его в группу с id=9
    $arFields["GROUP_ID"][] = 9;
    }
    }
    ?>

    Начать сотрудничество
    Связаться со мной
  • 5 Января 2017

    Следующая и предыдущая новость в Битрикс

    Следующая и предыдущая новость в Битрикс

    В Битрикс отсутствует функционал для навигации внутри шаблона детальных новостей или статей по типу «Следующая и Предыдущая» при подробном просмотре. Давайте сделаем.

    Вы сможете назначить свои классы или списки для ссылок.

    В result_modifier.php шаблона вставляем:

    <?
    // сортировку берем из параметров компонента
    $arSort = array(
          $arParams["SORT_BY1"]=>$arParams["SORT_ORDER1"],
          $arParams["SORT_BY2"]=>$arParams["SORT_ORDER2"],
       );
    // выбрать нужно id элемента, его имя и ссылку. Можно добавить любые другие поля, 
    // например PREVIEW_PICTURE или PREVIEW_TEXT
    $arSelect = array(
          "ID",
          "NAME",
          "DETAIL_PAGE_URL"
       );
    // выбираем активные элементы из нужного инфоблока. 
    // Раскомментировав строку можно ограничить секцией
    $arFilter = array (
          "IBLOCK_ID" => $arResult["IBLOCK_ID"],
          //"SECTION_CODE" => $arParams["SECTION_CODE"],
          "ACTIVE" => "Y",
          "CHECK_PERMISSIONS" => "Y",
       );
    // выбирать будем по 1 соседу с каждой стороны от текущего
    $arNavParams = array(
          "nPageSize" => 1,
          "nElementID" => $arResult["ID"],
       );
    $arItems = Array();
    $rsElement = CIBlockElement::GetList($arSort, $arFilter, false, $arNavParams, $arSelect);
    $rsElement->SetUrlTemplates($arParams["DETAIL_URL"]);
    while($obElement = $rsElement->GetNextElement())
          $arItems[] = $obElement->GetFields();
    // возвращается от 1го до 3х элементов в зависимости от наличия соседей, обрабатываем эту ситуацию      
    if(count($arItems)==3):
       $arResult["TORIGHT"] = Array("NAME"=>$arItems[0]["NAME"], "URL"=>$arItems[0]["DETAIL_PAGE_URL"]);
       $arResult["TOLEFT"] = Array("NAME"=>$arItems[2]["NAME"], "URL"=>$arItems[2]["DETAIL_PAGE_URL"]);
    elseif(count($arItems)==2):
       if($arItems[0]["ID"]!=$arResult["ID"])
          $arResult["TORIGHT"] = Array("NAME"=>$arItems[0]["NAME"], "URL"=>$arItems[0]["DETAIL_PAGE_URL"]);
       else
          $arResult["TOLEFT"] = Array("NAME"=>$arItems[1]["NAME"], "URL"=>$arItems[1]["DETAIL_PAGE_URL"]);
    endif;
    // в $arResult["TORIGHT"] и $arResult["TOLEFT"] лежат массивы с информацией о соседних элементах
    ?>
    

    В нужном месте шаблона детальной новости или статьи (template.php) вставляем следующий код:

    <?if(is_array($arResult["TOLEFT"])):?> 
       <a href="<?=$arResult["TOLEFT"]["URL"]?>"> 
          < <?=$arResult["TOLEFT"]["NAME"]?> 
       </a> 
    <?endif?>
    <?if(is_array($arResult["TORIGHT"])):?> 
       <a href="<?=$arResult["TORIGHT"]["URL"]?>"> 
          <?=$arResult["TORIGHT"]["NAME"]?> > 
       </a> 
    <?endif?>
    
    

    Начать сотрудничество
    Связаться со мной
  • 1 Января 2017

    Создаем 404 ошибку правильно (Битрикс)

    Создаем 404 ошибку правильно (Битрикс)

    Создаем сам файл 404.php с содержанием:

    <? if ($_SERVER['DOCUMENT_URI'] == "/404.php") {
    $_SERVER['REQUEST_URI'] = $_SERVER['DOCUMENT_URI'];
    }
    include_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/urlrewrite.php');
    CHTTP::SetStatus('404 Not Found');
    @define('ERROR_404', 'Y');
    require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
    $APPLICATION->SetTitle(""); ?>
    <h1 style="font-size: 36px; color: rgb(189, 189, 189);">ОШИБКА 404</h1>

    <p>К сожалению такой страницы не существует или она была перемещена!
    <br />
    Пожалуйста, воспользуйтесь навигацией или формой поиска, чтобы найти интересующую Вас информацию.
    <br /><br/>
    <a href="<?=SITE_DIR?>" >Вернуться на главную</a></p>
    <? require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php"); ?>

    Далее создаем файл .htaccess (если не создан) со следующим содержанием:

    Options -Indexes 
    ErrorDocument 404 /404.php
    

    Начать сотрудничество
    Связаться со мной
  • 23 Декабря 2016

    1С-Битрикс: похожие товары в каталоге

    1С-Битрикс: похожие товары в каталоге

    Чтобы вывести на странице товара блок «С этим товаром покупают» или «С этим товаром также смотрят» или «Подобные товары» можно использовать компонент catalog.section, просто указав ему брать товары только из текущей категории в случайном порядке, исключив только сам товар, на странице которого мы находимся.

    Ниже стандартный код компонента catalog.section, который мы вставили в шаблон детального просмотра элемента. Красным отмечены настройки, позволяющие это реализовать. Этот код вставляется в шаблон элемента каталога в папке /bitrix/templates/template_name/components/bitrix/catalog/template_name/

    <?
    $GLOBALS['arrrFilter'] = array('!ID' => $arResult["ID"]); 
    
    $APPLICATION->IncludeComponent(
    "bitrix:catalog.section",
    ".default",
    Array(
    "IBLOCK_TYPE" => "catalog",
    "IBLOCK_ID" => "1",
    "SECTION_ID" => $arResult["IBLOCK_SECTION_ID"],
    "SECTION_CODE" => "",
    "SECTION_USER_FIELDS" => array(0=>"",1=>"",),
    "ELEMENT_SORT_FIELD" => "RAND",
    "INCLUDE_SUBSECTIONS" => "Y",
    "SHOW_ALL_WO_SECTION" => "Y",
    "HIDE_NOT_AVAILABLE" => "N",
    "PAGE_ELEMENT_COUNT" => "4",
    "LINE_ELEMENT_COUNT" => "4",
    "PROPERTY_CODE" => array(0=>"",1=>"",),
    "OFFERS_LIMIT" => "5",
    "ADD_PICT_PROP" => "-",
    "LABEL_PROP" => "-",
    "PRODUCT_SUBSCRIPTION" => "N",
    "SHOW_DISCOUNT_PERCENT" => "N",
    "SHOW_OLD_PRICE" => "N",
    "MESS_BTN_BUY" => "Купить",
    "MESS_BTN_ADD_TO_BASKET" => "В корзину",
    "MESS_BTN_SUBSCRIBE" => "Подписаться",
    "MESS_BTN_DETAIL" => "Подробнее",
    "MESS_NOT_AVAILABLE" => "Нет в наличии",
    "SECTION_URL" => "/catalog/#SECTION_CODE#/",
    "DETAIL_URL" => "/catalog/#SECTION_CODE#/#ELEMENT_CODE#/",
    "BASKET_URL" => "/personal/cart/",
    "ACTION_VARIABLE" => "action",
    "PRODUCT_ID_VARIABLE" => "id",
    "PRODUCT_QUANTITY_VARIABLE" => "quantity",
    "PRODUCT_PROPS_VARIABLE" => "prop",
    "SECTION_ID_VARIABLE" => "SECTION_ID",
    "AJAX_MODE" => "N",
    "AJAX_OPTION_JUMP" => "N",
    "AJAX_OPTION_STYLE" => "Y",
    "AJAX_OPTION_HISTORY" => "N",
    "CACHE_TYPE" => "A",
    "CACHE_TIME" => "36000000",
    "CACHE_GROUPS" => "Y",
    "META_KEYWORDS" => "-",
    "META_DESCRIPTION" => "-",
    "BROWSER_TITLE" => "-",
    "ADD_SECTIONS_CHAIN" => "N",
    "DISPLAY_COMPARE" => "N",
    "SET_TITLE" => "Y",
    "SET_STATUS_404" => "N",
    "CACHE_FILTER" => "N",
    "PRICE_CODE" => array(0=>"BASE",),
    "USE_PRICE_COUNT" => "N",
    "SHOW_PRICE_COUNT" => "1",
    "PRICE_VAT_INCLUDE" => "Y",
    "PRODUCT_PROPERTIES" => array(),
    "USE_PRODUCT_QUANTITY" => "N",
    "CONVERT_CURRENCY" => "N",
    "PAGER_TEMPLATE" => "modern2",
    "DISPLAY_TOP_PAGER" => "N",
    "DISPLAY_BOTTOM_PAGER" => "N",
    "PAGER_TITLE" => "Товары",
    "PAGER_SHOW_ALWAYS" => "Y",
    "PAGER_DESC_NUMBERING" => "N",
    "PAGER_DESC_NUMBERING_CACHE_TIME" => "36000",
    "PAGER_SHOW_ALL" => "N",
    "AJAX_OPTION_ADDITIONAL" => ""
    )
    );?>

    Начать сотрудничество
    Связаться со мной
  • 6 Декабря 2016

    Как вывести картинки в результатах поиска «Битрикс»?

    Как вывести картинки в результатах поиска «Битрикс»?

    Вопрос, подкупающий своей новизной. Часто ли вам встречались иллюстрации в результатах поисковой выдачи на сайтах? В гигантах Яндекс и Google и то не так давно появилось это полезное и приятное усовершенствование. Не будем вдаваться в историю, но просто расскажем, как устроить это на «Битрикс».

     
    Способ первый:

    Добавим в стандартный компонент поиска код:

    <?
    $grab = GetIBlockElement($arItem["ITEM_ID"]);
    $image1 = CFile::GetPath($grab["PREVIEW_PICTURE"]);
    $image2 = CFile::GetPath($grab["DETAIL_PICTURE"]);
    ?>
    А точнее:
    
    
    <?
    $grab = GetIBlockElement($arItem["ITEM_ID"];);
    $image_prw = CFile::GetPath($grab["PREVIEW_PICTURE"];);
    //$image2 = CFile::GetPath($grab["DETAIL_PICTURE"];);
    ?>
    <img src="<?=$image_prw;?>" width="60" height="45" alt="img" />
    Бывает так, что в инфоблок не добавлено изображение. Чтобы не выводить пустой квадратик, добавим в компонент условие:
    <?if($arResult["PREVIEW_PICTURE"]!='' && $arResult["DETAIL_PICTURE"]!=''):?>   

         <?

              $grab = GetIBlockElement($arItem["ITEM_ID"]);

              $image_prw = CFile::GetPath($grab["PREVIEW_PICTURE"]);

              $image2 = CFile::GetPath($grab["DETAIL_PICTURE"]);

          ?>
          <img src="<?=$image_prw;?>" width="60" height="45" alt="img" />
    <?endif?>

    Способ второй:

    Прежде всего найдем в папке .default файл result_modifier.php. Точный путь:

    /bitrix/templates/.default/components/bitrix/search.page/clear1/result_modifier.php

    В самом конце, после закрывающего ?> добавим код:

    <?
      if ($arResult["SEARCH"]) {
          $arID = array();
          foreach ($arResult["SEARCH"] as $i => $arItem) {
              if ($arItem["MODULE_ID"] == "iblock" && substr($arItem["ITEM_ID"], 0, 1) !== "S")
                  $arID[$arItem["ITEM_ID"]] = $i;
          }
          $grab = CIBlockElement::GetList(array(), array(
              "ID" => array_keys($arID)
        ), false, false, array(         "ID",         "IBLOCK_ID",         "PREVIEW_PICTURE"     ));     while ($ar = $grab->Fetch()) {

            $arResult["SEARCH"][$arID[$ar["ID"]]]["PICTURE"] = CFile::GetFileArray($ar["PREVIEW_PICTURE"]);     } }
    ?>


    Теперь отредактируем файл template.php, Точный путь:

    /bitrix/templates/.default/components/bitrix/search.page/clear1/template.php

    Выберем подходящее по структуре дизайна место и добавим в него код:

    <?if (is_array($arItem["PICTURE"])):?>
         <img src="<?=$arItem["PICTURE"]["SRC"]?>"
               class="preview_picture" border="0" width="" height=""
               alt="<?=$arItem["PICTURE"]["ALT"]?> title="<?=$arItem["PICTURE"]["ALT"]?>" />
    <?endif?>


    А как вывести другие свойства элементов в поиске, например, как вывести свойство с кодом
    PHONE?

    Решение идентично второму способу.

    В файл /bitrix/templates/.default/components/bitrix/search.page/clear1/result_modifier.php добавляем следующий код:

    
    if (count($arResult["SEARCH"]) > 0) {
        $arIDs = array();
        foreach ($arResult["SEARCH"] as $si => $arItem) {
            if ($arItem["MODULE_ID"] == "iblock" && substr($arItem["ITEM_ID"], 0, 1) !== "S") {
                // связь: iblock_id => id : search_id
                $arIDs[ $arItem['PARAM2'] ][ $arItem["ITEM_ID"] ] = $si;
            }
        }
        CModule::IncludeModule('iblock');
        foreach ($arIDs as $iblockId => $searchIds) {
            // для инфоблоков 2.0 передавать IBLOCK_ID для выбора свойств обязательно
            $grab = CIBlockElement::GetList(array(), array(
                "IBLOCK_ID"     => $iblockId,
                "ID"             => array_keys($searchIds)
            ), false, false, array(
                "ID",
                "IBLOCK_ID",
                "PREVIEW_PICTURE",
                // Указываем необходимые свойства, в данном случае PHONE
                "PROPERTY_PHONE"
            ));
            while ($ar = $grab->Fetch()) {
                $ar['PICTURE'] = CFile::GetFileArray($ar["PREVIEW_PICTURE"]);
                $si = $arIDs[ $iblockId ][ $ar["ID"] ];
                $arResult["SEARCH"][ $si ]["ELEMENT"] = $ar;
            }
        }
    }

    А файле шаблона /bitrix/templates/.default/components/bitrix/search.page/clear1/template.php выводим необходимые данные:

    //...
    <?foreach($arResult["SEARCH"] as $arItem):?>
             //....
             <p><?echo $arItem["ELEMENT"]['PROPERTY_PHONE_VALUE']?></p>
    //....

    Начать сотрудничество
    Связаться со мной
  • 6 Декабря 2016

    Bitrix. Настроить права доступа для контент-менеджера

    Памятка для себя по пунктам как настроить права для группы пользователей «контент-менеджер»:

    1. Создать группу пользователей «Контент-менеджер»;
    2. В закладке «Доступ», созданной группы, переопределить поле УПРАВЛЕНИЕ СТРУКТУРОЙ в значение РЕДАКТИРОВАНИЕ ФАЙЛОВ И ПАПОК;
    3. В закладке «Доступ», созданной группы, переопределить поле ПРОАКТИВНАЯ ЗАЩИТА в значение ОБХОД ПРОАКТИВНОГО ФИЛЬТРА(если необходимо будет разрешить вставку скриптов через визуальный редактор);
    4. Перейти в закладку СТРУКТУРА САЙТА -> ФАЙЛЫ И ПАПКИ;
    5. Выбираем для созданной группы пользователей права на корень сайта (кнопка на панели «Свойства папки») в значение ЗАПИСЬ;
    6. Выбираем для созданной группы пользователей права на папку /BITRIX в значение ЧТЕНИЕ;
    7. Выбираем для созданной группы пользователей права на папку /BITRIX/ADMIN в значение ЧТЕНИЕ;
    8. В настройках инфоблоков к которым должен быть открыт доступ у этой группы пользователей выставить права ИЗМЕНЕНИЕ.

    Начать сотрудничество
    Связаться со мной
  • 30 Сентября 2016

    Выводим свойства в Битрикс (кастомизация)

    Для этого достаточно в шаблоне bitrix:news.detail вписать

     <? echo $arResult['DISPLAY_PROPERTIES']['ATTRIBUTE']['DISPLAY_VALUE'];?>

    Где: DISPLAY_PROPERTIES - название свойства ATTRIBUTE - код свойства

    Чтобы вывести и название и значение свойства есть вариант:

    <? if ($arResult["DISPLAY_PROPERTIES"]['СВОЙСТВО']){?> //если не пустое
     <?=$arResult['DISPLAY_PROPERTIES']['СВОЙСТВО']['NAME']?> //вывести название
     <?echo $arResult['DISPLAY_PROPERTIES']['СВОЙСТВО']['DISPLAY_VALUE'];?> //и значение
     <?}?> 

    Чтобы вывести ссылку:

      <? if ( $arItem["PROPERTIES"]["СВОЙСТВО"]["VALUE"] > 0 ) : ?>
      <? echo '<a href="'.CFile::GetPath($arItem["PROPERTIES"]["СВОЙСТВО"]["VALUE"]).'">Скачать книгу</a> '; ?>
      <? endif; ?>
    

    Чтобы вывести свойство типа строка в режиме html:

    <? echo $arResult['DISPLAY_PROPERTIES']['ATTRIBUTE']['~VALUE'];?>

    Что бы вевести свойство типа html/text:

    <?=htmlspecialcharsBack($arResult["PROPERTIES"]["Название свойства"]["VALUE"]["TEXT"])?>

    Свойство список в виде select

    <select>
      <option>Выберите</option>
      <?$i=0;foreach($arResult["PROPERTIES"]["СВОЙСТВО"]["VALUE"] as $arRazmer):?>
      <option><?=$arRazmer?></option>
      <?endforeach;?>
      </select> 

    Вывести свойство файл-изображение как изображение а не ссылку на загрузку:

    <?$что_нибудь_понятное = CFile::GetPath($arResult["PROPERTIES"]["СВОЙСТВО"]["VALUE"]);?>
      <img src="<?echo $что_нибудь_понятное;?>" />
    

    Вывести колличество комментариев к элементу в списке новостей битрикс:

    <?=(strlen($arItem["PROPERTIES"]["FORUM_MESSAGE_CNT"]["VALUE"]) > 0 ? $arItem["PROPERTIES"]["FORUM_MESSAGE_CNT"]["VALUE"] : "0");?>

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

    К парметру вывода компанента добавить:
      "LIST_FIELD_CODE" => array(0=>"SHOW_COUNTER",1=>"",),
      "DETAIL_FIELD_CODE" => array(0=>"SHOW_COUNTER",1=>"",),
      В нужном месте шаблона вставить
      <?=$arItem['SHOW_COUNTER']?> - для списка новостей
      <?=$arResult['SHOW_COUNTER']?> - для детальной новости

    Немного костыльный, но однако способ: как вывести ссылку на детальный просмотр и изображение связанного элемента каталога. Для примера, имеем инфоблок с товарами и инфоблок с брендами. Нужно на странице бренда вывести все связанные элементы с ссылкой на детальный просмотр и картинку товара.

    <?if(count($arResult["LINKED_ELEMENTS"])>0):?>
      <b>Товары этого бренда в нашем каталоге:</b>
      <?foreach($arResult["LINKED_ELEMENTS"] as $arElement):?>
      //это ссылка на детальный просмотр
      <a href="<?=$arElement["DETAIL_PAGE_URL"]?>">
      <?=$arElement["NAME"]?>
      </a>
      //это картинка превью товара
      <?
      $res = CIBlockElement::GetByID($arElement["ID"]);
      if($ar_res = $res->GetNext())
      echo CFile::ShowImage($ar_res['PREVIEW_PICTURE'], 200, 200, "border=0", "", true);
      ?>
      <?endforeach;?>
      <?endif?>

    Начать сотрудничество
    Связаться со мной
  • 30 Сентября 2016

    Как организовать скачивание файлов из инфоблока (Битрикс)

    У меня ушло очень много времени на поиск удобного решения, в большей степени PDF файлы, которые всё больше наровят именно отрыться, а не скачаться.

    1. Заходим в Администрирование (www.ваш-сайт.ru/bitrix/admin/).
    2. Переходим на вкладку "Контент → Типы инфоблоков → Нужный тип инфоблока (например создать тип инфоблока "Файлы") → Создаем сам инфоблок, например тоже Файлы"
    3. Далее переходим на вкладку "Свойства" и создаем новое свойство, примерно как на картинке: 

      Сохраняем.

    4. Далее переходим в публичную часть, на страницу, на которой планируем разместить инфоблок со спискам файлов для скачивания.
    5. Добавляем компонент news.list, открываем параметры компонента и настраиваем его:
      • Указываем созданый тип информационного блока и код информационного блока
      • Находим "Источник данных" и в свойствах прописываем название нашего свойства "FILES_DOC", отключаем все лишнее, сохраняем.
    6. Открываем шаблон компонента, предварительно скопировав его в свой шаблон и кастомизируем его. Выделяем всё и заменяем следующим кодом:
      <?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
      <table>
        <tbody>
        <?foreach($arResult["ITEMS"] as $arItem):?>
        <tr>
        <td><a href="<?echo $arItem["DISPLAY_PROPERTIES"]["FILES_DOC"]["FILE_VALUE"]["SRC"]?>" download="<?echo $arItem["DISPLAY_PROPERTIES"]["FILES_DOC"]["FILE_VALUE"]["SRC"]?>" ><?echo $arItem["NAME"]?></a> 
      <i> (размер: <strong><?echo round($arItem["DISPLAY_PROPERTIES"]["FILES_DOC"]["FILE_VALUE"]["FILE_SIZE"]/1024, 2); ?> кБ</strong>, формат: <strong><?echo pathinfo($arItem["DISPLAY_PROPERTIES"]["FILES_DOC"]["FILE_VALUE"]["SRC"], PATHINFO_EXTENSION);?></strong>)</i></td>
        </tr>
        <?endforeach;?>
        </tbody>
        </table>
      
    7. Стили делаем на свой вкус.

    Разберем по пунктам:

    • Значение href в ссылке
      <?echo $arItem["DISPLAY_PROPERTIES"]["FILES_DOC"]["FILE_VALUE"]["SRC"]?>
      - ссылка непосредственно на файл;
    • download="<?echo $arItem["DISPLAY_PROPERTIES"]["FILES_DOC"]["FILE_VALUE"]["SRC"]?>"> 
      - самый простой способ заставить браузер скачивать, а не открывать файл (Точно работает в браузерах Google Chrome, Opera, Firefox...в Safari пока что не хочет).
    • <?echo $arItem["NAME"]?>
      - название элемента
    • <?echo round($arItem["DISPLAY_PROPERTIES"]["FILES_DOC"]["FILE_VALUE"]["FILE_SIZE"]/1024, 2); ?>
      - Вес файла в килобайтах
    • <?echo pathinfo($arItem["DISPLAY_PROPERTIES"]["FILES_DOC"]["FILE_VALUE"]["SRC"], PATHINFO_EXTENSION);?>
      - формат файла.

    Надеюсь моя статья Вам поможет.

    Начать сотрудничество
    Связаться со мной
  • 30 Сентября 2016

    Автоматическая генерация символьного кода (Битрикс)

    Выход следующий:

    Добавим свой обработчик для событий OnBeforeIBlockElementAdd (вызывается до вставки информационного блока) и OnBeforeIBlockElementUpdate (вызывается до изменения элемента информационного блока) в файл /bitrix/php_interface/init.php вашего сайта:

    <?php
    /**
    * Транслит имени в символьный код (для ЧПУ)*/
    function slugTranslit(&$arFields) {
    // Если заполнено имя и не заполнен символьный код
    if (strlen($arFields["NAME"]) > 0 && strlen($arFields["CODE"]) <= 0) {
    $arParams = array(
    "max_len" => "100", // обрезаем символьный код до 100 символов
    "change_case" => "L", // приводим к нижнему регистру
    "replace_space" => "-", // меняем пробелы на тире
    "replace_other" => "-", // меняем плохие символы на тире
    "delete_repeat_replace" => "true", // удаляем повторяющиеся тире
    "use_google" => "false", // отключаем использование google
    );
    $arFields["CODE"] = Cutil::translit($arFields["NAME"], "ru", $arParams);
    }
    }
    AddEventHandler("iblock", "OnBeforeIBlockElementAdd", 'slugTranslit');
    AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", 'slugTranslit');
    ?>

    Если файл init.php отсутствует, то создайте его и скопируйте выше написанный код. Будьте внимательны, заметил, что битрикс не особо любит лишние пробелы в этом файле)

    Вот и всё. Спасибо за внимание ..

    Спасибо порталу kobzarev.com за статью.

    Начать сотрудничество
    Связаться со мной
  • 30 Сентября 2016

    Подсказки в компоненте "bitrix:iblock.element.add" (Битрикс)

    СВЕРШИЛОСЬ!

    Очень долго искал решение для того, что бы вывести подсказки в компоненте bitrix:iblock.element.add

    Объясняю:
    На одном из проектов, была поставлена задача сделать раздел для добавления элементов пользователями через компонент iblock.element.add. Суть заключалась в следующем:

    На странице с компонентом, при заполнении полей, требовалось вывести около каждого поля подсказку (инструкцию) по заполнению

    Управлять подсказками, хотелось бы из админской части, через настройки свойств элемента:

    По-скольку компонент сам по себе динамический и информации по кастомизации в Интернете довольно мало, пришлось делать "разнообразные костыли", которые себя особо не оправдали. Так же был приобретен компонент в маркетплейсе, который по сути должен был решить задачу, но...нужного функционала он не добавил.

    Наконец то, после долгих поисков решение было найдено - просто разместите компонент на странице, скопируйте шаблон компонента в свою область, откройте шаблон в редакторе и для нужных типов полей добавьте код ниже и сохраните:

    <span class="help-block">
    <?=$arResult["PROPERTY_LIST_FULL"][$propertyID]["HINT"]?>
    </span>

    После у полей компонента появяться подсказка, которая выводиться из настройки свойств элемента.

    Большое спасибо за подсказку Антону Ковалеву с форума 1с-Битрикс.

    Начать сотрудничество
    Связаться со мной
  • 30 Сентября 2016

    Кастомизация компонента bitrix:news.list

    С помощью кастомизации этого компонента можно максимально разнообразить его полезность. Для начала я создам тестовый инфоблок с несколькимит типами, создам элемент и несколько полей, размещу компонент на страницу и настрою его на вывод всех параметров...я постараюсь продемонстрировать как можно кастомизировать шаблон компонента "с нуля" и отобразить всё, что в основном мы видим в компоненте. Итак, начнем:

    Для начала разместим компонент news.list на тестовую страницу, настроим его параметры и скопируем шаблон в свою область. Описывать процесс не буду - в Интернете и на сайте 1с-Битрикс полным полно описаний как это делается!

    Открываем шаблон и первое, что нужно вписать - условие проверки на наличие элементов в инфоблоке, либо вывода сообщения о том, что данные отсутствуют: 

      ?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
      <?if(!$arResult["ITEMS"]):?>
      <p align="center"><span class="error">...........сообщение, выводимое если в инфоблоке отсутствуют элементы...........</span></p>
      <?else:?>
      ...............элементы инфоблока.............
      <?endif;?>
    

    Теперь добавим вывод верхней и нижней постраничной навигации

       ?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
      <?if(!$arResult["ITEMS"]):?>
      <p align="center"><span class="error">...........сообщение, выводимое если в инфоблоке отсутствуют элементы...........</span></p>
      <?else:?>
    <?if($arParams["DISPLAY_TOP_PAGER"]):?> <?=$arResult["NAV_STRING"]?><br /> <?endif;?>
    ...............элементы инфоблока.............
    <?if($arParams["DISPLAY_BOTTOM_PAGER"] && $arResult["NAV_STRING"]):?> <?=$arResult["NAV_STRING"]?> <?endif;?>
    <?endif;?>

    допишу статью в ближайшее время

    Начать сотрудничество
    Связаться со мной
  • 30 Сентября 2016

    Вывод списка файлов из каталога (php,Битрикс)

    Иногда на странице нужно в срочном порядке выложить файл или файлы, да при этом еще и ссылки на каждый из них и это может занимать много времени. Недавно наткнулся на неплохой скрипт, выложенный Dimexio на своем сайте. Скрипт, который из текущего каталога выводит список файлов. Дополнительно обрезает типы файлов и отфильтровывает ненужные файлы.

    <?php
    // ver. 0.1
    print "<ul>";
    $dir = getcwd();
    $files = scandir($dir);
    foreach ($files as $file) {
    $filename = iconv ("UTF-8", "windows-1251", $file );
    $filename_r = preg_replace('/\..*/','',$filename);
    if ($filename == "." || $filename == ".." || $filename == ".section.php" || $filename == "index.php"){echo "";}else
    echo '<li><a id="bxid_388839" href="'.$filename.'" target="_blank" >'.$filename_r.'</a></li>';
    }
    print "</ul>";
    ?>

    Начать сотрудничество
    Связаться со мной
  • 30 Сентября 2016

    Товары из того же раздела (Битрикс)

    Вывезти товары из того же раздела в компоненте catalog.element довольно просто. Всё, что нужно сделать это вставить в нужное место шаблона компонента код:

    <? $GLOBALS['arrrFilter'] = array('!ID' => $arResult["ID"]); //это наш фильтр, который исключает товар, на странице которого мы находимся
    $APPLICATION->IncludeComponent(
    "bitrix:catalog.section", 
    "", 
    array(
    "IBLOCK_TYPE" => "Catalog",
    "IBLOCK_ID" => "2",
    "SECTION_ID" => $arResult["IBLOCK_SECTION_ID"],
    "SECTION_CODE" => "",
    "SECTION_USER_FIELDS" => array(
    0 => "",
    1 => "",
    ),
    "ELEMENT_SORT_FIELD" => "RAND",
    "ELEMENT_SORT_ORDER" => "RAND",
    "ELEMENT_SORT_FIELD2" => "RAND",
    "ELEMENT_SORT_ORDER2" => "RAND",
    "FILTER_NAME" => "arrrFilter",
    "INCLUDE_SUBSECTIONS" => "Y",
    "SHOW_ALL_WO_SECTION" => "Y",
    "HIDE_NOT_AVAILABLE" => "N",
    "PAGE_ELEMENT_COUNT" => "3",
    "LINE_ELEMENT_COUNT" => "3",
    "PROPERTY_CODE" => array(
    0 => "",
    1 => "",
    ),
    "OFFERS_LIMIT" => "5",
    "ADD_PICT_PROP" => "-",
    "LABEL_PROP" => "-",
    "PRODUCT_SUBSCRIPTION" => "N",
    "SHOW_DISCOUNT_PERCENT" => "N",
    "SHOW_OLD_PRICE" => "N",
    "MESS_BTN_BUY" => "Купить",
    "MESS_BTN_ADD_TO_BASKET" => "В корзину",
    "MESS_BTN_SUBSCRIBE" => "Подписаться",
    "MESS_BTN_DETAIL" => "Подробнее",
    "MESS_NOT_AVAILABLE" => "Нет в наличии",
    "SECTION_URL" => "/catalog/#SECTION_CODE#/",
    "DETAIL_URL" => "/catalog/#SECTION_CODE#/#ELEMENT_CODE#/",
    "BASKET_URL" => "/personal/cart/",
    "ACTION_VARIABLE" => "action",
    "PRODUCT_ID_VARIABLE" => "id",
    "PRODUCT_QUANTITY_VARIABLE" => "quantity",
    "PRODUCT_PROPS_VARIABLE" => "prop",
    "SECTION_ID_VARIABLE" => "SECTION_ID",
    "AJAX_MODE" => "N",
    "AJAX_OPTION_JUMP" => "N",
    "AJAX_OPTION_STYLE" => "Y",
    "AJAX_OPTION_HISTORY" => "N",
    "CACHE_TYPE" => "A",
    "CACHE_TIME" => "36000000",
    "CACHE_GROUPS" => "N",
    "META_KEYWORDS" => "-",
    "META_DESCRIPTION" => "-",
    "BROWSER_TITLE" => "-",
    "ADD_SECTIONS_CHAIN" => "N",
    "DISPLAY_COMPARE" => "N",
    "SET_TITLE" => "N",
    "SET_STATUS_404" => "N",
    "CACHE_FILTER" => "N",
    "PRICE_CODE" => array(
    0 => "PRICE_BASE",
    ),
    "USE_PRICE_COUNT" => "N",
    "SHOW_PRICE_COUNT" => "1",
    "PRICE_VAT_INCLUDE" => "Y",
    "PRODUCT_PROPERTIES" => array(
    ),
    "USE_PRODUCT_QUANTITY" => "N",
    "CONVERT_CURRENCY" => "N",
    "PAGER_TEMPLATE" => "modern2",
    "DISPLAY_TOP_PAGER" => "N",
    "DISPLAY_BOTTOM_PAGER" => "N",
    "PAGER_TITLE" => "Товары",
    "PAGER_SHOW_ALWAYS" => "Y",
    "PAGER_DESC_NUMBERING" => "N",
    "PAGER_DESC_NUMBERING_CACHE_TIME" => "36000",
    "PAGER_SHOW_ALL" => "N",
    "AJAX_OPTION_ADDITIONAL" => "",
    "TEMPLATE_THEME" => "blue",
    "SET_META_KEYWORDS" => "N",
    "SET_META_DESCRIPTION" => "N",
    "ADD_PROPERTIES_TO_BASKET" => "Y",
    "PARTIAL_PRODUCT_PROPERTIES" => "N"
    ),
    false
    );?>
    

    Начать сотрудничество
    Связаться со мной
  • 30 Сентября 2016

    Фильтр по дате (Битрикс)

    Часто при выводе в Битриксе списка новостей или товаров каталога, нужноотфильтровать элементы по дате. И при этом в сети много вопросов, как организовать этот список, какой формат даты применять и т.д.

    Рассмотрим создание фильтра в Битрикс на примере компонента Список новостей. Чтобы применить к нему фильтр, необходимо создать перед вызовом компонента переменную типа массив. В этом массиве мы задаем все поля и свойства элементов с условиями фильтрации.

    Покажу пример фильтрации элементов по дате. Например, необходимо вывестисписок новостей за выбранный год. Выбор года можно организовать в виде списка select и последующего GET запроса. Фильтр в таком случае будет выглядеть так:

    <?
    global $arrFilter; //переменная фильтра
    if($_GET['season'] && is_numeric($_GET['season']) ) { // если выбран год $dateStart = '01.01.'.$_GET['season']; // дата начала года $dateEnd = '31.12.'.$_GET['season']; // дата конца года }
    // задаем условия фильтрации, используя сложный фильтр
    $arrFilter = array (
    array( "LOGIC" => "AND", array(">=DATE_ACTIVE_FROM" => ConvertTimeStamp(strtotime($dataStart),"FULL")), array("<=DATE_ACTIVE_FROM" => ConvertTimeStamp(strtotime($dataEnd),"FULL")), ), );
    //подключение компонента $APPLICATION->IncludeComponent("bitrix:news.list", "news_list", array( и т.д. ?>

    Обратите внимание на функцию ConvertTimeStamp. Она конвертирует время из Unix-формата в строку в формате сайта. Имеет следующие параметры:

    ConvertTimeStamp(
    int timestamp = false,
    string type = "SHORT",
    mixed site = false,
    bool SearchInSitesOnly = false
    );

    Где

    • timestamp – Время в Unix-формате. Необязательный параметр, по умолчанию – текущее время.
    • type – Тип формата. Допустимы следующие значения: FULL – полный (дата и время), SHORT – короткий (дата). Необязательный параметр, по умолчанию равен “SHORT”.
    • site – Идентификатор сайта, в формате которого необходимо вернуть дату. Необязательный параметр. По умолчанию – текущий сайт.
    • SearchInSitesOnly – Искать только на сайте. Необязательный параметр. По умолчанию – “false” текущий сайт.

    Надеюсь, данная статья оказалась полезной для вас.

    Начать сотрудничество
    Связаться со мной
  • 30 Сентября 2016

    Вывод элементов из конкретного раздела в bitrix.news

    Для того чтобы выводить в комплексном компоненте "Новости" нужный раздел по символьному коду надо:

    Открыть файл \bitrix\templates\нужный шаблон сайта\components\bitrix\news\шаблон компонента\.parameters.php 
    

    Вствить туда:
    "SECTION_CODE" => array( 
    "NAME" => GetMessage("IBLOCK_SECTION_CODE"), 
    "TYPE" => "STRING", 
    "DEFAULT" => '', 
    ), 

    Дальше в этом же шаблоне открыть файл \lang\ru\.parameters.php и встаить туда
    $MESS ['IBLOCK_SECTION_CODE'] = "Код раздела"; 
    

    Дальше открыть файл в корне папки - news.php и добавить в том месте, где подключается bitrix:news.list строчку:
    "PARENT_SECTION_CODE" => $arParams["SECTION_CODE"], 
    

    После этого в настройках компонента добавляется нужная строка!

    Начать сотрудничество
    Связаться со мной
  • 30 Сентября 2016

    Количество элементов в инфоблоке (Битрикс)

    Просто вставьте в интересующее Вас место код:

    <?CModule::IncludeModule('iblock'); 
    $arFilter = array(
    'IBLOCK_ID' => 21, // ID инфоблока
    // любые другие параметры, например 'ACTIVE' => 'Y'
    );
    $res = CIBlockElement::GetList(false, $arFilter, array('IBLOCK_ID'));
    if ($el = $res->Fetch())
    echo ''.$el['CNT'];?> изображений

    Начать сотрудничество
    Связаться со мной
  • 30 Сентября 2016

    Поиск по алфавиту

     Поиск по алфавиту можно организовать с помощью условия для фильтрации элементов ИБ, который в свою очередь подать в компонент catalog.section. Как это делается:

    1. Создать включаемую область или страницу на которой размещаем компонент catalog.section
    2. В настройках компонента указать в "Имя массива со значениями фильтра для фильтрации элементов" - arrFilter и обязательно поставить галочку в пункте "Показывать все элементы, если не указан раздел"
    3. Далее настроить компонент под свои задачи
    • Перед вызовом компонента вставляем следующий код:
    <?$cur_letter = $_REQUEST['letter']."%"; 
    $GLOBALS['arrFilter'] = array('NAME'=>$cur_letter);?>

    // Для пользовательского свойства LAST_NAME
    <?$cur_letter = $_REQUEST['letter']."%";
    $GLOBALS['arrFilter'] = array('PROPERTY_LAST_NAME'=>$cur_letter);?>

    Далее разместим во включаемой области или перед вызовом компонента catalog.section до вставки $GLOBALS['arrFilter'] следующую структуру:

    <?
    //Русский
    $abc = array('А','Б','В','Г','Д','Е','Ж','З','И','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Щ','Ш','Э','Ю','Я');
    //Немецкий
    $abc = array('A','Ä','B','C','D','E','F','G','H','I','J','K','L','M','N','O','Ö','P','Q','R','S','ß','T','U','Ü','V','W','X','Y','Z');
    //Английский для utf 8
    for($i=65;$i<90;$i++){$abc[] = chr($i);}
    ?>

    //Делаем поиск по алфавиту для Английского языка для utf 8
    <div>
    <ul>
    <?foreach($abc as $letter):?>
    <?if ($letter == $_REQUEST['letter'] && !ereg("arrFilter", $_SERVER["REQUEST_URI"])):?>
    <li>
    <a href="?letter=<?=$letter?>&sort=<?=$_REQUEST['sort']?>" class="active">
    <?=$letter;?>
    </a>
    </li>
    <?elseif (ereg("arrFilter", $_SERVER["REQUEST_URI"]) && $letter == $_REQUEST['letter']):?>
    <li>
    <a href="<?=$_SERVER["REQUEST_URI"]?>&letter=<?=$letter?>&sort=<?=$_REQUEST['sort']?>" class="active">
    <?=$letter;?>
    </a>
    </li>
    <?elseif (ereg("arrFilter", $_SERVER["REQUEST_URI"]) && $letter != $_REQUEST['letter']):?>
    <li>
    <a href="<?=$_SERVER["REQUEST_URI"]?>&letter=<?=$letter?>&sort=<?=$_REQUEST['sort']?>">
    <?=$letter;?>
    </a>
    </li>
    <?else:?>
    <li>
    <a href="?letter=<?=$letter?>&sort=<?=$_REQUEST['sort']?>">
    <?=$letter;?>
    </a>
    </li>
    <?endif;?>
    <?endforeach?>
    </ul>
    </div>

    Таким образом при нажатии на ссылку(букву) компонент catalog.section будет выводить все продукты начинающиеся с этой буквы. Можно организовать и другие фильтры, например: 

    • Фильтрацию по брендам 
    • Фильтрацию по датам
    • Фильтрацию по рейтингу

    Начать сотрудничество
    Связаться со мной
  • 30 Сентября 2016

    Случайная сортировка (Битрикс)

    Случайная сортировка (Битрикс)

    Для того, чтобы сделать случайную сортировку элементов в списке новостей или в каталоге, нужо в настройках компонента выствить параметр сортировки Другое: RAND и установить ее по возрастанию

    Начать сотрудничество
    Связаться со мной
  • 30 Сентября 2016

    1C-Битрикс — назначаем класс тегу body в зависимости от раздела сайта

    Вставляем вот такую функцию в шаблон сайта:

    <? 
    function bclass() {
    global $APPLICATION;
    $DirExp = explode('/', $APPLICATION->GetCurDir());
    if ($DirExp[1] !== ''): return ' class="'.$DirExp[1].'"'; endif;}
    ?>

    Я вставил в самый верх кода.

    Далее к любому тегу применяем эту функцию. Я применил к тегу body, чтоб можно было менять оформление любого элемента на сайте в зависимости от раздела. Это нужно не для всех сайтов, но иногда возникает необходимость. К примеру для подмены фона сайта или изменения цвета каких-нибудь элементов.

    <body<?echo bclass();?>>

    Эта функция будет добавлять класс к тегу body с названием равным имени папки раздела сайта.
    К примеру в разделе сайта http://site-name.ru/services/ тег body будет иметь класс services.

    Начать сотрудничество
    Связаться со мной
  • 30 Сентября 2016

    Простой ресайз изображений (Битрикс)

    <? 
    $renderImage = CFile::ResizeImageGet($arItem["PREVIEW_PICTURE"], Array("width" => НОВАЯ_ШИРИНА, "height" => НОВАЯ_ВЫСОТА), BX_RESIZE_IMAGE_EXACT, false);
    echo '<img alt="'.$arItem["NAME"].'" src="'.$renderImage["src"].'" />';
    ?>

    Начать сотрудничество
    Связаться со мной
  • 30 Сентября 2016

    Вывод элементов с привязанных к создателю

    Фильтр по создателю на основе ID текущего пользователя


    <?
       global $arrNewsListFilter;
       $arrNewsListFilter["CREATED_BY"] = $USER->GetID();
    ?>
    <?
       $APPLICATION->IncludeComponent(
          "bitrix:news.list",
          "",
          Array(
             ...
             "FILTER_NAME" => "arrNewsListFilter",
             ...
             "CACHE_FILTER" => "Y",
             ...
          ),
          false
       );
    ?>
     

    Начать сотрудничество
    Связаться со мной
  • 30 Сентября 2016

    Показывать только на главной (Битрикс)

    Вот пару фишек:

    1. Не выводить какой либо контент на главной странице, а на остальных показывать. Можно конечно воспользоваться компонентом "Включаемая область", но можно пойти и другим путем:
      <?if(!defined("MAIN_PAGE")):?>
      ...контент...
      <?endif?>
    2. Я уже много раз встречал разные варианты вывода информации на главной странице, вот ещё интересный способ, которым я пользовался не однократно:
      <?if ($APPLICATION->GetCurPage(true) == SITE_DIR."index.php"){?>
      Контент, для показа на главной странице
      <?}?>
      Либо такой вариант
      <?if ($APPLICATION->GetCurPage(true) == SITE_DIR."index.php"){?>
      Контент, для показа на главной странице
      <?} else {?>
      Если не главная, то выводим другой контент
      <?}?>
      

    А вот и еще вариантики:

    1. Выводим информацию только на главной:
    <?if ($APPLICATION->GetCurPage(true) == SITE_DIR."index.php"){?>  тут информация <?}?>
    2. Выводим на главной один текст а на других страницах другой:
    <?if ($APPLICATION->GetCurPage(true) == SITE_DIR."index.php"){?>  тут информация <?} else {?> тут другой текст <?}?>
    3. Выводит информацию на другой странице сайта:
    <?if ($APPLICATION->GetCurPage(false) == SITE_DIR."about/"){?>  тут информация <?}?>
    2. Вариант
    1. В шаблоне до </head> вставить кусок кода
    if( CSite::InDir('/catalog/') ){ $isCatalog = true; }
    и вставить вывод
    if ($isCatalog){ информация }

    Означает что будет показываться только в каталоге и все.

    Если не показывать то сделать так:
    if( CSite::InDir('/catalog/') ){ $isCatalog = false; }
    и вставить вывод
    if ($isCatalog){ информация }

    Начать сотрудничество
    Связаться со мной
Хотите посотрудничать? Contact Us

Подписаться на обновления

Согласен