Задать вопрос
  • Почему 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))
                    );
    Ответ написан
    Комментировать
  • Как лучше организовать календарь?

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

    По факту - лучше никак. Буквально. Если я правильно понял вопрос, то вы хотите спросить о том, как на уровне данных представить даты календаря - ответ - никак. Генерируйте календарь (даты) прямо в шаблоне компонента, а события (которые как я понимаю будут элементами ИБ) просто ставьте дату в поле даты времени. При клике на число применяйте фильтр по дате к ИБ событий и всех делов.
    Ответ написан
    Комментировать
  • Как разделить диск в kali linux?

    Не правильный вопрос - правильный вопрос - А зачем? Что и для чего вы хотите разделить?
    Ответ написан
    Комментировать
  • Как на битриксе сделать древовидное меню, с раскрытыми подразделами на активном пункте?

    1 Уберите теги jquery, битрикс и javascript - не вводите людей в заблуждение - все это не имеет отношение к вопросу.
    2 Я же писал уже вам - просто сверстайте его так.
    3 Если вы хотите прямо эту верстку подкорректировать, то:

    Уберите js вообще полностью. Вообще соотрите все что в файле.
    строки
    <li<?if($arItem["CHILD_SELECTED"] !== true):?> class="menu-close"<?endif?>>
            <div class="folder" onClick="OpenMenuNode(this)"></div>

    замените на следующие:
    <li<?if($arItem["SELECTED"] != "Y"):?> class="menu-close"<?endif?>>
    Ответ написан
    Комментировать
  • Как сделать меню (на битриксе) с подразделами, которые отображаются только когда находишься в разделе?

    Вопрос слишком общий. Конкретизируйте что не получается.
    Если так же обще отвечать, то такое меню реализуюется на базе стандартного компонента в стандартном шаблоне. Вам нужно просто сделать чтобы подменю активногом пунтка отображались, например зада в css dispaly: none; для блоков подменю и display: block; для блока подменю родитель которого имеет класс который вы назначаете активному пункту меню.
    Кажется такая верстка есть в одном из стандартных шаблонов меню - посмотрите стандартные шаблоны. Хотя возможно я ошибаюсь и уже нет.
    Ответ написан
  • Где в Битриксе отображается сниппет описания для яндекса?

    Как уже дважды правильно, но неявно заметили это скорее всего содержимое метатега description.
    1 Убедитесь что это так, посмотрев исходный код вашей сгенерированной страницы. Чем там равен description? Тому что в яндексе? Тогда нужно искать где этот тег пихается в description
    1.1 Ищем это место - для начала смотрим в header.php - может он напрямую там записан в head. Дальше смотрим саму страницу - там может быть уже приведенная Antony Tkachenko конструкция устанавливающая description. Если нет смотрим еще footer.php - могут устанавливать дискрипшен и там. Если и там нет - проверяем все инклюды в хедер, страницу и футер. Можно например удалить содержимое страницы и снова посмотреть сгенерированный код - пропал дискрипшен или изменился - что-то устанавливает его внутри страницы, нет - значит за ее пределами.

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

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

    В эксесс логе сервера посмотреть.
    А что за "данный" скрипт?
    Ответ написан
  • Как в Bitrix убрать дописку к Title?

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

    Заходят на сайт через админку и делают дамп. Либо подключаются к серверу по ssh и тоже делают дамп.

    Как закрыть уязвимости:
    Смените пароль с 123456 на какой-нибудь менее предсказуемый (Нет, qwerty тоже не подходит).
    Удалить на сервере FTP.
    Не подключайтесь к серверу по SSH из под Windows.
    Удалите все сомнительные плагины с сайта.
    Регулярно обновляйте CMS, устанавливая все последние одновления.
    Если сайт самописный - удалите его и замените на CMS.
    Если сайт на сервере к которому есть доступ из Интернета - отключите сеть.
    Если сервер работает - обесточьте его.
    Выньте устройства хранения данных из вашего сервера и положите его в микроволновку. Включите программу разморозки на 2 минуты.
    Сожгите микроволновку.
    Если вы помните содержимое сайта по памяти [УДАЛЕНО РОСКОМНАДЗОРОМ]
    Ответ написан
    Комментировать