Михаил Базаров -> Всем
сегодня, 03:57
Вывести разделы инфоблока по первым буквам (алфавитный указатель типа) не меняя структуру каталога.

Например: у нас есть инфоблок с большим количеством разделов (картинка 1).
И мы хотим, на выводе на сайте разбить разделы по буквам (картинка 2).

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

Можно поступить следующим образом:
В шаблоне компонента catalog.section.list (Разделы инфоблока) удаляем все и меняем на такой код:
<?
foreach ($arResult["SECTIONS"] as $arSectionArray) {
      $sectFName = $arSectionArray['NAME'];
      $sectFLetter = mb_substr($sectFName, 0, 1, 'UTF-8');
      $arrayFirsletter .= '\'' . $sectFLetter . '\',';
}

eval('$FirstLetter=array(' . $arrayFirsletter . ');');
extract($FirstLetter);
$uniuLetter = array_unique($FirstLetter);

foreach ($uniuLetter as $onlyOnceLetter) {
       echo '<h3>' . $onlyOnceLetter . '</h3>';
      foreach ($arResult["SECTIONS"] as $arSection) {
         if (mb_substr($arSection['NAME'], 0, 1) == $onlyOnceLetter) { ?>
             <a href="<?= $arSection["SECTION_PAGE_URL"] ?>">
                 <?echo $arSection['NAME']; ?>
            </a>
          <?
          }
     }
}
?>

Пояснения:

Сначала собираем первые буквы всех разделов в одну переменную $arrayFirsletter , так как названия разделов
могут быть как на латинице, так и на кириллице используем mb_substr- с помощью которого и "отрубили" первые буквы названий разделов
foreach ($arResult["SECTIONS"] as $arSectionArray) {
      $sectFName = $arSectionArray['NAME'];
      $sectFLetter = mb_substr($sectFName, 0, 1, 'UTF-8');
      $arrayFirsletter .= '\'' . $sectFLetter . '\',';
}

Далее, с помощью eval, загоняем все буквы в массив array. Так как первые буквы разделов могут повторяться. Переводим array в array_unique - он отберет только уникальные буквы (то бишь без повторов)
eval('$FirstLetter=array(' . $arrayFirsletter . ');');
extract($FirstLetter);
$uniuLetter = array_unique($FirstLetter);

