• Приемлемо ли использовать base64+mod_gzip для передачи и отображения картинок из 1С в Битрикс?

    1. Нет ли ошибки?)

    Ошибки в чем?

    2. Браузер не сможет кэшировать такие картинки?

    Дело не в том что не сможет - не будет, поскольку это бессмысленно.
    Представим что все эти картинки в dataurl браузер закэшировал... и что? Теперь они магическим образом исчезнут из страницы которую вы передаете браузеру? Нет. Сервер все так же встраивает их в страницу и браузер ее все так же скачивает целиком. А зачем он их тогда кэшировал?

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

    Преимущество dataurl - картинки отображаются гораздо раньше так как загружены вместе со страницей или стилями.
    Недостаток - они скачиваются всякий раз когда нужно загрузить страницу.

    Таким образом хорошо это или плохо зависит от сценария использования вашего сайта.
    Если клиент только один раз загрузит страницу с товарами, посмотрит на цены и в ужасе закроет вкладку, то потери и правда будут в районе нескольких процентов. Если несколько раз... ну давайте посчитаем.
    Пусть размер страницы 200Кб и на ней еще 2Мб изображений. Тогда в классической ситуации первая загрузка страницы будет ~2200Кб, а все последующие 200Кб. В вашем случае все загрузки будут по 2200Кб.

    Таким образом если клиент посещает страницу один раз - разницы нет. Если два - то доп расходы составят 83%, если 4 раза - 215% лишнего трафика сверху.

    Но все зависит от повторных просмотров и размеров ваших картинок и отношению этого размера к размеру страницы.
    Ответ написан
    Комментировать
  • Почему скидки присвоенные определенной группе пользователей не доступны пользователям которые в эту группу попали через API Bitrix?

    Если нажимаю на кнопку «Выйти», а потом обратно авторизовываюсь, скидки появляются.

    Это и есть ответ. Грубо говоря группы у пользователя всегда те, в которых он находился при входе (кстати так сделано почти везде где есть группы).
    В вашем случае проще всего после добавления перелогинить пользователя.
    Ответ написан
  • Как найти где переопределяется title?

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

    В инпате вы это не сделаете.
    HTML позволяет управлять только видом отдельных элементов DOM. Символ в тексте это не элемент DOM, так что его придется в начале сделать таким.

    Самый простой путь. Делаете input прозрачный поверх блока который имитирует поле ввода. При изменении текста в input сравниваете текст в нем и блоке его имитирующем. Диф этих текстов добавляете в блок обернутым в например span, с наброшенным на него любым эффектом. По завершении анимации заменяете этот span на его содержимое.

    Как-то так.
    Ответ написан
  • Как написать сортировку по размеру скидки для компонента в Битрикс?

    Нет, нельзя - только по предвычесленному свойству.
    Но лучше его обновлять не по крону, а по событию. Впрочем на крон можно поставить агент, который будет выполнять выборочную проверку консистетности, а в случае нарушения её, запускать полную провеку.
    Ответ написан
  • Живы ли вэб-компоненты?

    Suntechnic
    @Suntechnic Автор вопроса
    Мой собственный ответ после изучения темы и чтения иностранных коллег будет таким:

    Технология была многообещающей и интересной на старте. Для ее поддержки гугл даже придумал отдельную спецификацию HTML Imports: https://w3c.github.io/webcomponents/spec/imports/i... (можете не ходить, там 404), что позволяло подключать однофайловые компоненты прямо в документ так:
    <link rel="import" href="my-component.html">
    Классно же да?

    Но технология не приобрела популярности, возможно так как была слишком простой и понятной, а именно в это время на пик славы вышел npm, gulp и вот это всё. В моду входила непонятная магия, утрата контроля над кодом и всякие оптимизаторы позволявшие сделать для одного слайдера на главной страницы бандл в полтора, а иногда 2-3 Мб. кода, и всё это без всяких там jQuеry.
    Ребята одумались и убрали спецификацию HTML Imports, предлагая разбивать компоненты на 3 отдельных файла - js, css и html с шаблоном. Причём js надо было подключать на странице, css тоже, а html должен был загружать по задумке создателей уже в само js. Такой подход позволял резко усложнить работу с web-components и сделать код снова неуправляемым, но было поздно - технология уже уступила позиции конкурентам.
    Конечно это был сарказм, если кто-то не понял.

    Жизнь в этой идее еще теплится, но теперь нам предлагается писать код в трех файлах или помещать его целиком в js, или использовать со специальными загрузчиками, что сопоставимо с использованием какого-нибудь фреймворка, того же Vue, дающее теме же усилиями гораздо большие возможности и смысл использовать веб-компоненты отпадает окончательно.

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

    Так сделать нельзя, да и не нужно.

    У вас должен быть 1 элемент Услуга в одном ИБ и у него множественное поле привязки к элементам ИБ.
    Во втором ИБ вы сделаете нужные вам элементы и привяжете их к Услуге через это поле привязки.

    Всё.
    Ответ написан
    Комментировать
  • Как конвертировать валюту в script.js bitrix?

    Сконвертируйте ее на стороне сайта в mutator.php.
    Не нужно одну и ту же задачу выполнять в двух разных местах. Тем более по разные стороны от сети.
    Ответ написан
  • Как сделать компонент модальной формы и работать с ней из разных компонентов?

    APP.popup = function (component,props) {
    	let mount_poiunt = document.createElement('div');
    	document.body.append(mount_poiunt);
    	
    	var props = {
    		'component':component,
    		'props':props
    	}
    	
    	var Popup = Vue.extend({
    		data: function () {
    			return props
    		},
    		destroyed () {
    			this.$el.remove()
    		},
    		methods: {
    			close: function () {
    				this.$destroy()
    			}
    		},
    		template: `<div class="popup">
    						<span v-on:click="close" class="close">✖</span>
    						<component v-bind:is="component" v-on:close="close" v-bind="props"/>
    					</div>`
    	})
    	
    	new Popup().$mount(mount_poiunt)
    };


    Далее ты просто делаешь так в методе компонента своего:
    APP.popup('имяКомпонентаКоторыйНадоПоказатьВПопапе', {параметрыЭтогоКомпонента});
    Ответ написан
    Комментировать
  • Как ускорить импорт CSV файла с 300к записей?

    $res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nPageSize"=>2), $arSelect);

    Вынесите это из цикла и обновляйте только те цены которые изменились и будет вам счастье.
    Ответ написан
    Комментировать
  • Как реализовать уникальную сортировку для всех разделов?

    @smilingcheater
    получается при просмотре любого раздела товар может иметь любую позицию в списке (из вашего же примера, Платье 1 было на 1 позиции в разделе Платья было на 1м месте перед Платьем 2, а стало на позиции 4 в разделе Офисные модели, и поменялось порядком с Платьем 2).

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

    цель именно увеличить кол-во свойств для ускорения работы сайта.

    Вы наверное хотели сказать уменьшить количество свойств для ускорения работы сайта?
    Но на самом деле количество свойств не сильно влияет на скорость или вы боритесь за сотые секунды во время выборки? Сомневаюсь.

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

    Покажите как именно вы используете сортирку и как переключаете ее для разделов.
    Ответ написан
  • Битрикс, скидки для разных пользователей + сортировка?

    Так как мы ничего не дождались, вот мой ответ:

    Так как скидки вычисляются в рантайме PHP, вы никак не можете упорядочить товары по цене со скидкой в запросе и сортировку необходимо выполнять ПОСЛЕ того как вычислена цена скидки.

    Хуже того то, что вам для формирования каждой страницы придется извлечь ВСЕ товары, вычилсить цену со скидкой для ВСЕХ товаров, отсортировать массив в рантайме и выбрать из него товары для страницы.

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

    Следовательно нам нужен кэш. И было неплохо этот кэш сделать максимально узким чтобы как можно реже его обновлять. А лучше вычислять прямо при добавлении нового товара и желательно только для него.

    Что хранить в этом кэше? Выходит только что предвычисленные цены со скидкой...

    И вот мы вернулись ровно сюда:
    Как сделать, если у меня становится несколько групп?
    Не создавать на каждую группу новое свойство и по нему сортировать?

    Именно так и делать. Если групп относительно не много. Скажем до 2-3х десятков такое решение все равно будет оптимальным и самым быстрым.

    Обновление значений вешайте на апдейт товара/элемента на события.

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

    Сделай два объекта с данными - один связанный с полями через модель, который будет отражать их состояние, а другой валидированные данные для отправки.
    Вотчем следи за изменением данных в объекте связанном с полями и перекладывай в объект для отправки, когда они валидные.
    Ответ написан
    Комментировать
  • Реактивность на Vue? Как обновить компонент?

    Требуется перерисовывать компонент каждый раз, когда приходят новые данные, как реализовать?

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

    this.firstWindow = Object.assign({}, this.firstWindow, data);

    Это вы добавляете объект в data? Не надо так делать - вы теряете реактивность.
    Положите этот объект в другой (на уровень ниже) и сделайте так:
    methods:{
          newvalue(data, whichScreen){        
             if(whichScreen){ 
               console.log("попал");
               console.log(data);         
               Vue.set(this.windows, 'firstWindow', Object.assign({}, this.firstWindow, data));
              
             }else{          
               Vue.set(this.windows, 'secondWindow', Object.assign({}, this.secondWindow, data));          
             }
          }
      }


    Сответственно у вас теперь будет this.windows.secondWindow вместо this.secondWindow
    Ответ написан
    Комментировать
  • Как использовать JavaScript с Bitrix?

    Flipflap, затем что вы делаете утверждения не соотвествующие действительности.
    Зачем вот это вот:
    там меню свёрстано не списком на html, а выводится массивом на php

    ?
    Если не понимаете как формируется меню лучше спросить как это происходит.

    На основе массива php компонентом menu по шаблону указанному для этого компонента, генерируется html блок представления меню.

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

    Вам нужно найти шаблон на базе которого генерируется меню.

    Рискну предположить что он где-то там: /local/.default/components/bitrix/menu/...
    Но вомзожно и по другому пути - все зависит от того кто и как кастомизировал сайт.
    Ответ написан
    4 комментария
  • Бинарный поиск - как определить кол-во шагов?

    М... так это же просто логарифм по основанию 2, округленный в большую сторону. Зачем вообще какие-то программы писать?
    Ответ написан
  • Как избавиться от дублей в sitemap Bitrix?

    Вот и ответ. Скорее всего в каком-то инфоблоке так прописан URL детальки элемента и этот ИБ в индексе. Для каждого элемент генерируется УРЛ детальной страницы. Уберите либо ИБ из генерациия карты, либо в настройках уберите шаблон URL
    Ответ написан
    Комментировать
  • Битрикс вопрос по лицензии?

    При установке выбрали Малый бизнес. Потом активировали ключом от старта.
    Ответ написан
    Комментировать
  • Как генерировать уникальную строку перед сохранение в БД (D7 bitrix)?

    Может быть только один случай когда вам нужно генерировать индентификатор до внесения в БД - это когда клиент вынужден выполнять операции связанные с записью не сделаной в БД с состоянии отсуствия связи.
    Пример - вы создаёте на клиенте скажем список дел и добавляете в этот новый список новые пункты. И вам нужно чтобы это всё работало, даже пока связи с БД нет, а синхронизируется оно потом. На этот случай придуманы UUID.
    В вашем случае ничего такого нет поэто правильно - автоинкрементируемое поле.

    В самом простом случае +1 в иных случаях (оптовый заказ, индивидуальная поставка, дальний склад) номера заказов могут принимать вид AA-02-1122, AA-02-1123, AA-02-1124.

    А это вообще никак не относится к делу. Совсем. Этот номер генерируется ПОСЛЕ добавления записии из ппрефиксов и ИД: {ТипЗаказ}{ТипДоставки}-{Номерсклада}-ИД
    Можете писать его в отдельное поле, которое можете назвать Номер заказа и радоваться.
    Ответ написан