Михаил Базаров- создание сайтов на битрикс

Михаил Базаров: Сообщения

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

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

Михаил Базаров

Дата последнего входа:вчера в 19:14
Дата регистрации:7 Февраля 2012 21:17
День рождения:7 ноября
Пол:Мужской
Михаил Базаров -> Всем
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;

Михаил Базаров -> Всем
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 ...
Сергей Стефанович
Михаил Базаров,
Михаил, расскажи пожалуйста какие парметры нужно выставить в php.ini и my.cnf
установил Brainy. но производительность на битрикс вообще так себе
Михаил Базаров
Скрипт для добавления виртуального хоста
#!/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 "Сайт готов"
Михаил Базаров -> Всем
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
Фото:
Михаил Базаров -> Всем
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;
}


Михаил Базаров -> Всем
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: Чистим битрикс и готовим структуру сайта Что будем делать и как будут проходить трансляции. Заготовка шаблонов и структ...
<Без имени>
Вот это прям громадное, спасибо.