показать полностью
Михаил Базаров -> Всем
янв 14 11:15 am
Получить метатеги раздела в CIBlockSection::GetList из настроек инфоблока

Если получить список разделов методами CIBlockSection::GetList или CIBlockSection::GetByID
В массиве, вы, не получите метатеги раздела из настроек SEO инфоблока.
Что бы их получить, нужно в цикле добавить дополнительный запрос к \Bitrix\Iblock\InheritedProperty\SectionValues

Пример:
$dbRes = CIBlockSection::GetList(
false,
array('IBLOCK_ID' => $IBLOCKID),
false,
false,
false,
);
while ($arDbRes = $dbRes->Fetch())
{
   echo '<pre>';
   print_r($arDbRes); // Все данные раздела
   echo '<pre>';

   $ipropValues = new \Bitrix\Iblock\InheritedProperty\SectionValues($IBLOCKID, $arDbRes["ID"]);
   echo '<pre>';
   print_r($ipropValues->getValues()) // Все метатеги раздела
   echo '<pre>';
}
 
показать полностью
Альвах Лупус -> Всем
декабря 29, 2020 11:55 am
Подскажите. Можно ли вручную скопировать шаблон компонента. Не с помощью битрикса, а именно полностью вручную?
Если можно, то подскажите как и полностью шаги создания.
Михаил Базаров
Просто копируете папку с шаблоном в шаблон сайта.
Например: шаблон списка новостей
Копируете папку /bitrix/components/news.list/template/.default
в /шаблон_сайта/bitrix/components/news.list/Название_шаблона
показать полностью
Михаил Базаров -> Всем
декабря 26, 2020 7:45 am
Аргументы phpstorm для yuicompressor-2.4.8.jar

Сжатие css
Тип CSS
путь к yuicompressor-2.4.8.jar
$FileName$ -o $FileNameWithoutExtension$.min.css
$FileNameWithoutExtension$.min.css

