Живая лента

Михаил Базаров -> Всем
сегодня, 11:17
Установить/скопировать значение свойства элемента из другого свойства, при создании или редактирования элемента инфоблока.

У нас есть свойство инфоблока с кодом ATT_PRICE
И есть свойство с кодом ATT_TEST

Задача: при редактировании элемента копировать значение из ATT_PRICE в ATT_TEST

Добавляем в init.php
AddEventHandler("iblock", "OnAfterIBlockElementUpdate", "OnAfterIBlockEl");
AddEventHandler("iblock", "OnAfterIBlockElementAdd", "OnAfterIBlockEl");
function OnAfterIBlockEl(&$arFields) {
  if (CModule::IncludeModule("iblock")):
     $getProperty = CIBlockElement::GetList (
         Array("ID" => "ASC"),
         Array("IBLOCK_ID" => $arFields['IBLOCK_ID'], "ID" => $arFields['ID']),
        false,
        false,
        Array(
           'PROPERTY_ATT_PRICE'
         )
    );
    while($ar_fields = $getProperty->GetNext())
    {
         $setProperty= $ar_fields['PROPERTY_ATT_PRICE_VALUE'];
    }
   endif;
CIBlockElement::SetPropertyValuesEx (
      $arFields['ID'],$arFields['IBLOCK_ID'],array (
             'ATT_TEST' => $setProperty
          )
     );
}
Здесь: с помощью  CIBlockElement::GetList получили значение свойства ATT_PRICE для элемента с ID = $arFields['ID'] (текущий редактируемый/добавляемый элемент)
С помощью CIBlockElement::SetPropertyValuesEx установили значение ATT_PRICE в ATT_TEST
Михаил Базаров
Не большое улучшение. Так как работаем с одним, конкретным элементом- за раз. Можно заменить
CIBlockElement::GetList на CIBlockElement::GetByID - будет работать бодрее и так правильнее
Не большое улучшение. Так как работаем с одним, конкретным элементом- за раз. Можно заменить
CIBlockElement::GetList на CIBlockElement::GetByID - будет работать бодрее и так правильнее
<?
AddEventHandler("iblock", "OnAfterIBlockElementUpdate", "OnAfterIBlockEl");
AddEventHandler("iblock", "OnAfterIBlockElementAdd", "OnAfterIBlockEl");
function OnAfterIBlockEl(&$arFields) {
if (CModule::IncludeModule("iblock")):
 $res = CIBlockElement::GetByID($arFields['ID']);
 if($obRes = $res->GetNextElement())
 {
     $ar_res = $obRes->GetProperty("ATT_PRICE");
     $setProperty = $ar_res['VALUE'];
 }
endif;

CIBlockElement::SetPropertyValuesEx (
  $arFields['ID'],$arFields['IBLOCK_ID'],array (
    'ATT_TEST' => $setProperty
   )
);
}
?>

Михаил Базаров -> Всем
4 ноября 9:34
Ускорение работы сайта на 1С-Битрикс
Файл использованный в заметке
https://camouf.ru/blog-note/9223/index...de_areas=Y
Фото:
Файлы:
blog_usk_bx.txt (5.28 КБ)
Nip4FunU2@gmail.com
Михаил Базаров, а вы mod_pagespeed протестировали на совместимость с композитом? А то я протестировал, и вот какой результат:
Для групп которым композит не работает показывается mod_pagespeed и переназваные img и тд.
А вот для групп с композитом ситуация иная, сначала подрубается на пол секунды то что отдает mod_pagespeed, но потом сразу композит перекрывает весь DOM своим контентом в котором остались старые пути без конвертации.

Я так понял что композит делает слепок до отработки mod_pagespeed, и следовательно не может сохранить его с изменениями и потом отдавать.
Что думаете по этому поводу?
Михаил Базаров
Да пробовал, мне вообще не понравилось что творит этот mod_pagespeed
Именно с композитом проблем не было, но он картинки сильно портит, и какие-то не лепые названия им дает.
Плюс, с обработкой скриптов и css - не все гладко проходит.
Самое главное, особо ускорения не дает.
В целом, пока, забил его использовать- нужно побольше времени поизучать, прежде чем использовать на реальных проектах.  
Михаил Базаров -> Всем
20 ноября 4:38
Cordova пробросить API Cordova внутрь InAppBrowser

