• Делаю сайт, программа правильная, но выдает ошибку, в чем проблема?

    MrDecoy
    @MrDecoy Куратор тега JavaScript
    Верставший фронтендер
    переменная $site = null.
    такое происходит когда querySelector не нашёл в разметке ничего подходящего.
    Либо опечатка в селекторе, либо элемент, который вы через селектор ищите - подгружается диинамически и позже описанного кода, соответтсвенно, на момент его выполнения в разметке такого элемента нет.
    Ответ написан
    Комментировать
  • Где хранить docker images после сдачи проекта?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Зачем хранить образы после сдачи проекта? У вас есть Dockerfile, в случае чего ничего не стоит развернуть всё заново.

    Если же вы про какие-то сакральные данные - как их хранить, после сдачи проекта решает клиент. Тратить на это свои деньги, конечно же, не стоит.
    Ответ написан
    2 комментария
  • Почему не обновляется пропс?

    0xD34F
    @0xD34F Куратор тега Vue.js
    почему при изменении даты передаваемой в пропс не обновляется значение в самом компоненте таймера?

    Встречный вопрос - почему вы решили, что внутреннее состояние компонента обновляться должно? Покажите, где вы обновляете targetDate при изменении props.date. Нет, можете себя не утруждать - ничего такого у вас нет.

    Не надо никакого targetDate, рассчитываем дни-часы-минуты-секунды сразу на основе props.date - так при изменении props.date не придётся предпринимать никаких дополнительных телодвижений, всё посчитается как надо при следующем вызове updateCountdown. Вот как-то так.
    Ответ написан
    Комментировать
  • Возникает ошибка "Заполните все поля". Все заполнено. Что не так с кодом?

    IvanU7n
    @IvanU7n
    Была бы просто опечатка, разобрался бы сам.

    значит таки мы имеем дело с ничего не умеющей личностью

    мне так стало интересно, что я скачал архив и посмотрел на код, и у меня нахождение опечатки заняло меньше минуты (!)
    но дам возможность реабилитироваться, обратив внимание на строку 150 файла index.php

    ПС. про структуру кода и таблицы промолчу
    Ответ написан
    Комментировать
  • Возникает ошибка "Заполните все поля". Все заполнено. Что не так с кодом?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Вам надо переместиться из мира фантазий в реальность.
    В мире фантазий у вас "всё заполнено". Но суровая реальность говорит об обратном.
    Поэтому первым вашим действием должно быть принятие реальности.
    А вторым - проверка своего безупречного кода.

    Например.
    Обычно эту бессмысленную фразу выводят примерно таким говнокодом:
    if (empty($_POST['pole1']) || empty($_POST['pole2']) || empty($_POST['pole3'])) {
        die("Заполните все поля");
    }

    Для того, чтобы разобраться с этой неразрешимой проблемой, вам понадобится немного логики.
    Я уверен, вам вполне по силам сделать умозаключение вида, "Если этот код выводит ошибку, то как минимум одно из полей содержит пустое значение".
    Сделав такой логический вывод, его следует проверить.
    Например таким кодом:
    var_dump($_POST['pole1'],$_POST['pole2'],$_POST['pole3']):

    и посмотреть на его вывод.
    А дальше уже разбираться, какое из полей пустое, и почему
    Ответ написан
    Комментировать
  • Как сохранить начальное состояние объекта в обход реактивности vue?

    yarkov
    @yarkov Куратор тега Vue.js
    Помог ответ? Отметь решением.
    Просто сохранить копию объекта. Самое простое сделать так:
    const mySourceCopy = JSON.parse(JSON.stringify(objectOrArray));
    Ответ написан
    2 комментария
  • Почему моя асинхронная функция останавливает всю программу?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Хотя Вы и используете асинхронный код выше (в telegram боте), Ваши функции, которые работают с google sheets и бд, работают синхронно. В этом случае, даже если Вы оборачиваете их в await, то они чудесным образом не станут асинхронными и все равно заблокируют исполнение асинхронного eventloop, пока не завершат свою работу.

    Чтобы решить Вашу проблему, необходимо использовать библиотеки, которые умеют в асинхронную работу, бд - aiosqlite, а с google sheets - хз, вроде подходит gspread_asyncio.
    Ответ написан
    Комментировать
  • Редирект всех страниц сайта с html?

    @dodo512
    DirectorySlash off
    
    RewriteEngine On
    
    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteRule ^(.*)\.html /$1 [R=301,L]
    
    RewriteCond %{DOCUMENT_ROOT}/$0.html -f
    RewriteRule .* /$0.html [L]
    Ответ написан
    1 комментарий
  • Что учесть в начале создания веб-портала и перейти с начальной версии на продвинутую без потерь? Как выбрать разработчика, структуру и платформу?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Я всегда стараюсь приводить какую-то ясную аргументацию к конкретной предлагаемой технологии.
    Мое мнение - берите вордпресс. При всей моей нелюбви к нему. На вырост - самое то.
    Плюсы:
    1) Это просто, базовый функционал вы и сами знаете, плагинов миллиард. Да, есть вопросы к качеству некоторых, но почти всегда есть альтернатива или в крайнем случае возможность написать/заказать нужный функционал.
    2) Он поддерживает внятное чпу, которое легко перенести в более серьезный проект с нормальным роутингом.
    3) Структура хранения хорошо известна, не идеальна, но нормально переносится.
    4) Удобная админка. Не каждый разработчик заморачивается с админкой, так как "это же не фронтенд, сойдет".
    5) По нему много спецов, продукт весьма популярный, так что в случае каких-то проблем легче найти спеца.
    6) Это бесплатно, хотя ничего не мешает вам купить к нему стильный дизайн или крутой плагин за деньги.

    Минусы:
    1) Невысокая производительность на специфических задачах
    2) Качество кода оставляет желать... Что не особо мешает функционалу
    3) На больших нагрузках сильно проседает, но до этого еще дожить надо...

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

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Веб-разработка
    Для такого маленького изображения я бы передавал только самый большой вариант.

    Экономия с точки зрения пользователя тут будет лишь в том случае, если везде используется 40*40, и, например, только в редакторе профиля показывается 100*100. Тогда люди в 99% случаев не будут качать лишние пиксели. Но их объём настолько мал, что заморачиваться нет смысла.
    Если же разные размеры используются повсеместно, то, делая три отдельных изображения, вы увеличите объём трафика на 21%, т.е. сделаете хуже и себе, и пользователю.
    Ответ написан
    2 комментария
  • Как правильно сделать отправку с проверкой условий?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Код ничего не делает, чего вы от него ждете? Либо форму добавьте, либо какой-то код, отправляющий чекбоксы на бэкенд аяксом, например...
    Ответ написан
    Комментировать
  • Как запретить инвертирование цвета при темной теме браузера?

    @ymfront Автор вопроса
    Нашел следующее решение для запрета темной темы:

    HTML:

    <meta name="color-scheme" content="only light">

    CSS:

    :root {
         color-scheme: only light;
    }
    Ответ написан
    Комментировать
  • Как реализовать переход по ссылке силами CSS?

    @Delta01
    @de1ta01 пиши, помогу с вёрсткой =)
    Так вам пойдет?
    Ответ написан
    Комментировать
  • Названия в классов: я могу раздавать их рандомно или есть некая традиция, игнорирование которой считается плохим тоном?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега CSS
    В программировании есть традиция давать сущностям понятные имена.

    При этом, что такое "понятное имя", каждая команда договаривается самостоятельно. Кто-то пишет только на грамотном английском, кто-то использует колхозную транслитерацию. Один и тот же элемент на разных проектах может называться по-разному, потому что у них разная предметная область (например, menu/navigation). И так далее.

    Дополнительно, существуют и схемы наименования, самая популярная - БЭМ.

    С точки зрения же механики, браузеру совершенно всё равно, что написано у вас в классах (за исключением небольших технических ограничений, описанных в спецификации).
    Ответ написан
    Комментировать
  • Как можно применять гибкие методологии управления в сугубо продуктовых проектах с физическим товаром?

    Jacen11
    @Jacen11
    Просто, например Сазерленд (создатель скрама) утверждает, что за гибкими методологиями будущее, а всякие водопады должны кануть к лету. И только используя скрам можно повысить работоспособность команды до 800%.
    я бы тоже так говорил про штуку которую продаю

    на примере самолетостроения особенно ярко это видно, выпустили говно итерацию, пара самолетов упала, сотни две умерло, внесли правки в ПО самолета, повторить. Отличный подход

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

    0xD34F
    @0xD34F Куратор тега JavaScript
    Отключаем чекбоксы, изменение состояния которых нежелательно:

    function restrictChecked({
      container,
      selector = 'input[type="checkbox"]',
      min = 0,
      max = Infinity,
      enableOnCancel = true,
    }) {
      const checkboxes = [...container.querySelectorAll(selector)];
      const onChange = () => {
        const countChecked = checkboxes.reduce((acc, n) => acc + n.checked, 0);
        const minReached = countChecked <= min;
        const maxReached = countChecked >= max;
        checkboxes.forEach(n => n.disabled = minReached && n.checked || maxReached && !n.checked);
      };
    
      checkboxes.forEach(n => n.addEventListener('change', onChange));
      onChange();
    
      return () => checkboxes.forEach(n => {
        n.disabled &&= !enableOnCancel;
        n.removeEventListener('change', onChange);
      });
    }

    Или, откатываем нежелательные изменения:

    function restrictChecked({
      container,
      selector = 'input[type="checkbox"]',
      min = 0,
      max = Infinity,
    }) {
      function onChange({ target: t }) {
        if (t.matches(selector)) {
          const countChecked = this.querySelectorAll(`${selector}:checked`).length;
          t.checked ||= countChecked <  min;
          t.checked &&= countChecked <= max;
        }
      }
    
      container.addEventListener('change', onChange);
    
      return () => container.removeEventListener('change', onChange);
    }
    Ответ написан
    Комментировать
  • Как в Nuxt3 Layer импортировать стили из базового проекта в дочерний?

    @mrFlyer Автор вопроса
    Подсказали решение через alias в родительском проекте:

    import { createResolver } from '@nuxt/kit';
    const { resolve } = createResolver(import.meta.url)
    
    export default defineNuxtConfig({
      devtools: { enabled: true },
      css:[
        '@style',
      ],
      alias: {
        '@style': resolve('./assets/app.scss')
      },
    })
    Ответ написан
    Комментировать
  • Использую в NexJs fetch и заливаю на GitPage, и страница падает?

    @todaystudio
    Не думаю, что githubpages подходит для этого. Конечно, за то время, когда я был там крайний раз, что-то поменялось, но все же.
    Попроубуйте vercel или netlify
    Ответ написан
    Комментировать
  • Поиск-замена в html?

    yarkov
    @yarkov Куратор тега JavaScript
    Помог ответ? Отметь решением.
    Вот так: https://codepen.io/yarkovaleksei/pen/NWJbYrL?edito...

    <div id="coub">
    <div class="coub" onmouseover="showName(this);">
    <a href="//coub.com/view/eeuyn" onclick="return frame(this);">
    <img src="https://3fc4ed44-3fbc-419a-97a1-a29742511391.selcdn.net/coub_storage/coub/simple/cw_image/f42a9c98bfd/f876723cdbb307c191e94/1472200578_00031.jpg"></a>
    <span>Watch on the road! #jimdrives</span></div>
    
    <div class="coub" onmouseover="showName(this);">
    <a href="//coub.com/view/2q1t7k" onclick="return frame(this);">
    <img src="https://3fc4ed44-3fbc-419a-97a1-a29742511391.selcdn.net/coub_storage/coub/simple/cw_image/27475bd9033/6a9fb30fb888702736ce6/%{version}_1615659518_00032.jpg"></a>
    <span>Everyone!</span></div>
    </div>


    const images = Array.from(document.querySelectorAll('img'));
    
    images.forEach((image) => {
      let src = image.getAttribute('src');
      
      src = src.replace('%{version}', 'small');
      
      image.setAttribute('src', src);
    });
    Ответ написан
    1 комментарий