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

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Еще раз: Тут нет никакого ооп, у вас получается какой-то процедурный код, засунутый внутрь класса. Это к ооп не имеет никакого отношения. Не пытайтесь сделать деревянную печку, ничего хорошего не получится.
    У вас:
    Код реализует (такой себе) пэйджинг для одного конкретного запроса (нахрена такой пейджинг засовывать в класс?)
    Код ничего не инкапсулирует, тупо выполняется как функция. По сути если мы уберем class Paginate extends Connection{ то ничего не поменяется.
    Внутри методов используются глобальные переменные (GET), что само по себе уже лютый говнокод.
    Много слов про солид и прочие вещи из ооп не пишу, в виду полного их отсутствия в коде, да и смысл?

    По этому решения для вашего случая в контексте ооп просто нет, так как:
    Пэйджинг работает с моделями на основе ОРМ, в пэйджинг в качестве аргумента передается модель, и далее уже пэйджинг работает с моделью, используя ее методы работы с хранилищем, а не просто тупо фигачит запросы. У вас моделей просто нет.
    Модели подразумевают конкретный интерфейс, который позволяет работать с пэйджингом адекватно. Ну и моделей нет ))
    Точкой взаимодействия между моделью и пэйджингом будет контроллер, про который тут вообще у вас никто не в курсе.
    Вывод (view) никогда не пересекается с кодом логики, в него просто передаются готовые данные, после чего они вставляются в нужные точки шаблона.
    Ответ написан
    6 комментариев
  • Видео попап. Почему неполучается сделать второе, третье всплывающее окно?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Потому что плагин кривой и не предназначен для создания нескольких экземпляров одновременно. Если посмотрите его исходный код, то там создаются элементы с фиксированными id (id="opct" и id="closer_videopopup"), а по стандарту HTML на странице не должно быть элементов с одинаковыми id.
    Ответ написан
    Комментировать
  • Как определить при помощи JS браузер пользователя и его ip?

    SPART4K
    @SPART4K
    Middle Front-end Developer (Vue.js/Nuxt.js)
    navigator.userAgent
    Информацию о браузере - устройствe и тп

    fetch('https://api.ipify.org/').then(
      r => r.text()
    ).then(console.log);

    ip
    Ответ написан
    Комментировать
  • Как запретить писать в input?

    @AntVlad
    Надо на сервере проверять данные.
    И если у тебя всё время значение wazny.com, то зачем его вообще передавать? Если проверять, откуда прилетели данные, то смотри переменную $_SERVER['HTTP_REFERER']. Но, по идее, злоумышленник и это может подделать.
    Ответ написан
    Комментировать
  • Как правильно распарсить такой массив со строками?

    0xD34F
    @0xD34F Куратор тега JavaScript
    arr.reduce((acc, n) => (
      n = n.match(/(\S+) = (.*)/),
      n && (acc[n[1]] = n[2]),
      acc
    ), {})
    Ответ написан
    2 комментария
  • Как запретить писать в input?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Никак не обезопаситься. Всегда можно посмотреть, что за запрос уходит из браузера и симмитировать его с любыми нужными полями/заголовками/куками.
    Данным, пришедшим от клиента, доверять нельзя никогда.

    P.S. Хотя для вашей ситуации можно на сервере подписать данные электронной подписью или зашифровать их и на сервере же проверять подпись/расшифровывать. Но если ключ будет один на всех, то можно будет подставить данные с другого клиента, а если ключ будет свой для каждой сессии, то проще хранить данные в сессии и не отдавать клиенту.
    Ответ написан
    2 комментария
  • Как с помощью php разбить html текст на теги "a" (ссылки) в массив?

    0xD34F
    @0xD34F Куратор тега Регулярные выражения
    Не нужны тут регулярные выражения, для разбора html есть специальные инструменты:

    $doc = new DOMDocument();
    $doc->loadHTML($html);
    $a = $doc->getElementsByTagName('a');
    $result = array_map([ $doc, 'saveHTML' ], iterator_to_array($a));

    Но, конечно, дурацкое дело нехитрое:

    $result = preg_split('/(?<=\/a>)(?=<a)/', $html);
    
    // или
    
    preg_match_all('/<a .*?>.*?<\/a>/', $html, $matches);
    $result = $matches[0];
    Ответ написан
    4 комментария
  • Как сделать опрос на сайте через html?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    Если говорить в общем: это реализуется с помощью серверной части и базы данных.
    Подробное решение в рамках ответа невозможно описать. С одной стороны - мало вводных, с другой это ресурс для решения конкретных задач, а не фриланс-биржа и не онлайн-университет.
    Максимум, можно подсказать общее направление:
    1. Гуглите список языков, на которых пишут бекэнд
    2. Выбираете тот, который вам понравиться больше (важное замечание: написать можно на любом, но часть будет несколько избыточна)
    3. Изучаете его
    4. Изучаете принципы работы с Базами Данных (минимум три аспекта: sql, принципы проектирования и нормализации баз)
    5. Пишите

    Дополнение: если цель - сохранить статистику каждого юзера только для него и задачи "анализа" не стоит, то можно использовать local storage или куки.
    Ответ написан
    4 комментария
  • Как разбить текст на теги?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    можно создать временный элемент <template>, вставить в него этот HTML,
    и забрать из него DocumentFragment

    Фрагмент — это примерно как DOM-документ, его можно рекурсивно обойти через свойство children

    Например, в строке содержится такой HTML:
    <div>
      <p>Text</p>
      <ul>
        <li>Apple</li>
        <li>Banana</li>
      </ul>
    </div>
    И примерно такой код:
    const tmpl = document.createElement('template');
    tmpl.innerHTML = msg; // строка с HTML
    const df = tmpl.content; // DocumentFragment
    
    df.children // массив из одного элемента: наружний div
    df.children[0].children // массив с двумя эл.: параграфом и списком
    df.children[0].children[1].children[1].textContent // "Banana"
    Ответ написан
    2 комментария
  • Как продвигать свой проект?

    Adamos
    @Adamos
    Для начала - стоит подобрать эту кучу и... запихнуть ее в класс хотя бы, чтобы не засорять глобальное пространство имен.
    Далее, "куча" никому не впилась. Чтобы было легче писать код, используются библиотеки функций, решающих вполне конкретные задачи, типа moment.js
    А аналог вашей "кучи" найдется у каждого сколько-нибудь пописавшего программиста, и своим ему пользоваться тупо удобнее, чем искать ваше, а потом разбираться в том, что вы там накосорезили. Учитывая примитивность решенных задач и явное непонимание места вашего кода в чужом проекте, связываться с ним - себе дороже.
    Ответ написан
    2 комментария
  • Как продвигать свой проект?

    IonDen
    @IonDen
    JavaScript developer. IonDen.com
    1. Создаем веб сайт посвященный вашей библиотеке. На нем должна быть подробная документация, и демо кода на все случаи.
    2. Создаем репозиторий на github, выкладываем туда код и документацию.
    3. Открываем соц. сети, пишем там о своем проекте заметку, статью.
    4. Можно записать ютуб видео небольшое, где крато и понятно объясняется что за библиотека, зачем она, как пользоваться и в чем выгода.
    5. А дальше уже время, если комьюнити понравится ваш проект и им начнут пользоватья - будет расти популярность и загрузки (а если нет, то нет).

    Лучше всего всё это сразу делать на английском языке. Иначе охват аудитории будет мизерный.

    Примеры подобных библиотек c хорошим описанием и документацией:
    - Howler.js
    - Fotorama
    - Ion.RangeSlider
    - и т.д.
    Ответ написан
    1 комментарий
  • Бот для публикации ремайндеров?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Вам надо подготовить техзадание (хотя бы как-то) и с ним обратиться на любую freelance-биржу, к примеру freelance.habr.com
    Ответ написан
    Комментировать
  • Как заменить каждый из символов подстроки на звездочку?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Если с минимумом изменений, то так:
    -        field = field.replace(badWords[i], '*');
    +        field = field.replaceAll(badWords[i], '*'.repeat(badWords[i].length));
    звёздочку повторить столько раз, сколько букв в заменяемом слове.
    Ответ написан
    6 комментариев
  • Как заменить каждый из символов подстроки на звездочку?

    0xD34F
    @0xD34F Куратор тега JavaScript
    out.innerText = badWords.reduce((str, n) => str.replaceAll(n, '*'.repeat(n.length)), field);
    Ответ написан
    Комментировать
  • Как я могу избавиться от hardcode в CSS Grid layout?

    RAX7
    @RAX7
    .wrapper {
      display: grid;
      grid-auto-flow: dense;
      grid-template-columns: 1fr 1fr;
      grid-gap: 10px;
    }
    
    .box {
      background-color: #444;
      color: #fff;
      border-radius: 5px;
      padding: 20px;
      font-size: 150%;
    }
    
    .box:nth-child(6n + 1),
    .box:nth-child(6n + 6) {
      grid-row: span 2;
    }
    
    .box:nth-child(6n + 5) {
      grid-column: 1;
    }
    Ответ написан
    Комментировать
  • Можно ли использовать два свойства clip-path?

    RAX7
    @RAX7
    clip-path так использовать не получится, но можно сделать маску на svg
    Ответ написан
    Комментировать
  • Кто знает решение?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Вы умножаете на 2. А надо возводить в квадрат, т.е. в степень 2 ("power").
    Ответ написан
    2 комментария
  • Как получить понимание разработки игры?

    saboteur_kiev
    @saboteur_kiev Куратор тега Разработка игр
    software engineer
    Тебе же прямо сказали. Нужно изучить язык программирования.
    Не на уровне "почитал книжку". Не на уровне интерн/джуниор. А на уровне уверенного разработчика.

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

    Поэтому правильный путь - это потратить МНОГО времени и МНОГО усилий.
    Ты же сам сказал, что все что ты изучил - там давали базовое понимание что это такое.

    Поэтому вместо того, чтобы делать крутую 3д игру, сперва начни делать приложения попроще.
    Добейся, чтобы у тебя просто двигался персонаж. Потом сделать лабиринт, чтобы со стенками взаимодействовал. Потом может быть попробуй добавить прыжок и высоту. И так потихоньку сделаешь основу для игры. Потом будешь добавлять и добавлять. Может через года два будет демо-версия с одним рабочим уровнем.
    Ответ написан
    Комментировать
  • Как показать/спрятать блок каждые 5 сек и одновременно менять информацию в блоке?

    0xD34F
    @0xD34F Куратор тега JavaScript
    let index = -1;
    
    setInterval(el => {
      const show = !el.classList.contains('_active');
      index = (index + show) % infoModal.length;
      el.innerText = infoModal[index].title;
      el.classList.toggle('_active', show);
    }, 1000, document.querySelector('.modal__title'));

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

    Если, к примеру, нужно скрывать блок каждый раз через5 сек, а показывать блок через рандомный промежуток времени?

    К чёрту setInterval, делаете функцию, которая вызывает себя по таймауту - случайному при скрытии элемента и фиксированному при показе:

    (function updateText(el, i) {
      const show = el.classList.toggle('_active');
      i = (i + show) % infoModal.length;
      el.textContent = infoModal[i].title;
      setTimeout(updateText, 1000 + !show * Math.random() * 3000, el, i);
    })(document.querySelector('.modal__title'), -1);
    Ответ написан
    3 комментария
  • Почему при глубоком копировании объектов переполняется стек вызовов?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const entries = Object.entries(obj);
    for (const entry of entries) {
      if (!isObject(entry)) {
        result = Object.assign(result, Object.fromEntries(entry));
      } else return cloneDeep(entry);

    Что такое entries? - массив, состоящий из массивов.
    Чем, соответственно, является entry? - массивом.
    Что возвращает isObject для массивов? - true.
    То есть, вне зависимости от содержимого конкретного entry произойдёт рекурсивный вызов.
    Всё.
    Ответ написан
    1 комментарий