• Где и как лучше всего хранить актуальные БД для проектов?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Очень интересный и животрепещущий вопрос в мире Битрикса :)
    Дело в том, что пока увы нормально никто так и не научился работать с системами контроля версий в Битриксе).

    Традиционно не так много решений:
    1) "Миграции для разработчиков" от Рябина Андрей marketplace.1c-bitrix.ru/solutions/sprint.migration

    2) Migrato от Интерволги https://github.com/intervolga/intervolga.migrato пост в поддержку https://www.intervolga.ru/blog/projects/bitrix-dat...

    3) Прочие кастомные автоматизированные решения миграций (например скрипт который после коммита запускает какое-то свое ПО)

    4) Традиционный подход "ручками" (когда каждый записывает какие изменения внес и при переносе их все повторяют)

    Увы, как мы не бились, с Битрикс24 пока не удалось ничего подружить - то отваливаются crm-статусы, то БП не отрабатывают (все-таки там тоже могут быть и параметры и константы и код), поэтому у нас работает подхо 3+4 (плохо, но что делать)
    Ответ написан
    Комментировать
  • Как убрать фильтр по цене в каталоге битрикс?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Вырезав в коде.
    Насколько я помню, единственный параметр который нельзя убрать - это ползунок цены.
    Ответ написан
    Комментировать
  • 500 ошибка при симлинках?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Проблема НЕ в Битриксе, а в настройках php Вашего веб-сервера.
    Конкретнее Вам запрещено открывать в open_basedir другую директорию.

    Можно попытаться установить значение open_basedir в none, но так как у Вас нетиповая конфигруация (вижу по путям что не Bitrix Env), то наилучшим способом будет обратиться к Вашему системному администратору / хостеру.
    Ответ написан
  • Получить значения чекбоксов из базы данных?

    gromdron
    @gromdron
    Работаю с Bitrix24
    А что Вы хотите? Вы же его явно затираете в строке:
    $data[$row['question_id']] = $row['answer_id'] ;
    Запихивайте массив:
    $data[$row['question_id']][] = $row['answer_id'] ;

    При складывании 1к1 (1 вопрос = 1 ответ) - Ваша структура подойдет, а при 1 вопрос => много ответов уже нет.
    Ответ написан
    Комментировать
  • $_POST принимает NULL при AJAX запросе и мешает использовать PDO, как исправить?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Если Вы НЕ отметили ни одного чек-бокса, то Вам ничего и не прилетит.
    Т.е. если отправить форму из моего примера, в $_POST будет:
    array(2) {
      ["a"]=>
      string(1) "0"
      ["b"]=>
      string(1) "5"
    }

    Т.е. никакого day у Вас и нет.
    Я так понимаю, Вы делаете вывод данных на основе значения этого day. А значит ничего не и должно вывестись.

    То есть, Ваш код сведется к:
    $result = [];
    
    $a = (int) $_POST['a'];
    $b = (int) $_POST['b'];
    
    $c = array_filter( (array) $_POST['day'] );
    
    if ( !empty($c) )
    {
    	$c = implode(',', $_POST['day']);
    	$in = str_repeat('?,', count($c) - 1) . '?';
    	$sql = "SELECT * FROM table WHERE day IN ($in) ASC LIMIT :a, :b";
    	$stmt = $pdo->prepare($sql);
    	$stmt->execute($с, [$a, $b]);
    	$data = $stmt->fetchAll();
    
    	$result = $data;
    }
    
    echo json_encode($result);


    P.S. А так ли Вам нужна именно ручная сборка значений? Почему бы не вынести в саму форму?

    <form id="filter">
    	<input type='hidden' name='a' value='0' />
    	<input type='hidden' name='b' value='5' />
    	<input type="checkbox" name="day[]" value="1"> 
    	<input type="checkbox" name="day[]" value="2">
    	<input type="checkbox" name="day[]" value="3"> 
    </form>


    $.ajax({
        url: 'index.php',
        method: 'POST',
        data: $("#filter").serialize()
    });
    Ответ написан
    1 комментарий
  • Перестала работать авторизация через соц.сети на 1C-Bitrix. Что делать?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Как не парадоксально звучит, но нужно обновиться.
    Дело в том, что Вконтакте и Facebook в одностороннем порядке изменяют свое API. Например FB изменил протокол, а VK теперь явно требует указывать номер версии.

    Авторизация ВК исправлена в версии 17.5.4 (обновления будет достаточно)
    Авторизация FB исправлена в версии 17.5.3 (помимо обновления, нужно еще и настройки в кабинете разработчика Facebook изменить)
    Ответ написан
    1 комментарий
  • Интерактивная карта на js?

    gromdron
    @gromdron
    Работаю с Bitrix24
    В приведенном Вами примере используется Raphaël. В принципе, при наличии знаний и опыта, не составит труда собрать ее на любой библиотеке.

    Но наиболее простым будет использование одного из существующих библиотек:
    Ответ написан
    Комментировать
  • Как менять SEO - данные в зависимости от города?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Это очень интересная задача.
    Как и Никита, мы объявили маркер #CITY_NAME# (ну не прямо объявили, но договорились, что это значение нужно менять на название города пользователя в именительном падеже).
    Далее изменили тексты всех необходимых частей. Затем на событии OnEpilog мы заменяли данный маркер на город.
    Для отложенных функций (например CMain::SetTitle)
    следуя порядку выполнения страницы на том же события переопределяли их значения.

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

    gromdron
    @gromdron
    Работаю с Bitrix24
    CMain::SetTitle работает по технологии отложенных функций, а это значит что следуя порядку выполнения страницы на событии OnEpilog можно перехватить значение и добавить город или изменить информацию.
    Но помните, событие работает и в административной панеле, так что если не хотите добавлять название и в административной панеле, воспользуйтесь константой ADMIN_SECTION.
    Ответ написан
    Комментировать
  • Как отдельно выдернуть поля из формы, типа обратной связи на сайте Bitrix?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Вариантов масса - Выделить это все в компонент или например создать включаемую область и уже ее вывести. Ну или у Вас это уже есть и Вам нужно просто отредактировать страницу.

    Или я не совсем понял вопроса и Вы хотите чтобы кто-то бесплатно это сделал за Вас?
    Ответ написан
    Комментировать
  • Не могу понять почему не работает var_dump?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Меняем:
    if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['edit'])) {
        $editServiceById = $services->editServiceById($_GET['service_id'], $_POST);
    }


    На:
    // Display errors 
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    error_reporting(E_ALL);
    // Log values
    echo "<pre>";
    var_dump($_SERVER['REQUEST_METHOD'], $_POST['edit'], isset($_POST['edit']));
    echo "</pre>";
    
    if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['edit'])) {
        $editServiceById = $services->editServiceById($_GET['service_id'], $_POST);
    }


    Повторяем отправку формы и смотрим что и куда не ушло. А дальше учимся дебажить банальные вещи.

    P.S. leni_m - сполерит :P
    Ответ написан
    Комментировать
  • Как объединить три массива?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Как вариант, еще один:

    /**
     * Prepare array for our job
     */
    $arrayOne = [
    	0 => 80,
    	1 => 80,
    	2 => 90,
    ];
    
    $arrayTwo = [
    	0 => [
    		0 => 190,
    		1 => 195,
    	],
    	1 => [
    		0 => 200,
    	],
    	2 => [
    		0 => 190,
    		1 => 195,
    	],
    ];
    
    $arrayThree = [
    	0 => 1,
    	1 => 2,
    	2 => 3,
    ];
    
    /**
     * @var array Array with actual data in our structure
     */
    $arResult = [];
    
    foreach ( $arrayTwo as $iKeyOne => $arrayTwoElement )
    {
    	// if in second array exist unknown key
    	if ( !array_key_exists($iKeyOne, $arrayOne) )
    	{
    		continue;
    	}
    
    	// if in third array exist unknown key
    	if ( !array_key_exists($iKeyOne, $arrayThree) )
    	{
    		continue;
    	}
    
    	// if in second array no elements
    	if ( empty($arrayTwoElement) || !is_array($arrayTwoElement) )
    	{
    		continue;
    	}
    
    	/* @var integer Key for first depth level  */
    	$iLevelKey = (int) $arrayOne[ $iKeyOne ];
    
    	/* @var integer Value for second depth level */
    	$iLevelValue = (int) $arrayThree[ $iKeyOne ];
    
    	foreach ($arrayTwoElement as $k => $v)
    	{
    		$arResult[ $iLevelKey ][ $v ] = $iLevelValue;
    	}
    }
    
    var_dump($arResult);
    /*
    Will display:
    array(2) {
      [80]=>
      array(3) {
        [190]=> int(1)
        [195]=> int(1)
        [200]=> int(2)
      }
      [90]=>
      array(2) {
        [190]=> int(3)
        [195]=> int(3)
      }
    }
    */
    Ответ написан
    Комментировать
  • Как реализовать SSO (единый вход) на Laravel?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Есть такая штука, называется ADFS - на Windows Server поднимается соответствующая роль и открывается OpenID / OAuth авторизация.

    Ну а дальше, по принципам что и соц.сети :)
    Ответ написан
    Комментировать
  • Как сделать поиск по свойствам раздела (UF) типа "Файл"?

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

    Но Вашу задачу можно решить технически:

    1) На событиях перед добавлением/изменением элемента инфоблока в SEARCH_CONTENT можно дописывать название файла
    2) Затем подписаться на события индексации и добавлять соответствующие значения в поиск.
    Как пример, можно ознакомиться с https://dev.1c-bitrix.ru/community/blogs/oracle/26...

    Еще например, можно разработать отдельную страницу для более оптимального поиска (на последней конференции Вадим Думбравану чуть больше часа рассказывал про полнотекстовый поиск в своих разработках)
    Ответ написан
    Комментировать
  • Не сохраняются изменения в SEO bitrix?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Что делать?

    Пересматривать ЧПУ и структуру разделов. Как вариант - задать везде нужные уровни, т.е. взять вышестоящую маску и у всех дочерних разделов следующего уровня проставить их в соответствии маске.

    Во вкладке SEO, когда меняю пункты META и оставляю галочку на "Изменить для этого раздела и его подразделов", то изменения сохраняются, но они еще сохраняются в подразделов. Мне этого не надо, потому что у каждого подраздела будут свои МЕТА пункты.

    По-умолчанию, SEO-элементы наследуются от родителя.
    Т.е. если у вас структура - 1 - 2 - 3 и вы задали ее у 1, то у 2 и 3 она будет одинаковая, как и у первого уровня.
    Если затем Вы изменили значение для пункта 2, то и у 3 пункт изменится на значение 2.
    Ответ написан
    Комментировать
  • Как правильно создать фасетный велосипед?

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

    На ум приходят две мысли:
    - при mysql 5.7+ можно проверить как поведет себя json поля (чтобы не пересобирать каждый раз схему, а просто переписывать значения)
    - попробовать вынести куда-нибудь на mongodb это решение (дописывать поля там, не пересобирая).

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

    gromdron
    @gromdron
    Работаю с Bitrix24
    Можно и не использовать эту функцию.
    До 15.5.0 (на старом каталоге), есть события добавления - OnBeforeBasketAdd или OnBasketAdd
    После 15.5.0 (на новом каталоге), есть события добавления/изменения - OnSaleBasketItemEntitySaved

    Как работают события, описано в документации
    Ответ написан
    Комментировать
  • Почему падает MySQL во время установки Bitrix?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Все верно - это не ошибка Битрикса, а ошибка сервера.

    Получить "ERROR 1030 (HY000) at line 18723: Got error 168 from storage engine", можно несколькими способами.
    Наиболее распространенные:
    1) Нехватает места на хостинге (Хостинг жадный и дал Вам всего 2ГБ на Битрикс, а рекомендуется для чистой установки не меньше 10ГБ)
    2) Вы уперлись в количество одновременно открытых файлов.

    В любом случае, точную ошибку может дать только log СУБД.
    Ответ написан
    4 комментария
  • Почему не работает return?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Ну так все правильно!
    Вы же получаете результат для своей строки на второй итерации, а return на первой не работает.
    Заменяем:
    encrypt($text, $m);
    На
    return encrypt($text, $m);

    И видим результат: s eT ashi tist!
    Можно конечно еще и функцию упростить:
    function encrypt($text, $n)
    {
    	if ( $n < 1 )
    	{
    		return $text;
    	}
    	$str1 = $str2 = "";
    	for($i = 0, $len = strlen($text); $i < $len; $i++)
    	{
    		if ( $i%2 == 0 )
    		{
    			$str2 .= $text[$i];
    		}
    		else
    		{
    			$str1 .= $text[$i];
    		}
    	}
    
    	return encrypt( $str1.$str2, ($n-1));
    }
      
    echo encrypt('This is a test!', 2);
    Ответ написан
    Комментировать
  • Битрикс состав заказа, версия 15.0?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Допустимые методы изменения формы заказа появились с версии 16.0.33.
    Без обновления платформы, все что вы сотворите с карточкой заказа пропадет.
    Ответ написан
    Комментировать