Задать вопрос
  • Как обработать данные input PHP?

    kimono
    @kimono
    Web developer
    Я знаю, что все делает просто через $_get и post Запрос

    Никак по-другому вы не отправите данные со страницы на сервер.
    Только используя ссылки или формы.
    Ваша задача решается на фронтенде:
    <input type="number" min="1" step="1">
    + на бэкенде:
    $num = $_GET['num'] ?? 0;
    if ($num <= 0) {
        return false;
    }
    Ответ написан
    3 комментария
  • Как быстрее/правильнее загружать данные?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    Пара кейсов, после которых идея "передать на фронт и фильтровать там" перестает казаться такой хорошей

    1) Прилетел массив на 10 000 элементов. Клиент зашел с Samsung galaxy S2 , попробовал загрузить/фильтрануть, посмотрел, как завис браузер, и ушел. Не забывайте, что не все пользователи сидят с десктопов как у разработчиков с 16-32Gb оперативы. Мобилка может поперхнуться банально из-за большого json-а

    2) Как только потребуется сделать паджинацию - фильтрация на фронте станет выдавать неожиданно некорректные данные

    Пинайте сервер-сайд, пусть разрабы или кэшируют, или расставят индексы в базе правильно, если у них SQL, или перейдут на подходящий поисковый движок с фасетным поиском

    Я верю, что можно сделать выдачу и фильтрацию чисто на фронте с любым количеством элементов, если команда состоит из сплошных ниндзя и рокстаров, но практика в 3 подобные ситуации показывает, что в итоге эту фильтрацию придется переписывать как минимум на гибридную (и поддерживать 2 решения, на фронте для малого количества записей, и на бэке для большого), либо полностью на сервер сайд, так как к сожалению команда никогда не состоит из идеальных разработчиков, чаще из обычных живых людей
    Ответ написан
    2 комментария
  • Зачем нужен Gulp?

    @artinnok
    бекенд-программист
    CSS и JS:
    К примеру, у вас имеется большое количество (Х штук) css или js файлов, которое вы подключаете на своих страницах посредством тэгов <link> и <src>.
    При загрузке страницы, браузер клиента будет отправлять X запросов к вашему серверу, а ваш сервер должен будет ответить на X запросов.
    Это:
    1. Тормозит загрузку страницы - будете ждать ответа от сервера
    2. Загружает ваш сервер

    С помощью сборщиков фронтэнда вы можете "склеить" все файлы в один - main.css и main.js, которые будут отдаваться 2 запросами с сервера. Также, вы сможете минифицировать CSS и JS. Под минификацией подразумевается уменьшение размеров файла на диске. Естественно, более легкий файлы будет быстрее прогружаться + минимальное количество запросов к серверу.

    IMG:
    К примеру, у вас имеется Х изображений размером 700 Кбайт. Клиенту надо будет загрузить 700 * X Кбайт. Если вы пропустите свои изображения через Gulp, то вы получите изображения с меньшим размером на диске и такого же качества, т.е. клиенту придется прогрузить примерно (500-600) * X Кбайт.
    Ответ написан
    1 комментарий
  • Как подключить файл js и не засветить его?

    OtshelnikFm
    @OtshelnikFm
    Обо мне расскажет yawncato.com
    js - это клиентская технология (node не считаем). Если что вам нужно незаметно - то только на бекенде: отправляете ajax - сервер в php отрабатывает - фигачит как надо и возвращает. В принципе так.

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

    rockon404
    @rockon404
    Frontend Developer
    Что бы вы не подключали, на вкладке network это будет видно.
    Ответ написан
    Комментировать
  • Что не так с кодом Express?

    @shushus
    Если расширение hbs, то надо написать
    в конфигурации handlebars при создании указать
    extname: '.hbs' типа
    var handlebars = require('express-handlebars').create({extname: '.hbs'});

    а в назначении шаблонного движка:

    app.engine('hbs', handlebars.engine);
    app.set('view engine', 'hbs');
    Ответ написан
    2 комментария
  • Как выполнить миграцию базы данных в Laravel?

    @iljaGolubev
    в .env файле нужно указть параметры подключения:
    DB_HOST=localhost
    DB_DATABASE=laravel_todoapp
    DB_USERNAME=laravel_todoapp_username
    DB_PASSWORD=laravel_todoapp_username_password
    Ответ написан
    Комментировать
  • Как выполнить миграцию базы данных в Laravel?

    @EvgeniiR
    https://github.com/EvgeniiR
    Access denied for user 'root'@'localhost' (using password: YES)
    Ответ написан
    Комментировать
  • Как стащить книгу в оффлайн с Google books?

    I_CaR
    @I_CaR
    программист в прошлом.
    Мне лично понравилась "Google Books Downloader"
    Поле для ссылки + Одна кнопка и путь куда сохранить и всё!
    Ещё есть выбор формата.
    Просто, удобно, быстро!
    Ответ написан
    4 комментария
  • В чем суть роутера на php?

    onqu
    @onqu
    weasy
    1. Здесь пугают всякими контроллерами, ларавелями. Давайте жить проще. Для начала дадим определение модному слову роутер. Это маршрутизатор. Что делает маршрутизатор? Правильно. Обрабатывает маршруты, являясь связующим звеном. Маршрутом для web сайта принято считать метод запроса [GET, POST, PUT и другие] и компоненты URI.

    например: https://ru.wikipedia.org/wiki/URI?foo=bar#title
    [схема: https] :// [источник: ru.wikipedia.org] [путь: /wiki/URI] [запрос: ?foo=bar] [фрагмент: #title]


    Но для определения маршрута может браться любая другая информация передаваемая серверу, определение выше это лишь наиболее употребляемые параметры.

    Сама работа, как правило проста: от клиента приходит запрос, маршрутизатор перебирает все заданные ему пути до первого совпадения. При совпадении вызывается определенная вами функция, которая возвращает ответ клиенту.

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

    3. Простой пример
    // файл index.php
    
    // Маршруты
    // [маршрут => функция которая будет вызвана]
    $routes = [
        // срабатывает при вызове корня или /index.php
        '/' => 'hello',
        // срабатывает при вызове /about или /index.php/about
        '/about' => 'about',
        // динамические страницы
        '/page' => 'page'
    ];
    
    // возвращает путь запроса
    // вырезает index.php из пути
    function getRequestPath() {
        $path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
    
        return '/' . ltrim(str_replace('index.php', '', $path), '/');
    }
    
    // наш роутер, в который передаются маршруты и запрашиваемый путь
    // возвращает функцию если маршшрут совпал с путем
    // иначе возвращает функцию notFound
    function getMethod(array $routes, $path) {
        // перебор всех маршрутов
        foreach ($routes as $route => $method) {
            // если маршрут сопадает с путем, возвращаем функцию
            if ($path === $route) {
                return $method;
            }
        }
    
        return 'notFound';
    }
    
    // функция для корня
    function hello() {
        return 'Hello, world!';
    }
    
    // функция для страницы "/about"
    function about() {
        return 'About us.';
    }
    
    // чуть более сложный пример
    // функция отобразит страницу только если
    // в запросе приходит id и этот id равен
    // 33 или 54
    // [/page?id=33]
    function page() {
    
        $pages = [
            33 => 'Сага о хомячках',
            54 => 'Мыши в тумане'
        ];
    
        if (isset($_GET['id']) && isset($pages[$_GET['id']])) {
            return $pages[$_GET['id']];
        }
    
        return notFound();
    }
    
    // метод, который отдает заголовок и содержание для маршрутов,
    // которые не существуют
    function notFound() {
        header("HTTP/1.0 404 Not Found");
    
        return 'Нет такой страницы';
    }
    
    
    // Роутер
    // получаем путь запроса
    $path = getRequestPath();
    // получаем функцию обработчик
    $method = getMethod($routes, $path);
    // отдаем данные клиенту
    echo $method();


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

    4. Обойтись без него можно. Если каждая страница в вашем приложении будет являться отдельным файлом, который отвечает за отдачу информации.
    index.php
    about.php
    contact.php
    ...


    Это олдскульная структура, в новых проектах почти не применяется.
    Ответ написан
    13 комментариев
  • Как диагностировать ошибку установки Laravel?

    Austin_Powers
    @Austin_Powers
    Web developer (Symfony, Go, Vue.js)
    Судя по тому, что написано в доках по ссылке:
    CURLE_COULDNT_CONNECT (7)
    
    Failed to connect() to host or proxy.

    и тому, что через прокси сайт cabinet.laravel.com возвращает ответ, это все еще проделки РКН
    Ответ написан
    6 комментариев
  • Как создать правильный SQL-запрос с группировкой и условием?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Начиная с MySQL 5.7 используется строгий подход к GROUP BY. Все поля в запросе должны либо входить в список полей, по которым идёт группировка, либо быть в агрегатной функции.
    Варианты решения:
    - переписать запрос с учётом стандарта;
    - использовать агрегатную функцию ANY_VALUE(), явно указав, что вам всё равно, какое из значений в объединяемых строках использовать;
    - вернуть старый режим работы MySQL через системную переменную sql_mode.
    Ответ написан
    Комментировать
  • Как создать правильный SQL-запрос с группировкой и условием?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    1. SELECT ... COUNT(b.lot_id) ... group by b.lot_id - всегда будет 1.
    Вряд ли вам нужна группировка по lot_id.

    2.
    WHERE NOW() BETWEEN l.created_date AND end_lot_date
    - не будет использовать индекс, лучше явно писать
    WHERE l.created_date <= NOW()  AND end_lot_date >= NOW()


    3. Когда вы пишите запрос с group by - любые выбираемые данные должны быть или явно указаны в group by, или обернуты какими-то аггрегирующими фунциями (count, avg, max, group_concat итд). Иначе SQL тупо не понимает что ему делать с этим.

    Приведу пример для наглядности:
    name  | age
    Петя  | 10
    Вася  | 10

    select age, name from ... group by age.
    В postgress/mssql/oracle это будет ошибка.
    MySQLс дефолтными настройками проглатывает такой запрос, отдавая кортеж в котором age = 10, а name = случайное значение из подходящих name.
    К счастью в MySQL есть замечательный параметр sql_mode который можно установить в only_full_group_by и все начнет работать как у взрослых. (что и произошло в вашем случае, судя по логу)
    Ответ написан
    2 комментария
  • Зачем использовать Vue вместе с Laravel?

    Добавили, чтобы вы jquery спагетти не использовали. Vue (как и другие js фреймворки) сокращает количество кода на клиенте и уменьшает его запутанность.

    Для примера вы создаете админку для магазина. У вас есть следующие варианты:
    1. Делать статическую страницу. На клиенте никакой логики, все вычисляет сервер. При новой покупке администратор должен будет обновить страницу.
    2. Писать динамический фронтэнд с использованием vue, angular и чего угодно остального. Бэкэнд шлет вам уведомления через вэбсокеты о новых заказах без перезагрузки страницы.
    2.1 Вы берете jquery и сначала все идет хорошо. Первые полчаса. Затем ваш код обрастает огромным количеством обработчиков событий. Если товар заканчивается на складе, его надо убрать из таблицы, затем если заказ отменяется, его надо вернуть в таблицу. Вы его вернули, но почему-то кнопка в строке с ним, вызывающая модальное окно перестала реагировать на события, потом еще что-то случилось и еще. Проблемы с jquery растут как снежный ком и вы проклинаете свое решение создать динамическую админку.
    2.2 Вы используете современный js фреймворк. Vue в этом плане хорош низким порогом изучения. Вы загружаете определенные обхекты и в зависимости от их свойств vue сам строит таблицы (с проданными и непроданными товарами), скрывает лишние элементы (не показывать такую-то кнопку, если товар всего 1), отправляет плагинам команды на обновление при изменении объектов и следит за тем, чтобы события, которые отваливались при jquery подходе работали.

    Я не сказать что спец в javascript, но (именно поэтому) меня vuejs на текущем проекте очень выручает.
    Ответ написан
    Комментировать
  • Как обновить composer через консоль OpenServer?

    webinar
    @webinar
    Учим yii: https://youtu.be/-WRMlGHLgRg
    переходите с посощью cd в папку domains/ваш сайт и запускаете
    composer self-update
    Ответ написан
    4 комментария
  • Какое расширение для файлов CSS установить в Visual Code?

    SKolt
    @SKolt
    https://www.instagram.com/seregamih/
    Тоже искал когда то подобное решение. Но всё что нашёл - Class Extractor

    Но он работает по другому принципу. Выделяешь нужный код HTML, вводишь команду Class Extractor, и в буфер копируются все имина выделенных классов сразу с точками и фигурными скобками.
    Ответ написан
    1 комментарий
  • Как уменьшить тормоза при использование Ubuntu на usb-флешке?

    nazarpc
    @nazarpc
    Open Source enthusiast
    Если вопрос именно о браузере и у вас есть достаточно широкий канал подключения к Интернет - я бы посоветовал полностью отключить дисковый кэш в настройках браузера. Это существенно снизит нагрузку на накопитель во время работы.
    Ответ написан
    Комментировать
  • Как верстают такой фон?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    И вообще может уже что-то появилось, чтобы не ставить жирные картинки в качестве бекграунда?

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

    Как верстают такой фон?

    Можно по-разному подходить к вопросу. Как вариант три слоя:
    1. Левый контент, у него фон в виде левого круга (чтобы не париться с его размером на разных размерах экрана - ведь там по идее контент должен помещаться в круг). Тут главное все аккуратно расположить и не забывать про critical css.
    2. Коптер (поскольку он жирный, его можно подгружать асинхронно и выдвигать с помощью CSS-анимации из-за правого края экрана - будет и красиво и производительно; я бы еще какой-нибудь эффект к тексту добавил, но это уже другая история). Его размер видимо должен зависеть от ширины экрана и размера контента слева. Надо заранее сообразить, как это все должно адаптивиться.
    3. Меню, которое справа вверху, оно должно быть поверх коптера (опять вопрос про адаптивность).
    4*. Фон, который самый-самый большой фон можно просто поставить на background у хидера. Поскольку он в векторе, его можно сделать гораздо выше, чем на картинке, чтобы опять же не париться, что он вылезет из скругления внизу секции на телефоне. Само это скругление можно сделать тысячей способов, на тостере уже не раз спрашивали.

    Такой подход требует больше времени, чем просто поставить все на фон у одного элемента, но и результат будет немного другого уровня.
    Ответ написан
    1 комментарий
  • На чем писать back-end в связки с Vue + mongodb?

    @eliastro
    Если предполагается, что бэк будет сложным, в котором будет много всего, или ожидается, что в будущем бэк будет активно дописываться, изменяться, то рекомендую писать на Ruby. В этом случае можно писать код быстро, используя уже готовые проверенные временем библиотеки(гемы), при этом код будет лаконичным, ясным и легко поддерживаемым в будущем. Если rest api, то можно выбрать фреймворк Ruby on rails 5 api mode. Связка с RoR+vue+mongodb отлично стекуется.
    Если бэк будет не сложным, то можно все что угодно.
    Если реалтайм, то nodejs или go.
    Ответ написан
    Комментировать
  • Как уменьшить тормоза при использование Ubuntu на usb-флешке?

    Sly_tom_cat
    @Sly_tom_cat
    .
    1. будьте готовы что флешка при длительном использовании на ней ОС достаточно быстро умрет. Мой опыт говорит о нескольких месяцах.
    2. help.ubuntu.ru/wiki/ubuntu_%D0%BD%D0%B0_usb - там перечислены способы оптимизации.

    PS совет про hdd/ssd - очень даже разумный.....
    Ответ написан
    Комментировать