• Как реализовать склонения слов после чисел в исходном коде php?

    vhood
    @vhood
    Не забывайте отмечать решения
    Не ломать голову и использовать готовый инструмент

    Пример из README (только на русском):
    echo Carbon::now()->subMinutes(2)->locale('ru_RU')->diffForHumans(); // '2 минуты назад'

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

    vhood
    @vhood
    Не забывайте отмечать решения
    Можно использовать массив с названиями подключаемых файлов и перемешивать его с помощью shuffle перед выводом.
    Выводить в цикле.
    $files = [
        'file-foo.php',
        'file.php',
        'file2.php',
        'file-bar.php',
        'file3.php',
    ];
    shuffle($files);
    
    foreach  ($files as $file) {
        include ($file);
    }


    Если файлов много, 10 файлов можно подключать, выбрав срез массива имен файлов
    foreach  (array_slice($files, 0, 10) as $file) {
        include ($file);
    }

    Однако операция shuffle для большого массива может быть затратной, по-этому вместо shuffle и array_slice можно воспользоваться array_rand
    - shuffle($files);
    
    - foreach  ($files as $file) {
    + foreach  (array_rand($files, 10) as $file) {
        include ($file);
    }
    Но array_rand не подойдет, если нужно сделать некую пагинацию (выводить первые 10 случайных файлов, затем следующие 10 других случайных файлов и в итоге вывести все файлы в случайном порядке, а затем поменять порядок и снова выводить по 10). Подход с array_slice позволит сделать такую пагинацию.
    Ответ написан
    2 комментария
  • Как добавить файлы из дирректории в папку контейнера с помощью volume?

    vhood
    @vhood
    Не забывайте отмечать решения
    Если директория App не пустая и в нее нужно что-то добавить с помощью volume, то придется указывать volume для каждого такого файла или директории, которую нужно добавить.

    На практике пробрасывают volume на пустые папки или полностю перезатирают.
    Ответ написан
    1 комментарий
  • Как локализовать дату регистрации пользователя wordpress?

    vhood
    @vhood
    Не забывайте отмечать решения
    $datetime = new DateTime($user_reg);
    + $formatter = new IntlDateFormatter('ru_RU');
    + $formatter->setPattern('d MMM, Y');
    
    - echo $datetime->format('F j, Y');
    + echo $formatter->format($datetime);


    Должен быть установлен модуль php-intl
    Ответ написан
    Комментировать
  • Wordpress: как избавится от PHP Notice?

    vhood
    @vhood
    Не забывайте отмечать решения
    prepare - это "подготовить", а "подготавливают" некий шаблон, в который потом пробрасывают значения. "Подготавливать" без значений некорректно.

    - $wpdb->get_var($wpdb->prepare('SELECT user_registered FROM '.$wpdb->users.' WHERE ID="'.$id.'"'));
    + $wpdb->get_var('SELECT user_registered FROM '.$wpdb->users.' WHERE ID="'.$id.'"');


    Однако, выглядит это не безопасно (как минимум, $id не типизирован). По-этому лучше пробросить его в prepare

    $wpdb->get_var(
        $wpdb->prepare("SELECT user_registered FROM $wpdb->users WHERE ID=%d", $id)
    );
    Ответ написан
    8 комментариев
  • Вывод определенной информации на страницах с конкретными именами в адресе URL с помощью strpos?

    vhood
    @vhood
    Не забывайте отмечать решения
    Просто добавить логики в условие.

    В PHP 8 есть str_contains

    if (!str_contains($url, '/info/') && !str_contains($url, '/news/')) {
        echo 'вывод содержимого';
    } else {
        echo 'вывод содержимого';
    }
    Ответ написан
    1 комментарий
  • Как при использовании регулярных выражений игнорировать пустые строки?

    vhood
    @vhood
    Не забывайте отмечать решения
    Так? "Admin Phone:[ \t]*(.+)"g
    https://regex101.com/r/TiNjZ7/1
    Ответ написан
    Комментировать
  • Как создать Сайт на 3-х языках?

    vhood
    @vhood
    Не забывайте отмечать решения
    Гораздо эффективнее продвигать разные домены
    site.com
    site.ru

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

    Но есть и примеры успешной реализации в директории stie.com, site.com/ru/, с таким работать сложнее, зато ссылочная масса и посещаемость будет общая.

    Поддомены en.site.com, ru.site.com оптимизировать будет сложнее всего, в политике google это скорее сайт с другой тематикой (например, news.site.com - не плохая практика, иначе придется доказывать индивидуальность сайта разными ссылочными массами и т.д.), к тому же поддомен может потянуть вниз основной домен, ошибки одного повлияют на остальных.
    Ответ написан
    Комментировать
  • Почему не работает skipOnEmpty для required?

    vhood
    @vhood
    Не забывайте отмечать решения
    Попробуйте указать что для Вас означает "пустое значение"
    ['column', 'required', 'isEmpty' => fn ($value) => $value !== null && empty ($value)]
    Ответ написан
    Комментировать
  • Как правильно разделить frontend и backend на проекте с переездом на другой стек?

    vhood
    @vhood
    Не забывайте отмечать решения
    Переписывать лучше постранично, т.е. реализовывать по одной странице на React, подключать на тестовом сервере, тестировать и заливать в прод. Таким образом все будут видеть, что работа идет, а в проекте не будет мешанины.

    Алгоритм постраничного переписывания зависит от того, как сейчас реализовано. Если используется BitrixVue или Inertia, то нужно реализовать новые API на Laravel, иначе можно и старые дергать.

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

    vhood
    @vhood
    Не забывайте отмечать решения
    На фронтенде это куки, localStorage, но как только пользователь почистит браузер или использует другой или еще что-то такое, он будет вынужден снова ставить эти галочки. Более корректно хранить данные в базе и запрашивать бэкенд.
    Ответ написан
    1 комментарий
  • Как спрятать файлы через gitignore, чтобы заходя в мой репозиторий не видели файлы проекта но могли открыть проект (сайт) по ссылке?

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

    git rm --cached index.html

    Если сайт хостится через GitHub Pages, то как раз index.html из репозитория и считывается для этого. Если удалить index.html, никакой сайт никто не увидит. Хотите сделать сайт с закрытым кодом - храните код в приватном репозитории и показывайте через платный хостинг.
    Ответ написан
    3 комментария
  • Как уместить кроссбраузерную поддержку в одну строку?

    vhood
    @vhood
    Не забывайте отмечать решения
    пользуйтесь постпроцессором, который все проставит
    Ответ написан
    Комментировать
  • Как выделить в группу повторяющееся выражение?

    vhood
    @vhood
    Не забывайте отмечать решения
    Что-бы одна и та же группа в шаблоне сработала в нескольких местах, должно быть несколько match (что-бы каждое такое место обрабатывалось регуляркой "с нуля", как-бы).
    В регулярках есть разные движки, теоретически тут можно было бы запустить рекурсию, или поработать с динамическими данными в lookahead/lookbehind, но в python, как я понял, не так уж много фич поддерживается.

    Решить в каком-то динамическом виде у меня не получилось. В итоге я скопипастил паттерн некого "хвоста" строки, которая начинается со start (четвертый пример таким образом отпадет) (?:,?\s*(?:(\"[^\"]*\")))? по несколько раз и получил нужный результат (т.е. несколько групп будет в рамках одного match, да и количество групп поддерживается не больше количества скопированного шаблона). Попробовал сократить через DEFINE, но он тоже не поддерживается, видимо. Сделать этот "хвост" именованной группой и использовать ее тоже не получится, т.к. содержимое разное.
    Убрать всякие запятые из match так, как это происходит со start, тоже не удастся - lookahead в python не поддерживает квантификаторы.

    Как-то так: https://regex101.com/r/7eVJFt/4
    Ответ написан
    1 комментарий
  • Функция str_replace() не работает?

    vhood
    @vhood
    Не забывайте отмечать решения
    html_entity_decode()

    https://onlinephp.io/c/9d203 (при работе с этой строкой, учтите, что в строке есть кавычка)
    Ответ написан
    4 комментария
  • Как исправить HEAD detached?

    vhood
    @vhood
    Не забывайте отмечать решения
    Он перешёл на предпоследнюю ветку и не удаляя последнюю, закоммитился
    что еще за "последние" и "предпоследние" ветки, какие-то новые понятия в git?

    Как соединить коммиты и исправить ситуацию?
    в ветке main сделать (на выбор):
    • git reset --hard origin/main, тогда main станет соответстовать origin/main, но коммиты e32d4e8 и 690c2b9 пропадут, но не из истории, так что их можно будет подтянуть: git cherry-pick e32d4e8, git cherry-pick 690c2b9
    • git reset --soft origin/main, посмотреть git status и сделать новые коммиты
    • git rebase origin/main, тогда коммиты e32d4e8 и 690c2b9 начнут применяться заново, начиная с коммита 69805c1 (в ходе применения могут возникать конфликты, а так же у применяемых коммитов будет новый хэш)
    • git rebase -i origin/main (интерактивный ребейз), почти то же самое, как предыдущее, но сначала откроется текстовый редактор (который в git указан как редактор по умолчанию) и в нем можно будет указать как именно делать ребейз, например можно будет не переность коммит 690c2b9 или изменить сообщение коммита
    Ответ написан
    2 комментария
  • Как вставить код с gist в публикацию на Хабре?

    vhood
    @vhood
    Не забывайте отмечать решения
    Нажать / и выбрать "Медиаэлемент", ссылка должна быть на конкретный файл

    https://gist.github.com/Shubin-vadim/a74b3edaa3b73834cf05cfaf3ba6142e#file-functions-mojo
    Ответ написан
    Комментировать
  • Регулярное выражение поиск по группам или нет?

    vhood
    @vhood
    Не забывайте отмечать решения
    preg_match()
    $str = "$status['Совершенно_новое'] = 'Brand_new<br>New'";
    $pattern = "(?<=\$status\[')([а-яА-ЯёЁa-zA-Z]+?.*')([A-za-z]+?.*)(?=')";
    preg_match($patern, $str, $matches);
    
    var_dump($matches);
    // полный match и группы


    Паттерн получше: \$status\['([^']+)'\][^']*'([^']*)'
    https://regex101.com/r/10CLSM/1
    Ответ написан
  • Как подружить html с json?

    vhood
    @vhood
    Не забывайте отмечать решения
    HTML - язык разметки, никакие значения он не меняет
    Ответ написан
    Комментировать
  • Переписать грамотнее и с помощью Laravel реально ли и каким лучше образом?

    vhood
    @vhood
    Не забывайте отмечать решения
    Выводить HTML через echo точно не правильно, изначально PHP полюбили как раз за то, что можно закрыть PHP тег ?> и писать чистый HTML, можно посреди HTML открыть PHP тег <?php и воспользоваться языком, например вывести HTML в цикле (опять же, закрыв тег после начала цикла), или использовать переменную как значение, или выводить HTML по условию.

    В Laravel используется шаблонизатор Blade, но если есть ощущение, что Laravel изучать еще рано, можно через composer поставить какой-нибудь самостоятельный шаблонизатор (искать не сложно) и научиться пользоваться им.

    тут всякие визуальные уточнения страницы; форма, css специфика для страницы
    css стоит писать отдельно и подключать как файл/файлы, для формы будет отдельный шаблон

    тут всякие оперативные реакции на действия в браузере требуемые страницей.
    js тоже стоит писать отдельно и подключать как файл/файлы

    Работа с шаблонами - не самое востребованное знание, скорее очень базовое. Стоит так же изучить:
    • Архитектурный паттерн MVC (Model, View, Controller), т.к. его все популярные фреймворки реализуют и с ним так или иначе придется работать
    • Базы данных и SQL. Обязательно нужно уметь проектировать таблицы и индексы, забирать данные из базы и обновлять их
    • Безопасность, или как правильно писать приложения, что-бы их не взломали SQL инъекциями, XSS атаками и т.д.
    • Маршрутизацию. Можно попробовать найти какой-нибудь php-router на github и изучить работу с ним, внедрить в проект

    Таким образом, приложение будет обрабатывать запрос через некий роутер, посылать его в контроллер (буква C из MVC), контроллер запросит данные в какой-нибудь модели (M), отправит их в шаблон некого шаблонизатора и вернет с его помощью готовый HTML.

    После этого можно будет написать такое же приложение на Laravel, где все это уже есть (и даже больше, разумеется), познакомиться с ActiveRecord (объект, который представляет строку в базе данных) и ORM (для построения запросов). Перед началом стоит прочитать всю документацию, изучить возможности.

    Так же добавлю, что первую работу лично я нашел без знания фреймворков, но хорошее знание языка и баз данных, а так же знания HTML, CSS и базовые знания JS - обязательно. Да и без фронтенда динамичный сайт не сделать, но начать изучение фронтенда лучше всего с изучения чистого javascript, т.к. знание языка важнее и открывает правильную дорогу дальше. А вот на каком этапе изучения останавливаться и куда больше делать упор - решать Вам.
    Ответ написан
    1 комментарий