• Вывод определенной информации на страницах с конкретными именами в адресе 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 комментарий
  • Как посчитать количество строк с group by'ом?

    vhood
    @vhood
    Не забывайте отмечать решения
    SELECT COUNT(1) FROM (
        SELECT class_a.id
        FROM class_a 
        LEFT JOIN `class_p` 
        ON `class_a`.id = `class_p`.p_id
        WHERE class_a.cat_id = 1
        AND (`caption`,`value`) IN (('type','1'), ('type_2','2')) 
        GROUP BY class_a.id 
        HAVING COUNT(DISTINCT caption, value) = 2;
    ) AS tmp
    Ответ написан
  • Как сделать двойной SELECT из одной и той же таблицы?

    vhood
    @vhood
    Не забывайте отмечать решения
    SELECT a.* FROM MY_TABLE a
    INNER JOIN MY_TABLE b
    ON a.COL_1 = b.COL_1 AND a.COL_2 = b.COL_2
    WHERE b.COL_3 = 4107575
    Ответ написан
  • Как правильно сформировать запрос и вывести данные в цикле?

    vhood
    @vhood
    Не забывайте отмечать решения
    Если "в лоб":

    1. Убираем группировку, никаких подгрупп база не выдаст, будет по 1 записи на "уровень"
    - $ref_system = $pdo->prepare("SELECT * FROM `db_ref_system` GROUP BY `rs_type` ORDER BY `id` ASC");
    + $ref_system = $pdo->prepare("SELECT * FROM `db_ref_system` ORDER BY `id` ASC");


    2. Фильтруем итоговый вывод в 3 массива и выводим их
    <?php
    $all = $ref_system->fetchAll();
    $plc = array_filter($all, fn ($fields) => $fields['rs_type'] === 'plc');
    $deposit = array_filter($all, fn ($fields) => $fields['rs_type'] === 'deposit');
    $offer = array_filter($all, fn ($fields) => $fields['rs_type'] === 'offer');
    ?>
    <?php foreach ([$plc, $deposit, $offer] as $level => $data): ?>
      <div class="col-md-4 col-12 mb-lg-0 mb-4">
        <div class="fw-bold h5 mb-3">
          <?= $level + 1 ?>-й уровень
        </div>
        <?php foreach($data as $ref) : ?>
        <div class="mb-4">
          <span class="text-muted fw-semibold"><?=$ref['rs_type']?></span>
          <div>
            <div class="d-flex align-items-center pt-2">
              <div class="progress w-100">
                <div class="progress-bar bg-warning" role="progressbar" style="width: 100%;" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100"></div>
              </div>
              <span class="ms-3 fw-bold text-warning"><?=$ref['rs_percent']?>%</span>
            </div>
          </div>
        </div>
        <?php endforeach; ?>
      </div>
    <?php endforeach; ?>
    Ответ написан
    5 комментариев
  • Как поменять часовой пояс в MYSQL Docker-контейнере?

    vhood
    @vhood
    Не забывайте отмечать решения
    mysql:
      environment:
        MYSQL_DATABASE: marzban
    +   TZ: Europe/Moscow
    Ответ написан
    4 комментария