Ответы пользователя по тегу 1С-Битрикс
  • Почему может не работать запрос к API Яндекс.Кассы?

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

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


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

    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 (в окошке), Вы могли посмотреть - что отдал браузер (может он логин иначе отдает).
    Ответ написан
    Комментировать
  • Почему не подключается композер к битриксу?

    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
    Если предположить, что Вы в инфоблоке добавили новое свойство и добавили ему тип Справочник, то думаю это для Вас)

    Я создал тестовое свойство (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;
    		}
    	}
    }
    Ответ написан
  • Где находиться эта страница в cms битрикс?

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

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

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

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

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

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

    gromdron
    @gromdron
    Работаю с Bitrix24
    Чтобы не было сильных тормозов сайта отправка почты происходит на агентах в пачках по несколько штук за раз.
    Агенты могут исполняться как на хитах, так и на cron. Если агенты исполняются на хитах, то если на сайте нет пользователей, то и агенты не выполняются (соответственно почта не уходит). Перевидите агенты на cron и она будет работать быстрее.
    Ответ написан
    Комментировать
  • Как в битрикс сделать параметры url в нижнем регистре?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Если хотите извращаться то, вот тут дали нормальный ответ.

    spoiler
    in a serverwide httpd.conf:
    RewriteEngine On
    RewriteMap  lc int:tolower
    RewriteCond %{REQUEST_URI} [A-Z]
    RewriteRule (.*) ${lc:$1} [R=301,L]


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

    gromdron
    @gromdron
    Работаю с Bitrix24
    Для начала нужно осознать, что проблема не на всех страницах. Например главная очень даже хорошо отображается.
    Что касается остальных:
    1) Для начала держим битрикс обновленным (иначе некоторые фишки могут не всегда корректно работать)
    2) В настройках главного модуля нужно обязательно отметить опции "Объединять CSS файлы" и "Объединять JS файлы". В идеале конечно все из блока "Оптимизация CSS", но на практике иногда после этого большие проблемы с кешированием в браузерах.
    3) Затем необходимо проверить форму входа - капча именно там выводится:
    spoiler
    <form action='http://borelli.beget.tech/bitrix/templates/eshop_bootstrap_blue/send_msg_form.php'  method='GET'>
       <input name='name' type='text' placeholder='Имя*' class='name_form' ></input>
       <input name='email' type='email' placeholder='E-mail*' class='email_form' ></input><br><br>
       <input name='topic' type='text' placeholder='Тема*' class='topic_form' ></input><br><br>
       <textarea name='msg' placeholder='Сообщение*'></textarea><br><br>
       <img src='http://borellifashiongroup.ru/bitrix/templates/eshop_bootstrap_blue/captcha.php' class='captcha' />
       <input type='text' name='norobot' placeholder='Введите текст с картинки*' class='captcha_code' ></input>
       <button>отправить</button>
      </form>


    4) Далее нужно разобраться с картинками - слишком тяжелые. На странице каталога видел по 3МБ. Вообще в легкую без потери качества можно сжать минимум в 2х раза (а то и больше). Всякие JPEG 2000/XP и WebP не предлагаю, так как битрикс не работает с ними, но банально снизить качество (хотя бы до 80%) и разрешение можно.
    5) Проведите рефакторинг в компонентах. В идеале inline javascript и css кода на странице быть не должно, а у Вас его куча.
    Ответ написан
    Комментировать
  • Как создать динамический фон в шапке для каждого раздела сайта?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Вариантов масса и все зависит от конкретной задачи (Вашу задачу я интерпретировал 3 способами)
    Навскидку, можно сделать так:
    1) Использовать включаему область для фона (и другого html-содержимого).
    2) Можно через свойства страницы
    3) Можно сделать компонент с параметром (типа файл) и через отложенные функции изменять код
    Ответ написан
  • Как сделать поиск по свойству в Битрикс search.title?

    gromdron
    @gromdron
    Работаю с Bitrix24
    $eventManager = \Bitrix\Main\EventManager::getInstance();
    
    $eventManager->addEventHandlerCompatible('search', 'BeforeIndex',    ['\\CatalogProductIndexer','handleBeforeIndex']);
    
    
    class CatalogProductIndexer
    {
    	/**
    	 * @var int Идентификатор инфоблока каталога 
    	 */
    	const IBLOCK_ID = '30';
    
    	/**
    	 * Дополняет индексируемый массив нужными значениями
    	 * подписан на событие BeforeIndex модуля search
    	 * @param array $arFields 
    	 * @return array
    	 */
    	public static function handleBeforeIndex( $arFields = [] )
    	{
    		if ( !static::isInetesting( $arFields ) )
    		{
    			return $arFields;
    		}
    
    		/**
    		 * @var array Массив полей элемента, которые нас интересуют
    		 */
    		$arSelect = [
    			'ID',
    			'IBLOCK_ID',
    			'PROPERTY_TEST1',
    			'PROPERTY_TEST2'
    		];
    
    		/**
    		 * @var CIblockResult Массив описывающий индексируемый элемент
    		 */
    		$resElements = \CIBlockElement::getList(
    			[],
    			[
    				'IBLOCK_ID' => $arFields['PARAM2'],
    				'ID'        => $arFields['ITEM_ID']
    			],
    			false,
    			[
    				'nTopCount'=>1
    			],
    			$arSelect
    		);
    
    		/**
    		 * В случае, если элемент найден мы добавляем нужные поля 
    		 * в соответсвующие столбцы поиска
    		 */
    		if ( $arElement = $resElements->fetch() )
    		{
    			$arFields['TITLE'] .= ' '.$arElement['PROPERTY_TEST1_VALUE'];
    			$arFields['BODY'] .= ' '.$arElement['PROPERTY_TEST2_VALUE'];
    		}
    
    		return $arFields;
    	}
    
    	/**
    	 * Возвращает true, если это интересующий нас элемент
    	 * @param array $fields 
    	 * @return boolean
    	 */
    	public static function isInetesting( $fields = [] )
    	{
    		return ( $fields["MODULE_ID"] == "iblock" && $fields['PARAM2'] == static::IBLOCK_ID );
    	}
    
    }
    Ответ написан
  • Как вывести товары в корзине Битрикс?

    gromdron
    @gromdron
    Работаю с Bitrix24
    У Вас происходит подмена понятий.
    Если Вы хотите интегрировать верстку (т.е. заменить верстку корзины, на свою), то Вам совершенно не обязательно писать код получения товара из корзины. Вам нужно создать отдельный шаблон для уже существующего компонента корзины и манипулируя доступными $arResult и $arParams переменными в шаблоне вывести корзину. Подробнее в главе по Интеграции дизайна в курсе Разработчик Bitrix Framework

    Если Вы хотите написать корзину с нуля (собственный компонент), то придется сильно попотеть, так как это задача отнюдь не для начинающего разработчика. Придется разобраться в том, как устроен битрикс изнутри, как взаимодействуют модули и многое другое. Иными словами пройти почти все курсы от Контент-менеджера до разработчика Bitrix Framework
    Ответ написан
    3 комментария
  • Можно ли штатными средствами битрикс добавить несколько торговых предложений в корзину?

    gromdron
    @gromdron
    Работаю с Bitrix24
    В старом ядре это достаточно просто делалось из обычных функций торгового каталога.
    В новом ядре есть новые методы по работе с добавлением товара в корзину и некоторые из них являются заменой старым.

    Все что Вам нужно - получить в одном месте список товаров и отправить запрос на свою страничку, где Вы добавите этот товар в корзину (либо можете по одному запросу на каждую позицию на скрипт корзины отправлять).
    Ответ написан
    Комментировать
  • Почему так долго очищается кэш?

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

    Если Вы хотите быстро удалить весь кеш, то лучше зайти на сервер и удалить содержимое папок: /bitrix/cache, /bitrix/managed_cache и /bitrix/stack_cache
    Ответ написан
  • Как делегировать домена на Битрикс 24 сайты?

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