Форум программистов, компьютерный форум, киберфорум
1С Битрикс
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
-1 / 1 / 0
Регистрация: 24.02.2020
Сообщений: 175

Про модуль и события ORM

28.07.2022, 18:21. Показов 5275. Ответов 56

Студворк — интернет-сервис помощи студентам
Всем привет! Я написал тестовый модуль который добавляет к полю NAME эллемента восклицательный знак(не без помощи людей с данного форума),конечный код выглядит вот так
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
    public function exclamationPoint(): void
    {
        Loader::includeModule('iblock');
        $params = [
            '=IBLOCK_ID' => 167,
            '=ACTIVE' => 'Y',
        ];
        $query = new Entity\Query(Iblock\ElementTable::getEntity());
 
        try {
            $query->addSelect('NAME')
                ->registerRuntimeField(
                    'NameWithExclam',
                    new ExpressionField(
                        'NameWithExclam',
                        "CASE WHEN RIGHT ( %s, 1)<> '!' THEN CONCAT( %s,'!') ELSE %s END",
                        ['NAME', 'NAME', 'NAME']
                    )
                )
                ->addSelect('NameWithExclam')
                ->setFilter($params)
                ->fetchCollection()
            ;
        } catch (ArgumentException|SystemException $e) {
        }
 
        $elements = $query->exec();
        foreach ($elements as $item) {
            echo '<br><br>', sprintf(
                '%s',
                $item['NameWithExclam']
            );
        }
    }
1)а могу ли я непосредственно с орм сохранить результат NameWithExclam в поле NAME для каждого элемента чтобы они пошли в БД?
2)Увидел в одной статье что в модулях часто используют обработчики событий,но что это чёткого объяснения не увидел,от этого другой вопрос, что значит регистрация события добавления элемента?
Заранее спасибо всем и каждому
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.07.2022, 18:21
Ответы с готовыми решениями:

Модуль express-orm-mvc
Нашел модуль express-orm-mvc, он организует паттерн mvc. Вопросы: 1) Насколько он быстрый? Посмотрел исходник увидел, что модели и...

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

Django ORM запрос с подзапросом или переведите SQL в запрос Django ORM
В общем весь вопрос был в заголовке! Есть запрос на SQL он работает нормально вот только не знаю как заставить Django-mptt корректно на...

56
3061 / 1465 / 265
Регистрация: 16.03.2008
Сообщений: 6,512
Записей в блоге: 2
04.08.2022, 17:51
Студворк — интернет-сервис помощи студентам
Работать надо правильно. Понимая что такое тип, и понимая что делаете (и зачем) в каждой строчке кода.

Если предположить, что код не упадет с ошибкой, то на вход обработчиков, которые будут выполняться после вашего - придет совсем не то, что они там ожидают....
0
-1 / 1 / 0
Регистрация: 24.02.2020
Сообщений: 175
04.08.2022, 18:49  [ТС]
да я знаю

Добавлено через 12 минут
выпадает ошибка Unknown entity value (100)

Добавлено через 41 минуту
переделал до безумия просто
PHP
1
2
3
4
5
6
7
8
9
10
    public function onAddApplication(&$arFields): void
    {
        if ('!' !== substr($arFields['NAME'], -1, 1)) {
            $arFields['NAME'] .= '!';
        }
 
        $hui = new onAddApplication($arFields['NAME']);
        $hui->update($arFields['NAME']);
    }
}
но почему-то всё же не работает и выдаёт всё ту же ошибку
0
3061 / 1465 / 265
Регистрация: 16.03.2008
Сообщений: 6,512
Записей в блоге: 2
04.08.2022, 19:10
Цитата Сообщение от chistiy18 Посмотреть сообщение
переделал до безумия просто
и по прежнему какой то бред.

Уделяйте больше внимание именованию сущностей (переменные, классы, методы). Приведенный вами кусок кода абсолютно не читаем.
Что за класс onAddAppliction?
А что в нем за логика такая заложена, что у него и в конструктор и в метод передается одно и то же значение?

И еще раз повторю... вы не удачно выбрали событие, лучше то, которое перед вставкой - тогда нет необходимости работать с ОРМ. (а это значит быстродействие лучше).... Более того, если у вас в этом событии код заработает (решая вашу задачу) то вам еще придется обработать ситуацию, чтобы система не уходила в бесконечный (в худшем случае) цикл. В лучшем случае (будет лишний запрос) - и это только с вашим обработчиком. Если их будет 10, то ситуациябудет еще печальнее
0
-1 / 1 / 0
Регистрация: 24.02.2020
Сообщений: 175
05.08.2022, 10:21  [ТС]
я такого события в документации не нашёл,нашёл только OnAfterIBlockElementUpdate но как я понял он всё равно идёт после,а не до
принял во внимание выше сказанное теперь вызов обработчика выглядит так
PHP
1
2
3
4
5
6
7
8
EventManager::getInstance()->addEventHandler(
    'iblock',
    'OnAfterIBlockElementUpdate',
    [
        'Fckin\\Module\\Main',
        'exclName',
    ]
);
А сам класс выглядит вот так
PHP
1
2
3
4
5
6
7
8
9
10
11
12
class Main
{
    public function exclName(&$arFields): void
    {
        if ('!' !== substr($arFields['NAME'], -1, 1)) {
            $arFields['NAME'] .= '!';
        }
 
        $bimbim = $arFields['NAME'];
        $bimbim->update($arFields['NAME']);
    }
}
0
3061 / 1465 / 265
Регистрация: 16.03.2008
Сообщений: 6,512
Записей в блоге: 2
05.08.2022, 10:36
Цитата Сообщение от chistiy18 Посмотреть сообщение
я такого события в документации не нашёл,нашёл только OnAfterIBlockElementUpdate но как я понял он всё равно идёт после,а не до
Оно там есть. Вы точно просмотрели весь этот список ?

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

