Задать вопрос
  • Проблема с registerEventHandler?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Вы используете старое свойство (новых у инфоблоков пока нет).
    Соответственно нужно:

    1) Выполнять registerEventHandlerCompatible
    2) Использовать код из документации и ловить не Event, а ссылку на массив
    public function run( &$arFields )
    Ответ написан
  • Как найти элементы с ценой "от" в типе свойств "Деньги" - Money?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Можно, но ужасно неудобно (неоптимально):

    \Bitrix\Main\Loader::IncludeModule('iblock');
    
    $filter = [
       'IBLOCK_ID' => '2',
       [
          'LOGIC' => 'AND',
          [
             '>PROPERTY_PRICE' => '100',
          ],
          [
             'PROPERTY_PRICE' => '%|RUB',
          ]
       ]
    ];
    
    $resElements = \CIblockElement::getList([], $filter, false, false, ['ID','IBLOCK_ID','PROPERTY_PRICE']);
    
    while( $element = $resElements->fetch() )
    {
       var_dump($element);
    }
    Ответ написан
  • Почему может не работать запрос к API Яндекс.Кассы?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Вы просто выполняете этот код? А откуда Вы вообще взяли что это есть в битриксе?
    Класс где подключаете?
    Ответ написан
    3 комментария
  • Как кастомизировать дизайн компонента Wiki?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Судя по картинкам наиболее вероятная причина - не подключились стили компонентов.
    Сделать это можно путем вызова служебной функции ShowHead()
    <head>
    <?$APPLICATION->ShowHead();?>
    <title><?$APPLICATION->ShowTitle()?></title>
    </head>


    Так же рекомендую ознакомиться с главной Интеграция дизайна курса Bitrix Framework. Там изложено больше тонкостей и нюансов по интеграции верстки в систему
    Ответ написан
    Комментировать
  • Как сделать поочередное назначение ответственного за новый лид в bitrix24?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Можно попробовать костылем сделать - завести универсальный список и туда складировать элементы, которые уже были размещены. Ну типа БП при создании, который бы проверял.
    Но лучше это делать кодом.
    Ответ написан
    Комментировать
  • Как в онлайн чат от битрикс 24 отправлять имя пользователя?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Существует возможность передать данные пользователя в виджет и об этом писал Евгений Шеленков (автор)

    2. Для сторонних систем (например ваш биллинг) вы можете воспользоваться Javascript кодом, который так же, нужно расположить на странице где подключен виджет.

    <script type="text/javascript">
      window.BxLiveChatInit = function()
      {
        return {
            'user': {
                'hash': 'a588e1a88baf2013940b0b33b1eefc2d', // уникальный uid ползователя, замена авторизации
                'name': 'Виктор', 
                'lastName': 'Иванов',
                'avatar': 'http://shelenkov.com/images/avatar-ivanov.jpg',
                'email': 'victor@ivanov.ru',
            },
            'firstMessage': "Виктор Иванов (victor@ivanov.ru) [br]"+
                            "Код клиента: 12234[br]"+
                            "Сайт: "+location.hostname+"[br]"+
                            "Страница: [url="+location.href+"]"+(document.title || location.href)+"[/url]" // любой текст для оператора ол чатика
        };
      }
    </script>


    Обратите внимание на hash - это специально поле, замена авторизации.
    Оно должно быть уникальным в рамках вашего Битрикс24, что бы не было пересечений.

    Например: md5(USER_ID+_адрес_сайта_ + _секретный_код_)
    Данный код должен одновременно идентифицировать пользователя и быть не подбираемым с улицы.

    Поле firstMessage не является обязательным, вы можете его не настраивать, тогда оператору будет отправлена ссылка страницы с которой клиент начал обращение.
    idendify.png
    Ответ написан
    1 комментарий
  • Проблемы с формами. Как исправить?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Ткните кто-нибудь, какое место в коде форм или самого сайта мешает им отображаться корректно - вместе и по отдельности.


    Скрипт form_loader подключается 2 раза и перекрывает самого себя.
    "Слепите" из 2 скриптов один и отдельно сделайте 2 вызова b24form
    Ответ написан
    Комментировать
  • Какое событие генерирует кнопка "Поставить задачу"?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Какое событие при этом возникает?


    Если мы говорим об html, то возникает событие click.
    Если мы говорим о событиях битрикса:
    - OnBeforeTaskAdd - перед созданием задачи
    - OnTaskAdd - после создания задачи до индексации (поиск), очистки кеша и pull-событий
    Ответ написан
    Комментировать
  • Как сделать фильтр, сравнивая текущую дату с датой из доп. свойства?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Согласно документации:

    Перед названием фильтруемого поля можно указать тип проверки фильтра:
    • "!" - не равно
    • "<" - меньше
    • "<=" - меньше либо равно
    • ">" - больше
    • ">=" - больше либо равно
    • "><" - между
    • и т.д.


    Значения фильтра - одиночное значение или массив значений. Для исключения пустых значений необходимо использовать false.

    Необязательное. По умолчанию записи не фильтруются.
    Примечание 1: (по настройке фильтра для свойства типа "Дата/Время"): свойство типа Дата/Время хранится как строковое с датой в формате YYYY-MM-DD HH:MI:SS. Соответственно сортировка по значению такого свойства будет работать корректно, а вот значение для фильтрации формируется примерно так: $cat_filter[">"."PROPERTY_available"] = date("Y-m-d");

    Примечание 2: при использовании типа проверки фильтра "><" для целых чисел, заканчивающихся нулем, необходимо использовать тип поля число или разделительный знак "," для десятичных значений (например, 20000,00). Иначе работает не корректно.


    ">PROPERTY_SEMINAR_END" => date('Y-m-d)
    Ответ написан
    Комментировать
  • Что за белое пустое поле под товаров и как убрать?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Открываем стили (файл: /bitrix/templates/smart/css/style.css)
    .catalog_l2 - min-height: 1600px;

    Комментируем и радуемся :)
    Ответ написан
    Комментировать
  • Как настроить ntlm авторизацию в bitrix24?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Для начала нужно убедиться в следующем:
    1) Пользователь от которого Вы пытаетесь зайти на портал существует в системе.
    2) Стоит галочка "Проверять авторизацию на всех доменах" (часто забывают - а без нее бардак)

    Затем необходмо настроить браузер (причем лучше IE, так как хром подтянет настройки с него):
    1) У кого-то сайт нужно добавить в доверенные, а у кого-то в местные сайты (работает по-разному, слишком тонкая настройка)
    2) Убедитесь что адрес сайта вписан верно (!)

    Для диагностики можете добавить вывод $_SERVER на страницу login чтобы при вводе правильных данных с 8891 (в окошке), Вы могли посмотреть - что отдал браузер (может он логин иначе отдает).
    Ответ написан
    5 комментариев
  • Почему не подключается композер к битриксу?

    gromdron
    @gromdron
    Работаю с Bitrix24
    А Вы уверены что файл существует?
    Попробуйте поставить не голый require_once, а с проверкой

    if ( file_exists($_SERVER['DOCUMENT_ROOT'] . '/vendor/autoload.php') )
    {
    	require_once($_SERVER['DOCUMENT_ROOT'].'/vendor/autoload.php');
    }
    Ответ написан
    Комментировать
  • Как сделать правильное отображение у товаров цен со скидками при включеном кэше?

    gromdron
    @gromdron
    Работаю с Bitrix24
    И правильно, что не подсказала.
    Правила корзины зависят не только от товара, но и других условий.

    Самый простой и топорный вариант как это сделать: подписываетесь на d7 события и обновляете кеш компонента.
    Интересующие Вас события:
    - \Bitrix\Modules\Sale\Internals\Discount::onAfterAdd (после создания)
    - \Bitrix\Modules\Sale\Internals\Discount::onAfterUpdate (после обновления)

    Как очистить кеш:
    - https://dev.1c-bitrix.ru/api_help/main/functions/o...
    - https://dev.1c-bitrix.ru/api_help/main/reference/c...
    Ответ написан
    4 комментария
  • Как вывести description в bitrix без мета тега?

    gromdron
    @gromdron
    Работаю с Bitrix24
    UPDATE 19.07.2018:

    Судя по прямой постановке вопроса, для получения значения свойства нужно использовать CMain::GetProperty():

    $description = $APPLICATION->GetProperty("description");


    Однако данный механизм работает по технологии отложенных функций, а это значит, что в зависимости от места вызова может вернутся разный результат.
    Автор предполагает использование CMain::ShowProperty(), через

    echo $APPLICATION->ShowProperty("page_title");

    Однако такая возможность существует лишь в шаблоне сайта и не подразумевает дальнейших манипуляций с полученным результатом.

    Например, для того чтобы добавить в description город пользователя использовать ShowProperty для манипуляции с данными категорически нельзя, вместо этого следует подписаться на событие onEpilog модуля main и через GetProperty + SetProperty изменить значение строки
    Ответ написан
  • Как правильно релизиться в больших компаниях?

    gromdron
    @gromdron
    Работаю с Bitrix24
    На РИТ++ в этом году был прекрасный (на мой взгляд) доклад от Андрея Евсюкова из Lamoda. Рекомендую присмотреться. Записи увы нет, но по слайдам думаю будет понятна исходная суть.
    Кстати, там рассмотрены именно Ваши проблемы (Time-to-market) и часть Ваших страхов
    Ответ написан
    Комментировать
  • Как реализовать сервис уведомлений внутри Интранет сети?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Мне кажется, что вопрос изначально стоит не в том чтобы написать свой сервис, а в том чтобы отправить соответствующие уведомления.
    Опять же, уведомления отправляются куда-то - например в приложение или на почту, но тогда у всех сотрудников должно быть.
    А что есть в увсех сотрудников, которые работают на таком большом предприятии? Правильно - почта.

    В чем преимущества использовании почты перед остальными вариантами?
    1) Она есть у всех офисных сотрудников.
    2) Она кроссплатформенная. Т.е. и Android, iOS, Windows, Mac etc
    3) Она уже сохраняет отправленные уведомления (не нужно заботиться о хранении, т.к. всегда знаем кто, когда и кому отправил)
    4) У многих серверов уже есть прослойка в виде Web-API или готовых протоколов (smtp) и множество реализаций

    В чем недостатки:
    1) Не у всех сотрудников она может быть. Например у грузчиков ее может и не быть, но я не думаю что Вы им будете отправлять уведомления. В крайнем случае можно и завести
    2) Отправляет лишь текстовые сообщения (не push, не комманды и т.п.). Но вроде как Вам это и нужно.

    В итоге - не нужно ничего писать, просто заведите корпоративную почту и все.

    P.S. Если уж очень хочется написать свой неоптимальный дублирующий велосипед, то можете перед ней поставить буфером свое приложение, на которое все остальные будут ссылаться.
    Ответ написан
  • Как вывести значения свойства типа "справочник"?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Если предположить, что Вы в инфоблоке добавили новое свойство и добавили ему тип Справочник, то думаю это для Вас)

    Я создал тестовое свойство (TEST) - привязка к справочнику и у стандартного компонента news.detail захотел вывести картинку. Для того чтобы его получить я написал небольшой (неоптимальный) фрагмент кода в result_modifier.php.
    В результате работы в свойства появляется ключ EXTRA_VALUE, в котором уже содержатся необходимые описания каждого элемента (в том числе и картинка), а его обрабатывать и выводить уже нужно в шаблоне (template.php) компонента
    use \Bitrix\Main\Loader;
    use \Bitrix\Highloadblock as HL;
    
    /**
     * @var array Массив описывающий свойство типа справочник 
     */
    $arHighloadProperty = $arResult["PROPERTIES"]['TEST'];
    
    /**
     * @var string название таблицы справочника
     */
    $sTableName = $arHighloadProperty['USER_TYPE_SETTINGS']['TABLE_NAME'];
    
    /**
     * Работаем только при условии, что
     *    - модуль highloadblock подключен
     *    - в описании присутствует таблица
     *    - есть заполненные значения 
     */
    if ( Loader::IncludeModule('highloadblock') && !empty($sTableName) && !empty($arHighloadProperty["VALUE"]) )
    {
    	/**
    	 * @var array Описание Highload-блока
    	 */
    	$hlblock = HL\HighloadBlockTable::getRow([
    		'filter' => [
    			'=TABLE_NAME' => $sTableName
    		],
    	]);
    
    	if ( $hlblock )
    	{
    		/**
    		 * Магия highload-блоков компилируем сущность, чтобы мы смогли с ней работать
    		 * 
    		 */
    		$entity      = HL\HighloadBlockTable::compileEntity( $hlblock );
    		$entityClass = $entity->getDataClass();
    		
    		$arRecords = $entityClass::getList([
    			'filter' => [
    				'UF_XML_ID' => $arHighloadProperty["VALUE"]
    			],
    		]);
    		foreach ($arRecords as $record)
    		{	
    			/**
    			 * Тут любые преобразования с записью, полученной из таблицы.
    			 * Я транслировал почти все напрямую. 
    			 * 
    			 * Нужно помнить, что например в UF_FILE возвращается ID файла,
    			 * а не полный массив описывающий файл
    			 */
    			$arRecord = [
    				'ID'                  => $record['ID'],
    				'UF_NAME'             => $record['UF_NAME'],
    				'UF_SORT'             => $record['UF_SORT'],
    				'UF_XML_ID'           => $record['UF_XML_ID'],
    				'UF_LINK'             => $record['UF_LINK'],
    				'UF_DESCRIPTION'      => $record['UF_DESCRIPTION'],
    				'UF_FULL_DESCRIPTION' => $record['UF_FULL_DESCRIPTION'],
    				'UF_DEF'              => $record['UF_DEF'],
    				'UF_FILE'             => [],
    				'~UF_FILE'            => $record['UF_FILE'],
    			];
    
    			/**
    			 * Не очень быстрое решение - сколько записей в инфоблоке, столько файлов и получим
    			 * Хорошо было бы вынести под код и там за 1 запрос все получить, а не плодить
    			 * по дополнительному запросу на каждый файл
    			 */
    			if ( !empty($arRecord['~UF_FILE']) )
    			{
    				$arRecord['UF_FILE'] = \CFile::getById($arRecord['~UF_FILE'])->fetch();
    			}
    
    			$arHighloadProperty['EXTRA_VALUE'][] = $arRecord;
    		}
    	}
    }
    Ответ написан
  • Использовать ли регулярные выражение?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Иными словами: у Вас есть некоторая строка длинной X и Вы хотите оставить в ней только символы по маске а-яА-Яa-zA-Z0-9 (прописные и строчные буквы русского и латинского алфавита + цифры + пробел). Если тотально не доверяете пользователю, я бы рекомендовал все же использовать регулярное выражение, так как в unicode более 8 тысяч символов и ни один из существующих php-функций не вернет Вам их все. В таком случае, регулярное выражение обеспечит наиболее удобный, легкочитаемый и быстрый вариант.

    Но есть одно НО - длинна строки (pcre.recursion_limit). Например при строке в 4096 символов Вы в легкую можете получить Segmentation fault и работа скрипта прекратится.
    Ответ написан
    Комментировать
  • Где находиться эта страница в cms битрикс?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Почитайте про обработку адресов.
    Скорее всего у Вас есть папка /catalog/ и в ней находится index.php в котором подключается комплексный компонент
    Ответ написан
  • Во сколько обойдется интернет магазин на битриксе?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Для того чтобы открыть интернет магазин, нужно как минимум 3 вещи:
    1) Иметь код интернет магазина (т.е. пройти этапы дизайна, верстки, интеграци и т.п.)
    2) Где-то его разместить (хостинг + домен + сертификат)
    3) Подключить онлайн платежи и кассу*

    Если рассматривать 1 и 2 пункты, то можно взять готовое решение.

    Например: Маркет - адаптивный интернет-магазин + БУС Малый бизнес обойдется в 50 тысяч.

    Нормальный сервер под Битрикс выйдет еще где-то в 12 тысяч в год (сертификат на год обычно дается бесплатно, да и самый дешевый 500 рублей стоит)
    Итого: 62 тысячи единоразовый платеж за 1 год**

    * - в онлайн кассах все очень разнится, поэтому в оценке их нет
    ** - через год, при льготном продлении, это будет стоить 22% от цены за битрикс + 12 тысяч за хостинг/домен в год.
    Ответ написан
    Комментировать