Собственно выводим эти буквы с помощью foreach
foreach ($uniuLetter as $onlyOnceLetter) {
       echo '<h3>' . $onlyOnceLetter . '</h3>';

Внутри которого еще один foreach - который отберет все разделы, начинающиеся на конкретную букву, ну и ссылка на раздел в каталоге.
Если первая буква названия раздела, совпадает с переменной $onlyOnceLetter (в которой, собственно первая буква)
foreach ($arResult["SECTIONS"] as $arSection) {
         if (mb_substr($arSection['NAME'], 0, 1) == $onlyOnceLetter) { ?>
             <a href="<?= $arSection["SECTION_PAGE_URL"] ?>">
                 <?echo $arSection['NAME']; ?>
            </a>
         



Фото:
Михаил Базаров
Кого коробит использование eval. В принципе не рекомендую им злоупотреблять.
Можно сразу загнать результат работы foreach в массив

$FirstLetter   = array();
foreach ($arResult["SECTIONS"] as $arSectionArray) {
     $sectFName = $arSectionArray['NAME'];
     $sectFLetter = mb_substr($sectFName, 0, 1, 'UTF-8');
     $FirstLetter[]   = $sectFLetter;
}
Сергей Стефанович -> Всем
13.06 13:40
Всем привет. Кто-нибудь знает способ переноса всех товаров с их торговыми предложениями с одного магазина в другой. Чтобы при этом оставалась связь между ними
Сергей Стефанович
так и делал, но пропадают связи между товаром и его торговыми предложениями  
Михаил Базаров
По идее не должны бы. Вчера подобное делал, нужно сначала загрузить каталог а потом уже предложения.  
Сергей Стефанович
пробовал, не вышло.
проблема уже не актуальна, спасибо за помощь  
Сергей Стефанович -> Всем
вчера, 14:50
как сделать так, чтобы после фильтрации умным фильтром, показывался не весь товар со всеми его торговыми предложениями, а показывались только торговые предложения которые попадают под критерии фильтрации  
Михаил Базаров
Поотключать вывод в умный фильтр в настрроках свойств инфоблока. Можно в разделе "Магазин" - там быстрее чекбоксы поснимать можно
Сергей Стефанович
не сработало, выводится товар и все предложения его, в числе которых есть предложения удовлетворяющие критериям фильтрации.

у меня торговые предложения выводятся в catalog.section списком, у каждого торгового предложения выводятся свойства и кнопка купить.

Еще вопрос. как сделать так, чтобы у каждого торгового предложения была отдельная страница, которая формировалась из символьного кода предлложения.
Анатолий Теорский -> Всем
15.06 06:50
Добра всем, подскажите способ как можно ограничить пользователя ( зареганого ) сделать то или иное действие?
Например нужно чтоб пользователь мог только один раз нажать на кнопку чтоб сгенерировать купон, чтоб при сбросе кеша и обновлении страници не мог снова проделать это же действие.. Можно ли как то помечать пользователей что они уже проделывали подобное действие?? Спасибо заранее.
Михаил Базаров
Как вариант, перемещать его в группу которая не может генерировать купоны. Вызывать событие по клику
https://dev.1c-bitrix.ru/api_help/main...ents#group
Так, первая пришедшая мысль.
Антон Сурнин Всем
13.06 15:29
Добавил 1 фото в альбом: Новый альбом
Артур -> Всем
30.05 21:38
Всем привет.
подскажите пожалуйста решение задачи - чпу для умного фильтра. куда копать, что делать?)

Михаил Базаров -> Всем
27.05 17:48
Получить данные о текущем разделе каталога и вывести прямо в section.php

Если нужно вывести данные о разделе: Картинку, описание, любое пользовательское поле
прямо в section.php

Можно использовать вот такую наработку:

В section.php , в самый верх добавляем
$arResult['SECTION_ID'] = CIBlockFindTools::GetSectionID(
                   $arResult['VARIABLES']['SECTION_ID'],
                   $arResult['VARIABLES']['SECTION_CODE'],
                   array('IBLOCK_ID' => $arParams['IBLOCK_ID'])
);
- Здесь мы занесли в переменную $arResult['SECTION_ID'] индитификатор текущего раздела каталога (в котором находится пользователь)


Далее, зная это ID получаем все данные о текущем разделе, методом CIBlockSection::GetList
$sectionResult = CIBlockSection::GetList(array("SORT" => "ASC"),
     array("IBLOCK_ID" => $arParams["IBLOCK_ID"], "ID" => $arResult["SECTION_ID"]), false,
          $arSelect = Array(UF_*)
);
- В UF_* храняться все пользовательские\дополнительные поля


Далее, зогоняем все нужные данные в переменные
while ($sectionProp = $sectionResult->GetNext()) {
   $sectDescript = $sectionProp['DESCRIPTION'];  // Описание раздела
   $sectPict = $sectionProp['PICTURE'];  // Картинка раздела
   $ufLink = $sectionProp['~UF_LINK']; // Пользователькое поле с кодом UF_LINK- в html формате
   $ufText = $sectionProp['UF_TEXT']; // Пользователькое поле с кодом UF_TEXT
}

А далее используем эти переменные в любом месте section.php
<?
//Картинка (с уменьшением)
if (!empty($sectPict)) {
   $renderImageSect = CFile::ResizeImageGet($sectPict, Array("width" => '1200', "height" => '400'), BX_RESIZE_IMAGE_EXACT); ?>
        <img src="<?= $renderImageSect["src"] ?>">
<?}?>


<?
//Описание
if (!empty($sectDescript)) {
   echo $sectDescript;
}
?>

PS Чуть позже, будет заметка в блоге- более развернутая


Александр Силуянов -> Всем
21.05 16:50
Всем привет!
На основании этой заметки https://camouf.ru/blog-note/6076/?sphr...e_id=28572 сделал добавление в избранное с помощью ajax.
Появилась небольшая проблема в catalog.section - сбрасывается стиль кнопки, которая добавляет в избранное((
Конструкция приведенная в заметке работает для карточки товара, а как сделать это в списке товаров?
Пробовал так:
<?
//Проверяем, есть ли данный товар в отложенных
$curProductId = $arElement['ID'];
$dbBasketItems = CSaleBasket::GetList(
    array(
        "NAME" => "ASC",
        "ID" => "ASC"
    ),
    array(
        "FUSER_ID" => CSaleBasket::GetBasketUserID(),
        "LID" => SITE_ID,
        "PRODUCT_ID" => $curProductId,
        "ORDER_ID" => "NULL",
        "DELAY" => "Y"
    ),
    false,
    false,
    array("PRODUCT_ID")
);
while ($arItems = $dbBasketItems->Fetch())
{
    $itInDelay = $arItems['PRODUCT_ID'];
}
?>
но тогда переменная $itInDelay у всех товаров почему-то одинаковая. Ну в моем случае 64. Что я делаю не так?
Заранее благодарен!

Михаил Базаров
Сбрасывайте ее для каждого товара
В самом конце цикла
<?
unset($itInDelay);
?>
Александр Силуянов
Михаил Базаров, благодарю! Работает!
Михаил Базаров -> Всем
16.05 13:31
Если не проходит чек в ОФД. Можно включить запись лога, для дальнейшего анализа.

В файле
/bitrix/modules/sale/lib/cashbox/manager.php

Нужно переключить
const DEBUG_MODE = false;
в
const DEBUG_MODE = true;

Лог будет писаться в базу данных, в таблицу
b_sale_cashbox_err_log

Что бы не устанавливать phpmyadmin, можно воспользоваться его аналогом в админке битрикс
Настройки - Производительность - Таблицы
Михаил Базаров -> Всем
14.05 09:03
Установить вебсервер на Ubuntu 18 LTS, оптимизированный под битрикс.


Данный вебсервер использую только для локальной разработки. Собственно, запущен на моем рабочем ноутбуке
под Кubuntu 18LTS. Что бы работать с разрабатываемыми сайтами быстро и в отсутствии интернета.
Для продакшена, нужно настраивать более тонко, хотя и так заработает.

Ставим апач:
sudo apt-get install apache2

Добавляем апач в автозагрузку:
sudo systemctl enable apache2

Ставим PHP 7.2.5:
sudo apt-get install php7.2-cli

Проверяем что он встал:
php -v (покажет версию php)

Перезапускаем апач:
sudo systemctl restart apache2

Ставим базу данных (МарияДБ):
sudo apt-get install mariadb-server mariadb-client
В процессе попросит выбрать сервер (apache2) и придумать пароль для root базы данных

В конце сконфигурировать
sudo mysql_secure_installation
удалить тестовую базу и запрет/разрешение пользоваться root
пароль root на первый вход- пустой

Сменить версию php (по идее можно не делать, он итак один, но навсякий)
sudo a2enmod php7

Установка phpmyadmin
sudo apt-get install phpmyadmin php-mbstring php-gettext
В процессе попросит пароль root базы данных

Выполняем обновление:
apt-get update
apt-get upgrade
Перезагружаем сервак: reboot

Все, базовый сервер готов. Можете поднастроить конфигурацию php
в файле /etc/php/7.2/cli/php.ini
Но я передпочитаю доводить под конкретный сайт, в файле виртуального хоста.


И конфигурацию базы данных
в файле /etc/mysql/mariadb.conf.d/50-server.cnf
Свой, заточенный под битрикс, приложу в архиве. Но очень внимательно, зависит от объема
оперативной памяти на сервере. Должен нормально запуститься если больше 4-х.
Если меньше, подкрутите этот конфиг (параметры выедающие память) под себя.


СОЗДАНИЕ ВИРТУАЛЬНОГО ХОСТА

Создать папку для сайта
mkdir /var/www/site.ru/public_html

Создать запись виртуального хоста
nano /etc/apache2/sites-available/site.ru.conf
с содержимым (повторюсь, конфиг php подгоняю под конкретный сайт.
В php.ini у меня все по умолчанию). Данное содержимое под Битрикс Бизнес
<VirtualHost *:80>
ServerName site.ru
ServerAlias site.ru
ServerAdmin webmaster@localhost
DocumentRoot /var/www/site.ru/public_html/

<Directory /var/www/site.ru/public_html/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
DirectoryIndex index.php index.html index.htm

php_admin_value short_open_tag On
php_admin_value mbstring.func_overload 2
php_admin_value mbstring.internal_encoding UTF-8
php_admin_value date.timezone Europe/Moscow
php_admin_value opcache.revalidate_freq 0
php_admin_value opcache.max_accelerated_files 100000
php_admin_value display_errors On
php_admin_value max_input_vars 10000
php_admin_value upload_max_filesize 8M
Require all granted
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Добавить сайт (включить)
sudo a2ensite site.ru

Перезагрузить апач (любая из трех, рекомендуется последняя команда)
systemctl reload apache2
sudo systemctl restart apache2
apachectl -k restart

Все. Простой веб сервер готов. Использую на локальном компьютере для разработки.
Для продакшена нужно настраивать параметры более тонко, особенно в плане
безопасности (директории для хранения сессий итд запреты/разрешения).
Плюс есть резон установить nginx и memcache (если позволяет оперативка)

Но об этом позже.
Фото:
Файлы:
50-server.cnf (3.78 КБ)
Andrey Churashev
про аву здесь ... написал расстроившись ...
Михаил Базаров
Да, ответил
Михаил Базаров -> Всем
14.02 10:38
Для Прогрева кеша сайта на битрикс. Создать весь кеш в битриксе, в автоматическом режиме

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

А хотите сразу же ускорить сайт, просто обойдя все страницы. Можно воспользоваться таким способом:
Запускаем виртуальную машину, на любом unix дистрибутиве (как вариант, если сайт и так на сервере, можно прямо на этом же)

и в терминале выполняем команду:
wget -r --spider test.site http://адрес.ru

Таким образом, вы по сути, обойдете весь сайт и битрикс создаст кеши посещенных страниц.
Злоупотреблять конечно же не стоит, но иногда нужно и такое )

Вариация с использованием UserAgent

wget -r -k -l 7 -p -E -nc --user-agent="Mozilla/5.0 (Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/5З7.З6 (KHTML, like Gecko) Chrome/55.0.288З.75 Safari/5З7.З6" http://ВАШСАЙТ.ru

КЛЮЧИ

--spider - Не сохранять сайт в файлы

-r — указывает на то, что нужно рекурсивно переходить по ссылкам на сайте, чтобы скачивать страницы.

-k — используется для того, чтобы wget преобразовал все ссылки в скаченных файлах таким образом, чтобы по ним можно было переходить на локальном компьютере (в автономном режиме).

-p — указывает на то, что нужно загрузить все файлы, которые требуются для отображения страниц (изображения, css и т.д.).

-l — определяет максимальную глубину вложенности страниц, которые wget должен скачать (по умолчанию значение равно 5, в примере мы установили 7). В большинстве случаев сайты имеют страницы с большой степенью вложенности и wget может просто «закопаться», скачивая новые страницы. Чтобы этого не произошло можно использовать параметр -l.

-E — добавлять к загруженным файлам расширение .html.

-nc — при использовании данного параметра существующие файлы не будут перезаписаны. Это удобно, когда нужно продолжить загрузку сайта, прерванную в предыдущий раз.
Влад
Нового способа с тех пор не появилось? Если нужно например, "прогреть" только определенные разделы?
Артур -> Всем
18.04 19:41
Всем привет.
Делаю сайт на двух языках, Русская версия готово, сощдал английскую версию, скопировал инфоблоки и т.д. подскажите пожалуйста кто сталкивался:
1. Как перевести все элементы инфоблока на английский язык?
2. как контролировать остатки при выгрузки из 1с, - к примеру купили 1 товара на русском сайте - на английской версии у этого товара должна списаться с остатков 1-а позиция.
Михаил Базаров
Перевести на английский вручную, иначе не представляю как. Какой-нибудь автопереводчик, в любом случае криво переведет?

Удалять/менять элемент из инфоблока, если похожий (например по уникальному свойству) элемент изменился в другом. Можно с помощью обработчиков событий
Подробнее тут https://dev.1c-bitrix.ru/learning/cour...ON_ID=3395
Михаил Базаров Всем
20.04 00:14
Добавил 1 фото в альбом: Всякая фигня
Артур -> Всем
01.04 17:23
Всем привет.
пытаюсь реализовать поиск товара по символьному коду.
для этого создал в инфоблоке доп. свойство SIM_CODE и включил его в поиск., сделал переиндексацию каталога.
далее на просторах инета нашел пару заготовок и объединил в одну)
вообщем пустое свойство с помощью кода ниже заполняется IDшником, ПОДСКАЖИТЕ пожалуйста  как реализовать чтоб заполнение происходило не ID-шником а символьным кодом?!
Спасибо

<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");

set_time_limit(0);

CModule::IncludeModule("iblock");
CModule::IncludeModule("sale");
CModule::IncludeModule("catalog");

//введите сюда ID вашего инфоблока каталога
$IBLOCK_ID = 9;

//а сюда символьный код вашего поля для поиска по ID
$SEARCH_FIELD_NAME = 'SIM_CODE';
$els = CIBlockElement::GetList(
   array("SORT"=>"ASC"),
   array("IBLOCK_ID" => $IBLOCK_ID),
   false,
   false,
   array('ID','IBLOCK_ID')
);

$cnt=0;

while ($s = $els->Fetch()) {
$ib = new CIBlockElement();
// Установим новое значение для данного свойства данного элемента
$dbr = CIBlockElement::GetList(array(), array("ID"=>$s['ID']), false, false, array("ID", "IBLOCK_ID"));
if ($dbr_arr = $dbr->Fetch()) {
$IBLOCK_ID = $dbr_arr["IBLOCK_ID"];
CIBlockElement::SetPropertyValues($s['ID'], $IBLOCK_ID, $s['ID'], $SEARCH_FIELD_NAME);
$cnt++;
}
}
echo $cnt;

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");
?>

Михаил Базаров -> Всем
28.03 14:43
Отключить плагин скайпа
Если Вас раздражает, что в некоторых браузерах, телефоны подсвечиваются как ссылки. Например в Edge при установленном в системе Skype

Просто добавляем вот такие метатеги в head сайта

<meta name="SKYPE_TOOLBAR" content="SKYPE_TOOLBAR_PARSER_COMPATIBLE" />
<meta content="telephone=no" name="format-detection">
Oleg
15.03 14:49
Сообщение форума
Оформление шаблона, страницы "Оформление заказа".
Здравствуйте, подскажите пожалуйста  как в новой версии bitrix изменить внешний вид, количество полей и т.д. при оформлении заказа в интернет магазине на bitrix.
Oleg
Здравствуйте, Михаил.
Спасибо,что ответили)
И хочу отдельно сказать большое спасибо за ваши уроки, очень много полезной информации)
Это нравится:0Да/0Нет Ещё
Александр Силуянов -> Всем
06.03 11:56
Друзья, нужен ваш совет, ибо зело подустал с поиском решения. А оно наверняка на поверхности.
Установлен модуль Некешируемая область  для того, чтобы вывести комментарии к товарам. component_epilog не подходит, потому что после комментариев дальше еще верстка идет. Но комментарии ни как не хотят цеплять ID записи!
template:
<div class="col-md-12 p-b-3">
   <div class="row">
      <div class="tabs-style-bottomline">
            <ul class="nav nav-tabs" role="tablist">
               <li class="active"><a href="#u-1" data-toggle="tab"><i class="fa fa-align-justify main-color"></i>Подробное описание</a></li>
               <li><a href="#u-2" data-toggle="tab"><i class="fa fa-info-circle main-color"></i>Дополнительная информация</a></li>
               <li><a href="#u-3" data-toggle="tab"><i class="fa fa-star main-color"></i>Отзывы о товаре 
               <?if ($arResult["DISPLAY_PROPERTIES"]['FORUM_MESSAGE_CNT']>0):?> 
               (<?echo $arResult['DISPLAY_PROPERTIES']['FORUM_MESSAGE_CNT']['DISPLAY_VALUE'];?>)
               <?else:?> 
               (0)
               <?endif?>
               </a></li>
            </ul>
         <div class="tab-content">
            <div class="tab-pane fade in active" id="u-1">
            
               <p><?echo $arResult["DETAIL_TEXT"];?></p>
            
            </div>
            <div class="tab-pane fade" id="u-2">
               <h5><?echo $arResult["NAME"]?></h5>
               <table class="table table-hover table-striped">
                  
                  <tr>
                     <td class="width150">Производитель: </td>
                     <td><? echo $arResult['DISPLAY_PROPERTIES']['ATT_MANUFACTURER']['DISPLAY_VALUE'];?></td>
                  </tr>
                  <tr>
                     <td class="width150">Бренд:</td>
                     <td><? echo $arResult['DISPLAY_PROPERTIES']['ATT_BRAND']['DISPLAY_VALUE'];?></td>
                  </tr>
                  <tr>
                     <td class="width150">Страна:</td>
                     <td><a href="#"><? echo $arResult['DISPLAY_PROPERTIES']['ATT_COUNTRY']['DISPLAY_VALUE'];?></a></td>
                  </tr>
               </table>
            </div>
            <div class="tab-pane fade" id="u-3">
               <div class="reviews">