Сжатие js
Тип JS
путь к yuicompressor-2.4.8.jar
$FileName$ -o $FileNameWithoutExtension$.min.js
$FileNameWithoutExtension$.min.js
yuicompressor-2.4.8.jar ( 769.07 КБ)
показать полностью
Альвах Лупус -> Всем
декабря 23, 2020 3:39 pm
Здравствуйте! Помогите мне пожалуйста. С битриксом я не очень сильно знаком, но у меня возникла проблема. От главной страницы создаю каталог. Потом подтягиваю туда инфоблок с Новостей. По началу данные выводятся, но вот когда я копирую шаблон, что бы сверстать, то браузер выдает ошибку
Parse error: syntax error, unexpected '$APPLICATION' (T_VARIABLE), expecting ',' or ';' in /var/www/u1153589/data/www/site/all-brends/index.php on line 7
Посмотрел данный урок, не помогает(
Урок 6 : Создание инфоблоков в битрикс, вывод инфоблоков на сайт, верстка инфоблока
Создание инфоблоков в битрикс, вывод инфоблоков на сайт, верстка инфоблокаВсе серии и дополнительные файлы http://camouf.ru/blog-note/425/
Альвах Лупус
Вот код индексного файла в каталоге.  В конце напишу, что я сделал, что бы заработало у меня. И скажите, правильно ли я сделал.
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Бренды");
echo "<main class='cardBackgound'><div class='container-uni'><br>";
echo "<h1>";
$APPLICATION->ShowTitle(false);
echo "</h1>"$APPLICATION->IncludeComponent(
"bitrix:news",
"all-brends",
Array(
"ADD_ELEMENT_CHAIN" => "N", // Включать название элемента в цепочку навигации
"ADD_SECTIONS_CHAIN" => "Y", // Включать раздел в цепочку навигации
"AJAX_MODE" => "N", // Включить режим AJAX
"AJAX_OPTION_ADDITIONAL" => "", // Дополнительный идентификатор
"AJAX_OPTION_HISTORY" => "N", // Включить эмуляцию навигации браузера
"AJAX_OPTION_JUMP" => "N", // Включить прокрутку к началу компонента
"AJAX_OPTION_STYLE" => "Y", // Включить подгрузку стилей
"BROWSER_TITLE" => "-", // Установить заголовок окна браузера из свойства
"CACHE_FILTER" => "N", // Кешировать при установленном фильтре
"CACHE_GROUPS" => "Y", // Учитывать права доступа
"CACHE_TIME" => "36000000", // Время кеширования (сек.)
"CACHE_TYPE" => "A", // Тип кеширования
"CHECK_DATES" => "Y", // Показывать только активные на данный момент элементы
"DETAIL_ACTIVE_DATE_FORMAT" => "d.m.Y", // Формат показа даты
"DETAIL_DISPLAY_BOTTOM_PAGER" => "Y", // Выводить под списком
"DETAIL_DISPLAY_TOP_PAGER" => "N", // Выводить над списком
"DETAIL_FIELD_CODE" => array( // Поля
0 => "",
1 => "",
),
"DETAIL_PAGER_SHOW_ALL" => "Y", // Показывать ссылку "Все"
"DETAIL_PAGER_TEMPLATE" => "", // Название шаблона
"DETAIL_PAGER_TITLE" => "Страница", // Название категорий
"DETAIL_PROPERTY_CODE" => array( // Свойства
0 => "DESCRITION",
1 => "",
),
"DETAIL_SET_CANONICAL_URL" => "N", // Устанавливать канонический URL
"DISPLAY_BOTTOM_PAGER" => "Y", // Выводить под списком
"DISPLAY_DATE" => "Y", // Выводить дату элемента
"DISPLAY_NAME" => "Y", // Выводить название элемента
"DISPLAY_PICTURE" => "Y", // Выводить изображение для анонса
"DISPLAY_PREVIEW_TEXT" => "Y", // Выводить текст анонса
"DISPLAY_TOP_PAGER" => "N", // Выводить над списком
"HIDE_LINK_WHEN_NO_DETAIL" => "N", // Скрывать ссылку, если нет детального описания
"IBLOCK_ID" => "8", // Инфоблок
"IBLOCK_TYPE" => "moredata", // Тип инфоблока
"INCLUDE_IBLOCK_INTO_CHAIN" => "Y", // Включать инфоблок в цепочку навигации
"LIST_ACTIVE_DATE_FORMAT" => "d.m.Y", // Формат показа даты
"LIST_FIELD_CODE" => array( // Поля
0 => "",
1 => "",
),
"LIST_PROPERTY_CODE" => array( // Свойства
0 => "DESCRITION",
1 => "",
),
"MESSAGE_404" => "", // Сообщение для показа (по умолчанию из компонента)
"META_DESCRIPTION" => "-", // Установить описание страницы из свойства
"META_KEYWORDS" => "-", // Установить ключевые слова страницы из свойства
"NEWS_COUNT" => "20", // Количество новостей на странице
"PAGER_BASE_LINK_ENABLE" => "N", // Включить обработку ссылок
"PAGER_DESC_NUMBERING" => "N", // Использовать обратную навигацию
"PAGER_DESC_NUMBERING_CACHE_TIME" => "36000", // Время кеширования страниц для обратной навигации
"PAGER_SHOW_ALL" => "N", // Показывать ссылку "Все"
"PAGER_SHOW_ALWAYS" => "N", // Выводить всегда
"PAGER_TEMPLATE" => ".default", // Шаблон постраничной навигации
"PAGER_TITLE" => "Бренды", // Название категорий
"PREVIEW_TRUNCATE_LEN" => "", // Максимальная длина анонса для вывода (только для типа текст)
"SEF_FOLDER" => "/all-brends/", // Каталог ЧПУ (относительно корня сайта)
"SEF_MODE" => "Y", // Включить поддержку ЧПУ
"SEF_URL_TEMPLATES" => array(
"detail" => "#ELEMENT_CODE#/",
"news" => "",
"section" => "",
),
"SET_LAST_MODIFIED" => "N", // Устанавливать в заголовках ответа время модификации страницы
"SET_STATUS_404" => "N", // Устанавливать статус 404
"SET_TITLE" => "Y", // Устанавливать заголовок страницы
"SHOW_404" => "N", // Показ специальной страницы
"SORT_BY1" => "ACTIVE_FROM", // Поле для первой сортировки новостей
"SORT_BY2" => "SORT", // Поле для второй сортировки новостей
"SORT_ORDER1" => "DESC", // Направление для первой сортировки новостей
"SORT_ORDER2" => "ASC", // Направление для второй сортировки новостей
"STRICT_SECTION_CHECK" => "N", // Строгая проверка раздела
"USE_CATEGORIES" => "N", // Выводить материалы по теме
"USE_FILTER" => "N", // Показывать фильтр
"USE_PERMISSIONS" => "N", // Использовать дополнительное ограничение доступа
"USE_RATING" => "N", // Разрешить голосование
"USE_REVIEW" => "N", // Разрешить отзывы
"USE_RSS" => "N", // Разрешить RSS
"USE_SEARCH" => "N", // Разрешить поиск
"USE_SHARE" => "N", // Отображать панель соц. закладок
),
false
);_SHARE" => "N"
)
);?><?
echo "</div></main>";
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>
И так первое в начале
echo "</h1>"$APPLICATION->IncludeComponent(
битрикс не поставил знак ";" после echo "</h1>"
Потом потом браузер ругался на конец файла, а именно на
);_SHARE" => "N"
Долго мучался, но в итоге в конце файла у меня осталось вот так. в конце.
"USE_SHARE" => "N", // Отображать панель соц. закладок
),
false

);?>
<?
echo "</div></main>";
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>
Скажи, нужно ли обратно написать в том файле это ");_SHARE" => "N""
Или как лучше сделать? и почему битрикс плохо копирует шаблон компанента?
Альвах Лупус
В итоге у меня теперь другая проблема, бренды выводит копонент, но когда захожу в них, то выдает 404 страницу.
В чем может быть проблема?
показать полностью
Михаил Базаров -> Всем
декабря 5, 2020 2:45 am
Очистка highloadblock -блока через API битрикс
CModule::IncludeModule('highloadblock');
use Bitrix\Highloadblock as HL;
use Bitrix\Main\Entity;

