• Как подсчитать какого товара сколько продано за месяц?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    - $stack += [$sku=>$quantity];
    + if (!arrray_key_exists($sku, $stack)) $stack[$sku] = 0;
    + $stack[$sku] += $quantity;

    - $stack_sum = array_count_values($stack);
    - foreach ($stack_sum as $key => $value)
    + foreach ($stack as $key => $value)
    Ответ написан
    Комментировать
  • Возможно ли засунуть django в сайт написанный на bitrix 1c?

    Если это прям отдельный проект (раз у него отдельная база), то нужно просто развернуть Django и настроить веб-сервер, чтобы запросы на определённый URL он отдавал туда.
    Связать же Битрикс и Django тоже можно - через прямую работу с БД. Но это уже будет максимально странный костыль - во-первых, это должны быть запросы только на чтение, потому что записывать в БД надо через API Битрикса, чтобы ничего не сломать, а во-вторых, чтобы эти запросы правильно построить, надо хорошо понимать внутренее устройство Битрикса.

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

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

    Твиттер и другие используют для этого запросы с сервера, на которые CORS не распространяется. Поступайте так же и вы.
    Ответ написан
    Комментировать
  • Как получить Get запрос?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    history.pushState({}, '', '/www?' + $(this).serialize());
    https://developer.mozilla.org/en-US/docs/Web/API/H...
    Ответ написан
    Комментировать
  • Сравнить элементы массива js и отфильтровать если будет более 3-х дублей одного элемента?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Представим, что нам нужно реализовать самый замороченный вариант: важны типы данных, порядок элементов должен сохраняться, а код должен быть понятным.
    Выкидываем значение полностью

    Исправленный код из вопроса:
    let arr = [1, true, 1, 'null', 1, '2', '1', true, 1, true, 'null', true, 'null'];
    let res = arr.filter((el) => arr.filter((i) => i === el).length <= 3);
    
    console.log(res); // ['null', '2', '1', 'null', 'null']


    Или мой чуть более упоротый вариант:
    function solution(input, threshold = 3) {
        let counter = new Map();
    
        input.forEach((item) => {
            let prevCount = counter.get(item) || 0;
    
            counter.set(item, prevCount + 1);
        })
    
        let valid = [];
    
        counter.entries().forEach(([item, count]) => {
            if (count <= threshold) {
                valid.push(item);
            }
        });
    
        return input.filter((item) => valid.includes(item));
    }
    
    let arr = [1, true, 1, 'null', 1, '2', '1', true, 1, true, 'null', true, 'null'];
    console.log(solution(arr)); // ['null', '2', '1', 'null', 'null']


    Оставляем только первые N значений
    function solution(input, threshold = 3) {
        let result = [];
        
        let counter = new Map();
    
        input.forEach((item) => {
            let prevCount = counter.get(item) || 0;
            let count = prevCount + 1;
    
            counter.set(item, count);
    
            if (count <= threshold) {
                result.push(item);
            }
        })
    
        return result;
    }
    
    let arr = [1, true, 1, 'null', 1, '2', '1', true, 1, true, 'null', true, 'null'];
    console.log(solution(arr)); // [1, true, 1, 'null', 1, '2', '1', true, true, 'null', 'null']
    Ответ написан
  • Как получить ID раздела зная путь из символьных кодов?

    1. Разбиваете путь на сегменты.
    2. Берёте первый сегмент и ищете раздел, где совпадает символьный код и PARENT_ID = null.
    3. Берёте следующий сегмент и ищете раздел, где совпадает символьный код и PARENT_ID = id предыдущего раздела.
    4. Повторяете до тех пор, пока не закончатся сегменты или запрос не вернёт null.
    5. Если дошли до конца, то последний найденный раздел и является искомым.
    Ответ написан
  • Как эффективнее всего вести создание продукта?

    Первый вариант единственный адекватный — в одиночку средний фрилансер такое не сделает, а схема с «генподрядчиком» вообще странная, так не делают. Ну и никакой экономии тут быть не может, потому что «генподрядчик» получит дополнительные заботы по оркестрации процесса, за которые ему нужно будет заплатить. Если же оркестрацией будете заниматься вы в целях экономии, то вообще никакой продукт в итоге не удастся разработать — подрядчики просто разбегутся от этого хаоса.

    При этом совершенно не факт, что вам нужно, например, CRM создавать с нуля.
    Ответ написан
  • Как удалить файл при обновлении данных?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Laravel
    Вам нужно с фронтенда присылать какой-то флаг, который будет говорить о том, что аватар был удалён. И уже по этому флагу вы будете удалять файл из профиля.
    Ответ написан
    Комментировать
  • Как вывести записи всех подкатегорий через сводную таблицу?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега MySQL
    Если вложенность категорий неограниченная, то при такой структуре никак — MySQL, вроде, до сих пор не умеет делать рекурсивные запросы. Если ограниченная, то можно сделать N джойнов и проверять на совпадения все уровни.
    Но проще всего внедрить хранение категорий в формате nested set.
    Ответ написан
  • Ошибка во время npm run build для приложения Next, как её исправить?

    Похоже, вы где-то в серверном компоненте (а они все серверные, если не указано явно use client) пытаетесь обратиться к document (которого на сервере нет). Просто ошибка плохо обрабатывается и не показывает конкретное место.
    Ответ написан
  • Как получить параметры в Resource Route в Remix?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега React
    Никакого бреда, всё чётко и понятно, да ещё и с примером:
    Route params are defined by route file names. If a segment begins with $ like $invoiceId, the value from the URL for that segment will be passed to your loader.
    https://remix.run/docs/en/main/route/loader#params
    Ответ написан
    Комментировать
  • Куда класть бизнес логику в Redux Toolkit?

    Я бы сказал, что redux тут вообще не нужен. Но если уж пользоваться им, то ваше решение вполне нормальное.
    Ответ написан
    Комментировать
  • Как работают фигурные скобки в javascript?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Высокоуровневое описание, в котором есть ссылка на спецификацию для изучения деталей:
    https://developer.mozilla.org/en-US/docs/Web/JavaS...

    И ещё полезно прочитать про лексическое оружие: https://learn.javascript.ru/closure#leksicheskoe-o...
    Ответ написан
    1 комментарий
  • Как понять, какие данные отправляет форма?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Веб-разработка
    Вы пытаетесь программно какую-то форму на каком-то сайте отправить из своего скрипта, но не знаете, какие данные она отправляет?
    Если так, то открывайте сайт в браузере, нажимайте F12, переходите во вкладку Network и там смотрите какой запрос уйдёт.
    Ответ написан
  • Как решить ошибку Uncaught TypeError: Cannot read properties of null (reading 'insertAdjacentHTML')?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    document.getElementById('9') возвращает null, нет на странице такого элемента. Почему его нет, по приведённому коду сказать невозможно.

    Ломать себе голову тут не над чем и вариант решения только один - он легко находится по тексту ошибки.

    Числовой ID - это вообще плохая идея и раньше так было нельзя.
    Сейчас можно, но ломается древняя магия:
    662ced4e6486b726512210.png
    Ответ написан
    Комментировать
  • По какой логике работает типизация ListNode во вложенном массиве?

    в песочнице работает без ошибок
    А чего бы ему ошибаться? Песочница типы не проверяет, только компилирует TS в JS, чтобы его можно было исполнить.
    В итоге остаётся только это*:
    const lists = [[1,4,5],[1,3,4],[2,6]]
    
    function mergeKLists(lists) {
        if(lists.length) return lists.flat(Infinity)
        return null
    };
    
    console.log(mergeKLists(lists))

    А если уж совсем упростить, то вот это:
    [[1,4,5],[1,3,4],[2,6]].flat(Infinity)
    Тут падать нечему.

    А вот если в нормальной IDE такое написать, сразу видно, что у вас в lists ерунда содержится:
    662cd790d4dd1476028947.png
    Функция на вход ожидает массив, внутри которого содержится объект класса ListNode (или null), а вы передаёте массив массивов number, на что вам TS и указывает (но окольными путями).
    Ну и вернуть вы должны ListNode, а ваша реализация возвращает всё тот же массив из number.

    Задача, на самом деле, какая-то странная - непонятно откуда вообще вылез этот ListNode и зачем он. За скобками осталась важная часть про то, что вам нужно вдобавок реализовать сериализацию ListNode <-> массив. Хотя, по сгенерированной заготовке решения предполагается, что вам уже на вход придут данные в нужном виде и вернуть вам нужно объект ListNode - может, leetcode сам этот класс и его сериализацию-десериализацию реализует?

    * Класс тоже остаётся, но он никак в коде не используется, поэтому я его опустил.
    Ответ написан
    2 комментария
  • Как выставить фото в select?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега HTML
    Выставить что либо, кроме plain text, в option невозможно ни "на джаве", ни "на ксс".
    Используйте библиотеку кастомных селектов, например, select2.
    Ответ написан
    Комментировать
  • Почему не обновляется значение в useState?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега React
    onChange={(_, checked) => {}}
    С чего вы взяли, что функция в onChange принимает второй аргумент?

    setChecked(checked);
    Это асинхронное действие, оно не блокирует поток исполнения до тех пор, пока значение в state изменится.

    handleClearField();
    Следовательно, при вызове этой функции вы работаете ещё с текущим значением, а не с новым.

    Один из возможных вариантов решения:
    const [checked, setChecked] = useState(false);
    
    const handleClearField = (checked) => {
        setChecked(checked);
    
        if (checked) {
            console.log('1');
        } else {
            console.log('2');
        }
    };
    
    return (
      <>
        <FormControlLabel
           control={
              <Checkbox
                  checked={checked}
                  onChange={(event) => handleClearField(event.target.checked)}
               />
           }
            label="Тест"
         />
      </>
    );
    Ответ написан
  • Запись в cookie или localStorage только при открытии страницы?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Определите для себя критерии "зашёл на сайт" и используйте их.
    Но ничего лучше, чем "перестаём засчитывать заход на N минут после регистрации" придумать (и уж тем более реализовать), скорее всего, не выйдет.

    Отделить само по себе открытие страницы от обновления нельзя, но можно смотреть в document.referrer - если там ваш сайт, то это обновление. Однако, это не слишком надёжное поле. Нет, document.referrer по F5 не меняется.
    Ответ написан
    Комментировать