<!-- вот тут должны выводиться комменты -->
               <?
               if(CModule::IncludeModule('api.uncachedarea'))
               {
                  CAPIUncachedArea::includeFile(
                     "/reviews.php",
                     array(
                        'ID' => $arResult['ID'],
                        'NAME' => $arResult['NAME'],

                     )
                  );
               }
               ?>
               </div>
            </div>
         </div>
      </div>
   </div>
</div>
А вот страница reviews.php
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<?$APPLICATION->IncludeComponent(
        "bitrix:forum.topic.reviews", 
   ".default", 
   array(
      "AJAX_POST" => "N",
      "CACHE_TIME" => "0",
      "CACHE_TYPE" => "N",
      "DATE_TIME_FORMAT" => "d.m.Y H:i:s",
      "EDITOR_CODE_DEFAULT" => "N",
      "ELEMENT_ID" => $arResult["ID"],
      "FILES_COUNT" => "2",
      "FORUM_ID" => "2",
      "IBLOCK_ID" => "2",
      "IBLOCK_TYPE" => "dinamic",
      "MESSAGES_PER_PAGE" => "10",
      "NAME_TEMPLATE" => "",
      "PAGE_NAVIGATION_TEMPLATE" => "",
      "PREORDER" => "Y",
      "RATING_TYPE" => "standart",
      "SHOW_AVATAR" => "N",
      "SHOW_LINK_TO_FORUM" => "N",
      "SHOW_MINIMIZED" => "N",
      "SHOW_RATING" => "Y",
      "URL_TEMPLATES_DETAIL" => "",
      "URL_TEMPLATES_PROFILE_VIEW" => "",
      "URL_TEMPLATES_READ" => "",
      "USE_CAPTCHA" => "Y",
      "COMPONENT_TEMPLATE" => ".default",
      "COMPOSITE_FRAME_MODE" => "A",
      "COMPOSITE_FRAME_TYPE" => "AUTO"
   ),
   false
);
?>
Но пишет ошибку - не найден элемент инфоблока.

