• Какой механизм Laravel использовать?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Описание конечно весьма туманное и с использованием терминологии которая к Laravel как-то перпендикулярно... Есть контейнер - там регистрируются все ваши "компоненты", они же доступны "списком" из "любого места" и "на протяжении всего цикла работы приложения". Есть сервис-провайдеры, которые по сути и в том числе являются механизмом регистрации ваших "компонент" в контейнер (и как следствие - приложение). И есть еще куча других фич, которые наверняка заменят элементы ваших компонент, если вы разберетесь с внутренним устройством Laravel и начнете думать ее архитектурой.
    Ответ написан
    Комментировать
  • Как считать загрузки WordPress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    А сам файл загружаю в корень сайта

    Лично я файлы загружаю через админку как стандартные attachment. Прямо из нужных записей / post types. А поскольку attachment - это тоже post type, то в него можно писать post_meta, в котором и хранить количество загрузок.
    Ответ написан
    Комментировать
  • Как настроить цветовую схему для определенных слов/символов?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    В стандартной конфигурации - никак, символ "%" относится к категории "Operation sign", отдельно его покрасить нельзя. Если изучить джаву, то получится написать свой плагин, но значительно быстрее и проще забить и привыкнуть к тому, что есть.
    Ответ написан
  • Где найти тренера/наставника по wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Пример вопроса: сайт aviatech.carapax.ru, cms wordpress, theme salient. Fancybox на главной неадекватно ведут себя при изменении размера экрана. Как поправить?

    Это вопрос чисто по верстке, WordPress тут вообще ни при чем.

    Я менторил людей, но моя сфера - именно WP, бекенд, если фронт - то только специфичные для WP моменты. В этой области - всегда рад помочь советом, по мере наличия времени. Но на общий вопрос по html/js/css, если он никак не касается особенностей WP, я отвечать вообще не собираюсь. Для этого нужен ментор по html/js/css.

    Чтобы найти тренера/ментора/наставника, нужно сначала понять кто есть падаван, а кто есть наставник, какие их роли и тд. Ваш вопрос демонстрирует непонимание уровня отношений между наставником и учеником, поэтому потенциальный ментор, прочитав этот вопрос, просто пройдет мимо.
    Ответ написан
  • Вывод последних комментариев с учетом даты?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Функция get_comments() принимает целый вагон параметров, одним из которых является date_query, с помощью которого можно отфмльтровать по дате:
    $comments = get_comments([
        'status' => 'approve',
        'number' => 5,
        'date_query' => [
            'before' => 'now',
            'inclusive' => false,
        ],
    ]);

    ЗЫ: Код не тестировал, нет под рукой сайта с комментами. Должно работать, если нет - обратитесь к документации WP_Date_Query.
    Ответ написан
    1 комментарий
  • Могу ли я изменить плагин в wp?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    В официальной документации смотрели? Там куча интересных хуков, с примерами кода.
    Ответ написан
    Комментировать
  • Как изменить счетчик автоматического увеличения в MySQL на php?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Как изменить счетчик автоматического увеличения в MySQL

    ALTER TABLE table_name AUTO_INCREMENT = value;

    на php?

    Выполнить этот запрос из PHP.
    Ответ написан
  • Fork на github. Верно ли моё понимание?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Fork - это клон репозитория со всей историей и состоянием на момент его создания. При этом сохраняется связь с оригинальным репозиторием и можно по желанию синхронизировать данные в свой форк оттуда или же делать pull requests в оригинальный репозиторий.

    С какой целью вы делаете себе форк - дело десятое. Если код в оригинальном репозитории позволяет модификацию (open-source), можете с ним делать что хотите - затачивать под себя, разрабатывать фичу которую потом отправите в оригинальный проект и тд. Если делаете модификации чисто для себя - с авторами оригинального проекта ничего согласовывать не нужно. Если хотите фичу им предложить - тогда сначала заведите issue в оригинальном репозитории, обсудите если надо и потом делайте форк и предлагайте pull request.
    Ответ написан
    Комментировать
  • Laravel: как подготовить сервер к деплою?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Docker (если нравится технология, мне не очень) или Laravel Forge. А вообще настроить разок сервер не такая уж проблема, можно и поковыряться для общего развития. А сам деплой лучше не через чистый Deployer, а через https://github.com/lorisleiva/laravel-deployer. Кстати, у автора есть и Docker-контейнер для этого https://github.com/lorisleiva/laravel-docker (https://hub.docker.com/r/lorisleiva/laravel-docker)
    Ответ написан
    2 комментария
  • Какой из способов организации хранения адресов и данных паспорта выбрать?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Павел Чесноков дело говорит, а по сути:
    - User hasOne Passport / Passport belongsTo User (связь OneToOne)
    С адресами чуток сложнее, тут я бы сами адреса хранил отдельно через связь OneToMany, с дополнительным свойством type. А вот isAddressSimilar и isAddressPlaceOfStay - либо флагами в User, либо вообще динамическим свойством - например если записи адреса с типом place_of_stay не существует, то юзаем дефолтный (registration) или просто возвращаем false. Ибо хранить записи где все колонки кроме PK null это не ок.
    Ответ написан
    4 комментария
  • Как вывести определенное количество постов для произвольный типов записей?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Теперь в файле archive-portfolio.php я прописал цикл wp_query и указал вывести 10 записей. У меня всего их 10 шт.

    Не нужно так, это facepalm. У вас уже есть основной запрос, который возвращает 2 записи, а вы поверх колбасите новый запрос, чтобы вернуть 10. Выполняются оба. Для модификации основного запроса есть хук pre_get_posts:

    function modify_main_query( $query ) 
    {
        if ( is_admin() || ! $query->is_main_query() ) {
            return;
        }
    
        if ( is_post_type_archive( 'portfolio' ) ) {
            // Display 10 posts for a custom post type called 'portfolio'
            $query->set( 'posts_per_page', 10 );
            return;
        }
    }
    add_action( 'pre_get_posts', 'modify_main_query' );
    Ответ написан
    1 комментарий
  • Как передать все полученные ID через функцию для in_category?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    1. Никогда не выполняйте SQL-запросы (через функции типа get_term_my()) в цикле. Перед началом цикла получите все термины с помощью get_terms(), а дальше уже циклом по результатам идете и обращаетесь к term_id.
    2. Ну и да, Пычев Анатолий правильно написал - echo у вас там, а значит в if() проверки не будет, потому что проверка ожидает возврат результата true|false. А у вас void.
    3. К тому же, in_category() ожидает массив ID, который вы и так уже получаете с помощью get_term_children(), зачем получать термины целиком - непонятно.

    // 1. get_term_children() вернет массив ID терминов.
    $children_ids = get_term_children( 1, 'category' );
    
    // 2. in_category() как раз такой массив терминов и ожидает.
    if ( in_category( $children_ids ) ) {
        // 
    }


    Остальной код вам не нужен, по крайней мере не для этих целей.
    Ответ написан
    Комментировать
  • Как убрать конфликт плагинов в wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Uncaught TypeError: j$(...).appear is not a function
    Uncaught TypeError: j$(...).hasClass is not a function

    j$ - муть какая-то, которой не существует, соответственно у нее не существует функций appear, hasClass и любых других. Похоже на криво прикрученный jQuery и опечатки в коде.
    Ответ написан
    Комментировать
  • Как убрать из виджета WP посты по определенному тегу?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Есть только функция is_main_query(), которая позволяет отделить основной запрос от вторичных. Такого, чтобы определить, что запрос идет от виджета - из коробки не существует. Впрочем, можно создать свой виджет на базе существующего, и там уже вписать нужные условия в самом WP_Query
    Ответ написан
  • Что если пользоваться одной лицензией PhpStorm на разных ПК?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Ничего не будет, вы не нарушаете условия лицензии. Все это есть в FAQ на сайте JetBrains, который, кстати, обычно изучают до приобретения лицензии, а не после ;)

    https://sales.jetbrains.com/hc/en-gb/articles/2065...
    https://sales.jetbrains.com/hc/en-gb/articles/2072...
    Ответ написан
    3 комментария
  • Какой аналог для acf использовать для создания опции тем и повторяющийся полей?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Пересел на acf, но очень не хватает повторяющейся полей и опций для темы.

    В ACF Pro есть страницы опций и поле Repeater. Лицензия стоит божеских денег и она разовая (пока еще), не требует ежегодного продления.

    Нашел плагин подс, но судя по описанию, он не умеет этого делать.

    Умеет, но с Pods я бы лично не советовал вам связываться. Плагин хорош, но он developer first, требует достаточно много доработки напильником.

    Есть еще Metabox.io, но дополнительные фичи там тоже платные. Плагин тоже хорош, местами даже удобнее/приятнее ACF Pro, но если сравнивать все за и против, то ACF Pro с его pricing model + офигенной поддержкой Gutenberg побеждает, всегда.
    Ответ написан
    1 комментарий
  • Macbook Pro 13 2019 8gb vs 16 gb и 128gb vs 256gb?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Работа с документами и видеомонтаж это две совершенно никак не близкие задачи, разные миры и даже разные вселенные. Под первую вполне пойдет базовая комплектация, с запасом на много лет. Под вторую нужна топовая комплектация с дискретной видяхой, максимально большим SSD, максимально мощным CPU и максимальным количеством памяти. Под видеомонтаж вообще все должно быть максимально, если вы хотите делать это на ноутбуке. А в идеале вообще монтаж делается на десктопах, и там тоже все по максималке.

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

    Ну а так в целом - если бюджет позволяет (без боли, продажи органов или продажи себя в кредитное рабство более чем на 1 год) то лучше взять сразу 16Гб и 256Гб. 128 - совсем мало, система и приложения займут бОльшую половину, если захотите еще музыку какую-то локально хранить и фотки синхронизировать с iCloud, сезончик сериала залить в дорогу - все, место закончилось. Совсем закончилось. Это не беда (максимум - неудобно), если у вас iCloud с достаточным количеством места и вы всегда на хорошем инете, 24/7, 365 дней в году. Но даже в этом случае это может вылезти боком в первый же отпуск, где вам придется какое-то время быть оффлайн или на медленном и дорогом инете. Плюс, это постоянная перезапись запись на диск, насколько повлияет на длительность его жизни - хз.

    Если и на то, и на другое денег не хватит и надо выбрать одно - я бы брал больше SSD. 8Гб памяти для ежедневного использования достаточно, если не грузить ее специфичными приложениями.
    Ответ написан
    5 комментариев
  • Как создать определенный запрос?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Исходя из предположения, что это one-to-many, а даты - date вам нужен обычный JOIN и сравнение дат:

    SELECT * 
    FROM `products`
    JOIN `opportunities`
    ON `opportunities`.`product_id` = `products`.`id`
    WHERE `start_date` > '2019-07-01'
    AND `end_date` < '2019-08-01';
    Ответ написан
    Комментировать
  • Как выстроить правильную связь между сущностями в Laravel?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Я вам подробно ответил в другом вашем вопросе
    Ответ написан
    Комментировать
  • В Laravel все в БД должно быть сущностями?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    1. Enum'ы не очень ок, не используйте их. Потом рефакторить больше гемора чем удобства / пользы от них.
    2. Не все обязательно должно быть сущностями, но в основном да - так удобнее.
    3. В вашем случае в самой простой реализации это связь oneToMany - User hasMany Socials / Social belongsTo User (дополнительные данные хранятся в таблице socials):

    Таблица users: id | email | ...
    Таблица socials:
    id | user_id (foreign key) | external_social_id | title | ...


    Но здесь у вас будет дублирование всех данных по каждой соцсети - начиная от поля title и далее (а что там - зависит от проекта. Вполне возможно там еще API key может быть, иконку привязать, урл и тд). Поэтому такая БД не будет адекватно нормализована. Если по соцсети у вас будет более 1 поля name/title, то разумнее делать связь manyToMany с использованием pivot.

    Связь manyToMany - User belongsToMany Socials / Social belongsToMany Users (дополнительные данные расходятся по таблицам - все что уникально для Social в socials, все что касается связи - в pivot):

    Таблица users: id | email | ...
    Таблица socials: id | title | icon_path | ...
    Таблица social_user:
    social_id (foreign key) | user_id (foreign key) | external_social_id | ...


    В моделях:
    // User
    public function social()
    {
        return $this->belongsToMany(Social::class)->withPivot(['external_social_id']);
    }
        
    // Social
    public function user()
    {
        return $this->belongsToMany(User::class)->withPivot(['external_social_id']);
    }


    Если такая динамичная сущность связи со временем растет и усложняется, делаем из нее полноценную сущность, создавая свою модель (class SocialUser extends Pivot).
    Ответ написан
    Комментировать