Задать вопрос
  • 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 комментария
  • Как убрать элемент с яндекс.карт?

    Rema1ns
    @Rema1ns
    и так сойдет
    Если вы имеете ввиду что удалить placemark, То вам необходимо элементы заносить в свою коллекцию
    создать свою коллекцию - myCollection = new ymaps.GeoObjectCollection();
    создать плейсмарк - placemark[id] = new ymaps.Placemark
    добавить плейсмарк в коллекцию - myCollection.add(placemark[id]);
    удалить все myCollection.removeAll(); или удалить какой то конкретный
    Ответ написан
    6 комментариев
  • Как убрать элемент с яндекс.карт?

    @trefferr
    В инициализации конструктора карт, присваиваешь свойству пустой массив.
    controls: []
    ymaps.ready(function(){
            moscow_map = new ymaps.Map("banner_map", {
                center: [56.34820425, 41.30735193],
                controls: [],
                zoom: 17
            });
    Ответ написан
    Комментировать
  • Как заблокировать доступ к моему сайту с определенного сайта через htaccess?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Попробуйте
    RewriteCond "%{HTTP_REFERER}" "badsite.ru" [NC]
    RewriteRule ".*" "–" [F]
    Ответ написан
    Комментировать
  • Как ассинхронно сменить картинку у маркера на яндекс картах?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Ответ — пресеты. Создаёте, сохраняете (как видно, объекты практически аналогичны и их нужно просто клонировать, меняя один параметр). А дальше — что захотите. Пресетов может быть сколько угодно с любыми именами.

    Update: По молчаливой просьбе собеседника добавил сторонние элементы

    var points = [
    		[55.831903,37.411961],
    		[55.763338,37.565466],
    		[55.763338,37.565466],
    		[55.744522,37.616378],
    		[55.780898,37.642889]
    	],
    	markers = {};
    
    ymaps.ready(function () {
    	ymaps.option.presetStorage.add('custom#default', {
    		iconLayout: 'default#image',
    		iconImageHref: 'marker.png',
    		iconImageSize: [30, 40],
    		iconImageOffset: [-15, -40],
    		iconImageClipRect: [
    			[0, 30],
    			[30, 70]
    		],
    		hideIconOnBalloonOpen: false
    	});
    	ymaps.option.presetStorage.add('custom#active', {
    		iconLayout: 'default#image',
    		iconImageHref: 'marker.png',
    		iconImageSize: [30, 40],
    		iconImageOffset: [-15, -40],
    		iconImageClipRect: [
    			[0, 70],
    			[30, 110]
    		],
    		hideIconOnBalloonOpen: false
    	});
    
    	var myMap = new ymaps.Map('map', {
    			center: [55.751574, 37.573856],
    			zoom: 9
    		});
    
    	for (var i = 1; i <= points.length; i++) {
    		markers['id' + i] = new ymaps.Placemark(
    			points[i - 1],
    			{
    				hintContent: 'Какая красивая метка...'
    			},
    			{
    				preset: 'custom#default'
    			}
    		);
    		$('<a href="#" data-type="marker" data-id="id' + i + '">').html(i + '-я метка').appendTo($(document.body));
    	}
    
    	placemark.events.add('click', function (e) {
    		changeMarker(e.get('target'));
    	});
    
    	myMap.geoObjects.add(placemark);
    });
    
    function changeMarker (marker) {
    	marker.options.set('preset', {
    		preset: 'custom#active'
    	});
    }
    
    $(document).on('click', 'a[data-id][data-type="marker"]', function (e) {
    	e.stopPropagation();
    	e.preventDefault();
    	changeMarker(markers[$(this).data('id')]);
    });


    Метка тут такая 8542c38cbe6a410f901a3adffe1974b2.png
    Ответ написан
    4 комментария