Может другой способ какой есть? В смысле вывести component_epilog в НУЖНОМ месте а не в конце шаблона.
Заранее благодарен!

UPD ссылка на проект http://ts-7dney.ru




1С-Битрикс - TS Некешируемая область
модули для битрикс
Михаил Базаров
Потому что в этот файл /reviews.php не передается параметр $arResult["ID"], он же в другом файле.
Вообще ни чего из массива $arResult["ID"] не передается туда

Просто отключите кеширование в этом компоненте (у вас вроде и выключено), да вставте прямо в шаблон карточки- это законно)
Александр Силуянов
Михаил Базаров, я пробовал так сделать, но при этом методе летят стили и скрипты. Форма выводится неправильно((  Попробую все в component_epilog воткнуть. Скажите, если div открывается в template а закроется в component_epilog это нормально?
Не поедет ли верстка? Просто на боевом сервере приходится все делать((
Михаил Базаров
Да, нормально. Тут как с header.php и footer.php - они "склеиваются"
Артур -> Всем
02.03 21:54
Всем привет! подскажите пожалуйста как реализовать:
есть форма обратной связи (веб форм) и по верстке напротив формы выводится специалист (из инфоблока).
будет несколько одинаковых форм на разных страницах у всех отличие только в специалисите.
как реализовать вывод определенного спеца напротив формы (желательно чтоб можно было как-то через настройки, чтоб в дальнейшем не требовался прогер).
скрин прилагаю.
Заранее спасибо)
https://yadi.sk/i/OuriHqD-3SxBPT
2018-03-03_01-49-56.png
View and download from Yandex.Disk
Михаил Базаров
Или отфильтровать от обратного, если их много - что бы все не перечислять.
!SECTION_CODE или !ID
Артур
Михаил Базаров, спасибо, решил вопрос фильтрацией
Михаил Базаров -> Всем
17.02 12:13
Разные свойства у разделов одного инфоблока  в Битрикс
Как создать разные свойства, в форме создания элемента, внутри одного инфоблока битрикс.

битрикс, свойства битрикс, элементы битрикс, разделы битрикс

https://www.youtube.com/watch?v=1KP1cWM26tU
Разные свойства у разделов одного инфоблока в Битрикс
Как создать разные свойства, в форме создания элемента, внутри одного инфоблока битрикс.
Hrach Hakobyan -> Всем
28.01 04:43
Помогите реализовать на сайте выбор вальюты. И как при регистрации по соц сетьям аватарка менялась на аватарку соц сетьи.
Михаил Базаров
По валютам вот так можно
https://dev.1c-bitrix.ru/community/web...blog/1695/

По аватарке затрудняюсь сказать. Ни разу не приходилось это проделывать
1С-Битрикс Разработчикам - Отображение цен в валюте, которую выбрал посетитель интернет-магазина
Лёнька Щелкунов -> Всем
08.10.2016 10:29
Всем привет! Делаю меню из catalog.section.list и мне необходимо выделить "Родительский раздел" > "Подраздел" > "Раздел" чтоб получилось вот так.

  • Родительский раздел
  • Родительский раздел (Активный)
  • Подраздел
  • Подраздел (Активный)
  • Раздел
  • Раздел
  • Раздел (Активный)
  • Раздел
  • Подраздел
  • Подраздел
  • Родительский раздел
  • Родительский раздел
При использовании обычного меню для этого есть $arItem["SELECTED"], а как в catalog.section.list такое сделать?
Лёнька Щелкунов
В данный момент у меня меню выполнено через  _ext меню. Все чудесно работает как раз благодаря вашим урокам и записям. Спасибо! Может тогда подскажите как в  _ext меню можно вывести пользовательские поля?
Александр
Михаил Базаров, тоже хочу использовать компонент "bitrix:catalog.section.list" шаблон "tree" и сделать его вывод каталога, когда при нажатии появляются вложенные пункты меню. как в данном примере , но не пойму как адаптировать.
Код шаблона ниже
<div class="catalog-section-list">
<?
$TOP_DEPTH = $arResult["SECTION"]["DEPTH_LEVEL"];
$CURRENT_DEPTH = $TOP_DEPTH;

foreach($arResult["SECTIONS"] as $arSection)
{
$this->AddEditAction($arSection['ID'], $arSection['EDIT_LINK'], CIBlock::GetArrayByID($arSection["IBLOCK_ID"], "SECTION_EDIT"));
$this->AddDeleteAction($arSection['ID'], $arSection['DELETE_LINK'], CIBlock::GetArrayByID($arSection["IBLOCK_ID"], "SECTION_DELETE"), array("CONFIRM" => GetMessage('CT_BCSL_ELEMENT_DELETE_CONFIRM')));
if($CURRENT_DEPTH < $arSection["DEPTH_LEVEL"])
{
echo "\n",str_repeat("\t", $arSection["DEPTH_LEVEL"]-$TOP_DEPTH),"<ul>";
}
elseif($CURRENT_DEPTH == $arSection["DEPTH_LEVEL"])
{
echo "</li>";
}
else
{
while($CURRENT_DEPTH > $arSection["DEPTH_LEVEL"])
{
echo "</li>";
echo "\n",str_repeat("\t", $CURRENT_DEPTH-$TOP_DEPTH),"</ul>","\n",str_repeat("\t", $CURRENT_DEPTH-$TOP_DEPTH-1);
$CURRENT_DEPTH--;
}
echo "\n",str_repeat("\t", $CURRENT_DEPTH-$TOP_DEPTH),"</li>";
}

$count = $arParams["COUNT_ELEMENTS"] && $arSection["ELEMENT_CNT"] ? "&nbsp;(".$arSection["ELEMENT_CNT"].")" : "";

if ($_REQUEST['SECTION_ID']==$arSection['ID'])
{
$link = '<b>'.$arSection["NAME"].$count.'</b>';
$strTitle = $arSection["NAME"];
}
else
{
$link = '<a href="'.$arSection["SECTION_PAGE_URL"].'">'.$arSection["NAME"].$count.'</a>';
}

echo "\n",str_repeat("\t", $arSection["DEPTH_LEVEL"]-$TOP_DEPTH);
?><li id="<?=$this->GetEditAreaId($arSection['ID']);?>"><?=$link?><?

$CURRENT_DEPTH = $arSection["DEPTH_LEVEL"];
}

while($CURRENT_DEPTH > $TOP_DEPTH)
{
echo "</li>";
echo "\n",str_repeat("\t", $CURRENT_DEPTH-$TOP_DEPTH),"</ul>","\n",str_repeat("\t", $CURRENT_DEPTH-$TOP_DEPTH-1);
$CURRENT_DEPTH--;
}
?>
</div>
Александр
У меня получается добавить выпадание для всех <li> в не зависимости есть у них вложенные конструкции или нет.
petr -> Всем
22.01 12:16
Здравствуйте. Помогите разобратся с организационным вопросом. Есть работающий сайт на ограниченой лицензии. Мне нужно добавить туда изменения. Но на работающей версии естественно не хочу экспериментировать, планировал развернуть у себя на локалхосте копию с резервной, но при попытке сделать система естественно запрашивает лицензионный ключ. Как мне поступить? Ввести ключ работающего сайта? Не заблокирует ли работу сайта мое повторное использование лицензии (там 2 сайта, потому на оба уже использована)? Или ввести демо ключ на месяц, пока буду игратся, но снова таки, не будет ли проблем с работающим сайтом. Документацию начитался по лицензировании, но так и не понял принцыпа. И еще? Если блокируют, то блокируют доступ к сайту или только обновления, то есть сайт все будут видеть и работать будет, но заблокирована будет возможность обновлятся. Помогите разобратся, пожалуйста. Спасибо
petr
Михаил Базаров, копию делал локально, облако не использовал, потому что лицензия там ограничена, уже запрещено использование облака. Для восстановления брал restore.php, но после расспаковки последним этапом вот такая штука "Trial period of the product has expired. You can purchase the full version of the product on the site www.bitrix24.com. Registration.", и в админку не пускает((
Михаил Базаров
Какая то странная у вас редакция) Я о существовании такой не знаю.
Резервные копии (локальные) можно создавать в любое время и соответсвенно их разворачивать.

Точно уверены, что это не ломанный Битрикс?
petr
Михаил Базаров, хмм... ну насколько мне известно не ломанный, при запуске сайта меня не было) ладно,  спасибо за совет, буду как-то выкручиватся))
petr -> Всем
20.09.2017 10:29
Здравствуйте. Хочу поблагодарить Вас, Михаил, за видеоуроки. Они оказались самым лучшим проводником в мир Битрикс. :)) В моей компании сделали меня отвественной по Битриксу. Сначала была не в восторге, но чем дальше тем ставало интереснее, во многом благодаря Вам, надеюсь это где-то на кармическом уровне зачтется Вам плюсом)) У меня вопрос. Вот и взяли первого клиента по Битриксу и он просит сформировать основные требования к верстке для Битрикса. Может, подскажите. Боюсь из-за неопытности что-нибудь забыть или пропустить.
Михаил Базаров
Ох ты ж! )
Алексей Колесник
petr написал:
В моей компании сделали меня отвественной по Битриксу.

