Есть масса способов как это сделать. Навскидку несколько способов:
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 у Вас, но для коробки эти настройки можно получить так:
Артем Бардиер написал: Где ковырять, что смотреть? Тех поддержка говорит что поможет в случае если оплатим битрикс24, но как-то платить не хочется при таком отношении.
Максим Савин, 1) Подумайте еще раз что создаете: свой тип свойства инфоблкоа или тип пользовательского поля. 2) Так как вы отнаследовались от пользовательского поля типа файл, предположил, что именно тип пользовательского поля.
Сравните с моим кодом: https://pastebin.com/ZfCsDzre Размеры не проверял (да и расшрения то же), но механимз: загрузка, скачивание, удаление, замена работает
Maks, самый простой и быстрый способ - отметить в настройках инофблока торгового каталога CRM - правило формирования картинки анонса из детальной, если не задано.
Максим Савин написал: В массиве arProperty в индексе ['USER_TYPE_SETTINGS'] содержится строка
Сделай unserialize и получишь массив. А вообще есть еще метод PrepareSettings который нужно тоже дорабатывать.
Цитата
Максим Савин написал: П.С. так же возникает проблема с удалением изображения. Если в опциях выбираю "удалить файл", то при сохранении элемента файл не удаляется. Если же заменяю его другим - то замена происходит без проблем.
Поковыряйте onBeforeSave метод (лучше скопируйте в свой класс и посмотрите что там творится)
almas3000, в списке полей нужно передавать UF_CRM_TASK (массив из #ENTITY_CODE#_#ENTITY_ID# структур) Вообще правильно послали, так как в документации по task.item.add это указано