$hlblockId = HL\HighloadBlockTable::getById(4)->fetch();
$entity = HL\HighloadBlockTable::compileEntity($hlblockId);
$entity_data_class = $entity->getDataClass();
$rsData = $entity_data_class::getList(array(
    "select" => array("ID"),
     "filter" => array()
));
while ($arItem = $rsData->Fetch()) {
    $entity_data_class::delete($arItem["ID"]);
}

показать полностью
Михаил Базаров -> Всем
декабря 1, 2020 11:53 am
Скрипт который создаст и сразу удалит 10 000 заказов.
Нужно было на одном из проектов, начать отсчет ID заказов (не номеров а именно ID)
с 10 000  (ох уж эти 1С ники).

После удаления заказов, даже всех, отсчет ID продолжается с последнего созданого.
Потому, просто создаем и сразу удаляем 10 000 заказов.
PS: Скрипт удалит все заказы. Если нужны те- которые созданы до запуска скрипта, доработайте цикл - на удаление именно созданного им заказа.
Вариант "в лоб" - поменять ID прямо в базе, меня не устраивал.

Bitrix\Main\Loader::includeModule('sale');
Bitrix\Main\Loader::includeModule('catalog');

for ($i=0; $i<10000; $i++) {   // ПОМЕНЯТЬ НА СВОЮ ЦИФРУ - если нужно больше/меньше заказов
   $products = array(
       array('PRODUCT_ID' => 1811, 'NAME' => 'Товар 1', 'PRICE' => 500, 'CURRENCY' => 'RUB', 'QUANTITY' => 5)
   );

   $basket = Bitrix\Sale\Basket::create(SITE_ID);

   foreach ($products as $product) {
       $item = $basket->createItem("catalog", $product["PRODUCT_ID"]);
       unset($product["PRODUCT_ID"]);
       $item->setFields($product);
   }

   $order = Bitrix\Sale\Order::create(SITE_ID, 1);
   $order->setPersonTypeId(2);
   $order->setBasket($basket);

   $shipmentCollection = $order->getShipmentCollection();
   $shipment = $shipmentCollection->createItem(
       Bitrix\Sale\Delivery\Services\Manager::getObjectById(1)
   );

   $shipmentItemCollection = $shipment->getShipmentItemCollection();

   /** @var Sale\BasketItem $basketItem */

   foreach ($basket as $basketItem) {
       $item = $shipmentItemCollection->createItem($basketItem);
       $item->setQuantity($basketItem->getQuantity());
   }

   $paymentCollection = $order->getPaymentCollection();
   $payment = $paymentCollection->createItem(
       Bitrix\Sale\PaySystem\Manager::getObjectById(1)
   );
   $payment->setField("SUM", $order->getPrice());
   $payment->setField("CURRENCY", $order->getCurrency());

   $result = $order->save();
   if (!$result->isSuccess()) {
       //$result->getErrors();
   }
}