Если Вы создаете мобильное приложение на Cordova и работаете не с локальными файлами, а открываете внешний сайт.
По сути, скрываете все управляющие элементы браузера и иммитируете полноценное приложение.

Скорее всего используете плагин InAppBrowser, но в нем не будут работать API плагинов Cordova:
То есть, из этой оболочки не получите доступа к железу и настройкам телефона.

Что бы решить эту проблему нужно установить плагин remote-injection
cordova plugin add cordova-plugin-remote-injection

Он, встраивает скомпилированные ресурсы приложения (cordova и ее плагины), внутрь оболочки InAppBrowser.

После этого можно использовать API Cordova прямо на встроенном сайте.

Дополнительно:
Что бы псевдо приложение, по сути сайт, открывался при старте Cordova можно добавить в config.xml
<content src="АДРЕС_СТАРТОВОЙ_СТРАНИЦЫ" />
<allow-navigation href="АДРЕС_САЙТА/* />

Если нужно внедрить еще какой-то еще скрипт, по мимо самой Cordova
<preference  name="CRIInjectFirstFiles"  value = "ПУТЬ_К_ФАЛУ/file.js " />

PS: И еще пара плагинов, которые не озвучены в документации:

cordova plugin add cordova-plugin-contacts - обеспечивает доступ к базе данных контактов устройства.
cordova plugin add cordova-plugin-device-motion - доступ к акселерометру устройства.
cordova plugin add cordova-plugin-firebase - работа с push через firebase
cordova plugin add cordova-plugin-android-imei - получение IMEI (Только Андроид)
cordova.plugins.IMEI(function (err, imei) {
        console.log('imei', imei)
})

Плагин управления клавиатурой
cordova plugin add https://github.com/driftyco/ionic-plug...yboard.git
Этот плагин может многое, описание на github
Главное, для чего его можно использовать:
Не сжимать страницу при появлении клавиатуры
cordova.plugins.Keyboard.disableScroll(true);

Плагин переключающий UIWebVue на WKWebView (первый вот вот устареет)
cordova plugin add cordova-plugin-wkwebview-engine

Файлы:
all_plugins.txt (685 Б)
ionic-team/ionic-plugin-keyboard
Ionic Keyboard Plugin for Cordova. Contribute to ionic-team/ionic-plugin-keyboard development by creating an account on GitHub.
a13z2005@yandex.ru -> Всем
19 ноября 17:59
Добрый день всем,
кто сталкивался с подобным подскажите как реализовать?!
хочу в умном фильтре в каталоге сделать ссылки на значениях свойств - пример- как в решение оригами - см.скрин https://yadi.sk/i/56l6bqAKQSyoag ( https://origami.sotbit-demo.ru/catalog..._tekhnika/ ).
спасибо
2019-11-19_21-57-54.png
View and download from Yandex.Disk
tsaraid -> Всем
16 ноября 1:46
Всем здравствуйте. Подскажите пожалуйста новичку, где можно посмотреть, почитать о создании компонента форм для добавления (редактирования) элемента в инфоблок. Построение формы по свойствам инфоблока. Здесь на сайте смотрел урок, но нужен именно компонент. Спасибо
Михаил Базаров
В штатных уже есть. Так и называется "Форма добавления / редактирования" - находится в блоке "Контент -> Добавление элементов"
Файлы:
0 Б
a13z2005@yandex.ru -> Всем
8 ноября 23:57
Извиняюсь за спам)
ни кто с тако проблемой не сталкивался?! - написать корзину на редакции Старт / Стандарт...
Может есть идеи или готовое решение у кого?!)
спасибо!
Михаил Базаров
Не подходит?
https://marketplace.1c-bitrix.ru/solut...startcart/
Там еще штуки 3-4 подобных решений.
1С-Битрикс - Корзина StartСart для редакции “Старт”.
модули для битрикс
a13z2005@yandex.ru
Михаил Базаров, на маркете все платные) для себя хотел сделать