Михаил Базаров написал:
Ох ты ж! )
Делайте рекламу  --

Сделаем ВАШ персонал вменяемым. )))
Михаил Базаров
)
Михаил Базаров -> Всем
23.01 00:28
Если нужно выгрузить дофигалион товаров в битрикс из XML. Но умирает MYSQL

Если вы хотите выгрузить в битрикс, товары из XML файла. Но файл огромный и соответственно, в нем много товаров и свойств (например 600 000 позиций).
А сервер не то что бы мощный, и в процессе импорта умирает / отваливается MYSQL - даже если выставляете короткий шаг импорта

Просто пройдите в инфоблок (в который грузите товары) и временно отключите индексирование товаров и разделов модулем поиска

Иначе, оно пытается на лету создавать поисковый индекс по этим товарам = сильно грузит базу




Фото:
Михаил Базаров -> Всем
25.12.2017 13:52
Вывести картинку и описание раздела инфоблока, зная его ID

Предположим, что знаем ID какого-то раздела или указываем его в ручную. Зная этот ID хотим вывести описание и картинку раздела инфоблока

В нужном месте просто вставляем

<?
$SectID = $arResult["SECTION_ID"];
$res = CIBlockSection::GetByID($SectID);
if($ar_res = $res->GetNext())
  echo CFile::ShowImage($ar_res['PICTURE'], 200, 200, "", "", true);
  echo $ar_res['DESCRIPTION'];