// УДАЛЕНИЕ ВСЕХ ЗАКАЗОВ - можно перенести в цикл на создание и сразу удаление именно этого заказа
$orders = CSaleOrder::GetList(array("ID" => "DESC"), array(), false, false, array('ID'));
   while ($order = $orders->Fetch()) {
        $result = CSaleOrder::Delete($order['ID']);
   }


показать полностью
A13Z2005 -> Всем
мая 21, 2020 1:09 am
Всем добрый день.
Подскажите пожалуйста кто сталкивался с аналогичной проблемой, как решать?!
Проблема:
в списке товаров catalog.section (шаблон каталога использую старый -  .default_old)
Заводим товар с торговыми предложениями, к примеру:
1. Цвет Красный, размер 43, размер 42
2. Цвет Синий, размер 38.
товар отображает активным торговое предложение (Цвет Красный, размер 43),
если кликаем на Синий цвет, торговое предложение не переключается т.к. в нем (цвет синий) нет 43 размера, есть только 38.

в консоле при клике есть две ошибки:
1. https://yadi.sk/i/F_Cev0ZkPOG3XQ
2. https://yadi.sk/i/wQIFP7uyX9GUHQ

Но в детальной карте отрабатывает без проблем.

Писал в ТП - не помогли, кроме рекомендации использовать новую версию шаблона каталога.....

Может кто сталкивался с аналогичной проблемой?!


2020-05-21_05-08-01.png
View and download from Yandex.Disk
A13Z2005
РЕшил проблем свежим шаблоном каталога)
показать полностью
A13Z2005 -> Всем
октября 17, 2020 10:29 pm
Здравствуйте!
подскажите пожалуйста, как сделать условие для разделов и подразделов каталога - с исключением карты товара??!
Задача вывести сообщение в шапке сайта (header.php) на всех страницах каталога кроме карточек товара.
Спасибо.
Михаил Базаров
Если правильно понял суть вопроса:
В section.php шаблона, комплексного компонента каталога вставляете

<?$this->SetViewTarget('only_in_section"');?>
Бла бла, только в разделе каталога
<?$this->EndViewTarget();?>

В header.php, в нужном месте

<?$APPLICATION->ShowViewContent("only_in_section");?>
A13Z2005
Михаил Базаров, про отложенные я в курсе, я думал может есть вариант регулярок или еще что, чтоб прям отдельно прописать условие для разделов и подразделов каталога.
показать полностью
A13Z2005 -> Всем, Михаил Базаров
ноября 12, 2020 7:43 pm
Добрый день, Михаил Базаров !
Подскажите пожалуйста, как вывести минимальную цену торгового предложения с условием что оно должно быть в наличии?!
Пример.
есть 3 торговых предложения
- Зеленый 970р - в наличии.
- красный 3000р  - в наличии.
- синий 1700р - в наличии.
- белый 800р - нет в наличии.

Цена должна отобразиться 970р - минимальная цена торгового предложения которое в наличии.
Спасибо.
показать полностью
Михаил Базаров -> Всем
августа 13, 2020 1:55 pm

Стартовое приложение Cordova для начала разработки

Установлены все официальные плагины Cordova. Установлены платформы android и ios5.1.1 Дополнительные плагины:

  • cordova-plugin-wkwebview-engine
  • yandex-appmetrica-plugin-cordova
  • cordova-plugin-remote-injection

Движек рендеринга переключен на wkwebview (иначе, не пройдет публикацию в AppStore).

Заготовка для разработки мобильного приложения на #Cordova
Обновление от августа 2020:
- Платформы обновлены до ios-6.1.1 и android-9;
- Обновлен плагин remote-injection (удален UIWeb, не проходил проверку в Appstore);
- Удален плагин inappbrowser (не поддерживается ios6)

PS: Если inappbrowser нужен:
- cordova platform rm ios
- cordova platform add ios@5.1.1
- cordova plugin add cordova-plugin-inappbrowser

https://github.com/mibazarow/Cordova-S...rt-Project
mibazarow/Cordova-Start-Project
Стартовое приложение Cordova для начала разработки - mibazarow/Cordova-Start-Project
показать полностью
Dmitriy Ivanov -> Всем
августа 11, 2020 5:18 pm

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