bvv2004@list.ru
29 октября 15:53
Сообщение форума
Проблемы работы раздела Каталог лицензия Битрикс: Старт
На картинках видно, что два разных товара, из разных разделов имеют одинаковую вкладку Дополнительно, вкладка удобная ей можно пользоваться.
Но в нашем случае невозможно. Файл, где хранится содержимое вкладки дополнительно - /product/index/_dops.php , один на все товары каталога.
Вводишь текст в одну вкладку, и он такой же текст появляется и в другой вкладке совсем другого товара.
Подскажите, что не так работает. Где может быть ошибка.
Картинки прицепить не удалось, программа отвечает, что При сохранении файла произошла ошибка.
А вставить в данный текст ограничение по размеру не позволяет.
Поэтому, привожу ссылки на показ проблемы:

http://novateh74.ru/product/tekhnolog...obrabotki/

http://novateh74.ru/product/elektroob...rotyagach/

С уважением,
Валентин Баранчук,
г. Челябинск
ООО Новатех
bvv2004@list.ru
Михаил день добрый!
Огромное спасибо за ответ.
Об этом (выкинуть Аспро) уже думаю.
Но пока переходный период.
Мне это "Дополнительно" нужно, и нужно к каждому Товару свое, т. к. товар - оборудование, технически сложное, и у него многослойное описание.
Но, не совсем понял Вашу рекомендацию.
Подскажите пожалуйста как в Каталоге товаров, добавить на Товар ещё одну вкладку ( в моем случае это вкладка "Дополнительно" ), чтобы она была привязана к товару ?

С уважением,
Валентин Баранчук,
г. Челябинск
ООО Новатех
Это нравится:0Да/0Нет Ещё
Михаил Базаров -> Всем
25 марта 10:50
Форма авторизации с использованием vue js для Битрикс

Готовый шаблон всплывающей формы авторизации.
Просто распаковываем в шаблон своего сайта и выводим в нужной части сайта компонент
system.auth.form и применить этот шаблон (auth)

В основном шаблоне сайта, подключите vue из ядра
\Bitrix\Main\UI\Extension::load("ui.vue");

На его месте появится кнопка, вызывающая шаблон авторизации.
Стилей по минимуму, подгоняйте под себя.

Так же внутри файл для отправки формы (index.php)- результат успешного или не успешного входа.
Этот файл обязательно удалите, или переместите в папку /personal/ он просто для примера (или любую другую папку - в форме подправьте путь)



Фото:
Файлы:
auth.zip (5.19 КБ)
Валерий
При вставке <?Asset::getInstance()->addJs('/bitrix/js/ui/vue.min.js');?>
У меня вообще ошибка, на скрине предоставил.

Видимо у меня вообще система полетела? И что не подскажите?

