Pull to refresh
26
0

Разработчик

Send message

1. Как быть с лицензией? Как она будет сама подцепляться, если надо пересобрать и оттестировать всю систему? И фраза " Перейти на страницу Обновление платформы" из документации, вообще у них разорвала все шаблоны. Обновление в работающем продуктовом контейнере?!

Для обновления функционала изнутри контейнера, чтобы встроить это в пайплайн можно использовать CLI команду встроенную в продукт "update:modules", с её помощью можно запускать обновление только до конкретных указанных версий (типа как composer.json, только updates.json).

Детальной документации на эту команду к сожалению пока что нет, можете с помощью встроенного в команду хелпа посмотреть примеры использования.

Подробнее про Bitrix CLI можно посмотреть туц: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=11685

2. Как быть с шаблонами сайтов? На github не увидели документации.

А какая с ними проблема? Они также являются частью исходного кода проекта и живут рядом с остальными исходниками.

3. Ссылку на официальный форум по контейнерному решению не нашли на сайте 1С-Битрик Разработчикам.

Передал информацию коллегам.

Также стоит упомянуть, что различные проблемы и предложения лучше сразу оформлять в виде issue или pull request в самом репозитории. При таком подходе и проблемы и их решения будут ближе к коду и можно будет предметно разговаривать.

По хорошему ваши пожелания нужно озвучить в поддержку, чтобы они зафиксировали ваше обращение в качестве заявки на фичу (а возможно и добавили в уже существующее), и чем больше будет обращений на одну тему, тем сильно больше вероятность, что мы начнём делать её ;-)

Прямо сейчас вы самостоятельно можете зарегистрировать свои роботы через REST и навешивать на них необходимую функциональность: https://apidocs.bitrix24.ru/api-reference/bizproc/bizproc-robot/index.html

Если гибкости реста не хватает для облака, то тут уже стоит задумать про перевоз клиента в коробку.

Как видите на вашу проблему есть как минимум 2 решения прямо сейчас, нужно проявить лишь чуть больше прыткости :)

Да, команды работают на базе пакета symfony/command, но в поставке этот пакет не поставляется, нужно установить зависимость через композер, по ссылке выше есть инфа на этот счет.

Внутри продукта константа всегда true если подключен файл пролога main/include/prolog_before.php , но никогда не знаешь, чего можно ожидать от кастомных интеграцией :)

Начиная с версии main,24.0.0 вы можете регистрировать свои команды через конфигурацию модуля ;-)

Дока: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=11685

Поверите если скажу что это действительно в работе? :-)

Тут скорее правильней задать вопрос вопрос про популяризацию CMS в целом, т.к. планов отчуждать отдельно фреймворк на текущий момент нет.

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

Также ведутся работы по переработке документации конкретно по фреймворку и CMS, чтобы документация стала более френдли к разработчикам.

Плюс не прекращается регулярная доработка ядра продукта, внедряем новые инструменты и технологии. В качестве спойлера могу сказать что в этом году подвезём пару-тройку хороших нововведенией, которые вероятно многие долго ждали ;-)

Примите как данность — тестировать визуальную составляющую придется на костылях

Отсутствия адекватного инструмента, это прям сильно тормозящий фактор :/

Неужели вендоры Android и iOS не могут дать нормальной тулзы?

Они хотя бы делают что-то в этом направлении? :D

Этот набор компонентов используется только для REST приложений, он коррелирует с имеющейся библиотекой внутри продукта.

Это был пример когда нужно вшивать какой-то кусок в какой-то SQL.

При желании можно использовать и convertToDb :

$sql = "WHERE name LIKE " . $sqlHelper->convertToDb("%{$value}%");

Не очень понял, что имеется в виду. forSql используется в SqlHelper, фактически, только один раз, для реализации convertToDbString.

В любом случае, нет ни одной причины использовать forSql вместо convertToDb где бы то ни было.

Один раз, зато какой :) Тут я имел ввиду сам класс как кейс использования forSql.

Если говорить про конструирование SQL запросов без ORM, даже банальных LIKE конструкций, то convertToDb не подойдёт, и там нужно использовать только forSql :

$sql = "WHERE name LIKE '%" . $sqlHelper->forSql($value) . "%'";

Ну так он и должен быть на две строки. Если больше, то надо вынести формирование запросов в отдельные методы. Тогда любой код транзакции будет содержать столько строк, сколько в ней запросов. Плюс "на простыне кода разница уже не будет заметна", и функция не нужна - так себе аргумент.

С таким примером соглашусь, что наличие замыкания имеет смысл и будет удобно.