Каталог {=this.Name} в Москве
как в разделе "SEO" в карточки товара

то есть продублировать поле "Шаблон META KEYWORDS" - это как то можно сделать?
показать полностью
Dima Mironov Всем
июля 17, 2020 9:39 am
Добавлены 5 фото в альбом: Новый альбом
показать полностью
Михаил Базаров -> Всем
июня 20, 2020 4:45 pm
Скелет-шаблон для создания мобильного приложения в Cordova.
Базовая верстка для 1С-Битрикс, включены js плагины:
- SNAP : боковая панель при протягивании по контенту
- Pull To Refresh : Обновление контейнера с контентом при протягивании вниз

Видео работы:
https://www.youtube.com/watch?v=XJ2q86-LAWE

Скачать:
https://camouf.ru/upload/fo_all/mobile...late-bx.7z

Плейлист - создание мобильного приложения для любого сайта:
https://www.youtube.com/playlist?list=...SGZcyhbgx3
Скелет-шаблон для мобильного приложения (#Cordova) для 1С-Битрикс
Заготовка скелет-шаблон для создания мобильного приложения в Cordova. Включены js плагины: Snap panel и Putt to refresh. Скачать: https://camouf.ru/club/user...
показать полностью
Михаил Базаров -> Всем
июня 3, 2020 12:28 am
Вывести минимальную и максимальную цену в разделе каталога Битрикс.

Что бы вывести минимальную и максимальную цены в разделе каталога (до товаров  например) вставляем:
$resPrice = CIBlockElement::GetList(
  Array("CATALOG_PRICE_2" => "ASC"),
  Array("SECTION_ID"=>$arResult['~ID']),
  false,
  false,
   Array("CATALOG_GROUP_2")
);
while($getPrices = $resPrice->Fetch()) {
          $arPrices[] = $getPrices['CATALOG_PRICE_2'];
}
$minPrice = array_shift($arPrices);
$maxPrice = array_pop($arPrices);

Пояснения:
- С помощью CIBlockElement::GetList получили список элементов раздела с ID равным "$arResult['~ID']" (текущий раздел инфоблока)
- Отсортировали их по полю стоимости по возрастанию "CATALOG_PRICE_2" (ID нужного типа цен, в моем случае, 2)
- Создали массив  $arPrices - который наполнили ценами всех товаров (по возрастанию соответственно).
- C помощью array_shift и array_pop - выдернули первый и последний элемент массива (таки минимальную и максимальную цену)

В переменных minPrice и maxPrice  - минимальная и максимальная цена товаров текущего раздела инфоблока.
PS: Использован Fetch вместо GetNext и явно указано поле для получения, для скорости работы.


показать полностью
A13Z2005 -> Всем
мая 26, 2020 3:01 pm
Привет)
не подскажите, как добавить свои поля в стандартный компонент екомментариев?!?!
сейчас он имеет стандартный набор:
Имя,
Почта,
Сообщение.

А хотелось бы добавить еще:
Недостатки.
Плюсы.
Михаил Базаров
В стандартный ни как, можете его скопировать в свое пространство имен и доработать.
По сути, взять его за основу для создания своего компонента, скорее даже модуля.
показать полностью
Михаил Базаров -> Всем
мая 10, 2020 12:53 pm
Вывести количество не прочитанных, персональных сообщений форума в любом месте сайта.

Что бы вывести количество не прочитанных (именно персональных) сообщений из модуля форума.
В любом, нужном, месте сайта вызываем метод
<?
CModule::IncludeModule("forum");
      $messs = CForumPrivateMessage::GetNewPM(
              array("FOLDER_ID" => 1)
     );
?>

<?
 echo $messs['UNREAD_PM']
?>

показать полностью
Михаил Базаров -> Всем
февраля 25, 2020 3:48 pm
Компонент добавления элемента в инфоблок с отправкой письма о добавлении и AJAX отправкой.

Сделан по быстрому, в качестве базовой заготовки для дальнейшего развития.
Развиваться будет, в полноценный компонент, в рамках видеокурса "Разработка доски объявлений на Битрикс" https://bxstore.ru/

Пока, можно использовать как форму обратной связи, с записью в инфоблок и отправкой письма.

