• Yota + Torrent?

    Q2W
    @Q2W
    Ну можно арендовать VPS либо заюзать домашний сервер (если дома нормальный инет), прокинуть домой туннель (OpenVPN в помощь) и юзать домашний инет.

    Но это, имхо, извращение ради одних только торрентов. =)
    Ответ написан
    Комментировать
  • Как вывести цену с пробелами в битриксе?

    iiil
    @iiil
    Инженер и вэб-дизайнер, рисую.
    Даже если Вы первоначально выведете с помощью битрикса число в отформатированном виде, меняя его ползунком Вы получите опять неотформатированное число.
    Также, скрипт работы ползунка не умеет работать с числами с пробелом - можете сами убедиться, вбив число 10 000, например. Ползунок просто исчезает.
    Соответственно, все это тянет нас дальше:
    1. Надо переделать работу скрипта ползунка на:
    а. Проверку на число или преобразование в число строки
    б. Преобразование результата в форматированную строку (с пробелами)
    2. Необходимо убедиться, что фильтр будет работать - сейчас он не работает, так как насколько я понял, считает 10 000 как 10 (фильтрует результаты только по 1 руб.)
    Если со вторым пунктом битрикс может и сам разберется (это при условии, что вывод в форматированном виде будет происходить средствами битрикса, насколько я знаю формат там только для price, то есть не Ваш случай), то первый пункт все равно придется решать самому.

    А если Вы про результат работы фильтра, то есть список товаров с ценами, то это как раз случай решаемый, см. dev.1c-bitrix.ru/api_help/catalog/price.php#Format...
    Ответ написан
    Комментировать
  • Как подключить локальное хранилище в Nextcloud 19?

    @Sampson
    1. Посмотри оунера и группу папки где установлен nextcloud (ls -l), плюс юзер должен быть в группе слушателя www (nginx или www-data). У тебя PHP не имеет права доступа (посл строка)
    2. Дай такого же юзера/оунера на указанные папки

    SMB-клиент нужен для удалёнки. Если что - вот тут на мысли натолкнёт ещё)
    https://github.com/nextcloud/nextcloud-snap/wiki/C...
    Ответ написан
    1 комментарий
  • Bitrix как записать поле SUM_PAID в таблице заказа?

    yous
    @yous Автор вопроса
    отвечу сам себе, нашёл в файле \bitrix\modules\sale\lib\sale.php метод $this->setFieldNoDemand

    проверил работает

    $order->setFieldNoDemand('SUM_PAID', 100);
    Ответ написан
    Комментировать
  • Class 'Bitrix\Sale\Basket' not found (если подключать плолог, а если подключать header.php работает).Как подключить?

    nikolaevevge
    @nikolaevevge Автор вопроса
    Разобрался!

    После use забыл написать:

    Bitrix\Main\Loader::includeModule("sale");
    Bitrix\Main\Loader::includeModule("catalog");
    Ответ написан
    Комментировать
  • Что за пустота с символами ?

    @humoured
    Вы всё на свете найдёте в коробке с карандашами
    Это BOM-метка. Её ставят некоторые текстовые редакторы в начало файла. В конкретном вашем случае она стоит, скорее всего, в каком-то другом файле-вьюшке, а не в указанном template.php со скрина.
    Какой файл подключается следующим? Ему и меняйте кодировку.
    Ответ написан
    2 комментария
  • Как посмотреть пароль PostgreSQL?

    @anikavoi
    Посмотреть - никак.
    Поменять - galaxy ответил.
    Останавливаете постгрис, редактируете pg_hba.conf (ессесно сохранив исходный)
    local all postgres trust
    host all postgres 0.0.0.0/0 trust
    host all all 127.0.0.0/8 trust

    запускаете постгрис,
    дальше спокойно на него заходите хоть psql хоть чем, и меняете пароль
    ALTER ROLE postgres WITH PASSWORD '123'; или в psql \password
    Ответ написан
    Комментировать
  • Как найти шаблон страницы битрикс?

    Adamos
    @Adamos
    Шаблоны Битрикса - /bitrix/templates
    Собственно, можно просто в админке посмотреть "Шаблоны сайта" - там редактор тех же самых файлов.
    Ответ написан
    2 комментария
  • Как в Битрикс HighloadBlock сделать обратную постраничную навигацию?

    s_panteleev
    @s_panteleev
    25 yo, Yaroslavl
    <?php
    
    \Bitrix\Main\Loader::includeModule('highloadblock');
    
    $hlBlockId = 1;
    $hlObject = \Bitrix\Highloadblock\HighloadBlockTable::getById($hlBlockId)->fetch();
    
    $entity = \Bitrix\Highloadblock\HighloadBlockTable::compileEntity($hlObject);
    $entity_data_class = $entity->getDataClass();
    
    $newsList = $entity_data_class::getList([
          'filter' => $filter,
          'offset' => $nav->getOffset(),
          'limit' => $nav->getLimit(),
    ]);
    Ответ написан
    1 комментарий
  • Как Яндекс обходит покупку в приложении от Apple?

    402d
    @402d
    начинал с бейсика на УКНЦ в 1988
    если у вас мультиплатформенное приложение и общая авторизация и есть еще веб апи и т п, то покупка лицензий/подписок и как его не назови может быть осуществленна через любой стор или в личном кабинете вашего сервиса.
    Что НЕЛЬЗЯ - это продвигать альтернативные способы оплаты. Пользователю каждой платформы нужно в первую очередь предложить нативный биллинг.

    Например у гугла сейчас действует послабление в правилах для РФ, но боты модерации докопались, человек жаловался на 4ПДА. Увы чем закончился спор кажется на форуме не отписался.
    Ответ написан
    2 комментария
  • Какие есть способы подключения svg спрайта в background?

    @Nevea
    в svg файле должен быть указан
    <view id="icon-figure" viewBox="0 0 30 30" />
    вот пример вставок
    https://dbushell.com/demos/svg/2015-01-29/svg-spri...
    Обратите внимание на сам внешний файл sprite.svg
    Ответ написан
    Комментировать
  • Как исправить ошибку (Uncaught TypeError: e.indexOf is not a function) в консоле?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    indexOf предполагает строку или массив. Видимо e не является ни тем, не другим, а, например null или undefined.
    Возможно стоит искать тут:

    Если url не передан, или передан неверно - будет такая ошибка
    // https://code.jquery.com/jquery-3.5.0.js
    /**
     * Load a url into a page
     */
    jQuery.fn.load = function( url, params, callback ) {
    	var selector, type, response,
    		self = this,
    		off = url.indexOf( " " );
    
    	if ( off > -1 ) {
    		selector = stripAndCollapse( url.slice( off ) );
    		url = url.slice( 0, off );
    	}
    
    	// If it's a function
    	if ( isFunction( params ) ) {
    
    		// We assume that it's the callback
    		callback = params;
    		params = undefined;
    
    	// Otherwise, build a param string
    	} else if ( params && typeof params === "object" ) {
    		type = "POST";
    	}
    
    	// If we have elements to modify, make the request
    	if ( self.length > 0 ) {
    		jQuery.ajax( {
    			url: url,
    
    			// If "type" variable is undefined, then "GET" method will be used.
    			// Make value of this field explicit since
    			// user can override it through ajaxSetup method
    			type: type || "GET",
    			dataType: "html",
    			data: params
    		} ).done( function( responseText ) {
    
    			// Save response for use in complete callback
    			response = arguments;
    
    			self.html( selector ?
    
    				// If a selector was specified, locate the right elements in a dummy div
    				// Exclude scripts to avoid IE 'Permission Denied' errors
    				jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
    
    				// Otherwise use the full result
    				responseText );
    
    		// If the request succeeds, this function gets "data", "status", "jqXHR"
    		// but they are ignored because response was set above.
    		// If it fails, this function gets "jqXHR", "status", "error"
    		} ).always( callback && function( jqXHR, status ) {
    			self.each( function() {
    				callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
    			} );
    		} );
    	}
    
    	return this;
    };

    Ответ написан
    Комментировать
  • Возникает ошибка: "multiple statements found while compiling a single statement" при вводе кода. Python. Что не так?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Вы кое-что перепутали. У вас так "a + b = c", а нужно наоборот "c = a + b", и так во всех условиях.
    Ответ написан
    3 комментария
  • Возникает ошибка: "multiple statements found while compiling a single statement" при вводе кода. Python. Что не так?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Судя по дизайну, вы просто взяли все эти 28 строк и засунули в стандартное окно ввода IDLE? Так не будет работать, если скормить все строки сразу. Создайте нормально .py файл, скопируйте весь код в него. И файл уже запускайте.
    Ну и от стандартным idle лучше не пользоваться, та еще фигня
    Ответ написан
    3 комментария
  • Как сделать правильную маску Masked Input для ввода email?

    @asand
    Для маски "имя@gmail.com" используйте что-то вроде:
    $("input#email").inputmask({
                mask: "*{1,20}[.*{1,20}][.*{1,20}][.*{1,20}]@*{1,20}[.*{2,6}][.*{1,2}]",
                greedy: false,
                clearMaskOnLostFocus: false,
                onBeforeWrite: function (event, buffer, caretPos, opts) {
                    buffer.forEach(function(item, i, buffer) {
                        if (item == '@') {
                            buffer[i+1] = 'g';
                            buffer[i+2] = 'm';
                            buffer[i+3] = 'a';
                            buffer[i+4] = 'i';
                            buffer[i+5] = 'l';
                            buffer[i+6] = '.';
                            buffer[i+7] = 'c';
                            buffer[i+8] = 'o';
                            buffer[i+9] = 'm';
                            buffer.length = i+10;
                        }
                    });
                }
            });
    Ответ написан
    Комментировать
  • В чем разница между prop и attr?

    abyrkov
    @abyrkov
    JavaScripter
    Разница такая же, как между свойством HTMLElement и атрибутом тэга, которого он представляет.
    Проще говоря, prop читает свойство объекта, представляющего тэг, а attr именно атрибут тэга. Разницы, для стандартных свойств особой нет(value для input, например, есть и там, и там). А вот для нестандартных, prop не будет работать
    Ответ написан
    Комментировать
  • В чем разница между prop и attr?

    lazalu68
    @lazalu68
    Salmon
    Из документации:

    (attr) Get the value of an attribute for the first element in the set of matched elements or set one or more attributes for every matched element.

    (prop) Get the value of a property for the first element in the set of matched elements or set one or more properties for every matched element.

    В адаптации Google Translate:

    "(attr) Получите значение атрибута для первого элемента в наборе согласованных элементов или установите один или несколько атрибутов для каждого согласованного элемента."

    "(prop) Получите значение свойства для первого элемента в наборе согласованных элементов или установите одно или несколько свойств для каждого согласованного элемента."

    Собственно вот и вся разница: первый метод читает/устанавливает значение атрибута элемента (Мержевич по теме), а второй - свойство объекта представляющего элемент. Если вкратце, то разница в том, что они из разной среды: атрибут это термин HTML - вы устанавливаете его в разметке и значение атрибута как-то обрабатывается, влияя на какие-то свойства элемента. А свойства это значения относящиеся непосредственно к DOM объекту элемента.

    Например, class, один из самых привычных атрибутов для тега, в элементе представлен свойством className. Если у тега нет атрибута class, то у самого элемента есть свойство className, которое содержит пустую строку. Ну и соотвественно задать класс элементу можно либо изменив атрибут class с помощью attr, либо изменив свойство className с помощью prop.
    Ответ написан
    Комментировать
  • Как отследить полноэкранный режим карты?

    0xD34F
    @0xD34F Куратор тега Яндекс.Карты
    А здесь смотрели? - события fullscreenenter, fullscreenexit.

    UPD. Вынесено из комментариев:

    что-то не получается с ними работать

    Обработчики надо привязывать не к самой карте, а к элементу управления, отвечающему за переключение фулскрин режима:

    const fs = map.controls.get('fullscreenControl');
    fs.events.add('fullscreenenter', () => console.log('ON'));
    fs.events.add('fullscreenexit', () => console.log('OFF'));
    Ответ написан
    2 комментария
  • Как обновить локальную ветку задачи если develop ветка обновилась?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Вы наверное не совсем понимаете логику работы гита, раз такой вопрос возник.
    Репозиторий надо рассматривать как дерево состояний проекта. Каждый коммит это определённое состояние. Название ветки это лишь указатель на некоторое состояние.

    создал локальную ветку задачи branchTaskName от локальной develop-ветки (предварительно ее обновив)

    Точнее вы создали тематическую ветку не от другой ветки, а от конкретного состояния, на которое указывал в тот момент указатель develop в распакованной (checkout) в рабочий каталог ветке.

    Нужно ли мне обновлять свою ветку задачи branchTaskName свежими изменениями?

    Моё мнение — нужно. Ведь ваша задача состоит не в создании сферических файлов в вакууме, а в изменении файлов проекта. Причём изменений относительно уже устаревшего состояния. Желательно чтобы ваша работа опиралась на актуальный проект, а не на старую версию.

    Как правильно обновить ветку задачи branchTaskName чтобы не было проблем при отправке своей ветки в удаленный репозиторий?

    Тут тоже странное утверждение. У вас неоткуда взяться проблемам при отправке (push) изменений во внешний репозиторий. Проблемы могут возникнуть уже после, когда вашу ветку будут интегрировать (merge) с основной веткой (develop). Чтобы избежать этих проблем мы заранее предпринимаем определённые действия.

    Способов собственно два:

    1) Мы забираем новое состояние develop в свою тематическую ветку через коммит слияния. И для этого вовсе не обязательно переключаться в локальную develop, обновлять её (pull) а затем возвращаться к себе чтобы сделать git merge develop. Это бессмысленные манипуляции. Достаточно просто скачать к себе в локальный репозиторий обновления внешнего репозитория git fetch (Лайвхак: эту операцию можно автоматизировать. Настройте автоматическое выполнение fetch по расписанию, и у вас всегда будет под рукой доступ к актуальному проекту). Затем сделайте git merge origin/develop. Указатель origin/develop это и есть ссылка на состояние проекта на момент последнего скачивания (fetch). В принципе эти два шага эквивалентны одной команде git pull origin develop — внутри делается всё то же самое.

    2) Второй способ — пересадить вашу ветку на новое актуальное состояние проекта (rebase). Выглядеть будет так, если бы вы начали работать над фичей вот только что, и тут точно не возникнет конфликтов, так как база ветки актуальная. Это делается тоже в два шага. Сначала убедимся что у нас всё актуально git fetch, затем собственно пересадим ветку на актуальное состояние git rebase develop. Последний вариант мне нравится тем, что история не засоряется коммитами слияния. Но тут предполагается, что тематическая ветка принадлежит только вам и никто больше в ней не работает. Так как после пересадки её придётся удалять из внешнего репозитория и создавать там заново через git push --force. Если работа над фичей ведётся совместно с коллегами, то такой рабочий процесс не очень подойдёт.

    Если вы не коммитите напрямую в master и в develop, то держать их у себя локально (делать checkout в рабочий каталог) тоже нет смысла. Вы всегда можете начать новую тематическую ветку от актуального состояния, на которое ссылаются origin/master или origin/develop. Так вы не наступите на грабли, когда люди забывают переключиться из мастера и начинают коммитить туда. Нет мастера — нет проблем.
    Ответ написан
    Комментировать
  • Как создать функцию копирования объектов с подставным именем нового объекта?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Вы пытаетесь создать новый объект и дать ему имя, передав это имя в функцию. Это не работает, потому что в JavaScript имена переменных должны быть определены явно, они не могут быть созданы или изменены динамически во время выполнения.

    Возвращаем копию объекта, затем присваиваем эту копию новой переменной:
    let user = {
       name: "David",
       age: 25,
    }
    
    function objectClone(object) {
       let newObject = {};
    
       for (let key in object) {
          newObject[key] = object[key];
       }
    
       return newObject;
    }
    
    let user2 = objectClone(user);
    
    console.log(user2.name); // выводит "David"
    Ответ написан
    2 комментария