Ответы пользователя по тегу JavaScript
  • Как сделать превью pdf документа?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Вопрос такой: как сделать превью пдф документа?


    Через любую программу, которая позволяет конвертировать PDF в изображение, например convert, pdftoppm

    Подобные ответы легко ищутся в интернете:
    https://stackoverflow.com/questions/43085889/how-t...

    используется битрикс. клиент загружает пдф. он должен загрузить пдф файл и на выходе получить карточку с превью.


    Все просто - клиент загружает PDF, вы сохраняете его в инфоблок и пока не сформирован preview выводите какую-нибудь заглушку с изображением файла-расширения.
    На событии добавления регистрируете агент, который принимает ID элемента, а внутри проводит конвертацию и сохраняет preview изображения.
    Ответ написан
    Комментировать
  • Bitrix 24 как добавить редактирование своего поля?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Никак.

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

    В теории конечно можно разрешить редактирование этих столбцов, но только для тех товарных позиций что созданы из товаров, однако это будет водить в заблуждение - будет создаваться визуальная коллизия что свойство заполняется у конкретной позиции данной сделки, однако это будет редактироваться у всех товарных позиций созданных по этому товару во всех сделках.
    Да и даже это изменение возможно только в коробке Битрикс24.
    Ответ написан
    Комментировать
  • Как обновить страницу канбана лидов?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Штатно такой возможности нет.

    Самый простой способ это реализовать:
    - Создает свое pull-событие (См. документацию: https://dev.1c-bitrix.ru/community/blogs/hazz/work...)
    - Подписаться на событие создание сделки (см. документацию: https://dev.1c-bitrix.ru/learning/course/index.php...)
    - Поставить ловушку на страницу канбака (см пункт 1)
    - Обновить канбан ( код обновления канбана: window.Kanban.reload() )

    Ну и конечно же потом уже можно докручивать много всего другого:
    - Не обновлять канбан если какой-то элемент открыт для редактирования
    - Не обновлять канбан если изменение происходит с той же страницы (Например перенесли элемент).
    - Не обновлять канбан если элемент не подходит под текущие условия поиска

    и т.п.
    Ответ написан
    Комментировать
  • Как отредактировать код для корректной отправки данных сайта в битрикс 24?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Вы неправильно используете параметры ajax метода - все что вы отправляете через ajax должно быть в `data` ключе.

    Т.е. ваш код должен быть таким:
    $.ajax({
    	url: apiUrl,
    	method: 'POST',
    	data: {
    		fields: fields
    		params: {
    			REGISTER_SONET_EVENT: "Y",
    		}
    	},
    	success: function(response) {
    	    console.log('Lead created successfully');
    	},
    	error: function(error) {
    	    console.error('Error creating lead:', error);
    	}
    });


    Ну и соотстветно:
    1. Ключи в fields лучше передавать как в Битрикс24 - в верхнем регистре
    2. Смотрите корректные названия для UTM меток в документации
    Ответ написан
    Комментировать
  • Как присвоить стиль через JS?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    В вашем коде сразу несколько ошибок.

    Во-первых, вы предполагаете что поведение браузера эквивалентно коду на странице. Т.е. одно и то же действие в браузере и в коде дают одинаковый результат, но это не так. Браузер отрисовывает страницу по частям и нет никаких гарантий что в момент выполнения вашего кода (фрагмент document.querySelector('.crm-kanban-item-repeated')) на странице существует хотя бы один элемент с подобным селектором. Более того скажу сразу - этот элемент не существует, так как он добавляется позже через javascript.
    Вам нужно почитать больше про js и про то как браузер рисует страницу - без этого вы далеко не уйдете.

    Во-вторых, вы полагаете что у вас всего 1 элемент (querySelector - вернет первый(!) элемент подходящий под условия), а у вас их может быть много. Т.е. нужно использовать как минимум querySelectorAll. Вы так же полагаете что наличие ноды автоматически делает элемент "повторным", что совершенно не так. Ноду можно вывести у любого элемента, но повторным он от этого не станет.

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

    Предположим наша задача - покрасить элементы в красный если они повторные.

    Для начала определимся как мы будем красить: я полагаю что проще всего будет создать какой-нибудь css-класс, который будет отрабатывать, если карточка подходит под указанные условия.
    Я буду использовать кастомный класс flah_repeated и для этого я создам css правило:

    .crm-kanban-item.flah_repeated {
    	background-color: red !important;
    }


    Затем я поищу событие, которое отрабатывает при отрисовке карточки канбана. Используя события я могу сразу гарантировать следующие вещи:
    1. Скрипт будет отрабатывать только там где есть канбан. То есть мы не будем искать элементы на других страницах чтобы не повредить их в случае ошибки.
    2. Скрипт будет отрабатывать только когда канбан уже отрисован. То есть все элементы уже есть на странице и мы можем не боятся их отсутствия
    3. Скрипт будет отрабатывать при повторной отрисовке. Т.е. примнение фильтра так же вызовет событие и мы еще раз сможет сделать то что нужно.

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

    BX.addCustomEvent("Kanban.Grid:onRender", function(kanbanGrid){
    
    	if ( kanbanGrid.getData().entityType != 'LEAD' )
    	{
    		return;
    	}
    
    	let kanbanItems = kanbanGrid.getItems();
    
    	for (let key in kanbanItems)
    	{
    		if ( key < 1 ) continue;
    
    		let kanbanItem = kanbanItems[key];
    
    		if ( kanbanItem.getDataKey('return') )
    		{
    			BX.addClass(kanbanItem.container, "flah_repeated");
    		}
    	}
    });


    Ну и когда все будет готово, я сделаю расширение (extension) и подключу его на событии пролога, чтобы добавлять к каждой странице.

    Таким образом я не изменю публичную часть и добьюсь того что требовалось в изначальной задаче.
    Ответ написан
    4 комментария
  • Как сделать адаптивную темную тему на сайте?

    gromdron
    @gromdron
    Работаю с Bitrix24
    1. Разрабатываете сайт
    1.1 Делаете светлую тему
    1.2 Делаете темную тему

    2. Делайте таким образом, чтобы авторизованный пользователь в настройках пользователь мог выбрать тему.
    2.1 Делаете селектор
    2.2 Модифицируете код вашего сайта чтобы он на основании авторизации пользователя подменял тему.

    3. Если хотите чтобы и у неавторизированных пользователей была такая возможность, то сохраняйте тему в cookie и при заходе на сайт в код п. 2.2 добавляете проверку cookie.

    Какой пункт осветить подробнее?
    Ответ написан
    3 комментария
  • Почему BX24.resizeWindow срабатывает не корректно?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    У метода resizeWindow с css-фреймворками такие же проблемы как и у fitWindow - т.е. они отлично увеличивают размер фрейма, но достаточно плохо его уменьшают (зачастую вообще не уменьшают).
    Ответ написан
  • Как подсчитать кол-во звонков?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Подсчет придется реализовать на стороне выполняющий запросы в REST-сервису битрикс24.

    Для получения списка звонков можно воспользоваться методом voximplant.statistic.get
    Ответ написан
    Комментировать
  • Какой код повесить на ссылку, чтобы при клике на нее открывался виджет Битрикс24?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Данный вопрос широко освещяется в теме посвященной расширенным настройкам

    Необходимо подписаться на событии и при инициализации подписаться на событие нажатия.

    window.addEventListener('onBitrixLiveChat', function(event)
    {
      var widget = event.detail.widget;
    
      // Подписываемся на onClick событие вашей кнопки.
      // Выполняем widget.open()
      
    });
    Ответ написан
    Комментировать
  • Как задать значения по умолчанию?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Подробнее тут.
    Если коротко:

    Если во всех случаях у вас не приводимое к false состоянию, то можно сделать так:
    var[0] = var[0] || 'default1';
    var[1] = var[1] || 'default2';
    var[2] = var[2] || 'default3';


    Ну или проверять на typeof var[0] == 'undefined'.
    Ответ написан
  • Как найти дубликат скрипта в bitrix?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Собственно битрикс к этому вопросу имеет весьма посредственное отношение и вопрос тут гораздо глубже: как вообще находить дублирование информации на сайте.
    Почитайте про grep
    Ответ написан
  • Кто-то видел Blueprint Interface для php?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Эм.. а какой кейс это закроет?
    А UE насколько я знаю, это заменяет все - и подход стандартизирован и действия и взаимоотношения.
    В вебе нет такой проблемы - классы обычно запиливаются для конкретного ORM/DataMapper и где-то, даже есть свой скаффолдинг.
    Ответ написан
  • Как подключить мой файл js в компоненте Bitrix?

    gromdron
    @gromdron
    Работаю с Bitrix24
    1) То, что Вы делаете, должно работать (по крайне мере на первый взгляд)

    2) В компоненте автоматически подключается файл шаблона script.js.

    3) Дополнительные скрипты можно подключить:
    Ответ написан
    2 комментария
  • Интерактивная карта на js?

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

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

    gromdron
    @gromdron
    Работаю с Bitrix24
    JS-Ядро битрикса описано достаточно хорошо - https://dev.1c-bitrix.ru/api_help/js_lib/index.php
    И работа с ajax тоже: https://dev.1c-bitrix.ru/api_help/js_lib/ajax/bx_a...
    Ответ написан
    Комментировать
  • Как реализовать нижеописанный метод?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Вы имеете ввиду:

    Object.prototype.sayHi = function()
    {
    	console.log(this.tagName);
    }
    
    document.body.sayHi();


    Никита Полевой, предложил лучшее решение:
    HTMLElement.prototype.sayHi = function() {
      console.log(this.tagName);
    }
    
    document.body.sayHi();
    Ответ написан
    Комментировать
  • Почему array.length возвращает 0?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Я использовал фрагмент кода и дополнил его (чтобы не ругался на неизвестные массивы). У меня получился фрагмент:

    all = {
    	"2017-08-10": 10,
    	"2017-08-11": 11,
    	"2017-08-12": 12,
    	"2017-08-13": 13,
    	"2017-08-14": 14
    };
    
    register = {
    	"2017-08-10": 10,
    	"2017-08-11": 11,
    	"2017-08-12": 12,
    	"2017-08-13": 13,
    	"2017-08-14": 14
    };
    
    percent = {
    	"2017-08-10": 10,
    	"2017-08-11": 11,
    	"2017-08-12": 12,
    	"2017-08-13": 13,
    	"2017-08-14": 14
    };
    
    result = ["2017-08-10","2017-08-11","2017-08-12","2017-08-13","2017-08-14"];
    compact = [];
    for (var i = 0; i < result.length; i++)
    {
    	compact.push([i+1,all[result[i]],register[result[i]], percent[result[i]] ]);
    }

    При выполнении указанных Вами комманд:
    console.log(Object.keys(compact).length)
    console.log(compact.length)


    В обох случаях возвращается 5.
    Что я делаю не так? и чем мой код отличается от Вашего?
    Ответ написан
    Комментировать
  • Как сказать браузеру не кешировать часть страницы(Last-Modified)?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Если уж говорить на чистоту, то при успешной авторизации Вы не имеете право отдавать тот же Last-Modified, так как страница изменилась. Вообще, если у Вас не новостной блог, то я бы наверное не рекомендовал Вам сильно заморачиваться с этим заголовком - проблем будет больше чем профита. Уж лучше оптимизируйте.
    Ответ написан
    Комментировать
  • Не срабатывает кнопка "В корзину" на карточке товара 1C Bitrix?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Компонент "новость детально" (bitrix:news.detail) не предназначен для вывода товаров.
    Для вывода товара, Вам необходимо воспользоваться возможностями компонента bitrix:catalog.element

    По ходу текста не очень понятно, как это Вы находясь в корзине хотите добавить его в корзину? У Вас popup окно? А скрипты подключаете и передаете?
    Ответ написан