На данный момент умеет:
- Выводить, на заполнение,  свойства инфоблока. Только не множественные.
- Загружать файлы в свойство "Файл". Использует штатный компонент main.file.input (dragn_n_drop).
- Защита, от совсем простых ботов (проверка скрытого поля на заполнение)
- Поддерживает AJAX
- Отправляет письмо о добавлении элемента
- Все параметры управляемые (картинка 1)
- Шаблон маскимально простой (картинка 2)
- Легко дорабатывается, управляется и расширяется.

Письма отправляет обычной функцией php-mail, но в файле component.php есть закомментированый участок
(картинка 3):
Можно использовать штатный метод Битрикс Event::send - который передаст поля в штатное же почтовое событие FEEDBACK_FORM

Пример работы: https://camouf.ru/1/index.php

PS: В рамках видеокурса будет превращен в полноценный компонент добавления объявления на доску. С гугло капчей, работой с любыми типами полей И так далее.

Фото:
feedback.form.element.zip ( 25.08 КБ)
Михаил Базаров
Создаем массив со свойствами файлов, методом CFile::MakeFileArray и передаем в $PROP["MORE_PHOTO"] (в моем случае, свойство с доп картинками)
$arMorePhoto["VALUE"];
$i = 0;    
foreach ($_POST["MORE_PHOTO"] as $morePhoto) {        
      $arMorePhoto['n'.$i] = array("VALUE"=>CFile::MakeFileArray($morePhoto));        
      $i++;
}
$PROP["MORE_PHOTO"] = $arMorePhoto;

показать полностью
Михаил Базаров -> Всем
апреля 1, 2020 11:05 am
Заполнить коэффициент единицы измерения (MEASURE_RATIO) из свойства элемента.

Перенесено в блог: https://camouf.ru/blog-note/9255/
показать полностью
Михаил Базаров -> Всем
марта 20, 2019 10:57 am
bitrix.sale.order.ajax раскрыть блоки доставки и оплаты.

Если в компоненте одношагового оформления заказа, нужно раскрыть блоки доставки и оплаты:
В самый низ template.php добавляем
$(window).on('ready', function(event){
    BX.Sale.OrderAjaxComponent.editDeliveryBlock(true);
    BX.Sale.OrderAjaxComponent.editPaySystemBlock(true);
});
Для блоков оплаты и доставки добавляем селектор bx-selected

Тоже самое, можно делать со всеми блоками:
BX.Sale.OrderAjaxComponent.editActiveBasketBlock(true);
BX.Sale.OrderAjaxComponent.editActiveRegionBlock(true);
BX.Sale.OrderAjaxComponent.this.editActiveDeliveryBlock(true);
BX.Sale.OrderAjaxComponent.editActivePaySystemBlock(true);
BX.Sale.OrderAjaxComponent.editActivePickUpBlock(true);
BX.Sale.OrderAjaxComponent.editActivePropsBlock(true);

И можно убрать кнопки "Далее - Назад" в файле order_ajax.js

Для доставки: найти и закомментировать
this.getBlockFooter(deliveryContent);
Для оплаты:
this.getBlockFooter(paySystemContent);

Денис Чучумашев
работает, только после выбора доставки или оплаты, блоки все равно оказываются закрытыми.
Денис Чучумашев
Запускать

   BX.Sale.OrderAjaxComponent.editActiveDeliveryBlock(true);
   BX.Sale.OrderAjaxComponent.editActivePaySystemBlock(true);
...

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

1. комментируем строчки:
/*if (this.activeSectionId !== this.regionBlockNode.id)
this.editFadeRegionContent(this.regionBlockNode.querySelector('.bx-soa-section-content'));

if (this.activeSectionId != this.propsBlockNode.id)
this.editFadePropsContent(this.propsBlockNode.querySelector('.bx-soa-section-content'));*/

2. меняем:
var active = section.id == this.activeSectionId,

на:
var active = true,

3. скрываем кнопки "далее" и "назад" и изменить стилями:
.pull-left.btn-default.btn-md, .pull-right.btn-default.btn-md, .bx-soa-editstep {
   display: none!important;
}
показать полностью
Михаил Базаров -> Всем
марта 10, 2020 1:26 pm
Вывести дату создания файла в формате сайта

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

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

