• PHP скрипт не авторизируется, какие параметры передавать?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Для того чтобы провести авторизацию необходимо сделать следующее:

    1) Скачать страницу.
    1.1) Нужно получить COOKIE, которые вернутся со страницей
    1.2) Достать ВСЕ поля из формы (там передаются еще 2 доп. параметра, которых у тебя нет)
    2) Отправить запрос с COOKIE, параметрами из п.1.2 на url авторизации (на ту же страницу с которой производил загрузку)
    Ответ написан
  • Работа с Closure в php?

    gromdron
    @gromdron
    Работаю с Bitrix24
    А вы точно ничего не перепутали?
    Рекомендую ознакомиться со статьей: https://habrahabr.ru/post/147620/
    Ответ написан
    Комментировать
  • Вытащить данные из массива без цикла?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Снизу передать переменную наверх нельзя.
    В Битриксе этот механизм называется "Отложенные функции" (погуглите на эту тему, там много чего расскажут).

    Делается это так:

    // Готовим значение titile по-умолчанию
    $title = '';
    
    // Начинаем буферизация
    ob_start();
    echo "<html><head><title>#title#</title></head>";
    
    // получаем статьи
    $articles = Model::GetArticles();
    
    $iSetTitle = false;
    foreach($articles as $v)
    {
    	if ( ! $iSetTitle ) 
    	{
    		$title = $v['title'];
    		$iSetTitle = true;
    	}
    	echo '<div class="title"><p><?=$v["title"]; ?></p></div>';
    	// вывод контента
    }
    
    $page = ob_get_clean();
    echo str_replace('#title#',$title, $page);


    Получается вы итерируетесь 1 раз и вытаскиваете все что нужно, но Вам нужно переделывать структуру Вашего приложения.
    Ответ написан
  • Как сделать несколько возращаемых типов?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Есть 3 способа решения Вашего вопроса:

    1) Топрный: Не использовать указание возвращаемого типа функции
    2) Костыльный: Сделать класс обертку на PartnersPhotoModel, который могла бы возвращать пустой объект данного класса
    3) Прямой: при вызове $this->findOne($criteria); проверять есть ли значение, и в случае его отсутствия бросать исключение
    Ответ написан
    Комментировать
  • Каким способом изучать API Битрикса?

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

    Давайте начнем с того, что названия переменных значения не играют. Т.е. Вы можете поменять в коде местами $arSelect и $arFilter и результат от этого не изменится (если Вы все сделали правильно). Что касается их названий - они помогают лично Вам понять что в них находятся и работают по принципу венгерской нотации, с типами и camelCase. То есть в переменной $arFilter находится массив полей, по которому производится фильтрация, а в $arSelect - массив полей, который нужно получить.

    Что касается документации - вранье, она обширная и разжевана до мелочей. Если Вы хотите получить план по развитию, то:
    1) Пройдите всю цепочку битрикса от "Контент-менеджера" до "Администратора" (все 3) и поймите как это работает в админке
    2) Пройдите курс Bitrix Framework и поймите как с этим работать с точки зрения разработчика
    3) Активно читайте справочную литературу - https://dev.1c-bitrix.ru/api_help/ и https://dev.1c-bitrix.ru/api_d7/
    4) Смотрите на официальные курсы по битриксу https://academy.1c-bitrix.ru/training/course/
    5) Сдавайте официальные экзамены (там примеры заданий и четкие решения) https://academy.1c-bitrix.ru/certification/exams.php

    Я Вас уверяю, при сдаче и первого и второго экзамена, Вы уже будете понимать все что нужно для уровня Junior-Middle
    Ответ написан
    6 комментариев
  • Битрикс CRM Где находиться форма смена ответственного из сделки?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Вам не нужно для этого изменять внешний вид сделки и crm.entity.quickpanelview Вам тоже трогать не нужно.

    Вы должны подписаться на событие OnAfterCrmDealUpdate и уже в нем инициировать поиск и смену ответственных у привязанных вещей. Так же если вы хотите, чтобы при смене ответственного за компанию менялись ответственные за сделки, нужно подписаться и на событие OnAfterCrmCompanyUpdate.

    P.S. Я как практикующий Битрикс24 разработчик, могу с уверенностью сказать, что из-за решения которое Вы хотели реализовать (через crm.entity.quickpanelview) битрикс и не любят. Т.е. кто-то кастомит компонент, а другим потом разбираться.
    Ответ написан
    2 комментария
  • Как сделать безопасный запрос к БД?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Смотря что именно Вы хотите сделать.
    Если Вас интересует как правильно это делать, то смотрите сообщение от Ильдар Гизетдинов, там подробно описано
    Если Вас интересует как исправить Ваш запрос, то перед вставкой значений в запрос, нужно использовать метод ForSql()
    Ответ написан
    Комментировать
  • Как узнать правильное время выполнения php скрипта?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Правильно ли я понимаю, что Вы хотите узнать все время, которое прошло с момента получения веб-серверов/веб-прокси запроса, до момента его выдачи клиенту?
    Если да, то это можно настроить в Apache и Nginx - в access_log будут не просто указаны запросы, но и время, которое потребовалось на их обработку и php тут не причем.

    Если смотреть на Selenium-тест, то на него еще и скорость соединения с интернетом будет играть роль. А если вы будете еще и dom load событие ждать, то еще и сервер selenium (время обработки страницы, загрузки доп. ресурсов и т.п.)
    Ответ написан
    Комментировать
  • Urlrewrite битрикс. Как написать правило исключающее из url символьный код элемента?

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

    Шаг 1.
    1) Создайте страницу /catalog/index.php, на этой странице выведите $_REQUEST
    2) Создайте правило (взял из примера выше, у пользователя Артём Лучников )

    array(
        "CONDITION" => "#^/([a-zA-Z0-9_-]*)/catalog/.*#",
        "RULE" => "city_code=\$1",
        "PATH" => "/catalog/index.php",
    )


    3) Проверьте, что при заходе, например на /moscow/catalog/, открывается страница и в выведенном массиве есть city_code=moscow

    Шаг 2.
    1) Скопируйте в свое пространство компонент catalog (комплексный) [например custom:catalog], вынесите его на страницу /catalog/index.php
    2) Добавьте в component.php еще одну разделяемую переменную в arComponentVariables - назовите ее, например CITY_CODE, напишите обработчики в тело комплексного компонента, которые будут "переваривать" введенный текст и будут перенаправлять на нужные страницы. В шаблоне sections.php сделайте вывод $_REQUEST
    3) Проверьте, что при заходе, например на /moscow/catalog/, открывается страница и в выведенном массиве есть city_code=moscow

    Шаг 3.
    1) В вынесенном компоненте (из примера выше это custom:catalog), сделайте обработчик указанной переменной city_code, которая и определяет, есть ли указанный город в инфоблоке
    2) Проверьте что все работает корректно

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

    gromdron
    @gromdron
    Работаю с Bitrix24
    Для технической реализации стартапа у Вас есть 2 пути:
    1) Найти партнера/сотрудника (далее компаньон) для разработки технической части проекта
    2) Самому разобраться в технической части проекта

    Оба подхода хоть и оттакливаются от одного и того же минимального набора знаний, но являются противоположными.
    Если Вы ищите компаньона, то Вы должны в первую очередь быть в нем уверены, потому что ПОЧТИ ВСЮ техническую часть Вы отдадите ему. Ваша задача - идеи, маркетинг, бизнес и т.п. Вы обсуждаете с ним чего хотите, а у него уже болит голова как это сделать чтобы всем было хорошо
    Если Вы хотите все контролировать, то увы, но Вам придется разобраться во многих тонкостях работы IT-специалиста (языки программирования, технологии, базы данных и т.п.)

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

    gromdron
    @gromdron
    Работаю с Bitrix24
    Я бы порекомендовал бы Вам литературку для расширения кругозора: https://www.arbinada.com/node/25
    Особое внимание обратить на "Маршрут обхода".

    Что касается Вашего вопроса то зависит от того как нужно получить результат - плоско или объемно.
    Для простоты, предположим мы хотим получить результат плоским

    <?php
    
    /* @var array[] Плоский массив вложенных нод */
    $arTree = [];
    
    collectTree( 3, $arTree );
    
    /*
    Если сделать var_dump($arTree);
    Мы рассчитываем получить следующий массив:
    
    array
    {
    	{
    		id: 3
    		title: Cat3
    		slug: cat3	
    		parent: 0
    	},
    	{
    		id: 6
    		title: lodki
    		slug: lodki	
    		parent: 3
    	},
    	{
    		id: 7
    		title: Samolety
    		slug: lodki	
    		parent: 6
    	}
    }
    
    */
    
    function collectTree( $iRootId, $nodeList = [] )
    {
    	/* @var array Массив описывающий ноду $iRootId */
    	$nodeList[ $iRoot ] = getRootData($iRootId);
    
    	/* @var int[] Массив id категорий, который является вложенным по отношению к текущей ноде */
    	$arRootIncludedNodeId = getSubTreeNodeIds( $iRootId );
    
    	if ( !empty( $arRootIncludedNodeId ) )
    	{
    		foreach ($arRootIncludedNodeId as $iNode)
    		{
    			collectTree( $iNode, $nodeList );
    		}
    	}
    
    }
    
    /**
     * Возвращает данные по конкретной ноде
     * @param  int $iRoot 
     * @return array
     */
    function getRootData( $iRoot )
    {
    	// ...
    }
    
    /**
     * Возвращает ID всех нод, являющихся наследниками $iRoot ноды
     * @param  int $iRoot 
     * @return int[]
     */
    function getSubTreeNodeIds( $iRoot )
    {
    	// ...
    }
    ?>


    Соответственно для объемного нужно немного изменить метод collectTree, чтобы он не дополнял список, а дописывал в нужный элемент
    Ответ написан
    Комментировать
  • Как вывести цену товара?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Например, если вывод у Вас через CIblockElement::GetList происходит, а тип базовой цены имеет идентификатор 1, то можно в select параметр добавить: CATALOG_PRICE_1 - и он достанет цену.
    Вообще есть достаточно много материалов на эту тему. Если немного поискать, то сразу всплывает:
    https://dev.1c-bitrix.ru/support/forum/forum6/topi...
    Ответ написан
    Комментировать
  • Белый экран,php, ошибок не выводит, в чём проблема?

    gromdron
    @gromdron
    Работаю с Bitrix24
    А error reporting на что настроен?
    php.net/manual/ru/function.error-reporting.php
    Ответ написан
    Комментировать
  • Как включить shell_exec?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Ознакомьтесь с аналогичным вопросом, может быть это решение https://stackoverflow.com/questions/29272233/php-f...
    Ответ написан
    Комментировать
  • Как заменить SMTP-сервер?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Если Вы работаете на VPS и у вас есть возможность устанавливать ПО на linux - то это отдельный тег и тема с настройкой MTA - например msmtp (очень простой) или postifx (можете гуглить прямо по фразе "установка и настройка msmtp").

    Если у Вас виртуальный хостинг, то подменять стандартный mail вы скорее всего не сможете. В таком случае Вам понадобится обертка, например PHPMailer
    Ответ написан
    Комментировать
  • PHP foreach: почему валится с ошибкой?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Пытался наиболее подробно все изложить и разжевать:

    /* @var string Исходный текст в синтаксисе HEREDOC */
    $process = <<<TEXT
    Lorem ipsum
    Lorem ipsum
    Lorem ipsum
    TEXT;
    
    /**
     * Оборачивает элемент в тег <span>
     * @param type $element 
     * @return type
     */
    function spanElement( $element )
    {
    	return "<span>{$element}</span>";
    }
    
    // Получаем построчно исходный текст
    // примечание: если есть средство работающее без регулярок, то лучше использовать его
    $arProcess = explode("\n", $process);
    
    // Применяем к каждому элементу нашу функцию, модицифируя ее значения
    // см: http://php.net/array-map
    $arProcess = array_map('spanElement', $arProcess);
    
    /*
    При вызове var_dump на $arProcess результат будет следующим:
    
    array(3) {
      [0] =>
      string(24) "<span>Lorem ipsum</span>"
      [1] =>
      string(24) "<span>Lorem ipsum</span>"
      [2] =>
      string(24) "<span>Lorem ipsum</span>"
    }
    */
    
    // Вновь объединяем это все в исходный текст
    $process = implode("\n", $arProcess);
    
    /*
    При вызове var_dump на $process результат будет следующим:
    
    string(74) "<span>Lorem ipsum</span>
    <span>Lorem ipsum</span>
    <span>Lorem ipsum</span>"
    
    */


    Для усвоения работы foreach, рекомендую ознакомиться с документацией: php.net/manual/ru/control-structures.foreach.php
    Ответ написан
    Комментировать
  • Как настроить тип цен?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Компоненты новостей ( news* ) не выводят дополнительных параметров, особенно из других модулей. Для вывода цены, Вам следует обратиться к компонентам catalog* или eshop*
    Ответ написан
    Комментировать
  • Какие библиотеки или приемы можно использовать для выгрузки из csv файла больше 150000 товаров в ИМ на Bitrix чтобы не лег сайт за это время?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Вы в любом случае положите сайт, вопрос только на какое время.
    Можно положить его условно на 2 часа и загрузить все товары сразу, а можно положить его на 1-2 секунды каждые 5 минут, но тогда импорт будет пару дней.
    Ответ написан
    Комментировать
  • Поиск по таблице, как сделать?

    gromdron
    @gromdron
    Работаю с Bitrix24
    А как насчет сделать таблицу search_entity в которую положить:
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `sale_id` int(11) NOT NULL,
    `text` text,

    Причем FULLTEXT KEY `text` (`text`)

    И делать запись 1к1 в данное поле.
    Причем text - это все поля через пробел, можно без знаков препинания, союзов и т.п.
    Тогда поиск будет по отдельной таблице, можно сделать собственное ранжирование (например добавить ключ sort) и выделять нужные поля.
    Ответ написан
    Комментировать