?>

Где в переменную $SectID - передали ID нужного раздела

Вячеслав -> Всем
15.12.2017 19:52
Всем привет, прошу помочь разобраться. То ли я туплю, то ли лыжи не едут. Кусок кода ниже:

<? foreach ($arElement["PRICES"] as $code => $arPrice): ?><? if (CModule::IncludeModule("sale")): ?>
<? if ($ar = CSaleUserAccount::GetByID($USER->GetID()))
  {
     $myBonusBills = SaleFormatCurrency($ar["CURRENT_BUDGET"], $ar["CURRENCY"]);
  }
  ?>
  <div class="inner-shop--button-block">
     <a data-module="buyoneclick" data-id="<?= $arElement["ID"] ?>"
        class="<?= $myBonusBills < $arPrice["PRINT_DISCOUNT_VALUE"] ? 'inner-shop--button-disabled' : 'inner-shop--button' ?>">
        <?= GetMessage("CATALOG_BUY") ?>
     </a>
  </div>
<? endif; ?>
<? endforeach; ?>

Что должно быть по идее.
Если на личном счету пользователя рублей меньше чем стоимость товара, то у кнопку будет класс inner-shop--button-disabled, иначе inner-shop--button.

Прикрепил скрин с пояснением, условие странно как-то работает.
Фото:
ruslan2243 -> Всем
09.11.2017 16:25
В общем сегодня столкнулся с такой штукой и пока не знаю как реализовать. Сначала думал, что можно без кодинга, но оказалось, что скорее всего нет.
В общем есть карточка товара (кредитное предложение) и там есть поле возраст(еще не сделано)
https://prnt.sc/h88ijw
И поле возраст - это диапазон, т.е. человеку дадут кредит, если он в этом возрасте.
И потом предпологается, что посетитель в умном фильтре вводит свой возраст и ему должны вывестись те товары, где он подходит по возрасту.
Примерно такая форма https://prnt.sc/h88jyg - это конечно не битриксовский УмнФильтр, просто скрин с левого сайта.

