• Как делать корзины для больших интернет магазинов?

    @dimoff66
    Кратко о себе: Я есть
    Таблицы
    categories: id, name, parentId (если их немного то можно подгрузить все сразу)

    products: id, name, categoryId (подгружать по частям, либо пагинацией, либо динамической подгрузкой при прокрутке, для реакта есть табличные компоненты, которые динамическую подгрузку осуществляют сами)

    cart: userId, productId, quantity (при загрузке подгрузить количество позиций, чтобы выводить его в шапке сайта, при открытии корзины подгрузить с сервера всю информацию с наименованием, ценами и чем-то еще, можно хранить в LocalStorage для незарегистрированных пользователей)
    Ответ написан
  • Можно ли из визуального представления массива php создать js массив и работать с ним?

    @dimoff66
    Кратко о себе: Я есть
    Массив этот находится в DOM на каждой странице продукта и представляет собой дата-атрибут некоего DIV-a - в моем случае это data-tierjs.


    Это называется структурой данных json, преобразовывается
    JSON.parse(yourText)
    Ответ написан
    Комментировать
  • Как достать из тега значение?

    @dimoff66
    Кратко о себе: Я есть
    Регулярными выражениями
    import re
    str = '<tr class="img weatherIcoS"> <td class="p1"> <div class="weatherIco n000" title="Ясно"><img alt="" class="weatherImg" src="//sinst.fwdcdn.com/img/weatherImg/s/n000.gif"/></div> </td> <td class="p2 bR"> <div class="weatherIco n000" title="Ясно"><img alt="" class="weatherImg" src="//sinst.fwdcdn.com/img/weatherImg/s/n000.gif"/></div> </td> <td class="p3"> <div class="weatherIco d300" title="Облачно с прояснениями"><img alt="" class="weatherImg" src="//sinst.fwdcdn.com/img/weatherImg/s/d300.gif"/></div> </td> <td class="p4 bR"> <div class="weatherIco d300" title="Облачно с прояснениями"><img alt="" class="weatherImg" src="//sinst.fwdcdn.com/img/weatherImg/s/d300.gif"/></div> </td> <td class="p5 cur"> <div class="weatherIco d300" title="Облачно с прояснениями"><img alt="" class="weatherImg" src="//sinst.fwdcdn.com/img/weatherImg/s/d300.gif"/></div> </td> <td class="p6 bR"> <div class="weatherIco d320" title="Облачно с прояснениями, дождь"><img alt="" class="weatherImg" src="//sinst.fwdcdn.com/img/weatherImg/s/d320.gif"/></div> </td> <td class="p7"> <div class="weatherIco d320" title="Облачно с прояснениями, дождь"><img alt="" class="weatherImg" src="//sinst.fwdcdn.com/img/weatherImg/s/d320.gif"/></div> </td> <td class="p8"> <div class="weatherIco n300" title="Облачно с прояснениями"><img alt="" class="weatherImg" src="//sinst.fwdcdn.com/img/weatherImg/s/n300.gif"/></div> </td> </tr>'
    titles = re.findall(r'title="([^"]*)"', str)
    print(titles) // ['Ясно', 'Ясно', 'Облачно с прояснениями', 'Облачно с прояснениями', 'Облачно с прояснениями', 'Облачно с прояснениями
    , дождь', 'Облачно с прояснениями, дождь', 'Облачно с прояснениями']
    Ответ написан
  • Как поочередно отправлять данные в post запросе?

    @dimoff66
    Кратко о себе: Я есть
    async в вашем случае абсолютно лишнее

    function subscribe (ind = 0) {
      request.post({
          url: 'https://example.com',
          form: {list: mis[ind]} 
        }, (err, response, body) => {
          console.log(response.statusCode)
          if (response.statusCode == 200) 
            subscribe (ind + 1)
       })
    }
    subscribe()


    Правда не очень понятно, зачем вы каждый раз ждете ответа, если этот результаты ответа не используются в последующий запросах. В чем смысл тогда?
    Ответ написан
    2 комментария
  • Стоит бросить чтение книги, если она не совсем понятна?

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

    Главное чтобы все было в удовольствие.
    Ответ написан
    Комментировать
  • Как поочередно вызвать компоненты?

    @dimoff66
    Кратко о себе: Я есть
    компоненты запускаются только исходя из данных, вы не можете запускать их вручную. Вы можете в главном компоненте сделать свойство состояния

    const App = () => {
      const [showComponent, changeShowComponent] = useState(0)
      return <div>
        <button onClick={() => changeShowComponent(1)}>Начинаем</button>
        {showComponent === 1 && <FirstModalComponent changeShowComponent />}
        {showComponent === 2 && <SecondModalComponent changeShowComponent />}
      </div>
    }


    Соответственно внутри первого модального компонента в нужный момент вызываете переданную в него функцию changeShowComponent(2)и все перерисуется, первый компонент исчезнет, второй появится
    Ответ написан
    1 комментарий
  • Как решить задачу с CodeWars Simple Fun #159: Middle Permutation?

    @dimoff66
    Кратко о себе: Я есть
    Клай, Я написал такой вот алгоритм
    import math
    def middle_permutation(string):
        res, letters = '', sorted(list(string))
        fct = math.factorial(len(letters))
        remained = math.ceil(fct / 2)
        
        while (len(letters)):
            fct /= len(letters)
            cnt = math.ceil(remained/ fct) - 1
            res = res + letters.pop(cnt)
            remained -= fct * cnt 
            if (remained == 0):
                remained = fct
                
        return res


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

    @dimoff66
    Кратко о себе: Я есть
    Для остановки интервала используйте функцию clearInterval

    let timerId
    function myFunction() {
      // блаблабла
    }
    
    function startMe () {
      timerId = setInterval(myFunction, 1000)
    }
    
    function stopMe() {
      if (timerId) {
        clearInterval(timerId)
        timerId = null
      }
    }
    Ответ написан
  • Как при построении дерева на основе массива объекта пометить дочерние элементы?

    @dimoff66
    Кратко о себе: Я есть
    function createTree(data, defaultId, parentIds = '') {
      const ul = document.createElement("ul");
    
      data.map((item, index) => {
        const li = document.createElement("li");
        const id = [parentIds, item.id].join('_')
        li.textContent = id;
    
        if (item.children) {
          li.appendChild(createTree(item.children, index, id));
        }
    
        ul.appendChild(li);
      });
    
      return ul;
    }
    Ответ написан
    Комментировать
  • Как вывести эффективное время работы станка по часам в MySQL?

    @dimoff66
    Кратко о себе: Я есть
    Вероятно это примерно то же, что показал выше Лентюй, но не думаю что возможно более эффективное по скорости решение

    SELECT 
      timeStart, timeEnd, ROUND(IFNULL(seconds, 0) / 3600 * 100) as percent
    FROM
    (SELECT 
      timeStart, 
      timeEnd, 
      SUM(3600 - CASE 
        WHEN UNIX_TIMESTAMP(timeStarted) - UNIX_TIMESTAMP(timeStart) < 0 THEN 0 
        ELSE UNIX_TIMESTAMP(timeStarted) - UNIX_TIMESTAMP(timeStart) END - CASE 
        WHEN UNIX_TIMESTAMP(timeEnd) - UNIX_TIMESTAMP(timeStopped) < 0 THEN 0 
        ELSE UNIX_TIMESTAMP(timeEnd) - UNIX_TIMESTAMP(timeStopped) END) as seconds
      FROM (
    	SELECT '2020-06-23 00:00:00' as timeStart, '2020-06-23 00:59:59' as timeEnd
    	UNION SELECT '2020-06-23 01:00:00', '2020-06-23 01:59:59'  
    	UNION SELECT '2020-06-23 02:00:00', '2020-06-23 02:59:59'
        UNION SELECT '2020-06-23 03:00:00', '2020-06-23 03:59:59'
        UNION SELECT '2020-06-23 04:00:00', '2020-06-23 04:59:59'
        UNION SELECT '2020-06-23 05:00:00', '2020-06-23 05:59:59'
        UNION SELECT '2020-06-23 06:00:00', '2020-06-23 06:59:59'
      // и т.д.
    ) as HoursSet
    LEFT JOIN (
       SELECT MAX(IFNULL(StartedPoints.time, '2020-06-23 00:00:00')) as timeStarted, StoppedPoints.time as timeStopped FROM `stanki` as StoppedPoints 
            LEFT JOIN stanki as StartedPoints 
              ON StoppedPoints.name = StartedPoints.name AND
                StartedPoints.value = 'ACTIVE' AND 
                StoppedPoints.time > StartedPoints.time
            WHERE StoppedPoints.name = '01' AND StoppedPoints.value IN ('STOPPED', 'UNAVAILABLE')
            GROUP BY StoppedPoints.time
      UNION ALL
      SELECT time, '2020-06-24 00:00:00'
      FROM (SELECT * FROM stanki WHERE name = '01' ORDER BY time DESC LIMIT 1) as LastRecord
      WHERE value = 'ACTIVE'  
    ) as ActiveIntervals ON ActiveIntervals.timeStopped > HoursSet.timeStart 
      AND ActiveIntervals.timeStarted <= HoursSet.timeEnd
    GROUP BY timeStart, timeEnd) as CalculatedSeconds
    Ответ написан
    Комментировать
  • Идентифицирующая или неидентифицирующая связь?

    @dimoff66
    Кратко о себе: Я есть
    Было бы неплохо, если бы вы описали структуру своих таблиц с полями, а не просто заказ, пользователь, товар. Навскидку в вашем случае отношение неидентифицирующее, поскольку заказ скорей всего имеет свой id и не зависит от пары пользователь-товар.

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

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

    @dimoff66
    Кратко о себе: Я есть
    Возможно
    LIKE %2%2%2%2%2%2%2%2%2%2%2%2%, но если записей много, то стоит сохранить номер в виде 2222222222, возможно в дополнительном поле, если формат основного нужно оставить. Тогда поиск будет быстрым, при индексации моментальным.
    Ответ написан
    Комментировать
  • Как собрать записи из разных таблиц в одной MYSQL?

    @dimoff66
    Кратко о себе: Я есть
    Смотрите в сторону триггеров, как пример

    // После добавления записи в банк
    CREATE TRIGGER `cash_movemenets` AFTER INSERT ON `cash`
    FOR EACH ROW BEGIN
       INSERT INTO movemenets Set date = NEW.date, income = NEW.sum;
    END
    
    // После добавления записи в кассу
    CREATE TRIGGER `bank_movemenets` AFTER INSERT ON `bank`
    FOR EACH ROW BEGIN
       INSERT INTO movemenets Set date = NEW.date, income = NEW.transfer;
    END


    NEW ссылается на новую запись таблиц банка и кассы
    Ответ написан
  • Фронтенд это настоящее программирование?

    @dimoff66
    Кратко о себе: Я есть
    Вы поймите откуда это идет: у людей с комплексом неполноценности есть потребность самоутверждаться.

    Если человек с комплексом неполноценности пишет на с++, он заявляет - только с++ это трушно, всякие питоны это дерьмо.

    Если человек с комплексом неполноценности пишет на питоне или ноде, он заявляет - бэкенд настоящие программисты, фронтенд дерьмо. Хотя чего там сложного на бэке? Получил запрос, сделал запрос к базе, отдал результат. Чем лучше спроектирована база - тем меньше манипуляций.

    Но человеку, пишущему на фронте тоже ведь надо самоутверждаться? Для него Бог придумал программистов 1С. То что они пишут на русском языке делает их нетрушными.

    Программистам 1С самоутверждаться не перед кем, поэтому они гнобят бухгалтеров.

    Весь мир сплошное самоутверждение, особенно в программировании, так как от постоянного интеллектуального напряжения засираются мозги. Выход - делать что тебе нравится и не попадаться в ловушку слов.
    Ответ написан
    2 комментария
  • Можно ли в классах наследоваться к уже созданному объекту?

    @dimoff66
    Кратко о себе: Я есть
    У вас есть доступ к Cat.prototype и к Animal.prototype, в любой момент вы можете скопировать свойства, причем это отразится в том числе на уже созданных экземплярах класса

    const extendMe = ({prototype: childProto}, {prototype: parentProto}) => {
      for (const key of Object.getOwnPropertyNames(parentProto)) {
        if (!(key in childProto)) {
          childProto[key] = parentProto[key]
        }   
      }
    }
    
    class Animal {
      name () { return 'Животное' } 
      legs () { return undefined }
      get isAnimal () {
        return true
      }
    }
    
    class Cat {
      name () { return 'Котик' } 
      legs () { return 15 }
    }
    
    const cat = new Cat()
    console.log(cat.isAnimal) //undefined
    
    extendMe(Cat, Animal)
    console.log(cat.isAnimal) // true
    Ответ написан
    Комментировать
  • Можно ли собрать такой запрос?

    @dimoff66
    Кратко о себе: Я есть
    SELECT pairs.startDate, pairs.endDate, pairs.endDate - pairs.startDate + 1 as count FROM
    (SELECT t1.date as startDate, MIN(t3.date) as endDate FROM statistics as t1
       LEFT JOIN statistics t2 ON t1.date - t2.date = 1 and t2.done = 1
       LEFT JOIN statistics as t3 ON t1.date <= t3.date and t3.done = 1
         LEFT JOIN statistics as t4 ON t3.date - t4.date = -1 and t4.done = 1
    WHERE t1.done = 1 AND ISNULL(t2.date) AND ISNULL(t4.date)
    GROUP BY t1.date) as pairs
    ORDER BY pairs.startDate


    Объяснение:
    1) Находим все записи t1, у которых нет записей с предыдущим днем t2
    2) Соединяем с записями t3, у которых нет записей с последующим днем t4 и дата которых больше t1
    3) Считаем для записей из t1 минимум даты из t3
    Ответ написан
  • Как изменить внешнюю переменную передаваемую в функцию?

    @dimoff66
    Кратко о себе: Я есть
    Нет. значения передаваемых в функцию параметров не могут быть изменены внутри функции. Вы можете вернуть значение из функции, и возвращенное значение присвоить любым переменным.
    Ответ написан
    1 комментарий
  • Почему в алгоритме слайдера нужен минус?

    @dimoff66
    Кратко о себе: Я есть
    Не нужен. Это выражение равнозначно
    (slidesToShow - itemsCount) * itemWidth
    Ответ написан
    2 комментария
  • Как решить данную проблему React js?

    @dimoff66
    Кратко о себе: Я есть
    Выводить header по условию, в зависимости от location, Если перед открытием вашего компонента меняется адрес, или завести переменную в state или в store, которую менять перед переходом к компоненту stories.
    Ответ написан
    Комментировать
  • Как сделать так чтобы куб при достижении определенного порога возвращался туда от куда стартовал?

    @dimoff66
    Кратко о себе: Я есть
    var ypos = 1, minPos = 0, maxPos = 5000;
    var render = function () {
      requestAnimationFrame(render);
      const newPosition = cube.position.x + ypos;
      if (newPosition > maxPos || newPosition < ypos) 
        ypos = -ypos;
      else 
        cube.position.x = newPosition
      renderer.render(scene, camera);
    };
    Ответ написан
    Комментировать