Nikovit <Путешествия и разработка>

Битрикс загрузить картинки по артикулу из файлов фотографий

Скрипт для загрузки фотографий товаров из файлов, файлы должны иметь вид артикул.jpg

Снабдил подробными комментариями в коде, если что то непонятно, пишите в комментарии))))

<?php
$_SERVER["DOCUMENT_ROOT"] = '/var/www/html/bx-site/';
require($_SERVER["DOCUMENT_ROOT"] . "bitrix/modules/main/include/prolog_before.php");

CModule::IncludeModule("iblock");

// Директория с картинками для загрузки
const DIR_IMG = '/var/www/html/bx-site/script/img-import/';

// Получем массив файлов
$img_arr_dir = scandir(DIR_IMG);

$arCode = array();
$i=0;
foreach ($img_arr_dir as $item){
    if($item == '.' or $item == '..'){
        continue;
    }
    $path = DIR_IMG . $item;
    $vendor_code = explode('.', $item);

    $arCode[$i]['code'] = $vendor_code[0];
    $arCode[$i]['path'] = $path;
    $i++;
}

//Получаем товары каталога одним запросом чтобы не дергать поодиночке
$resItemsList = CIBlockElement::GetList(
    array("ID", "NAME", "CML2_ARTICLE"),
    array("IBLOCK_ID"=>11, "CML2_ARTICLE" => array_keys($arCode)),
    false,
    false,
    array("ID", "NAME", "PROPERTY_CML2_ARTICLE")
);
// Преобразуем полученные товары в массив
$elements = array();
while ($element = $resItemsList->fetch())
{
    $elements[] = $element;
}

// Цикл которой определяет ID товара и сохраняет картинку в инфоблок
$el = new CIBlockElement;
foreach ($arCode as $item){
    // Находим ID товара по артиклу
    if($key = array_search($item["code"], array_column($elements, 'PROPERTY_CML2_ARTICLE_VALUE'))){
        echo 'Найден товар с артикулом ' . $item["code"] . ' ID: ' . $elements[$key]["ID"] . '<br>';
        //Сохраняем картинку в инфоблок
        $arLoadProductArray = Array(
            "DETAIL_PICTURE" => CFile::MakeFileArray($item["path"]),
        );
        if($el->Update($elements[$key]["ID"], $arLoadProductArray)){
            echo 'Изображение загруженно'. '<br>';
        } else {
            echo 'Изображение не загруженно'. '<br>';
        }
    } else {
        echo 'Товар с артикулом ' . $item["code"] . ' не найден' . '<br>';
    }
}

//echo '<pre>' . print_r($arCode, 1) . '</pre>';

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php");

windows символические ссылки

Команда создания символической ссылки в windows
mklink /j "путь, где будет создана символьная ссылка" "путь, где находятся исходный файл или папка"

Битрикс. Узнать где находиться шаблон компонента

Зачастую непонятно где лежит шаблон компонента битрикс, код ниже поможет справиться с этой проблемой.
<?
// Название компонента
$componentName = 'sotbit:catalog.section';
// Название шаблона
$componentTemplate = 'catalog';

$component = new CBitrixComponent();
$component->InitComponent($componentName, $componentTemplate);
$component->initComponentTemplate();

// Выводим путь шаблона компонента
echo $component->__template->GetFolder();

Битрикс. Время на сервере базы данных отличается от времени на веб-сервере больше, чем на 10 минут

При обмене 1С с битриксом возникает ошибка:
Авторизация не выполнена.
Не удалось установить соединение с сервером. Проверьте имя пользователя и пароль.
Ответ сервера: failure
Время на сервере базы данных отличается от времени на веб-сервере больше, чем на 10 минут. Вероятно неправильно настроены временные зоны. Выполните настройку и повторите обмен.
Не удалось установить соединение.
Очевидно что проблема во временной зоне на сервере:

Screenshot_10.png
Для настройки часового пояса на сервере 1С Битрикс:
1. Определяем свой часовой пояс который должен быть на сервере, например тут http://php.net/manual/en/timezones.php

у меня это: Europe/Moscow

2. Устанавливаем часовой пояс для php.
в файле /bitrix/php_interface/dbconn.php
добавляем строку:
date_default_timezone_set("Europe/Moscow");

2. Устанавливаем часовой пояс для база данных.
В файле /bitrix/php_interface/after_connect_d7.php
$connection->queryExecute('SET LOCAL time_zone="'.date('P').'"');

Лучшие плагины для PhpStorm

Atom Material Icons

screenshot_21309.png

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

Битрикс url текущей страницы

Для получения url текущей страницы достаточно воспользоваться встроенными инструментами битрикса:
$current_link = $APPLICATION->GetCurPage();
//$current_link вернет /about/delivery/

Битрикс, получение бесплатной лицензии

Для компаний занимающихся разработкой сайтов есть возможность получения бесплатной NFR лицензии Битрикс управление сайтом и Битрикс 24.

NFR (Not For Resale) — это бесплатная лицензия для самостоятельного использования. Ее нельзя продать, нельзя разрабатывать на ней проекты для клиентов.

NFR нужна для:
  • ваших собственных проектов
  • обучения сотрудников вашей компании
  • презентаций продукта клиентам
Для получения лицензии нужно выполнить следующие условия:

1. Добавить соглашение и подписать заявление о присоединение к ЭДО в личном кабинете партнера https://partners.1c-bitrix.ru/personal/contract/index.php

2. В профиле партнера должен быть хотя бы один сотрудник сдавший успешно тесты по курсам:
Администратор. Базовый
Администратор. Модули
Администратор. Бизнес
Разработчик Bitrix Framework
Технология Композитный сайт

3. Перевести сайт вашей компании, для которого вы запрашиваете NFR, на продукт «1С-Битрикс: Управление сайтом» (необходимо использовать Демо-версию). Так же необходимо будет внедрить на вашем сайте технологию композитного сайта.
Дизайн вашего сайта должен быть оригинальным (пожалуйста не используйте стандартные шаблоны дизайна, поставляемые в комплекте с программным продуктом).

На сайте разместите:
— описание вашей компании и перечень услуг;
— информацию о том, что вы — партнер 1С-Битрикс. Напишите об этом, по желанию можете добавить логотип партнерства;
— описание всех редакций «1С-Битрикс: Управление сайтом» (информация для размещения).
— логотип 1С-Битрикс (доступен здесь);
— текст «Работает на «1С-Битрикс: Управление сайтом» и ссылку на http://www.1c-bitrix.ru/products/cms/ на всех страницах сайта;


Важно!!!

Лицензия выдается сроком на один год.

  • NFR-лицензия продлевается автоматически через год после ее получения, если сумма ваших заказов за этот год превышает в двукратном размере сумму выбранной вами редакции NFR-лицензии.
    Например, при использовании NFR-лицензии редакции «Стандарт» необходимо продать клиентам любые лицензии на продукты «1С-Битрикс» на общую сумму не менее 15900x2=31800 рублей.
  • Если условия продления не будут выполнены, то через год лицензия станет неактивной, и вы не сможете получать обновления системы.
Если у вас возникли вопросы по получению лицензии, то можно задать их  здесь