Так вот, в битриксе же нет диапазонного свойства :) Нужно получается заводить два свойства "возраст от" и "возраст до"
И потом как-то связать их в умном фильтре с помощью одного инпута. Т.е. я так полагаю, нужно как-то добавить в массив фильтра arFilter дополнительно два условия:
 (
   [>=AGE_MIN] => 22
   AND
   [<=AGE_MAX] => 22
 )

Или, может, я отстал и всё таки в битриксе это можно сделать без кодинга?)))
Вячеслав
У битрикса есть свойство типа "Число", в этом случае и будет диапазон. В интернет магазинах числовой тип обычно к цене применяют.
Михаил Базаров
Да: Просто сделайте его числом, и в настройках свойства- в разделе "Выводить в умном фильтре", выберите режим отображения "Ползунок от до"
PS Хотя, по моему, он итак по умолчанию применяется к числовым
ruslan2243
Михаил Базаров, Не, тут позаковыристей. У товара параметр имеет значение не одно, а диапазон. Например, пусть будет вес.
В моем случае вес может быть, например, "от 20 до 500кг".  В битриксе нет диапазонного типа, только число. В случае с битриксом, я могу задать только одно число "20кг".

Я решил так. Завел два числовых параметра:
вес мин.(число)
вес макс(число)
Теперь можно указать для товара
вес мин=20кг
вес макс=500кг
В умном фильтре теперь есть два ползунка: вес мин и вес макс
Я их визуально скрываю. И вывожу свой инпут, называю вес.
если ввести в него значение(Ves=100), то оно автоматом подставляется в скрытые поля
Вес мин [0] до [Ves]
Вес макс [Ves] до []
И таким образом в область поиска попадает то что нужно.