показать полностью
Андрей Белый -> Всем
февраля 20, 2020 11:36 am
Добрый вечер, Михаил
Скажите пожалуйста как реализовать смену вида карточки товара в catalog.section, в МВидео есть подобная штука https://www.mvideo.ru/televizory-i-cif...evizory-65
Спасибо!
Фото:
Андрей Белый
Спасибо большое!)
А скажите пожалуйста, если будет реализовано смена шаблона catalog.section через AJAX и параллельно такая сортировка https://camouf.ru/blog-note/752/?sphra...e_id=42177 это адекватно будет работать? Могут ли быть какие-нибудь подводные камни?
Михаил Базаров
Сортировку лучше сделайте по этому же способу. Передавайте $_SESSION['sort'] в параметр сортировки.
Прям один в один, просто смена не шаблона а направления сортировки.
Андрей Белый
Михаил Базаров, спасибо Михаил, успехов вам!
показать полностью
Михаил Базаров -> Всем
июня 18, 2018 3:57 am
Вывести разделы инфоблока по первым буквам (алфавитный указатель типа) не меняя структуру каталога.

Например: у нас есть инфоблок с большим количеством разделов (картинка 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;
}
Андрей Белый
Спасибо, Михаил
Все работает!)
показать полностью
Андрей Белый -> Всем
февраля 19, 2020 5:01 pm
Добрый вечер, Михаил
Скажите пожалуйста почему ваш ныне обновленный сайт адаптивный, а не имеет отдельный мобильный шаблон как в этой теме https://camouf.ru/blog-note/1320/ ?
Михаил Базаров
Думаю, для большинства сайтов достаточно иметь адаптивную версию.
Отдельными, мобильными, версиями до сеих поль пользуются- многие компании.
Но, мне кажется, это скорее "пережиток древности" нежели реальная необходимость.

Не все, огромные и старые сайты могут себе позволить рефакторинг и переделку логики работы шаблонов (долго, дорого, много зависимостей И так далее)

Новый сайт, я бы делал сразу адаптивным. Его и поддерживать проще.
показать полностью
A13Z2005 -> Всем
февраля 16, 2020 11:25 pm
Здравствуйте, подскажите пожалуйста как вывести значение свойства типа список VALUE_XML_ID
в компоненте catalog.item

при этом нужно вывести так что если оно имеет значение (А) выводим один текс, если значение (Б), то другой текст.
пробовал вывести так

<?if($item['DISPLAY_PROPERTIES']['TIP']['VALUE_XML_ID']=='A'):?>
   <span class="A">text</span>
<?endif;?>

Итог - не отрабатывает...
A13Z2005
Михаил Базаров, такое ощущение что битра не понимает условие, что мне нужно определить выбрано ли значение hit
A13Z2005
Михаил Базаров, Забыл сказать - это множественное свойство - типа список.
Михаил Базаров
<? if ($item['DISPLAY_PROPERTIES']['TIP']['VALUE_XML_ID'] == 'hit') {?>
  Бла бла
<?}?>
показать полностью
A13Z2005 -> Всем
февраля 9, 2020 12:23 am
Всем здравствуйте!
Подскажите пожалуйста кто сталкивался с интеграцией верстки в Интернет магазин.
при интеграции верстки в список товаров - если у главного фото не выставляю id="<?=$itemIds['PICT']?>" и id="<?=$itemIds['PICT_SLIDER']?>",
то торговые предложения либо не отображаются либо отображаются но не выбираются.... как уйти от этого?!
--------
либо где править так чтобы после вставки этих id, не появлялись лишении спаны или как их заменить на нужное мне?!
показать полностью
Елена Синица
февраля 6, 2020 2:40 pm
Сообщение форума
Редизайн сайта
Подскажите, пожалуйста.
На Битриксе есть сайт, сделанный по довольно простому шаблону с устаревшей информацией. Задача - выполнить редизайн с обновлением контента. Как лучше сделать, чтобы не потерять SEO позиции? Сначала создать копию старого сайта, произвести в ней все обновления и потом подключить домен? Или можно создать новый сайт по новому шаблону в том же аккаунте на Битриксе и к нему подключить домен старого сайта? Что посоветуете?
показать полностью
Сергей
февраля 3, 2020 12:00 pm
Сообщение форума
Выгрузка картинок в highload для свойства цвет
Здравствуйте уважаемые. Кто нибудь решал такую задачу как выгрузка картинок в highload блок для свойства цвет . Сейчас выгружается только название - https://clip2net.com/s/45O0NCq .
Знаю что это делается на стороне 1С.
на ютабе по урокам интеграции слышал что так можно делать
Как объяснить 1С-нику что требуется сделать , т.к в 1С тоже нужно настраивать что-то, в их терминологии не особо разбираюсь
показать полностью
Михаил Базаров -> Всем
января 13, 2020 7:52 am
Ошибка "Mysql query error: (1146) Table '.b_sale_trading_platform' doesn't exist (400)" при просмотре заказа в Битрикс

