Ответы пользователя по тегу Веб-разработка
  • Нормальная ли практика делать сайт на разных языках в поддоменах?

    delphinpro
    @delphinpro
    frontend developer
    Мультиязычность (контента) обычно реализуется двумя методами
    1. Отдельные колонки под языки в каждой таблице.
    2. Отдельные таблицы одноименных моделей под каждый язык.
    Для реализации обоих способов есть уже несколько готовых пакетов.
    https://yandex.ru/search/?text=laravel+multilangua...

    А уж какую адресацию вы сделаете, особой роли не играет. Это могут быть и поддомены (en.site.ru), и поддиректории (site.ru/en).

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

    delphinpro
    @delphinpro
    frontend developer
    Просто держите открытую консоль браузера во время разработки. Не забудьте там включить птичку Disable Cache.
    Выключать ее необязательно. При закрытой консоли отключение кеша не работает.
    647ad6022c144632391333.png
    Ответ написан
    Комментировать
  • Почему это условие не работает?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Условие срабатывает как и положено.

    Писать что-то в массив $_POST не имеет смысла, он будет всегда создан новым при следующем запросе.
    Точно так же между запросами не сохраняются переменные. И получается, что вы каждый раз сбрасываете счетчик в ноль, а тут же увеличиваете его до единички.

    Данные между запросами можно хранить в сессии.

    session_start();
    $num = $_SESSION['num'] ?? 0;
    $num++;
    
    $_SESSION['num'] = $num;

    Или передавать через ту же форму

    $num = (int)($_POST['num'] ?? 0));
    $num++;
    
    <input type="hidden" name="num" value="<?=$num?>">
    Ответ написан
    Комментировать
  • Как сделать чтобы при наведении на кнопку она меняла цвет другой кнопки?

    delphinpro
    @delphinpro Куратор тега HTML
    frontend developer
    Сергей Молвов, с has все довольно просто

    .vskrytiye__ot:has(.vskrytiye__btn:not(.blue):hover) .vskrytiye__btn.blue {
      /* Стили для второй кнопки при наведении на первую */
    }
    .vskrytiye__ot:has(.vskrytiye__btn.blue:hover) .vskrytiye__btn:not(.blue) {
      /* Стили для первой кнопки при наведении на вторую */
    }


    Заморочки с :not из-за того, что наличие класса .blue - единственное различие между кнопками

    Однако можно привязаться к последовательности кнопок в html

    .vskrytiye__ot:has(.vskrytiye__ot__b:first-child .vskrytiye__btn:hover) .vskrytiye__ot__b:last-child .vskrytiye__btn {
      /* Стили для последней кнопки при наведении на первую */
    }
    .vskrytiye__ot:has(.vskrytiye__ot__b:last-child .vskrytiye__btn:hover) .vskrytiye__ot__b:first-child .vskrytiye__btn {
      /* Стили для первой кнопки при наведении на последнюю */
    }


    Но так длиннее получается.

    Лучше всего будет дать кнопкам разные классы

    .vskrytiye__ot:has(.first-btn:hover) .second-btn {
      /* Стили для второй кнопки при наведении на первую */
    }
    .vskrytiye__ot:has(.second-btn:hover) .first-btn {
      /* Стили для первой кнопки при наведении на вторую */
    }


    Но это не будет работать на данный момент в FireFox!
    Ответ написан
    5 комментариев
  • Почему проблемы с пробелами в списках ckeditor?

    delphinpro
    @delphinpro
    frontend developer
    Вероятно проблема в том, как редактор конвертирует переводы строк в html. Это могут быть теги BR или P. И в зависимости от ваших стилей визуальный результат может различаться.
    Ответ написан
    Комментировать
  • Сайт внутри сайта Laravel?

    delphinpro
    @delphinpro
    frontend developer
    Не понимаю, причем здесь ларавел. Просто настройте на своем сервере поддомен на отдельную директорию и загрузите туда копию сайта, ну или любой другой.
    Ответ написан
    Комментировать
  • Можно ли сделать интерфейс адаптивным, не переписывая весь CSS через media query's?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Обычно нет других вариантов. Если верстка гавно (в эту категорию входит верстка с использованием пикселей), то придется все переопределять в медиазапросах.

    Но даже если размеры задаются в rem, то не всегда достаточно прописать только font-size для :root. Всё же приходится кое-что переопределять, хотя и значительно меньше.
    Ответ написан
  • Как дать номер флажку на ответе в анкетировании?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    <input name="answers[]" value="1" type="checkbox" checked>
    <input name="answers[]" value="2" type="checkbox">
    <input name="answers[]" value="3" type="checkbox" checked>


    На сервер будет прилетать массив из отмеченных чекбоксов

    $_POST['answers']; // [1,3]

    Если предполагается один вариант ответа, то используйте type=radio

    <input name="answer" value="1" type="radio">
    <input name="answer" value="2" type="radio" checked>
    <input name="answer" value="3" type="radio">


    На сервер будет прилетать одно выбранное значение

    $_POST['answer']; // 2
    Ответ написан
    Комментировать
  • Есть ли смысл в spa laravel все делать через JS?

    delphinpro
    @delphinpro
    frontend developer
    Хотите делать spa - делайте. блэйд будет не нужен.
    spa может использовать аутентификацию через токены, обычно так и делается. Тут уж никакую "авторизацию через php" не прикрутишь, ибо нет никакой сессии, состояние не хранится на сервере.
    spa также может использовать аутентификацию на сессиях. Немного не "как у всех", но имеет место быть. здесь можете прикрутить отдельные страницы/шаблоны логина, если очень хочется.
    Ответ написан
    Комментировать
  • Где хранить логотип веб-сайта?

    delphinpro
    @delphinpro
    frontend developer
    Возможно у вас уже есть таблица с глобальными настройками для сайта. Вот туда и запихните логотип.
    Но, соглашусь, требование странное. Можно так же хранить логотип на диске, можно даже в отдельной папке, и параметр в админке, для выбора/загрузки лого.
    Ответ написан
    1 комментарий
  • Длинные имена и как с этим бороться?

    delphinpro
    @delphinpro
    frontend developer
    А причём здесь web-разработка?

    Вы о говорите о различных инструментах, типа npm composer и т.п.?

    Тут всё просто. Во-первых, профиль в винде необходимо переименовать, если он кириллический.
    Во-вторых, забываем про все виртуальные виндовые папки, тип Рабочий стол, Мои документы и т.п. Лучше покупаем отдельный диск для разработки. Ну можно и "С" использовать конечно =), однако, я никогда не храню данные на системном диске. Привычка с лохматых времен, когда винда падала чуть ли не ежемесячно. D:\dev, или С:\dev, и никаких проблем.
    Вспомогательные инструменты ставим в корень диска
    c:\composer
    c:\git
    c:\nodejs
    c:\python2

    Не забываем поправить системный PATH, если нужно.
    Ответ написан
  • Checkbox-mutator, есть такая возможность, и есть ли в этом смысл?

    delphinpro
    @delphinpro
    frontend developer
    Если же на товар больше всего человек заходило, то он становился рекомендованным или топовым,

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

    delphinpro
    @delphinpro
    frontend developer
    https://tpverstak.ru/common-css-class-names/
    https://github.com/yoksel/common-words
    https://habr.com/ru/post/303174/

    Совмещайте с БЭМ

    .regular-text – обычный текст
    .regular-text_inverted – на темном фоне

    Если фоны могут быть произвольные, имеет смысл сделать отдельные классы-помощники

    .regular-text.bg-black
    .regular-text.bg-reg

    Слайдер можно так и обозвать – .slider
    Если есть еще один – назовите его .carousel
    Что показывает слайдер?
    Картинки из галереи – .gallery-slider
    Карточки с новостями – .news-slider
    И т.д. Помним, что помимо .slider можем использовать .carousel и без лишних заморочек имеем возможность именовать два разных слайдера с новостями. Хотя обычно он один.
    Еще кейс: у вас несколько разных слайдеров, функционально они одинаковые, но сами слайды отличаются. Обзываем из все просто .slider, а слайдам даем отдельные названия. .slide-news, .slide-image и т.п.

    Фантазируйте.
    Ответ написан
    2 комментария
  • Глюки на сайте после программных изменений, пока не очистить кэш. Как от этого избавится?

    delphinpro
    @delphinpro
    frontend developer
    Браузер кэширует ресурсы по полному УРЛ, включая параметры запроса.
    Поэтому выход очень простой, и он повсеместно используется.
    Нужно дописать в queryString любой уникальный параметр.
    В лоб можно писать метку времени

    <script src="my_script.js?<?= time() ?>">

    Однако, с таким подходом файл будет постоянно загружаться заново при каждом запросе.

    Лучше ввести версионирование. Простейший вариант – вручную обновлять версию при изменении

    <script src="my_script.js?v=1">
    <script src="my_script.js?v=2">


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

    <script src="my_script.ab21df.js">

    Такой вариант хорошо подходит для SPA, так как сборщик тогда обычно генерит и индексный файл и может в нем автоматически подключать актуальные имена файлов.

    В остальных случаях отлично подойдет вариант с подстановкой метки времени изменения файла

    <script src="my_script.js?v=<?= filemtime('/path/to/my_script.php') ?>">
    Ответ написан
    Комментировать
  • Как хранить сайт на гитхабе?

    delphinpro
    @delphinpro
    frontend developer
    Технически и самому сделать просто.
    Пишется небольшой скрипт, который будет скачивать репозиторий и обновлять статьи.
    На гитхабе может быть настроен хук, который буде дергать этот скрипт при определенных событиях в репе. Или вручную периодически его запускать. Или по крону.
    Статьи могут заливаться в базу из полученных файлов репозитория, а может быть просто сделан markdown парсер, который будет на лету отображать страницы скаченного репо.
    Ответ написан
    Комментировать
  • В чем разница между веб-приложением и любым другим сайтом?

    delphinpro
    @delphinpro
    frontend developer
    После прочтения этого https://ru.wikipedia.org/wiki/Веб-приложение суть не проясняется?

    Еще пара цитат:

    Веб-приложение (или веб-приложение) - это прикладное программное обеспечение, которое работает на веб-сервере, в отличие от компьютерных программ, которые запускаются локально в операционной системе (ОС) устройства. Доступ к веб - приложениям осуществляется пользователем через веб - браузер с активным сетевым подключением.


    Веб-приложение (или «web app») – это любая компьютерная программа, которая выполняет определенную функцию, используя в качестве клиента веб-браузер.


    Ну и напоследок, вторая!! ссылка из поисковой выдачи https://habr.com/ru/post/450282/

    Ну ладно, еще и третью скину, вдруг в гугле забанен =) https://www.azoft.ru/blog/web-apps/

    --------------
    Можно ли считать веб-приложением десктоп-программу, которая посылает данные и получает их с сервера и отображает не через html, а например через те же виджеты на каком нибудь Qt?

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

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

    Браузер для отображения. Взаимодействие по http/websockets
    Ответ написан
    Комментировать
  • Можно ли писать код под конкретный браузер?

    delphinpro
    @delphinpro
    frontend developer
    Писать под конкретный браузер - ошибка.
    Писать нужно, учитывая возможность отсутствия поддержки той или иной функции.

    В css для этого существует директива @supports {}

    В javascript свои методы определения поддержки и наличия фич. Основой кейс сводится к проверке наличия необходимого объекта в глобальной области видимости (window в браузере). Так работает большинство полифилов.
    Вроде такого:
    if (!("classList" in document.documentElement))  {
     // Пишем свою реализацию 
    }
    Ответ написан
    Комментировать