БОЛЕЕ НАГЛЯДНО
Вот как выглядит на сайте, поля скрыты
https://prnt.sc/hkctol
Вот как под капотом, если показать скрытые поля
https://prnt.sc/hkcv63
Screenshot
Captured with Lightshot
Игорь -> Всем
14.11.2017 23:45
Михаил здравствуйте, сделайте пожалуйста видео обзор по установке панели управления хостингом, ISPmanager Lite, на Linux CentOS 7 (x86_64) виртуальную машину арендованную у хостера simplecloud.ru и как базово оптимизировать для работы с «1С-Битрикс» Буду очень благодарен Вам. Спасибо!  
Облачный сервер за 150 рублей (512MB RAM и 5GB SSD) за 50 секунд.
Простой, быстрый и масштабируемый сервер с SSD в облаке. VDS хостинг на SSD дисках, виртуализация KVM, безлимитный трафик.
Михаил Базаров
Как по мне, ISP manager - мертвая тема. Давно есть, Vesta Cp
ruslan2243 -> Всем
02.11.2017 14:38
Хочу понять как сделать интеграцию с 1с, но не работал с 1с ни разу. Как можно попробовать в учебных целях? А то часто спрашивают про это, надоело говорить, что никогда не делал)
Михаил Базаров
Я делал вот такой эксперимент
https://www.youtube.com/watch?v=CI8GUZl6mYY
Не без косячков и немного нудновато-длинно. Но для общего понимания должно подойти

Плюс на официальном канале битрикс есть запись вебинара- но найти не могу, что-то
Синхронизация 1С:УТ и 1С:Битрикс (Черновик)
Донатон) http://www.donationalerts.ru/r/camouf Multistreaming with https://restream.io/
Михаил Базаров -> Всем
23.10.2017 11:19
Имитация активного пункта в catalog.section.list через GetCurDir

Черновик заметки (сама заметка позже в блоге)

Иногда, нужно сымитировать меню с помощью компонента catalog.section.list вместо использования ext_ меню
Но в catalog.section.list нет возможности сымитировать активный пункт меню (как-то его стилизовать). Для этого можно сымитировать данный функционал, с помощью
GetCurDir

GetCurDir - Метод который возвращает каталог текущей страницы относительно корня
Мы знаем текущий адрес и адрес конкретного пункта нашего "псевдо меню"

В template.php списка разделов (catalog.section.list) вносим вот такую правку

<? if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();
global $APPLICATION;
$dirReal = $APPLICATION->GetCurDir();
?>

               <? ... СОКРАЩЕНО ...
               $cSect = $arSection["SECTION_PAGE_URL"];
               ?>
  <li <?if ($dirReal === $cSect) {echo 'actived';} ?>">
      <a href="<?= $arSection["SECTION_PAGE_URL"] ?>">
             <?= $arSection["NAME"] ?>
      </a>

                   <?.. СОКРАЩЕНО ...?>

$dirReal = $APPLICATION->GetCurDir(); // узнали текущий каталог, в котором пользователь и передали в переменную dirReal

$cSect = $arSection["SECTION_PAGE_URL"]; // в переменную cSect передали каталог текущего пункта

if ($dirReal === $cSect) {echo 'actived';} // Если текущий каталог совпадает (именно тождественен, а не равен) с каталогом текущего пункта, добавили селектор actived
Вячеслав -> Всем
27.09.2017 16:56
Михаил! Можно ли в живой ленте настроить премодерацию сообщений? Как настроить премодерацию для групп я нашел, а вот если сообщение адресовано всем в живой ленте... в документации тоже не нашел.
Михаил Базаров
Я думаю, тут премодариции и нет- это же соц сеть- подразумевается большой поток пользователей (иначе резона ее делать и нет)- а обработать 1000 постов на стену, так себе удовольствие

PS У меня, конечно, соц сеть чисто номинально запущена- тут потока нет
Вячеслав
Михаил Базаров, Только вот настройки присутствуют...

Файлы:
0 Б
0 Б
Вячеслав -> Всем
20.09.2017 15:11
Разбираюсь с модулем "социальная сеть". Как включить возможность изменять профиль для обычного зарегистрированного пользователя? У админа, есть пунктик "Изменить профиль" у юзера нет
Фото:
Михаил Базаров
Так можно закрыть доступ к папке /bitrix/
Михаил Базаров
Вот, прямо сейчас я дал право менять профиль в соцсети, но при этом, для папки bitrix для группы "Зарегистрированные" доступ в статусе "Запрещен"
Вячеслав
Да, написал коммент а потом вспомнил, что забыл доступ закрыть)

© 2011—2018 Частный вебмастер: ИП Базаров, ОГРНИП: 315784700173692. Работает на 1С-Битрикс.
Сайт предназначен, для пользователей возрастом 21+

Копирование материалов запрещено: "ГК РФ, часть 4, раздел VII: Права на результаты интеллектуальной деятельности".

Информация размещенная на сайте, не является публичной офертой.
Политика конфеденциальности