• Как в 1С Битрикс переустановить компонент каталога?

    1 Зайти в Настройки-Модули и удалить модуль sale, затем заново установить. Но чревато - это затронет и все остальное и БД.

    2 Никак, но вам это не надо. Надо просто развернуть тестовую копию битрикс и скопировать новые файлы оттуда. Все.
    Ответ написан
    Комментировать
  • Как привести к единому виду разные написания одного и того же свойства товара в умном фильтре при импорте в 1с Битрикс?

    Однозначно привести к единому виду. Более того - сделать поле числовым и убрать из него единицы измерения.
    Ответ написан
    3 комментария
  • Можно как-то защитить верстку на flex от оберток контента?

    Если вы верстальщик и программист не может интегрировать ваш код нормально - учтите появление этого div и делайте стили из расщета на появление этого div. Т.е. навешиваетй нужный вам стиль не на .row, а на .row div

    Если вы программист, то внесите обертку в шаблон компонента, не надо оборачивать в неё сам компонент.

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

    Думаю что достаточно описал ситуацию, есть какое то стандартное решение?(разумеется кроме варианта - исправить вёрстку, чтобы хлебные крошки были в хеадере).

    Нет и быть не может - сам компонент хлебных крошек это по сути такая же отложенная функция.
    Идея получить в переменнух х.к. внутри компонента сама по себе не очень - потому что они могут изменится даже в футере.
    Получается что вы хотите получить переменную до ее установки.
    Кина не будет.

    Правильное решение - делать правильную верстку которая не будет разрывать ваш шаблон news.list или делать два news.list на странице, а между ними хлебные крошки.

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

    Вроде бы никак нельзя.
    Самым простым и продуктивным будет CIBlockElement::GetElementGroups в result_modifier.php. Не понимаю почему это вас пугает - нормальное такое решение.
    Другой вариант - кастомизация компонента.
    Ответ написан
    Комментировать
  • Как отдавать 404 если запрос идёт на /index.php/bla?

    404 работает нормально, кроме случаев когда в адресе есть index.php 404 не выдаёт

    Нет, не работает он у вас нормально.
    /index.php/bla/ - что у вас вообще выдается по подобным адресам?
    С вероятностью 80% вы что-то намудрили в urlrewrite.php и с вероятностью 19,99% в условном ".htaccess"
    Надо смотреть их целиком.
    Ответ написан
    Комментировать
  • Как устроена совместимость модулей в Битриксе?

    Мы сделали модуль для Битрикса версии 18.5 и думаем как он будет работать на других версиях. Может кто-нибудь предположить на какой версии и как он себя поведет?

    Кроме вас это никто не сможет сказать. Нужно знать какие особенности 18.5 вы использовали. Если вы использовали документированное API, не использовали прямое обращение к БД, то модуль будет работать на всех последующих версиях, скорее всего. API Битрикс очень стабилен. На прошлых версиях будет или не будет работать зависит от того какие фичи API вы используете и в какой версии они впервые появились.

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

    Подробнее здесь на книгу.
    Если вам надо самое простое решение в лоб, то сделать на странице 2 компонента - один будет фильтровать товары по наличию слова X и выводить только их, а другой будет фильтровать товары по его отсуствию и выводить их ниже. Все.

    Но никакой сквозной пагинации и все товары на одной странице.

    Любые варианты сложнее - это уже более детальное погружение в тему и разработка даже не компонента, а комплекса мер по сортировке товаров.

    Например сколько у вас этих X'ов? Если немного, то можно налепить свойства которые будут альтернативными сортировками и заполнять их автоматически через хуки при сохранении товаров.
    Если много... ну тогда уже надо думать. Возможно придется писать какой-то свой компонент который будет как-то реализовывать пагинацию особым образом и на каждом шаге извлекать все товары.

    Короче для более детального погружения в тему надо знать сколько товаров, что мы хотим от этих сортировок, сколько слов и как будем работать с пагинацией.
    Ответ написан
    Комментировать
  • Почему CIBlockSection::getList() и CIBlockElement::getList() выдают разное количество элементов?

    Потому что в первом случае вы подсчитываете все товары в разделе, а во втором только те, у которых PROPERTY_MYPROP.ID == 42

    С чего вы взяли что
    'PROPERTY' => [
                'MYPROP' => 42//Свойство "Привязка к элементам"
            ]

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

    Так что все работает корректно.
    Ответ написан
  • Как сделать так, чтобы число не выходило за рамки диапазона?

    Это простая задача, но я понимаю почему ты запутался - у тебя сдвинут 0 и возможное слогаемое не всегда внутри класса эквивалентности. Решается просто:
    $min = 100;
    $max = 111;
    $Δ = ($max-$min);
    
    $x = 105;
    $y = -7;
    
    $z = ($x-$min+($y%$Δ)+$Δ)%$Δ+$min;


    По шагам - тебе нужна $Δ потому что это твой реальный класс.
    Делаем следующее - вычитаем минимум, чтобы сдвинуть текущий x в нулевую точку.
    Приводим твой $y в класс дельты.
    Прибавляем дельту на случай если ты ушел влево за ноль.
    Делим по модулю на дельту чтобы вернуться в класс.
    И прибавляем минимум чтобы отойти от реального нуля назад к твоему нулю.

    UPD: исправил по итогом комментариев.
    Ответ написан
    4 комментария
  • Подключение простейшего php скрипта в битрикс, как?

    Вы будете это подключать в каждом файле до require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"); ?

    Ну это же не путь.
    Добавьте эту проверку хотя бы в init.php. А лучше в какой-то файл, который уже просто подключайте в init.php*

    Это то что касается подключения именно в битрикс.

    Что касается самой библы - сначала оладьте свое решение на пустом обычном файле без битрикс. Потом уже к битрикс подключайте. А то у вас явно не работает SxGeo, а вопрос вроде как про битрикс.

    Я не буду говорить что само такое решение плохое - и вы зарежете очень много пользователей из тех стран из которых их надо пропустить - надеюсь вы и сами прекрасно понимаете и желание отпилить ногу полностью осознано, но я все же хочу сказать что подключать на каждом хите эту библу - дорогое удовольствие. Поставьте лучше куку, после того как пропустили пользователя один раз и всем пользователям с этой кукой уже не выполняйте проверку. Можно признак в сессии хранить в принципе.
    ----------------------------------
    * - я имею ввиду /local/php_interface/init.php
    Ответ написан
  • Можно ли удалять инфоблок по XML_ID?

    Получить ID элемента по XML_ID и удалять/обновлять по ID.
    Если все сделано правильно это должна быть достаточно дешевая операция.
    Ответ написан
    1 комментарий
  • Кому попадалась или может у кого есть в свободном доступе годная выгрузка csv для импорта каталога под Битрикс?

    Берясь за написания импорта я обычно стараюсь думать не о том как побыстрее обновить побольше товаров, а о том, как побольше товаров не обновлять.
    Первая и самая простая оптимизация добавить к свойствам товаров еще одно - HASH и писать туда md5 от сереилазованного массива которым вы хотите обновить товар. Дальше, при следующем обновлении вы перед Update будете вычислять от сериалазованного массива которым хотите обновить товар, этот Hash и обновлять товар только если он не совпадает с сохраненным хэшем и записывать этот новый хэш.
    Такая схема очень удобна в случае если источник не умеет отдавать только изменившиеся товары или товар состоит из нескольких элементов ИБ (Товар+Торговое предложени+Элемент свойств). Кроме того помним что цена тоже хранится отдельной сущностью и для нее можно провернуть тот же трюк. Вычислить md5 прямо сильно быстрее чем сделать запись.

    Кроме того следите за тем чтобы вашем кастомном импорте не было ничего кроме записи в update внутри цикла. А то всякое видеть приходилось.

    Вообще записать 1000 товаров за минуту в базу, без картинок - это полная ерунда. Должно хватить любой производительности, если конечно не выяснится что у вас не 100 ТП к каждому товару.

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

    body победит.
    Взять две группы страниц:
    Группа А - целевая страница загруженная много раз.
    Группа Б - страницы на том же уровне вложенности. Лучше добавить сюда каждую страницу 2-3 раза.
    Теперь возьмем целевую страницу и удалим из нее все элементы отличающиеся хоть от одной страницы из группы А. Так мы отбросим рекламу, всякие колонки новостей подгружаеющиеся постоянно разными и т.д.
    Следующим шагом удалим со страницы все элементы которые совпадают с элементами на любой странице Б.

    Оставшиеся и есть основное содержание, в общем смысле. Еще могут оставаться скажем списки рекомендуемых товаров к данному, или списки похожих новостей или статей по этой тематике. Так как они будут отличаться от таких же на страницах группы Б скорее всего, и не будут изменяться при перезгагрузках страницы и соответственно не будут отсеяны сравнением с А. Ну тут можно попробовать удалять регулярные структуры, и если такой подход удаляет меньшую часть контента (это нужно чтобы не почистить теги p из статьи например) соглашаться на такую очистку. Еще можно учесть что такие регулярные структуры будут иметь много вложенных тегов, в отличии от регулярных структур контента.

    Как-то так я бы делал.
    Ответ написан
    Комментировать
  • У меня одного накрылась синхронизация в Опере?

    Попробуй beta версию. Мне кажется что в beta самая стабильная синхронизация, а в developer - самая нестабильная (хотя сейчас работает), а так вообще периодически ломается везде. Не помню такого чтобы работала без перебоев продолжительное время.
    Ответ написан
  • Какие есть годные материалы и статьи для знакомства с битриксом для фронтенд-разработчика? Или что вы можете подсказать в самом начале пути о битрике?

    Для фронтенда - ничего. Битрикс это бэкенд. Да у него есть своя js библа, но ее мало кто реально использует. На практике битрикс это бэкенд, и вам ничего не нужно о нем знать. Бэкенд который надо учитывать при верстке - плохой бэкенд и это не про Битрикс.
    Просто делайте хорошую верстку - она натягивается на любой бэкенд.
    Вообще у меня есть вот такой список: https://github.com/Suntechnic/web_manuals/blob/mas...
    Ответ написан
    Комментировать
  • Как сделать рейтинг на основе просмотров статьи?

    Какой-то специальной формулы нет.

    Но если немного подумать то вырисовывается 2 варианта и все зависит от того для чего вам рейтинг.

    1 Если вам необходимо где-то просто ответить какая статья круче какой, то можно сравнивать тупо просмотры, потому что какое бы вы не брали производное от этого N, как правило большее будет все равно у той статьи у которой больше просмотров. Ну допустим если ваш рейтниг корень квадратный из количества просмотров - выше порядок статей не изменится.
    Итого - если вам нужно просто сравнивать статьи - тупо в лоб сравнивайте число просмотров.

    2 Если вам нужно определять НАСКОЛЬКО одна статья круче другой, то вам придется определится как это связано с просмотрами, потому что в 2 раза больше просмотров может не означать что статья в 2 раза круче. Тут скорее всего подойдет какая-то степенная функция - подбирайте не свой вкус, но как правило квадратный корень обычно наилучшее решение. Таким образом статья будет в 2 раза круче если набрала в 4 раза больше просмотров.

    3 (да он тоже входит в эти два варианта) Если вы собираетесь использовать рейтинг для показа статей на главной например вам придется очень хорошо продумать способ показа. Дело в том что пусть у вас показываются статьи случайно, если у них одинаковый рейтинг, по одной на главной и всего две статьи. После того как третий человек кликнет по статье и они набирут суммарно 3 просмотра, у одной из них рейтинг станет в 2 раза выше и на главной начнет показываться только она, в итоге она начнет набирать просмотры и ее рейтинг взлетит до небес, а отображать он будет не качество статьи, а работу генератора случайных чисел.
    Поэтому здесь нужно придумать способ показа. Хорошая идея выводить статьи с высоким рейтингом + несколько случайных статей. А сам рейтинг лучше взять степенной как в варианте 2. Интуитивно кажется хорошей идеей выводить на главной N случайно выбранных статей + kN с высоким рейтингом статей где k == степени корня.

    4 (тоже из этих двух) Если вы хотите оценивать именно качество именно статьи, а не заголовка и картинки к ней, то я бы учитывал не просмотры вообще, а только просмотры больше определенного времени за которое можно прочитать статью. А то может выяснится что большинство зашло просто посмотреть на сиськи, а статью они вообще не читали, но рейтинг у нее до небес.
    Ответ написан
  • Как обновить DESCRIPTION множественного свойства типа файл?

    Suntechnic
    @Suntechnic Автор вопроса
    if ($arObject['PROPERTY_PHOTO_DESCRIPTION'][$k] != $desc) CIBlockElement::SetPropertyValueCode(
                        $arObject['ID'],
                        'PHOTO',
                        Array($arObject['PROPERTY_PHOTO_PROPERTY_VALUE_ID'][$k] => Array("DESCRIPTION"=>$desc))
                    );
    Ответ написан
    Комментировать