Я не очень люблю когда в качестве аргументации приводят очень простые примеры, которые чаще всего далеки от жизни, поэтому не упустил возможности указать на это :)
Саму реализацию через коллбэк возьмём на заметку и возможно реализуем, спасибо!. Насколько знаю уже во всех фреймворках и ORM такая история есть, не будем отставать от устаревающих трендов :)

Тут вполне можно было согласиться, что да, такой метод в Битриксе не помешал бы

Если со всем соглашаться, то времени не хватит ни на ответы, ни на реализацию, поэтому приходится достаточно консервативно подходить ко всему новому :D

Такой экзотики из коробки нет :) В данном случае можно добавить свое поле:

Кастомное поле
use Bitrix\Main\ORM\Fields\ScalarField;

abstract class Geometry
{}

class GeometryField extends ScalarField
{
    public function cast($value)
    {
        if ($this->is_nullable && $value === null)
        {
            return null;
        }

        if ($value instanceof Geometry)
        {
            return $value;
        }

        return Geometry::createFromWKT($value);
    }

    public function convertValueFromDb($value)
    {
        return $this->cast($value);
    }

    public function convertValueToDb($value)
    {
        if ($value === null)
        {
            if ($this->is_nullable)
            {
                return null;
            }
            
            throw new Exception('Is not nullable');
        }
        
        if ($value instanceof Geometry)
        {
            return $value->toWKT();
        }
        
        throw new Exception('Invalid value');
    }
}

Конкретно с JSON справляется: можно использовать поле Bitrix\Main\ORM\Fields\ArrayField , при сохранении/чтении будет выполнятся преобразование данных в/из JSON.

Про работу с бинарными данными в статье упоминание есть.

На счет "прочих типов", тут уже нужна конкретика :)

Удивился, полез посмотреть, и действительно, на самом деле выполняется более логичный запрос с LIMIT 0.

Действительно, опечатка в статье. Спасибо!

Всё-таки, слово "подготовленный" имеет строго определённое значение. Здесь лучше подойдёт "отформатированный".

Верное замечание, убрал по тексту использования термина, чтобы не путать умы юнных читателей :)

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

Раскрыл использование методов convert* детальнее ;-)

Спасибо, кстати, некоему А.В.Шаталову за то что код можно нормально посмотреть. Самому Битриксу это, судя по всему, не нужно.

Зачем, если исходники у нас всегда под рукой? :) Если серьезно, то проблема с докой и справочником API известная, мы ей занимаемся!

Судя по всему, автор статьи сам не понимает, что делает метод convertToDb, и почему его всегда следует предпочесть методу forSql

Завидую вашей способности читать чужие мысли, но в данном случае это лишь вопрос неверной терминологии, а не непонимания)

Не всегда стоит использовать convertToDb , вместо forSql . В целом сам класс SqlHelper , является хорошим примером когда стоит использовать forSql .

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

Вот эта привычка молча обрезать строку по длине наверняка подпортила нервов не одному поколению программистов: они думали что данные записались норм - ошибок ведь не было - а потом через полгода выплывает, что там какие-то обрезки.

Надеюсь мы оба понимаем, что это неправда ;) Обрезка происходит не "молча", а только в случае указания длинны в методе convertToDbString , либо при указании размера в ORM в некоторых классов Bitrix\Main\ORM\Fields\* .

В случае ORM, вместо указания размера и обрезки, можно использовать Bitrix\Main\ORM\Fields\Validators\LengthValidator

И снова термин, который во всём остальном мире означает одно, а в битриксе - что-то совсем другое.

Более подходящего термина к сожалению не нашлось, т.к. в любом случае это именно подготовка SQL запроса.

... Но при этом что именно другое - в статье не объясняется!

Очень жаль, что вы не заметили блок кода который следует сразу за этой фразой :(

И никто не догадался сделать простую онанимку

Пока вы пишите простой код на 2 строки, то действительно выглядит лучше. Если речь уже про более большие куски кода, что замыкание, что try/catch выглядят одинаково ;)

Дизайн - сущность, дизайнить - процесс ;-)

UserStoryMapping тут не рассматривается, потому что он сильно хуже данных подходов? Кажется он самый попсовый :)

Ясно, понятно. В целом могли сразу ответить что сами не понимаете о чем пишите ;-)

Много буковок и ни одной картинки :( Диаграмма C4 это про системный дизайн или про архитектуру?

Можете в картинках привести пример: вот схемка архитектуры, вот схемка системного дизайна?

Или разница вообще не в схемках? :)

1
23 ...

Information

Rating
7,742-nd
Location
Курган, Курганская обл., Россия
Works in
Date of birth
Registered
Activity

Specialization

Fullstack Developer, Software Architect
Senior
PHP
Docker
Database
OOP
Algorithms and data structures
Object-oriented design
Database design
Software development
Designing application architecture