Задать вопрос
  • Битрикс CRM Коробка. Как добавить пользовательское поле в форму импорта лидов из файла?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Чтобы это поле появилось при импорте, нужно чтобы оно существовало у лида.
    Для этого нужно создать пользовательское поле у лида. А сделать это можно двумя способами:
    1) Через публичные настройки CRM: Настройки -> Настройки форм отчетов -> Пользовательские поля -> Лид: Добавить поле
    2) Через административную панель: Настройки -> Настройки сайтов -> Пользовательские поля -> Добавить.
    В таком случае Вы должны сначала выбрать тип поля, а потом уже объект, который в случае лида будет (как вы верно указали) - CRM_LEAD (насколько я помню, в идеальном случае оно должно не множественным)
    Ответ написан
    4 комментария
  • Можно ли как-нибудь вывести интервал (напр. 10-15) через PHP?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Прочитал Ваши комментарии и у меня возникло 2 вопроса:

    1) Какой тип поля в БД, куда вы хотите положить интервал? varchar? Или что-то другое?
    2) почему не хранить 2 столбца - 'от' и 'до', тогда и фильтрацию проще определять и хранить удобнее, и отображай как хочшь
    Ответ написан
    Комментировать
  • Из-за чего может быть ошибка в базе?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Добрый день,

    У Вас типовая проблема переноса - MySQLi -> MySQL.
    Проверьте, что драйвер mysql подключен или переведите на mysqli.
    Ответ написан
    Комментировать
  • Возможно ли настроить NGINX для отдачи статики в соответствии с сессиями в Apache?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Я так понимаю, задача стоит следующая: в зависимости от доступа пользователя, давать скачивать ему файл. Т.е. если доступ есть он может скачать файл, если нет - не может, при этом если права отбирают, то файл он больше скачать не может.

    Попробуйте - X-Accel
    This allows you to handle authentication, logging or whatever else you please in your backend and then have NGINX handle serving the contents from redirected location to the end user, thus freeing up the backend to handle other requests. This feature is commonly known as X-Sendfile.
    Ответ написан
    Комментировать
  • Почему при работе c cURL не получаю контент по некоторым ссылкам?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Прочтите https://habrahabr.ru/post/184302/, может поможет
    Ответ написан
    Комментировать
  • Как сделать редирект любого уровня вложенности на корень сайта?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Как насчет следующего кода:
    <IfModule mod_rewrite.c>
      Options +FollowSymLinks
      RewriteEngine On
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-l
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^(.*)$ index.php?$1 [L]
      RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
    </IfModule>
    Ответ написан
  • Не срабатывает кнопка "В корзину" на карточке товара 1C Bitrix?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Компонент "новость детально" (bitrix:news.detail) не предназначен для вывода товаров.
    Для вывода товара, Вам необходимо воспользоваться возможностями компонента bitrix:catalog.element

    По ходу текста не очень понятно, как это Вы находясь в корзине хотите добавить его в корзину? У Вас popup окно? А скрипты подключаете и передаете?
    Ответ написан
  • Как получить ответ из php скрипта в js скрипт?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Подобных вопросов куча. Нужно только поискать.
    Например - Как получить ответ от сервера после ajax запроса?
    Почитайте про json
    Ответ написан
    Комментировать
  • Где ошибка в выводе элементов каталога через catalog.section и catalog.element?

    gromdron
    @gromdron
    Работаю с Bitrix24
    bitrix:catalog.element - выводит карточку товара
    bitrix:catalog.section - содержимое раздела.

    Соответственно, у Вас должно быть два правила в urlrewrite.php
    // Для элемента
    array(
    	"CONDITION" => "#^/podobrat-dver/([a-z0-9\-]+)/([^/\?]*)(.*)$#",
    	"RULE" => "SECION_CODE=\$1&ELEMENT_CODE=\$2&$3",
    	"PATH" => "/podobrat-dver/detail.php",
    )
    // Для раздела
    array(
    	"CONDITION" => "#^/podobrat-dver/([a-z0-9\-]+)/(.*)$#",
    	"RULE" => "SECION_CODE=$1&$2",
    	"PATH" => "/podobrat-dver/section.php",
    )


    Соответственно на странице detail.php у вас должен быть вызов одного компонента:
    <?$APPLICATION->IncludeComponent(
      "bitrix:catalog.element", 
      "detail",
      array(
        .....
        "IBLOCK_ID" => "30",
        "ELEMENT_ID" => "",
        "ELEMENT_CODE" => $_REQUEST["ELEMENT_CODE"],
        "SECTION_ID" => "",
        "SECTION_CODE" => $_REQUEST["SECION_CODE"],
        "SECTION_URL" => "",
        "DETAIL_URL" => "/podobrat-dver/#ELEMENT_CODE#/",
        "SECTION_ID_VARIABLE" => "ELEMENT_CODE",
        "SECTION_CODE_PATH" => ""
                     .....
      ),
      false
    );?>


    А на странице section.php у вас должен быть вызов одного компонента:
    <?$APPLICATION->IncludeComponent(
      "bitrix:catalog.section", 
      "catalog_list", 
      array(
                     ....
        "DETAIL_URL" => "/podobrat-dver/#ELEMENT_CODE#/",
        "SECTION_CODE" => $_REQUEST["SECTION_CODE"],
        "SECTION_ID" => "",
        "SECTION_URL" => "",
        "SHOW_ALL_WO_SECTION" => "Y",
                     ....
      ),
      false
    );?>


    За регулярки не ручаюсь (писал навскидку, без тестирования)
    Ответ написан
    Комментировать
  • Почему в компонента работает прокрутка только после того как обновлю его кеш (битрикс)?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Наиболее вероятная проблема: вы подключаете скрипт прокрутки в самом template.php
    Вот и получается, что скрипт есть, когда кеш сброшен и прокрутка работает, а когда кеш уже собран и в template.php захода нет, то скрипт и не подключается.

    Выложите template.php на pastebin.com и смогу подсказать как поправить
    Ответ написан
  • А как связать сервис Seeneco и Битрикс24?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Если у Seeneco есть API (а я его на сайте не нашел), то можно и даже относительно легко.
    Если у Seeneco нет API, то можно, но уже сложнее.

    Концептуальный ответ - да.
    Ответ написан
    Комментировать
  • Как задать сортировку в catalog.section.list по id в прямом или обратном порядке?

    gromdron
    @gromdron
    Работаю с Bitrix24
    $arSort - это ассоциативный массив, для сортировки значения, в формате "Код поля" => "Порядок".
    Причем порядок может быть только ASC (по возрастанию) или DESC (по убыванию)
    В Вашем случае должно быть так:

    $arSort = array(
    	"LEFT_MARGIN" => "ASC",
    );
    Ответ написан
    Комментировать
  • Как получить количество элементов?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Во-первых, прекратите совокуплять мертвецов. Для каждой задачи есть отдельный инструмент, со строго определенными канонами. То что вы делаете в result_modifier.php делается через расширение меню и компонент bitrix:menu.sections.

    Во-вторых, количество активных элементов получается через доп. операции внутри итерирования. См. справочную литературу: coder-diary.ru/programming/bitrix-kolichestvo-akti...
    Ответ написан
  • Групповая смена ответственного из сделки в контакте и компании в CRM Битрикс, коробочная версия?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Вы правильно нашли, за это отвечает компонент bitrix:crm.deal.list, который лежит в /bitrix/components/bitrix/crm.deal.list/component.php.
    Код несколько запутанный, но работает следующим образом:

    На ~614 сроке ( ~ 614 - 679 ) находится код, который парсит полученные данные и собирает их в массив $actionData
    //region Try to extract user action data
    // We have to extract them before call of CGridOptions::GetFilter() or the custom filter will be corrupted.
    $actionData = array(
    	'METHOD' => $_SERVER['REQUEST_METHOD'],
    	'ACTIVE' => false
    );
    
    if(check_bitrix_sessid())
    {
    	$postAction = 'action_button_'.$arResult['GRID_ID'];
    	$getAction = 'action_'.$arResult['GRID_ID'];
    	//We need to check grid 'controls'
    	$controls = isset($_POST['controls']) && is_array($_POST['controls']) ? $_POST['controls'] : array();
    	if ($actionData['METHOD'] == 'POST' && (isset($controls[$postAction]) || isset($_POST[$postAction])))
    	{
    		CUtil::JSPostUnescape();
    
    		$actionData['ACTIVE'] = true;
    
    		if(isset($controls[$postAction]))
    		{
    			$actionData['NAME'] = $controls[$postAction];
    		}
    		else
    		{
    			$actionData['NAME'] = $_POST[$postAction];
    			unset($_POST[$postAction], $_REQUEST[$postAction]);
    		}
    	...
    	...
    	...
    		$actionData['AJAX_CALL'] = $arResult['IS_AJAX_CALL'];
    	}
    }
    //endregion


    А с ~915 строки начинается непосредственная обработка ( ~915 - 1457):

    // POST & GET actions processing -->
    if($actionData['ACTIVE'])
    {
    	if ($actionData['METHOD'] == 'POST')
    	{
    		if($actionData['NAME'] == 'delete')
    		{
    		...
    		elseif($actionData['NAME'] == 'assign_to')
    		{
    			if(isset($actionData['ASSIGNED_BY_ID']))
    			{
    				$arIDs = array();
    				if ($actionData['ALL_ROWS'])
    				{
    					$arActionFilter = $arFilter;
    					$arActionFilter['CHECK_PERMISSIONS'] = 'N'; // Ignore 'WRITE' permission - we will check it before update.
    					$dbRes = CCrmDeal::GetListEx(array(), $arActionFilter, false, false, array('ID'));
    					while($arDeal = $dbRes->Fetch())
    					{
    						$arIDs[] = $arDeal['ID'];
    					}
    				}
    				elseif (isset($actionData['ID']) && is_array($actionData['ID']))
    				{
    					$arIDs = $actionData['ID'];
    				}
    
    				foreach($arIDs as $ID)
    				{
    					if (!CCrmDeal::CheckUpdatePermission($ID, $userPermissions))
    					{
    						continue;
    					}
    
    					$DB->StartTransaction();
    
    					$arUpdateData = array(
    						'ASSIGNED_BY_ID' => $actionData['ASSIGNED_BY_ID']
    					);
    
    					if($CCrmDeal->Update($ID, $arUpdateData, true, true, array('DISABLE_USER_FIELD_CHECK' => true)))
    					{
    						$DB->Commit();
    
    						$arErrors = array();
    						CCrmBizProcHelper::AutoStartWorkflows(
    							CCrmOwnerType::Deal,
    							$ID,
    							CCrmBizProcEventType::Edit,
    							$arErrors
    						);
    					}
    					else
    					{
    						$DB->Rollback();
    					}
    				}
    			}
    		}
    		...
    	}
    }
    // <-- POST & GET actions processing


    Но есть маленький нюанс, если Вам нужно менять ответственного в связанных сущностях, кастомизация данного кода будет не лучшим решением.
    В таком случае у Вас будет задвоение, например ответственного можно поменять через массовую смену ответственного в списке, через редактирование сделки, через блок действия бизнес-процесса и так далее. И все это разные механизмы. Общее у них только одно - они все используют события на изменения/добавление.
    Ответ написан
  • В какой кодировке возвращать данные при ajax запросе?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Так как JSON кодируется символами Юникода, то наилучшим вариантом является UTF-8 кодировка.
    Как практикующий разработчик на 1С-Битрикс строго рекомендую Вам переводить проекты на UTF-8.

    P.S. У вас неймпсейс
    use Bitrix\TestPartner\TestPartnerModule\TestPartnerModuleListTable;

    А должен быть:
    use TestPartner\TestPartnerModule\TestPartnerModuleListTable;

    Так как Вы не Bitrix и не нужно никого вводить в заблуждение :)
    Ответ написан
    Комментировать
  • Как вывести товары, если нет категорий?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Все круто, но куда он должен их вывести? У каталога есть иерархия Список разделов -> уточнение(*) -> Список элементов.
    Когда я последний раз с ним работал, он не умел выводить mixed content (когда и разделы и элементы выводились вместе).

    Но вы можете использовать не комплексный компонент, а отдельно catalog.section и выводить там
    Ответ написан
    Комментировать
  • Как массово загрузить и вставить на страницу много файлов?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Можно ли это сделать встроенными средствами битрикса?


    Относительно. Вы можете использовать инфоблок и news.list для вывода с доп. свойством, но это не будет лучшим решением.

    Может есть готовые дополнения?


    Это нишевая задача и вряд ли есть готовые решения.

    Что касается исходной задачи, то есть масса способов это сделать:
    1) Положить в папку и выводить простым скриптом (в лоб, но может быть долго и из админки не поправить)
    2) Загрузить из в битрикс и доставать через CFile - уже лучше, но если их много, может не выдержать сервер и браузер
    3) Разработать свое решение.
    Ответ написан
    Комментировать
  • Как написать такое регулярное выражение?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Немножечко быдло-регулярка, но результат кода:

    /* @var string Регулярное выражение для проверки */
    $regex = '#^http(s?):\/\/domain\.com\/?(index\.html|test\.html)?$#';
    
    /* @var array Проверяемые варианты */
    $arVariant = [
    	'http://domain.com',
    	'https://domain.com',
    	'http://domain.com/',
    	'https://domain.com/',
    	'http://domain.com/index.html',
    	'https://domain.com/index.html',
    	'http://domain.com/test.html',
    	'https://domain.com/test.html',
    	'http://domain.com/blabla.html',
    	'https://domain.com/blabla.html',
    	'https://domain.com/test.html?page=1',
    ];
    
    foreach( $arVariant as $variant )
    {
    	if ( preg_match($regex, $variant) )
    	{
    		echo "Ссылка '{$variant}' не прошла валидацию".PHP_EOL;
    	}
    }


    Следующий:

    Ссылка 'http://domain.com' не прошла валидацию
    Ссылка 'https://domain.com' не прошла валидацию
    Ссылка 'http://domain.com/' не прошла валидацию
    Ссылка 'https://domain.com/' не прошла валидацию
    Ссылка 'http://domain.com/index.html' не прошла валидацию
    Ссылка 'https://domain.com/index.html' не прошла валидацию
    Ссылка 'http://domain.com/test.html' не прошла валидацию
    Ссылка 'https://domain.com/test.html' не прошла валидацию
    Ответ написан
    Комментировать
  • Почему PHP вместо скрипта запускает интерактивную консоль?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Только что провел данный эксперимент - результат - отработало.
    Единственное - моя комманда отличается от Вашей.

    1) Я не стал вводить path, я указал рабочую директорию (при создании задачи вы можете это сделать)
    2) Я указал явно какую программу использовать

    У меня получилось:

    1) Название программы: php.exe
    2) Переданные параметры: "E:\test\test.php"
    3) Рабочая папка E:\PHP-7\

    Открыл список задач, нашел нужную задачу, посмотрел на вкладке "Действия" комманду которая выполняется ( у меня вывело 'php.exe "E:\test\test.php"' )
    Комманда отрабатала прекрасно.

    P.S. просто так ничего не бывает - кто и что делал? Возможно задача зависла и новая не запустилась, потому как старая не закончилась
    Ответ написан