Evgenij Chirochkin, а откуда Вы взяли что там именно такое API. Насколько я помню, обновление идет по ID записи.
Т.е. $subscr->Update($ID, $arFields) и в качестве arFields нужно передавать уже массив array("ACTIVE" => "N", "SEND_CONFIRM" => "N"), а вместо $ID номер записи.
P.S. Если это не поможет - проверяйте обработчики событий.
Евгений Акимов, очень много php-ошибок (в зависимости от версии).
Например: 1) Вы обращаетесь статично к нестатичному методу (includeTsModule не обьявлен статично, но обращение вы ведете именно так) 2) Незнаю какой код Вы используете, но вы бросаете и не ловите исключение
Для исправления белого экрана включите вывод ошибок или смотрите логи сервера.
Код для класса:
Код
namespace Metabit\Languages;
use \Bitrix\Main;
use \Bitrix\Main\Localization\Loc as Loc;
class Languages
{
public static function includeTsModule()
{
if ( !Main\Loader::includeModule('tasks') )
throw new Main\LoaderException('Error: include iblock module');
}
public static function getTasktoTime()
{
self::includeTsModule();
$arTasks = \Bitrix\Tasks\TaskTable::query()
->addSelect('ID')
->addSelect('START_DATE_PLAN')
->where("RESPONSIBLE_ID", 1)
->exec();
return $arTasks;
}
}
Гаврил Скрябин написал: Я установил в файле bitrixenv.ini (/php.d/)- memory_limit = 768M,
Наборот, память выделяемую на скрипт нужно уменьшать. Попробуйте создать swap-раздел на 1ГБ или через htop выяснить кто именно кушает память и уже работать с ним
Внимательно изучите документацию, ну или хотя бы посмотрите код, где вызывается событие: выбрасывание исключение на событии after (т.е. после действия) не всегда работает. Конкретно в данном случае событие уже произошло (т.е. изменение выполнено) и Вы уже не можете на него повлиять*.
P.S. Если Вы решаете вопрос с экзамена, то нужное событие - перед (before) изменением
Arman Saparbekov написал: На странице редактирования карты сайта в админке, на вкладке файлы происходит fatal error нехватки памяти - Allowed memory size of 536870912 bytes exhausted ... in /bitrix/modules/main/classes/general/virtual_io_filesystem.php on line 523
Вам необходимо проверить: 1) Правильность указания путей которые нужно индексировать. Т.е. туда не должны попасть папки только с картинками, выгрузками и т.п. 2) Верно ли выставлено ограничение по максимальному размеру памяти - строка которую вы указали работает именно с получением содержимого данного файла 3) Указаны все необходимые типы файлов для индексации (чтобы не было лишних) 4) В индексируемых директориях отсутствуют тестовые выгрузки и файлы
Есть масса способов как это сделать. Навскидку несколько способов:
1) Проверка полной цепочки Например, пришла ссылка /catalog/test1/test2/test3/test4/ Вы проверяете что test1 это раздел, что test2 это раздел test1, элемент test3 это раздел вложенный в test2 и т.п. Вы по факту двигаетесь рекурсивно и сравниваете является ли то что пользователь ввел разделом вложенным в исходный или элементом (вложенным в исходный). Мороки много, геморроя много, производительность не сильно хорошая. Можно воспользоваться стандартным комплексным компонентом и его модифицировать
2) Проверка остатка цепочки: Например, пришла ссылка /catalog/test1/test2/test3/test4/ Вы проверяете только последний уровень, т.е. test4 - является ли он элементом, разделом или не существует (404)
3) Деление цепочек: Вы умышленно разделяете маски: - /product/#CODE#/ используется только для элементов - /catalog/#SECTION_CODE_PATH#/ используется только для разделов.
Таким образом при обработке первого типа Вы ищете только по элементам, во втором случае только по разделам. Производительность которую вы потеряете на разделах нивелируется быстрым открытием элемента. При этом не важно в каких группах у Вас находится товар, для поисковика и человека он будет иметь всегда одну ссылку
А почемы Вы решили что он должен быть не NULL? В документации об этом нигде не сказано, а для увеличение количества есть специальный метод: CIBlockElement::CounterInc($ID), который изменяет значения напрямую в БД в обход событий
Евгений Акимов, вы знаете, наверное оптимальнее будет пойти с другой стороны - достать из базы данных поля которые Вас интересуют, сразу у нужных задач (т.е. не создавая обьектов, не проверяя пряв и т.п.) и уже потом при обработке это сделать.
В коде ниже я достану ID всех НЕ удаленных задач (ZOMBIE=N), у которых плановое начало и окончание находится в воскресенье, вторник, четверг, пятницу и субботу.
P.S. Так как задач может быть очень много (я выбирал со всего портала), то запрос может выоплнять очень долго. Нужно подставлять еще дополнительные условия (Ну например по дате создания задачи - за текущий месяц или еще как)
Код
use \Bitrix\Main;
try
{
if ( !Main\Loader::IncludeModule('tasks') )
{
throw new \Exception("Task module is not installed");
}
/**
* @see https://dev.1c-bitrix.ru/learning/course/?COURSE_ID=43&LESSON_ID=3030
* @see https://dev.1c-bitrix.ru/community/blogs/orm/orm-updates.php
*/
$arTasks = \Bitrix\Tasks\TaskTable::query()
->addSelect('ID')
->where(
new Main\Entity\ExpressionField('START_DATE_PLAN_DAY_OF_WEEK', 'DAYOFWEEK(%s)', 'START_DATE_PLAN'),
'in',
[1,3,5,6,7]
)
->where(
new Main\Entity\ExpressionField('END_DATE_PLAN_DAY_OF_WEEK', 'DAYOFWEEK(%s)', 'END_DATE_PLAN'),
'in',
[1,3,5,6,7]
)
->where("ZOMBIE", 'N')
->exec();
foreach( $arTasks as $task )
{
echo "<pre>";
var_dump($task['ID']);
echo "</pre>";
}
}
catch( \Exception $e )
{
var_dump($e);
}
Дмитрий Александрович написал: готовое решение или нужно будет заказывать разработку?
Прям вот такого вот нет. В любом случае, что бы Вы не выбрали (имею ввиду что Битрикс что другие CMS) в поставке не будет (или будет, но придется все равно под себя дорабатывать).
И да, на базе платформы 1С-Битрикс можно это все реализовать
Евгений Акимов, а что есть "должны выполниться"? Это крайний срок задач? Ну как вариант, можно получить список дат, которые являются понедельниками и средами и исключить их (поставить условия, что дата не попадает в промежутки)
Владислав Морозов написал: Нужно обратится к переменной, что отвечает за выходные дни, которые указываются в настройках портала (например, выделяются красным в календаре)
Незнаю облачный или коробочный битрикс24 у Вас, но для коробки эти настройки можно получить так:
Максим Савин, 1) Подумайте еще раз что создаете: свой тип свойства инфоблкоа или тип пользовательского поля. 2) Так как вы отнаследовались от пользовательского поля типа файл, предположил, что именно тип пользовательского поля.
Сравните с моим кодом: https://pastebin.com/ZfCsDzre Размеры не проверял (да и расшрения то же), но механимз: загрузка, скачивание, удаление, замена работает
Maks, самый простой и быстрый способ - отметить в настройках инофблока торгового каталога CRM - правило формирования картинки анонса из детальной, если не задано.
Максим Савин написал: В массиве arProperty в индексе ['USER_TYPE_SETTINGS'] содержится строка
Сделай unserialize и получишь массив. А вообще есть еще метод PrepareSettings который нужно тоже дорабатывать.
Цитата
Максим Савин написал: П.С. так же возникает проблема с удалением изображения. Если в опциях выбираю "удалить файл", то при сохранении элемента файл не удаляется. Если же заменяю его другим - то замена происходит без проблем.
Поковыряйте onBeforeSave метод (лучше скопируйте в свой класс и посмотрите что там творится)