Вообщем полная жесть на ночь глядя(((
Файлы:
0 Б
Михаил Базаров
Перед этим подключением, включите
use Bitrix\Main\Page\Asset;
Валерий
Эх видимо не судьба((

Та же ошибка.Uncaught ReferenceError: Vue is not defined

Vue.component("modal",{template:"#auth_template"});BX.Vue.create({el:"#auth_form",data:{showModal:false}});
Михаил Базаров -> Всем
26 июня 10:47
При клике на маленькую фотографию меняется большая.

Мини скриптик, может кому пригодится для каталога товаров или новостей при использовании дополнительных картинок (обычно MORE_PHOTO).
Вместо штатного, монструозного магнифера

PHP
<div class="more_photos">
     <a href="<? echo $arResult['DETAIL_PICTURE']['SRC'] ?>" class="current">
           <img src="<? echo $arResult['DETAIL_PICTURE']['SRC'] ?>" alt="<? echo $arResult['NAME'] ?>">
    </a>
    <?
    if (count($arResult["MORE_PHOTO"]) > 0) {
       foreach ($arResult["MORE_PHOTO"] as $PHOTO) {
       $renderImage = CFile::ResizeImageGet($PHOTO, Array("width" => 200, "height" => 200), BX_RESIZE_IMAGE_EXACT, false);
   ?>
      <a href="<?= $PHOTO["SRC"]; ?>" alt="<? echo $arResult['NAME'] ?>">
               <img src="<?= $PHOTO["SRC"]; ?>" alt="<? echo $arResult['NAME'] ?>">
      </a>
      <? }
   } ?>
</div>
JS
$(".more_photos").on("click", "a", function () {
     $(this).addClass("current").siblings().removeClass("current")
     $(".main_photo img").attr("src", $(this).prop("href"))
     return false;
});
CSS
Тут уж сами под свой дизайн. Например, как на картинке
.more_photos {
      float: left;
     width: 100px;
}

 .more_photos a {
     display: block;
     margin-bottom: 10px;
     text-decoration: none;
     width: 100%;
     height: 100px;
     border: 3px #fff solid;
     box-shadow: 0px 0px 1px #ccc;
     transition: all .25s ease-out;
}

   .more_photos a:hover {
     border: 3px #f6f6f6 solid;
}
   .more_photos a.current {
     border: 3px #D68189 solid;
}

.main_photo {
     float: right;
     width: calc(100% - 110px);
}

 .main_photo img {
     width: 100%;
     transition: all .25s ease-out;
}

PS: само собой, на сайте должен быть подключен jquery
Фото:
Валерий
Михаил Базаров, нет все указанно. Даже попробовал создав другое свойство.
<div class="more_photos">
<a href="<? echo $arResult['DETAIL_PICTURE']['SRC'] ?>" class="current">
  <img src="<? echo $arResult['DETAIL_PICTURE']['SRC'] ?>" alt="<? echo $arResult['NAME'] ?>">
</a>
<?
if (count($arResult["PHOTOS"]) > 0) {
  foreach ($arResult["PHOTOS"] as $PHOTO) {
  $renderImage = CFile::ResizeImageGet($PHOTO, Array("width" => 200, "height" => 200), BX_RESIZE_IMAGE_EXACT, false);
  ?>
 <a href="<?= $PHOTO["SRC"]; ?>" alt="<? echo $arResult['NAME'] ?>">
  <img src="<?= $PHOTO["SRC"]; ?>" alt="<? echo $arResult['NAME'] ?>">
 </a>
 <? }
  } ?>
</div>
Файлы:
0 Б
0 Б
0 Б
Михаил Базаров
Тогда, странно. Подсказать не могу, видимо: какая-то мелочь упущена. Но какая не понятно, нужно в живую смотреть
Валерий
Михаил Базаров, каким то образом все таки разобрался с отображением. Чтобы отображались фотографии с свойства MORE_PHOTO, но теперь нет самой большой картинки, которая должна меняться.

Ваш код вставил:
<div class="more_photos">
     <a href="<? echo $arResult['DETAIL_PICTURE']['SRC'] ?>" class="current">
           <img src="<? echo $arResult['DETAIL_PICTURE']['SRC'] ?>" alt="<? echo $arResult['NAME'] ?>">
    </a>
    <?
    if (count($arResult["MORE_PHOTO"]) > 0) {
       foreach ($arResult["MORE_PHOTO"] as $PHOTO) {
       $renderImage = CFile::ResizeImageGet($PHOTO, Array("width" => 200, "height" => 200), BX_RESIZE_IMAGE_EXACT, false);
   ?>
      <a href="<?= $PHOTO["SRC"]; ?>" alt="<? echo $arResult['NAME'] ?>">
               <img src="<?= $PHOTO["SRC"]; ?>" alt="<? echo $arResult['NAME'] ?>">
      </a>
      <? }
   } ?>
</div>

Но большой картинки все равно нет.
Файлы:
0 Б
Андрей Михайлов -> Всем
26 октября 0:21
Михайл скажите плз, у вас видео судя по всему оч старое? #2 по приложениям... пытаюсь вставить шапку по нему текст и того ... совсем не хочет( даже просто текст... может что поменялось?((
Михаил Базаров
Не очень понял вопроса. Если по мобильному приложение - все должно быть актуальным, там ни чего особо не поменялось.
a13z2005@yandex.ru -> Всем
15 октября 20:01
Всем привет, пишу каталог на редакции Стандарт.
Подскажите кто сталкивался с реализацией корзины, с чего начать и т.д.
Спасибо
Михаил Базаров -> Всем
14 мая 2018 9:03
Установить вебсервер на Ubuntu 18 LTS, оптимизированный под битрикс.

Выполняем обновление:
apt-get update
apt-get upgrade

Перезагружаем сервак: reboot

Данный вебсервер использую только для локальной разработки. Собственно, запущен на моем рабочем ноутбуке
под К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

Ставим базу данных (Mysql 5.7):
sudo apt install mysql-server
Сконфигурировать Mysql, все команды выполняем поочереди
sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqld
sudo mysqld_safe --skip-grant-tables&
sudo mysql --user=root mysql

Устанавливаем пароль пользователя root базы данных
mysql> update user set authentication_string=PASSWORD('PASSWORD') where user='root';
flush privileges;

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

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


И конфигурацию базы данных
в файле /etc/mysql/mysql.conf.d/mysqld.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

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

Создаем пользователя базы данных с полными привелегиями (так как root заблокирован и пусть таким остается). Команды выполняем поочереди
sudo mysql --user=root mysql
CREATE USER 'USER_NAME'@'localhost' IDENTIFIED BY 'PASSWORD';
GRANT ALL PRIVILEGES ON * . * TO 'USER_NAME'@'localhost';
FLUSH PRIVILEGES;

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

Но об этом позже.

Видео инструкция, по данной заметке
https://www.youtube.com/watch?v=W-2mXox4ukU
Фото:
Файлы:
mysqld.cnf (3.16 КБ)
Локальный вебсервер в подсистеме Linux в Windows 10
Делается по заметке https://camouf.ru/club/user/1/blog/144/ Настраиваем локальный веб-сервер, для разработки сайтов. Осваиваем подсистему Linux в Windows 10 ...
Михаил Базаров
Скрипт для добавления виртуального хоста
#!/bin/bash
#************************************************#
# Скрипт создает новый сайт, вклюает его в       #
#************************************************#
# Основа взята тут http://ubuntu-favorite-os.blogspot.co...u1010.html

echo -e "33[1mВведите название проекта (Например example.com):33[0m";
read NAME_OF_PROJECT

#создаем папки проекта
sudo mkdir /home/camouf/SITES/$NAME_OF_PROJECT

#даем полные права (только для локальной разработки- не пускайте в инет)
sudo chmod -R 777 /home/camouf/SITES/$NAME_OF_PROJECT/

#добавляем правила в конфигурационый файл апача
add_to_apache_conf="
<VirtualHost *:80>
ServerName ${NAME_OF_PROJECT}
ServerAdmin webmaster@localhost
DocumentRoot /home/camouf/SITES/${NAME_OF_PROJECT}/
<Directory /home/camouf/SITES/${NAME_OF_PROJECT}/>
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>"

#добавляем новый хост
#echo "$add_to_hosts_conf" >> /etc/hosts
touch /etc/apache2/sites-available/${NAME_OF_PROJECT}.conf
echo "$add_to_apache_conf" >> /etc/apache2/sites-available/${NAME_OF_PROJECT}.conf

#включаем конфигурацию сайта
sudo a2ensite ${NAME_OF_PROJECT}

#перезапускаем апач
sudo systemctl restart apache2
chmod -R 777 /home/camouf/SITES/${NAME_OF_PROJECT}

echo "Сайт готов"
Сергей Стефанович
Михаил Базаров, а чего ты не пробуешь Debian 10 + LEMP ?
Михаил Базаров
Сергей Стефанович, а даже не знаю. Без разницы, как по мне
valia9889@gmail.com Всем
17 сентября 16:12
Добавлены 1 фото в альбом: Новый альбом
Михаил Базаров -> Всем
7 сентября 12:28
Свойство: привязка к Яндекс:Картам - вывести из нескольких элементов на одну карту

Подробнее:
https://camouf.ru/blog-note/7803/
a13z2005@yandex.ru -> Всем
28 августа 22:38
Привет всем!
у кого есть старые шаблоны корзины?!
и подскажите пожалуйста как в списке товаров (в корзине) вывести наименование раздела товара?
Михаил Базаров
Старая корзина во вложении.
Вывести раздел можно вот так: https://camouf.ru/blog-note/6093/
В корзине можно получить ID элемента

Учтите что у SKU это и есть ID товара, а у простого товара нужно получить его по PRODUCT_ID
Файлы:
sale.basket.basket.7z (112.55 КБ)
Михаил Базаров
Хотя у SKU нет разделов- так что все равно, нужно получать ID элемента по связанному SKU или PRODUCT_ID.
vitstar -> Всем
20 августа 15:58
Всем привет!

Как вывести элементы подраздела если родительский раздел был изменен?

Компонент catalog:section

У родительского раздела не выводятся товары из под разделов.
Если эти подразделы уже до этого существовали и были переключены в этот родительский раздел.
Но если пересохранить эти товары (Просто зайти в товар и сохранить), то данный товар выводится в родительском разделе.
Так же в родительском разделе выводятся товары которые были созданный уже в подразделе родительского раздела.
Например у нас есть 3 раздела. Раздел одежда, штаны и кофты. Одежда и штаны находятся на одном уровне, а кофты являются подразделом раздела "Одежда". Товары из раздела кофты выводятся в разделе одежды (Так как раздел кофты подраздел). В админке меняем родительский раздел разделу "Штаны" на "Одежду" (Теперь раздел штаны подраздел "Одежды"). Товары из раздела штаны не выводятся. Почему? Но если мы пересохраним какой либо товар из раздела "Штаны", то он выведится в разделе "Одежда". Как сделать что бы автоматически выводились товары?

Михаил Базаров
А битрикс чистый? Или какое-то решение из маркетплейса?
По идее, глюк какой-то. Так быть не должно
Андрей Александрович -> Всем
19 августа 14:39
Добрый день, как получить доп. свойство самого инфоблока?
Михаил Базаров
Не понял вопроса
Михаил Базаров -> Всем
11 августа 14:19
Битрикс, удалить всех пользователей через API

Если хотите удалить всех зарегистрированных пользователей из Битрикс.
Делать это в списке пользователей, достаточно ресурсоемко и рутинно (если их реально много, например 10 000).
Вывести всех сразу и отметить чекбокс "выбрать всех" - скорее всего не получится, придется выводить по 1000 или меньше.

Что бы "грохнуть всех разом" - можно воспользоваться API
<?
$filter = Array
(
  "GROUPS_ID"=> Array(5))
);
$rsUsers = CUser::GetList(($by="id"), ($order="desc"), $filter);
while($arItem = $rsUsers->GetNext())
{
        if (CUser::Delete($arItem['ID'])) echo "Пользователь " .$arItem['ID']. " удален";
}
?>

Здесь мы:
-  Выбрали всех пользователей из группы с ID=5 (обычно "Зарегистрированные пользователи")
-  Методом User::GetLis - получили всю информацию о них (но, по сути, нам нужен только ID пользователя)
-  Методом CUser::Delete - удалил полученного пользователя (перебрав всех)

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

Учтите, что если у пользователя есть заказ в магазине- он не удалится. Сначала нужно заархивировать все заказы или заказы до определенной даты.
Михаил Базаров -> Всем
6 августа 20:50
Получить группу текущего авторизованного пользователя в битрикс

Если нужно вывести где-то на странице или в кабинете группу, к которой относится текущий авторизованный пользователь. Можно получить ее методом
CGroup::GetByID

Сначала, методом CUser::GetUserGroup - получаем ID всех групп, к которым относится пользователь.
Затем, раздербаниваем массив foreach-ем и получаем названия всех групп по их ID
<?
global $USER;
   $curUserId = $USER->GetID(); // ID текущего пользователя
   $arGroups = CUser::GetUserGroup($curUserId); // ID групп текущего пользователя
   foreach ($arGroups as $curUserGroups) {
    $rsGroup = CGroup::GetByID($curUserGroups); // Получаем названия всех групп
    $arGroup = $rsGroup->Fetch();
    if ($arGroup['ID'] !== '2') {
            echo $arGroup['NAME'];  // И выводим
     }
   }
?>
В моем примере, я еще выполняю проверку ( if ($arGroup['ID'] !== '2') ). Не вывожу группу "Все пользователи" - у меня ее ID=2
По сути, все пользователи состоят в этой группе- выводить ее ни к чему




Фото:
Михаил Базаров -> Всем
6 августа 18:21
Что бы преобразовать php массив в js код, например передать данные о товаре из template.php в script.js шаблона. Можно использовать
CUtil::PhpToJSObject

Пример

В template.php
$jsParams = array(
         'PRODUCT' => array(
                  'PREVIEW_TEXT' => $arResult['~PREVIEW_TEXT'],
          ),
);

<script>
   var <?=$obName?> =
   new JCCatalogElement(<?=CUtil::PhpToJSObject($jsParams, false, true)?>);
</script>

Теперь в script.js будет доступно описание анонса, можно создать переменную для более гибкого управления
this.product.text = this.params.PRODUCT.PREVIEW_TEXT;

a13z2005@yandex.ru -> Всем
27 июля 0:01
Здравствуйте, подскажите пожалуйста как в catalog.comments отключить toolbar и табы, чтобы осталось только поле ввода текста ( скрин https://yadi.sk/i/fBxLxC2RHvkBwg ).

может есть у кого упрощенная версия этого компонента?!

Спасибо.
Михаил Базаров
Там все лихо закручено. Это компонент состоит из 3-х разрозненных.
Проще всего, попрятать не нужные части в display:none
a13z2005@yandex.ru -> Всем
21 июля 21:54
Всем привет!)
Подскажите пожалуйста как реализовать сгруппированный вывод товаров по разделам и подразделам
в компоненте catalog.section
Пример - см.скрин  https://yadi.sk/i/1GuTJxWFMu9dAw

Михаил Базаров
Посмотрите. Если правильно понял- то что нужно
https://camouf.ru/club/user/1/blog/202/
Михаил Базаров -> Всем
29 мая 10:27
Если нужно что-то сделать при появлении клавиатуры в мобильном приложении на Битрикс.

При вызове клавиатуры, внутри приложения страница сжимается по высоте. То есть, клавиатура накладывается не поверх контент, а именно уменьшает высоту контента, на свою высоту.

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

Частный случай:
- В приложении имеется закрепленная снизу панель, с быстрыми ссылками.
- При вызове клавиатуры (например написать комментарий) эта панель также поднимается над клавиатурой, перекрывая пол экрана.
- На iOS еще и ведет себя не адекватно, оказываясь в центре и ломая верстку
- Решение: прятать эту панель в display:none при появлении клавиатуры

Для этого блока добавляем id="keyborad_show", понятное дело, id можно любой.
<div id="keyborad_show" class="bottom_fixed">
       <a href="/mobileapp/dynamic/audio"><span class="fa fa-file-audio-o"></span> Аудио</a>
       <a href="/mobileapp/dynamic/video/"><span class="fa fa-file-video-o"></span> Видео</a>
       <a href="/mobileapp/dynamic/trand/"><span class="fa fa-fire"></span> Тренд</a>
</div>

Дальше все просто.
Включаем слежение за клавиатурой
BXMobileApp.UI.Page.captureKeyboardEvents(true);

На событие ее появления, просто добавляем класс к нужному элементу
var keyboard = document.getElementById('keyborad_show');
BX.addCustomEvent("onKeyboardDidShow", function(){ // Событие появления клавиатуры
       $(keyboard).addClass('dn_bf');
});
Ну и в css добавляем
.dn_bf {
      display: none;
}


Анатолий Теорский -> Всем
7 мая 8:34
А можно как нибудь в оформлении заказа принудительно всегда ( не зависимо от профиля покупателя ) выбирать способ оплаты и службу доставки которые мы поставим ? Проблема заключается в открытии всех блоков, так как у некоторых платежных систем и служб доставки есть ограничения, то когда грузится оформление заказа, может загрузиться одновременно две не совместимые комбинации ( платежка + служба доставки ) и тогда служба доставки не отображается. Либо может есть способ корректно всегда открыть все блоки в оформлении заказа? ( метод который описал Михаил - не работает ), а другие которые описаны на форумах - приводят к неотображению способов доставки ( если есть ограничения )
Михаил Базаров
Тут, только делать свою форму оформления.
Если правильно понял вопрос, нужно принудительно выбирать и службы оплаты/доставки.
Надо скидывать, все ранее выбранные пользователем (что не позволит штатный компонент) и выбирать заранее "утвержденные".
Михаил Базаров -> Всем
4 мая 10:18
Где MAMP Хранит базы данных на macOS

MAMP Pro до версии 5: Хранит базы данных в директории своей установки
/Applications/MAMP/db

MAMP Pro версии 5: Хранит базы в
/Libraries/Application Support/appsolute/MAMP PRO/db
Михаил Базаров -> Всем
17 февраля 2018 12:13
Разные свойства у разделов одного инфоблока  в Битрикс
Как создать разные свойства, в форме создания элемента, внутри одного инфоблока битрикс.

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

https://www.youtube.com/watch?v=1KP1cWM26tU
Разные свойства у разделов одного инфоблока в Битрикс
Как создать разные свойства, в форме создания элемента, внутри одного инфоблока битрикс.
<Без имени>
Для небольшого ассортимента это хорошее решение. А если выгрузка из 1С и тысячи позиций и тысячи свойств, есть ли варианты автоматизировать процесс?
Михаил Базаров -> Всем
20 марта 10:57
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);

Вячеслав
Сделал все по инструкции, но не сработало...
Файлы:
0 Б
Михаил Базаров -> Всем
8 февраля 16:38
Заготовка для разработки сайта на битрикс.
В архиве:
- Папка local с базовым шаблоном и необходимыми файлами (инклюды, аяксы итд)
- Структура персонального раздела
- Структура типовых статичных страниц

Использовано в видео:
https://www.youtube.com/watch?v=vn1OJG...e=youtu.be
Файлы:
fish_site.zip (3.69 МБ)
2) Разработка простого сайта с магазином на #Битрикс / В режиме стримов
Мой сайт: https://camouf.ru Стрим #2: Чистим битрикс и готовим структуру сайта Что будем делать и как будут проходить трансляции. Заготовка шаблонов и структ...
<Без имени>
Вот это прям громадное, спасибо.
Михаил Базаров -> Всем
21 марта 18:08
Старый-новый шаблон оформления заказа.
Там немножко не аккуратно внутри, делал по быстрому, но думаю кому надо причешете.
Основан на старом шаблоне, верстается легко.
Фото:
Файлы:
older.zip (135.99 КБ)
Михаил Базаров -> Всем
20 марта 21:09
Figma заготовки для мобильного приложения

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

https://www.figma.com/file/CoWZtnT9VlW...le-screens
Михаил Базаров -> Всем
17 марта 13:13
Если файлы php скачиваются вместо выполнения в Битрикс веб окружении

Если у вас Битрикс веб окружение, и сайт вроде бы нормально работает но некоторые php файлы скачиваются вместо выполнения.
Убедитесь что эти файлы не начинаются с "upload*.php" - то есть, нельзя в именах папок и файлов использовать это слово (даже если uploadpict.php).
Они заблокированы от исполнения на уровне httpd в Битрикс Окружении


Михаил Базаров -> Всем
27 февраля 14:55
Принудительно перезаписать ядро Битрикс, если оно модифицировано.

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

Просто переходим на страницу
ВАШ_САЙТ/bitrix/admin/update_system.php?BX_SUPPORT_MODE=Y

Само собой, перед запуском, сделайте полную резервную копию.