Если, при попытке просмотреть подробную информацию о заказе, получаете ошибку
"Mysql query error: (1146) Table '.b_sale_trading_platform' doesn't exist (400)"

Ошибка может возникнуть при обновлении ядра Битрикс, если прыгаете с версии 17 на 20 и выше.

Удалите, лишний файл /bitrix/modules/sale/lib/tradingplatform.php
Его не должно быть в ядре, после этого проблема решится.

Возможно файл появился после восстановления сайта из резервной копии или перезагрузки файлов ядра.
Ранее этот файл по ошибке был добавлен, но с версии sale 17.8.25 (18.0.3) его убрали.

PS: Если, при просмотре заказа, видите только:
"Произошла ошибка, включите расширенный вывод ошибок в .settings.php"
Откройте файл /bitrix/.settings.php и переключите "debug" = "false" в "debug" = "true"



показать полностью
Максим Всем
января 9, 2020 3:54 pm
Добавил 1 фото в альбом: Новый альбом
показать полностью
Russell S
января 6, 2020 3:58 am
Сообщение форума
Как реализовать вывод сопутствующих товаров в catalog.section

Здравствуйте, Михаил и читатели данного блога!
Вы можете подсказать как сделать вывод аналогов из свойств в catalog.section под товаром?
Было бы не плохо реализовать все на примере из вашей статьи https://camouf.ru/blog-note/6157/,
где сопутствующие товары выводятся в карточке товара( но не в каталоге, поиске и т.д(( ).

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

Russell S

Здравствуйте, Михаил и читатели данного блога!
Вы можете подсказать как сделать вывод аналогов из свойств в catalog.section под товаром?
Было бы не плохо реализовать все на примере из вашей статьи https://camouf.ru/blog-note/6157/,
где сопутствующие товары выводятся в карточке товара( но не в каталоге, поиске и т.д(( ).

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

Это нравится:0Да/0Нет Ещё
Russell S
Цитата
Russell S написал:
Здравствуйте, Михаил и читатели данного блога!
Вы можете подсказать как сделать вывод аналогов из свойств в catalog.section под товаром?
Было бы не плохо реализовать все на примере из вашей статьи  https://camouf.ru/blog-note/6157/ ,
где сопутствующие товары выводятся в карточке товара( но не в каталоге, поиске и т.д(( ).

Внизу скинул пример работы всего этого:
Вот ссылка пример работы: http://russellibertson.ru/img/Screenshot_2.jpg
Это нравится:0Да/0Нет Ещё
показать полностью
Russell S
января 6, 2020 3:29 am
Сообщение форума
Как реализовать вывод сопутствующих товаров в catalog.section

Здравствуйте, Михаил и читатели данного блога!
Вы можете подсказать как сделать вывод аналогов из свойств в catalog.section под товаром?
Было бы не плохо реализовать все на примере из вашей статьи https://camouf.ru/blog-note/6157/,
где сопутствующие товары выводятся в карточке товара( но не в каталоге, поиске и т.д(( ).

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

показать полностью
a13z2005@yandex.ru -> Всем
декабря 18, 2019 8:38 am
Всем добрый день.
Подскажите кто сталкивался с таким - регистрация пользователей в разные группы с разными полями?!
к примеру если выбрал "Частное лицо" - у него три поля для заполнения, если "Компания" - то другие поля

Михаил Базаров
Просто выведете две формы (или сколько нужно) с разными настройками вывода полей.
Что бы эти формы регистрации, заносили пользователей в разные группы, можно воспользоваться вот этим
https://camouf.ru/blog-note/1221/
a13z2005@yandex.ru
Михаил Базаров, а подскажите пожалуйста ка сделать уведомление о регистрации нового пользователя в определенной группе?!
чтоб не приходило оповещение о регистрации всех пользователей, а только о тех кто зарегистрировался в группу "Б"  

Авторизация

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