• Получение номер столбца в Excel с помощью библиотеки phpspreadsheet?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Есть почти то, что Вы хотите, но без указания номера строки. т.е. если отделить строку от столбца, то получается нижеследующее:
    use \PhpOffice\PhpSpreadsheet\Cell\Coordinate;
    
    // Выведет: Z
    var_dump(Coordinate::stringFromColumnIndex(26));
    
    // Выведет: R
    var_dump(Coordinate::stringFromColumnIndex(18));
    
    // Выведет 2
    var_dump(Coordinate::columnIndexFromString('B'));
    
    // Выведет 26
    var_dump(Coordinate::columnIndexFromString('Z'));

    См. https://phpspreadsheet.readthedocs.io/en/develop/t...
    Ответ написан
    Комментировать
  • Как реализовать нижеописанный метод?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Вы имеете ввиду:

    Object.prototype.sayHi = function()
    {
    	console.log(this.tagName);
    }
    
    document.body.sayHi();


    Никита Полевой, предложил лучшее решение:
    HTMLElement.prototype.sayHi = function() {
      console.log(this.tagName);
    }
    
    document.body.sayHi();
    Ответ написан
    Комментировать
  • Как сделать правильно выборку?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Попробуйте так:
    $sql = "SELECT
      `login`,
      `prava`,
      CASE
        WHEN prava=1 THEN 'Модератор'
        WHEN prava=3 THEN 'Ст. Модератор'
        ELSE 'Не определены'
      END user_role
    FROM accounts
    WHERE prava >= 1";
    
    $prava = R::getAll($sql);
    Ответ написан
  • Почему Метод Fetch() в произвольном php коде бизнес процесса Битрикс24 не возращает false?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Мне кажется, что дело не в методе fetch. Основной вопрос заключается в том, что находится в переменной $em, в тот момент, когда находятся элементы.

    Вы же знаете, что при значении $em = true, это аналогично $em = 1, а $em = false - ничего не найдет.

    После присвоения $em допишите код:
    ob_start();
    echo "<pre>";
    var_dump( array(
      'ENTITY_ID' => 'LEAD',
      'VALUE' =>$em , 
      'COMPLEX_ID' => 'EMAIL_WORK' 
    ));
    file_put_contents($_SERVER['DOCUMENT_ROOT'].'/test_bp_val.txt', ob_get_clean(), FILE_APPEND);

    И поймете почему он возвращает то или иное значение
    Ответ написан
  • Как проверять на существование лидов с таким же Email. Битрикс24. Коробочная версия?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Сделать нужно немножечко подругому:

    Изучите нижеследующий код и rest-метод crm.duplicate.findbycomm. Смотрите в /home/bitrix/www/bitrix/modules/crm/classes/general/restservice.php

    use \Bitrix\Main;
    use \Bitrix\Crm;
    
    /* @var string Email, который будем искать */
    $sEmail = 'swap@google.com';
    
    /* @var array ID лидов, которые попадаются под условия */
    $arLeadIds = [];
    
    if ( Main\Loader::IncludeModule('crm') )
    {
    	// Формируем критерий, подсовываем Email
    	$criterion = new Crm\Integrity\DuplicateCommunicationCriterion( Crm\CommunicationType::EMAIL_NAME, $sEmail);
    
    	// Выполняем поиск первых 20 клиентов
    	$duplicate = $criterion->find( \CCrmOwnerType::Lead, 20);
    
    	// Если найдены entity проитерируем их
    	$entities = $duplicate->getEntities();
    	if ( !empty($entities) )
    	{
    		foreach($entities as $entity)
    		{
    			$arLeadIds[] = $entity->getEntityID();
    		}
    	}
    }
    
    // А тут будут ID сделок
    var_dump($arLeadIds);
    Ответ написан
    3 комментария
  • Как опубликовать сообщение в группе с помощью API?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Чтобы отправить сообщение в живую ленту нужно еще более изощренный метод.

    Подключаем модуль Соц.сети:
    CModule::IncludeModule("socialnetwork");

    Чтобы отправить сообщение в ленту, нужно чтобы существовал пост, который будет отправлен в ленту, поэтому создаем сначала пост:

    $arFields = array(
     "TITLE" => "Заголовок записи",
     "DETAIL_TEXT" => "Тело сообщения",
     "BLOG_ID" => 1, //ID отправителя
     "AUTHOR_ID" => 1, //ID блога, в котором будет запись
     "DATE_PUBLISH" => '11.02.2014 09:08', // дада
     "PUBLISH_STATUS" => BLOG_PUBLISH_STATUS_PUBLISH, // Читаем в API
     "ENABLE_TRACKBACK" => 'N',
     "ENABLE_COMMENTS" => 'Y'
    );


    При успешном добавлении ($ID = CBlogPost::Add($arFields);) получим ID blogPost записи

    Затем необходимо отправить это сообщение в ленту, для нам нужен фрагмент кода (заменить соответствующим образом):

    $arEvent = array (
    	'EVENT_ID'     => 'blog_post',
    	'=LOG_DATE'    => 'now()',
    	'TITLE_TEMPLATE' => '#USER_NAME# добавил(а) сообщение "#TITLE#" в блог',
    	'TITLE'    => "Заголовок записи",
    	'MESSAGE'  => "Текст записи",
    	'TEXT_MESSAGE'  => "Текст записи",
    	'MODULE_ID'     => 'blog',
    	'CALLBACK_FUNC' => false,
    	'SOURCE_ID'     => $ID,
    	'ENABLE_COMMENTS'  => 'Y',
    	'RATING_TYPE_ID'   => 'BLOG_POST',
    	'RATING_ENTITY_ID' => $newID,
    	'ENTITY_TYPE' => 'U',
    	'ENTITY_ID'   => '1',
    	'USER_ID'     => '1',
    	'URL' => '/company/personal/user/1/blog/'.$ID.'/',
    );


    Создаём запись в ленте через: CSocNetLog::Add, на выходе получаем eventID (в случае успеха)

    Если все прошло хорошо, то выставляем права на пост (в премере отправляем ВСЕМ ПОЛЬЗОВАТЕЛЯМ G3)

    // Выдает права
    CSocNetLogRights::Add ( $eventID, array ("G3") );
    // Отправляет уведомление о новом сообщении
    CSocNetLog::SendEvent ( $eventID, 'SONET_NEW_EVENT' );


    Радуемся =)

    Все параметры получаются по средствам GetList например.
    Ответ написан
    4 комментария
  • Как в 1С Битрикс добавить изображения товара?

    gromdron
    @gromdron
    Работаю с Bitrix24
    В Битриксе не картинка добавляется к товару, а у товара изменяется свойство.
    Т.е. чтобы у товара была картинка - нужно изменить свойства товара (а картинку битрикс сам загрузит куда-нужно).

    Вы же добавление через CIblockElement::Add делаете?
    Там есть пример:
    "DETAIL_PICTURE" => CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"]."/image.gif")
    Ответ написан
  • Сколько нужно изучать Битрикс?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Сколько вообще надо изучить его, чтобы устроиться на работу?

    В зависимости от уровня оплаты иногда достаточно и просто знать php/html/js, чтобы устроиться junior'ом.

    У нас цикл подготовки занимает от 1-го до 3 месяцев.
    При этом первый месяц ТОЛЬКО чтение мануалов (т.е. прохождение всех курсов от Контент-менеджера до Bitrix Framework). Второй месяц - подготовка и сдача экзаменов Битрикса.
    Крайне не рекомендую изучать Битрикс по видеокурсам - получиться не то что Вы хотите.

    А дальше - только практика.
    Ответ написан
    Комментировать
  • Есть ли в Битрикс метод увеличивающий значение свойства элемента?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Прямо вот метода нет, но если знаете ID товара, можете написать SQL запрос.
    Хотите ускориться - придется запачкаться, ну или позапросно.
    Ответ написан
    Комментировать
  • У 1с-битрикс есть апи?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Внешнего API, т.е. позволяющего работать другим приложениям с Вашим сайтом нет.
    Из коробки есть только синхронизация с 1С, да и это не то что Вам нужно
    Ответ написан
  • В чем отличие template_styles.css от styles.css в битриксе?

    gromdron
    @gromdron
    Работаю с Bitrix24
    template_styles.css отвечает за стили шаблона, который будет отображаться у пользователя на странице
    styles.css - стили которые будут использовать в ВИЗУАЛЬНОМ РЕДАКТОРЕ при создании/редактировании страницы.

    Например: в template_styles.css может быть определен стиль:

    div {
    	font-weight:bold;
    }


    И для всего сайта у вас весь текст в div будет жирный.
    Но в визуальном редакторе может быть прописано:

    div {
    	font-weight: normal;
    }


    Таким текст на всем сайте у Вас будет жирный, а в визуальном редакторе нет. Вот и получиться, что Ваш визуальный редактор не такой уж и визуальный.
    Для того чтобы этого не произошло, дополнительно и существует этот файл :)
    Ответ написан
    Комментировать
  • Как сделать композит на битриксе?

    gromdron
    @gromdron
    Работаю с Bitrix24
    В учебных курсах, есть прекрасная статья про отладку композита.
    Если Вы откроете файл: /home/s/new/new.beget.tech/public_html/bitrix/html_pages/new.beget.tech/patients/o-nas/index@/page.html.delete.1509433132.4885, то скорее всего увидите кто именно на данной странице голосовал против композита.
    Ответ написан
    Комментировать
  • Как заставить битрикс не кешировать определенные участки кода в шаблоне?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Простите конечно, но дичь в данном случае то, что предлагаете Вы. Ни один фрейморк не поддерживает "не кеширование определенной области внутри кешируемой" (найдете опровержение - с удовольствием побеседуем и рассмотрим как возможно применение данного алгоритма).

    Собственно в Битриксе есть 2 механизма для решения Вашего кейса:

    1) Убрать кеширование результата (html) и сделать кеширование данных.
    На мой взгляд не лучший вариант, так как на рендеринг тоже нужны ресурсы, которые и так дорогие

    2) Определить дополнительный ключ кеширования.
    В StartResulCache во 2 параметр можно добавить свои ключи, и в данном случае у Вас это будет ключ устройства пользователя (mobile / desktop), после чего будет хранится 2 кеша: для мобильных и для десктопных клиентов.
    Ответ написан
    4 комментария
  • Битрикс: http стили грузятся, https - нет, почему?

    gromdron
    @gromdron
    Работаю с Bitrix24
    На самом деле все просто как 2х2: у Вас сайт работает и по http и по httpS, а CDN работает ЛИБО для http ЛИБО для httpS.

    На странице: /bitrix/admin/bitrixcloud_cdn.php?lang=ru
    На вкладке дополнительно, нужно отметить опцию "Сайт использует https".

    Дело в том, что все ресурсы отдаются грузятся с Вашего сайта, но отдаются с другого домена.
    Если Вы посмотрите на строку, то они грузятся с "//brima.ru.opt-css.1c-bitrix-cdn.ru/", а при активации ссылка примет вид: "//opt-******.ssl.1c-bitrix-cdn.ru/", где ****** это будет Ваш уникальный ID (все будет автоматически после активации галочки).
    Ответ написан
    Комментировать
  • Как правильно переименовать папки сайтов в VM Bitrix?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Для выполнения данной операции, Вам не нужно переименовывать папки - Вам нужно поправить файл hosts (чтобы с site1.ru был переход на site1.loc), потому что иначе, без зарегистрированного домена все будет очень плохо.
    А чтобы site1.ru открывался Вам нужно отредактировать конфигурацию nginx.

    Собственно название папок это скорее для Вас чтобы не запутались. Папки могут называться хоть www.supertest.batch.main, а открываться по www.site1.ru, хоть по site1.io
    Ответ написан
    Комментировать
  • Как записать данные в базу при установке модуля?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Ну окей, погнали.

    (file_exists($f = dirname(__FILE__).'/db/mysql/install.sql'))

    1) Как вообще получилась такая адовая конструкцию? Она же не читается, да и не нужна она (см. ниже)

    2) Файл dirname(__FILE__).'/db/mysql/install.sql') всегда присутствует в директории модуля.
    За свою практику, я еще не встречал шибко-умных-парней, которые бы лезли в чужой модуль и удаляли файлы, поэтому если он есть в модуле, то он есть всегда.
    Хочешь проверить дополнительно? Проверяй, только если он не найден - хотя бы ошибку выводи, а то сейчас все в холостую - нет файла -> нет события -> непонятно почему не работает

    3) Хочешь выполнить батч? Ну так и делайте это как битрикс. Посмотри хотя бы на модуль торгового каталога:

    if(!$DB->Query("SELECT 'x' FROM b_catalog_group", true))
        $errors = $DB->RunSQLBatch($_SERVER['DOCUMENT_ROOT']."/bitrix/modules/catalog/install/db/".strtolower($DB->type)."/install.sql");


    Обрати внимание на: strtolower($DB->type), если планируешь делать модуль оставь хотя бы лазейку, чтобы потом не переделывать.

    4) Переходи уже на d7!
    В папке модуля в include.php оставь пустой комментарий с тегами php

    И в /lib/demodata.php пропиши:

    namespace Partner\Demosite;
    
    class DemoData


    Тогда тебе не нужно будет править автолоадер при появлении нового класса и геморроя будет меньше

    5) После п.4 смотри на новый лоадер (и раз уж пишешь по-старинке, вот старый код, новый можешь в том же модуле торгового каталога посмотреть):

    RegisterModuleDependences('main', 'OnPageStart', $this->MODULE_ID, '\Partner\Demosite\DemoData', 'AddDemoDataOptions');


    P.S. Я надеюсь в uninstall ты удаляешь подписки на события.

    А теперь ответ на вопрос: если хочешь загрузить какие-нибудь данные в БД - делай это в методе DoInstall() в самом конце после успешной регистрации модуля, а не на событиях. Если их слишком много - выдели несколько шагов.
    Ответ написан
    2 комментария
  • Битрикс Корпоративный портал бизнес процесс, как добавить триггер времени?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Прямо как Вы описали нет, НО!
    Если БП со статусами, то Вы можете сделать отдельный статус для подтверждения.
    Поставить тайм-аут на событие в 30 минут, и в другом статусе проверить были ли они выполнены. При невыполнении - вернуть заново на тот же статус.

    Реализация похуже, но кейс решает.
    Ответ написан
    Комментировать
  • Как можно посчитать часы и минуты по тарифу?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Посмотрите как работает в date G и i, как php читает запятую при приведении типов.

    Немного дополненный пример.

    /* @var float Стоимость минуты разговора, в данном случае 55 рублей 56 копеек */
    $rateMinutes = 55.56;
    
    /* @var DateTime Время начало разговора/события */
    $oStartDate = new \DateTime('11.10.2017 10:37:00');
    
    /* @var DateTime Время оконачания разговора/события */
    $oEndDate = new \DateTime('11.10.2017 10:47:00');
    
    /* @var int Длительность события в секундах */
    $durationSeconds = abs($oEndDate->getTimestamp()-$oStartDate->getTimestamp());
    
    /* @var int Длительность события в минутах, округленных в большую сторону */
    $durationMinutes = round($durationSeconds/60);
    
    /* @var float Стоимость разговора/события */
    $price = $durationMinutes * $rateMinutes;
    
    // Выводим стомость разговора/события
    var_dump($price);
    Ответ написан
    Комментировать
  • Как вывести данные в админке?

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

    gromdron
    @gromdron
    Работаю с Bitrix24
    Окей, почему такие большие разрывы в коде?

    1) Возможно ошибка в самом файле шаблона. Нужно проверить все шаблоны на предмет символов в цикле.
    Можно попробовать заменить свой шаблон меню, стандартным шаблоном битрикса. Помогло? Ошибка в шаблоне. Нет? Ошибка в другом месте.

    2) Возможно ошибка кроется в result_modifier.php шаблона.
    Файла нет или ошибки в нем нет? Ошибка в другом месте.

    3) Возможно кто-то вынес меню в local или изменил файл в ядре (/bitrix/components/bitrix/menu).
    Ядро не менялось и компонента в local нет? Ошибка в другом месте.

    4) Возможно используется расширенное меню и ошибка в нем.
    Если расширенное меню не используется или в нем нет ошибки, то ошибка в другом месте

    5) Возможно ошибка при формировании меню.
    Например пункты меню формируются php кодом или внутри происходит какой-то include/require

    Ошибка по-прежнему не найдена?
    Поздравляю - Вы попали на очень хороший дебаг и может стоит обратиться в техническую поддержку?
    Ответ написан
    Комментировать