Задать вопрос
  • Как вообще придумывать классы, и на что опираться?

    i__dmitry
    @i__dmitry
    Weaving a web
    Слова, часто используемые в CSS-классах: https://github.com/yoksel/common-words

    Название класса должно адекватно описывать элемент или блок, для которого класс вводится. Изучайте БЭМ, это лучший подход к именованию классов.
    Ответ написан
    1 комментарий
  • Как загрузить отношения вместе с удалёнными записями?

    @inFureal
    public function roles() {
        return $this->hasMany(Role::class)->withTrashed();
    }
    Ответ написан
    Комментировать
  • Как найти расстояние между двумя отрезками?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Назовём концы отрезка как A1-A2 и B1-B2
    Для начала проверьте вариант, когда отрезки пересекаются. В этом случае расстояние между ними равно нулю.
    Берём первый конец первого отрезка (A1). Опускаем перпендикуляр на прямую, построенную на втором отрезке. Получаем точку пересечения O. Если точка O лежит внутри второго отрезка, то берём расстояние A1O. Если нет, то берём минимальное из A1B1 и A1B2.
    Повторяем для точек A2, B1 и B2.
    Из четырёх полученных расстояний выбираем минимальное. Это и будет расстоянием между непересекающимися отрезками.
    Ответ написан
    Комментировать
  • Как исправить код работы с шаблонами?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Интересно, когда люди научатся читать документацию на функции, которые используют.
    Ну или хотя бы поинтересуются, что по-английски означает слово "once" ...
    Ответ написан
    3 комментария
  • Что означает "!!~"?

    E1ON
    @E1ON Куратор тега JavaScript
    Programming, Gamedev, VR
    https://developer.mozilla.org/en-US/docs/Web/JavaS...

    ~ Заменяет каждый бит операнда на противоположный.
    !! (Логическое НЕ) Возвращает false, если операнд может быть преобразован в true; в противном случае возвращает true.
    Ответ написан
    2 комментария
  • Что означает "!!~"?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Сокращалка, удобная для indexOf(), который возвращает -1 если не найдено, или индекс от 0 и больше.

    Для логики приложения часто бывает нужно узнать только, найдено или нет: т.е. -1 или иное значение. Можно просто сравнивать if (a.indexOf(b) > -1) { /* найдено! */ } но иногда хочется короче.

    Битовый оператор НЕ ~ хорош тем, что выделяет -1: только -1 с этим оператором даст 0. Прочие числа дадут какое-то ненулевое значение.

    ~(-1) === 0

    Остаётся привести значение из численного в булево. Для этого два воскл. знака — два логических НЕ.
    • для варианта «найдено» из числа от 0 и больше получилось тоже ненулевое число, и !! даст true
    • для варианта «не найдено» из -1 получится уникальный 0, и !!0 вернёт false
    Ответ написан
    4 комментария
  • В чем суть такой записи в reset.css?

    nowm
    @nowm
    Это специфичное для blockquote определение, которое Eric Meyer (автор reset.css) позаимствовал у Paul Chaplin. Первая строка content: "" делает так, чтобы у blockquote исчезли кавычки — на случай, если вторая строка content: none не поддерживается браузером, потому что первая строка — это CSS 2, а вторая — это CSS 2.1. В одну строку их записать нельзя, потому что по стандарту для свойства «content» нельзя комбинировать ключевые слова «normal» и «none» с другими значениями.

    Вообще, когда встречается перечисление одного и того же свойства с разными значениями, это делается для того, чтобы обеспечить совместимость с разными браузерами. То есть, если, например, браузер не поддерживает «content: none», он применит «content: ""», а другую запись проигнорирует.

    Обычно дублирующие записи располагаются в определённом порядке. Первой записью идёт самый плохой вариант, который должен сработать везде. Затем идёт вариант, который более полно описывает вашу цель. Пример:

    .some-class {
        background: #e66465;
        background: linear-gradient(#e66465, #9198e5);
    }


    В этом коде, если браузер поддерживает градиентный фон, он сначала прочитает, что нужно использовать цвет «#e66465», а потом это перезапишется записью «linear-gradient», и итоговое значение будет «linear-gradient(#e66465, #9198e5);». Если же браузер не поддерживает градиент, он сначала прочитает, что нужно использовать «#e66465», а потом увидит неподдерживаемое определение «linear-gradient», проигнорирует его, и итоговое значение будет «#e66465».
    Ответ написан
    Комментировать
  • Как избежать появления лишних табуляций и пробелов перед выражениями утверждений blade таких как if или foreach?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Laravel
    В контексте содержимого какой-либо строки не нужно добавлять отступы - приходится жертвовать читаемостью в пользу точности (а ещё бороться с IDE, которая может отступы сама добавлять при автоматическом форматировании). Ну или использовать вместо кастомных директив тернарные операторы:
    Вместо @if($bool) 42 @endif писать {{ $bool ? '42' : '' }}.

    А в контексте html-тегов эти лишние пробелы автоматически удаляются браузером. Например, вот такой код:
    <span>  One  </span>
           <span>
                   Two
    </span>

    будет отрендерен вот так:
    One Two
    Ответ написан
    Комментировать
  • Существует ли уязвимость многократных запросов в Laravel?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Существует, разумеется
    Это называется DOS-атакой и защита от нее делается не средствами фреймворка.

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

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    1. вызывать в самом методе close();
    2. вызывать в инициаторе, который вызывает метод close();
    3. из close выкидывать событие или window.postMessage() или ...

    Много технических способов, непонятны ваши ограничения.
    Ответ написан
    7 комментариев
  • Перезагрузка страницы с сохранением позиции на ней?

    Stalker_RED
    @Stalker_RED
    Можно js-скриптом слушать событие unload, запоминать скролл, и при загрузке страницы делать scrollTo.

    Ещё лучше - не перезагружать страницу, а подтягивать обновлённые данные через ajax.
    Ответ написан
    Комментировать
  • Есть какие-то поддерживаемые не онлаин карты?

    Stalker_RED
    @Stalker_RED
    Ответ написан
    Комментировать
  • Не могу открыть свой новый сайт - как починить?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    На репликацию изменений в доменных зонах может потребоваться до суток.
    Ответ написан
    Комментировать
  • Как сделать выравнивание img по горизонту, при вращении родителя?

    Gvoz1
    @Gvoz1
    Frontend разработчик
    Ответ написан
    Комментировать
  • Стоит ли тратить время на самописный клиент/sdk для какого то (rest) api?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Основной минус кодогенераторов в том что они за тебя думают. На типовых задачах все хорошо, но "внезапно" MS сменила механизм получения токена, и ты перед разбитым корытом. Из личного опыта.
    Ответ написан
    Комментировать
  • В чем идея и как работают шаблоны?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Идея шаблонов – держать HTML разметку отдельно и удобно.

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

    Простейший пример Twig мало чем отличается от обычного PHP:
    Шаблон hello.html.twig:
    Привет, {{ name }}!,
    и вывод в него типа
    echo $twig->render('hello.html.twig', ['name' => 'Хабр']);
    передаются имя темплейта и данные, которые там нужно подставить.
    В шаблоне обычно никаких вычислений, максимум простые циклы или условия.

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

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Вопрос очень хороший.
    А ответ на него очень простой.

    Шаблоны нужны для отделения логики приложения от логики отображения.
    Разделив их, мы получим сразу кучу выгод:
    • Нормальную структуру приложения, когда вывод начинается только после того, как отработала вся логика. То есть у нас никогда не будет проблем с ошибкой headers already sent, с возвратом json-а вместо html, с выводом в page header-е тех данных, которые появляются только в процессе работы скрипта
    • Мобильность - один и тот же движок можно будет использовать на нескольких сайтах, меняя только шаблоны, но весь код оставляя одинаковым. Что поможет, в частности, вносить обновления в движок и исправлять ошибки на всех сайтах разом.
    • Разделение труда - сейчас обычно над отображением работают фронтендеры, то есть, когда бизнес-логика отделена от шаблонов, то любой фронт сможет с ней работать


    Соответственно, главное, что надо знать про шаблоны - это то, что любой вывод в РНР скрипте начинается только после того, как отработала вся бизнес-логика.
    Также важно понимать, что в самом по себе смешивании "кода и разметки" ничего ужасного нет. В шаблоне всегда будет код. Без него невозможно выводить динамический контент. Важно только - какой это код, к чему он относится? Код в шаблоне должен относиться только к самому шаблону. На первых порах новичку сложно это отличить. И это еще один плюс специализированных шаблонизаторов.

    После этого есть варианты, которые отличаются в основном удобством работы с кодом шаблона.
    Править HTML код записанный в виде РНР строки - это САМЫЙ неудобный .

    Дальше идут всякие наколенные решения, типа
    бизнес-логика
    include header
    ?>
    хтмл конкретной страницы
    <?php include footer ?>

    или чуть более продвинутый, когда шаблоны хранятся отдельно и могут вкладывться друг в друга. Сначала пишем функцию,
    function render_template($filename, array $data = [])
    {
        ob_start();
        extract($data);
        require __DIR__ . '/' . $filename;
        return ob_get_clean();
    }

    а потом в коде страницы пишем
    бизнес-логика
    ...
    $page_html = render_template('page.tpl.php', [
        'data' => $data,
    ]);
    echo render_template('main.tpl.php', [
        'navigaton' => $nav_list,
        'title' => $title,
        'page' => $page_html,
    ];

    где сами шаблоны это
    ...
            <?php foreach ($navigation as $item): ?>
                <li>
                    <a href="<?= e($item['href']); ?>"><?= e($item['title']); ?></a>
                </li>
            <?php endforeach ?>
    Важно! Любой вывод в этих шаблонах должен экранироваться в обязательном порядке (кроме очевидных случаев, когда мы выводим результат рендера).

    Ну и наконец нормальные шаблонизаторы, из которых я горячо рекомендую Twig.
    Главное, что про него надо знать - даже самые зелёные нубы осваивают его без затруднений. И настоятельно рекомендую сразу перейти на него, после того как наиграетесь с решениями на коленке.
    Ответ написан
    9 комментариев
  • Как исправить ошибку 500 в Laravel?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Laravel
    Вы привели в вопросе весь код, кроме того, который реально нужен - PageController.
    Method App\Http\Controllers\PageController::national-students21 does not exist
    Это ошибка переводится как "метод national-students21 класса App\Http\Controllers\PageController не существует. Собственно, с таким именем он и не может существовать, это синтаксическая ошибка.

    Почитайте документацию: https://laravel.com/docs/8.x/controllers
    Ответ написан
    4 комментария
  • Как я могу посмотреть дефолтные настройки webpack из vue/cli?

    @resibe Автор вопроса
    19-летний пушистик
    В общем можно использовать yarn vue-cli-service inspect Илиvue inspectИли
    //package.json
      "scripts": {
        "inspect": "vue-cli-service inspect > current-webpack-settings.txt"
    }
    и yarn inspect
    Ответ написан
    Комментировать