Класс выглядит абсолютно не правильно и не работоспособно. Проблема в знаниях PHP и не понимании какие переменные в вашем распоряжении. Для начала внимательно прочитайте документацию к событию.

Добавлено через 6 минут
И да, если код вашего метода рассматривать просто как псевдокод, описывающий желаемое, то он приведет к зацикливанию системы
0
-1 / 1 / 0
Регистрация: 24.02.2020
Сообщений: 175
05.08.2022, 10:53  [ТС]
всё таки нашёл необходимую регистрацию обработчика,OnBeforeIBlockElementUpdate, понял что на вход поступает arFields полей элемента,по моей логике я получил эти поля,а далее конкатенировал и обновил,где моя логическая ошибка?
0
3061 / 1465 / 265
Регистрация: 16.03.2008
Сообщений: 6,512
Записей в блоге: 2
05.08.2022, 10:54
Это не логическая ошибка. Это ошибка на понимание типов переменных
0
-1 / 1 / 0
Регистрация: 24.02.2020
Сообщений: 175
05.08.2022, 10:56  [ТС]
я понимаю что arFields массив,и вроде бы как я и работал с ним как с массивом указав что именно нужно обновлять
0
3061 / 1465 / 265
Регистрация: 16.03.2008
Сообщений: 6,512
Записей в блоге: 2
05.08.2022, 10:57
И какого типа у вас переменная $arFields['NAME']?
0
-1 / 1 / 0
Регистрация: 24.02.2020
Сообщений: 175
05.08.2022, 10:58  [ТС]
string
0
3061 / 1465 / 265
Регистрация: 16.03.2008
Сообщений: 6,512
Записей в блоге: 2
05.08.2022, 10:59
В PHP string это класс? Какие методы вы знаете у этого типа в PHP?
0
-1 / 1 / 0
Регистрация: 24.02.2020
Сообщений: 175
05.08.2022, 11:02  [ТС]
не совсем понял вопроса честно говоря,речь идёт о функциях работы со строками?
0
3061 / 1465 / 265
Регистрация: 16.03.2008
Сообщений: 6,512
Записей в блоге: 2
05.08.2022, 11:03
Распишите просто словами что вы делаете строках 9 и 10 (с указанием где какие типы)
0
-1 / 1 / 0
Регистрация: 24.02.2020
Сообщений: 175
05.08.2022, 11:05  [ТС]
в моей голове так:я записываю в новую переменную $bimbim новое значение NAME, типа строка и этим значением обновляю массив arFields,не так ?
0
3061 / 1465 / 265
Регистрация: 16.03.2008
Сообщений: 6,512
Записей в блоге: 2
05.08.2022, 11:26
Переменная bimbim какого типа?
0
-1 / 1 / 0
Регистрация: 24.02.2020
Сообщений: 175
05.08.2022, 11:28  [ТС]
строка,ведь я записал в неё NAME
0
3061 / 1465 / 265
Регистрация: 16.03.2008
Сообщений: 6,512
Записей в блоге: 2
05.08.2022, 11:30
Что в php означает запись
PHP
1
$someTest->foo()
0
-1 / 1 / 0
Регистрация: 24.02.2020
Сообщений: 175
05.08.2022, 11:32  [ТС]
обращение к функции
0
3061 / 1465 / 265
Регистрация: 16.03.2008
Сообщений: 6,512
Записей в блоге: 2
05.08.2022, 11:34
нет

Добавлено через 26 секунд
Обращение к некоей функции это
PHP
1
foo()
0
-1 / 1 / 0
Регистрация: 24.02.2020
Сообщений: 175
05.08.2022, 11:41  [ТС]
а,вызов публичного метода
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.08.2022, 11:41

Посоветуйте что почитать про события
Всем привет))!! Посоветуйте мне пожалуйста, статью про события, и делегаты где подробно про них расписана, и как с ними работать. P.S....

Про модуль hc-05
Можно ли в этом модуле поменять mac адрес?

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

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

Програмное копирование кода из стандартного модуля в модуль листа (код события)
После создания листа sheet(2) на нем програмно помещается кнопка &quot;ПЕРЕСЧИТАТЬ под другую КАЛОРИЙНОСТЬ&quot; Цель внедрить в этот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru