torin-asakura / dream-team

Команда IT рекрутов Dream Team
https://dream-team.tech
1 stars 0 forks source link

Рефактор `WP` #125

Open Nelfimov opened 3 weeks ago

Nelfimov commented 3 weeks ago

С чем связан запрос на фичу?

Необходимо провести рефактор WP у сайта - сгруппировать блоки по функционалу и смыслу.

1 этап

Расскажите как вы это себе видите

https://wp.dream-team.tech/wp-admin

К выполнению рефактора в админке и в коде приступать только после согласования плана с @TorinAsakura @Nelfimov

Пометка для @TorinAsakura @Nelfimov - необходимо прогрейдить плагины админки до рефактора.

Приложите пример реализаций

WP drum-in

2 этап

3 этап

oksssvv commented 3 weeks ago

@Nelfimov

предположительная схема, как я это вижу глядя в диз и учитывая структуру:

далее внутри полей будет разделение на RU & EN, т.е. :


вопрос: как тебе структура? проверь пожалуйста

main, contacts & privacy-policy можно объекдинить в одну вкладку pages что бы в сайдбаре было аккуратнее т.е. во вкладках будут такие поля содержащие контент для заполненения сайта - pages, general-fragments

Nelfimov commented 3 weeks ago

Давай посмотрим на это с точки зрения разделения аналогично коду в наших фронт клиентах:

Последний пункт можно попытаться разбить на домены как мы это сделали в драмине - индивидуальные курсы и обычные курсы .

oksssvv commented 3 weeks ago

@Nelfimov

в таком случае не совсем понимаю как ты видишь будущую структуру, цель у нас какая? перевести на ACF + убрать переизбыток фрагментов в сайдбаре?

исходя из драм-ин структуры, будут вкладки в сайдбаре:

у них будут свои поля, в общих фрагментах, например, переиспользуемые contact-info, header и footer форму берем из нинзя поля настраиваем в AFC

я могу накидать структуру непосредственно в WP, не трогая уже работающие сущности, и посмотришь что как

Nelfimov commented 3 weeks ago

в таком случае не совсем понимаю как ты видишь будущую структуру, цель у нас какая? перевести на ACF + убрать переизбыток фрагментов в сайдбаре?

Да.

Для меня схема - ок.

@TorinAsakura посмотри плиз. С плагинами wp - ты начнешь а мы подхватим?

TorinAsakura commented 3 weeks ago

в таком случае не совсем понимаю как ты видишь будущую структуру, цель у нас какая? перевести на ACF + убрать переизбыток фрагментов в сайдбаре?

Да.

Для меня схема - ок.

@TorinAsakura посмотри плиз. С плагинами wp - ты начнешь а мы

@oksssvv сообщи как будешь готова - начну миграцию

oksssvv commented 3 weeks ago

@TorinAsakura а шо готовиться, могу в любое время заняться

TorinAsakura commented 3 weeks ago

@Nelfimov Вчера наш сервер атаковали через уязвимость в ВП на одном из сайтов, поэтому надо прогрейдить на наших ресурсах ВП до латеста.

На ДТ я почти закончил:

Осталось - прогрейдить gQL до последних версий

Я оставил их не тронутыми, так как плагины для gQL не паблятся через репозиторий ВП нам не видно что есть новые версии, поэтому нужно идти на гитхаб, брать свежие версии, накатывать, тестить что всё ок, после этого начинать рефакторинг.

Мне ещё минут 15 на дораскатку ACF Pro и можете забирать эстафету

TorinAsakura commented 3 weeks ago

Раскатал Polylang и ACF Pro. Полилэнг нужно подтьюнить под текущие нужды. Типы записей теперь живут в ACF. Развлекайтесь.

oksssvv commented 3 weeks ago

@Nelfimov

тебе нужно что то делать в WP или могу приступать?

Nelfimov commented 3 weeks ago

ACF можешь уже переносить.

Плагины для "общения" с кодом завтра сделаю.

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

oksssvv commented 3 weeks ago

@Nelfimov у меня ток вопрос как эти самые вкладки в сайдбаре создавать, а то еще со времен драм-ина этот секрет не раскрыт внутри вкладки поля я знаю как делать, а ее саму - нет

TorinAsakura commented 3 weeks ago

@Nelfimov

у меня ток вопрос как эти самые вкладки в сайдбаре создавать, а то еще со времен драм-ина этот секрет не раскрыт

внутри вкладки поля я знаю как делать, а ее саму - нет

Это типы записи. Посмотри раздел в ацф соответствующий, создай для наглядности тестовый по примеру и удали

Nelfimov commented 3 weeks ago

@oksssvv на всякий случай уточнюсь:

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

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

Это "Тип записи"

oksssvv commented 3 weeks ago

что сделано:

созданы типы записей > записи > поля > контент:

что осталось:

oksssvv commented 3 weeks ago

@Nelfimov

появились некоторые вопросы после внедрения новых данных в WP

  1. нужна ли 404? (там есть захардкоженый ру и ен контент)

  1. разобраться с переводами (нет кнопки "Добавить перевод" как в старых записях)

глядя в старые записи вижу функционал перевода image

ссылка в WP на новую Политику конфиденциальности

по схеме, которую я составила это должно было выглядеть как:

Вопрос: т.к. у нас есть плагин Polylang который дает функционал перевода записи ( запись у нас Контент в данном случае), то как я могу им воспользоваться? ориентируясь на предыдущую структуру в WP, это будет выглядеть таким образом:

Верно ли предполагаю и как добавить возможность перевода для созданных сою новых записей?

Nelfimov commented 3 weeks ago
  1. нужна ли 404? (там есть захардкоженый ру и ен контент)

Да.

  1. разобраться с переводами (нет кнопки "Добавить перевод" как в старых записях)

Позже проверю, возможно дело в плагинах

Nelfimov commented 3 weeks ago

Бэкап стабильного ACF

acf-export-2024-06-14-2.json

oksssvv commented 2 weeks ago

@Nelfimov

как отобразить новые записи в gql и получить их - я нашла

осталось:

![Снимок экрана от 2024-06-16 12-40-04](https://github.com/torin-asakura/dream-team/assets/126156026/13e4ee1d-2612-40bd-afb1-eba75c3f7da5)

после решения этих двух вопросов - буду готова к переносу кода на новые данные

Nelfimov commented 2 weeks ago

добавить иконки svg (нет прав для добавления)

Проверь, добавил плагин.

Если нет - добавить 2FA и попробуй еще раз.

разобраться с переводами (не отображается функционал перевода для новых записей)

Нужно создавать две записи для разных языков. Пример: https://wp.dream-team.tech/wp-admin/edit.php?post_type=hero_fragments

oksssvv commented 2 weeks ago

@Nelfimov

Нужно создавать две записи для разных языков. Пример: https://wp.dream-team.tech/wp-admin/edit.php?post_type=hero_fragments

Снимок экрана от 2024-06-17 12-04-09 Снимок экрана от 2024-06-17 12-05-05

я понимаю принцип как оно будет, но у меня нет этого функционала для записей (в отличии от старых)

действия:

вывод: не нашла добавление функционала перевода записи

вопрос: где я могу подключить возможность переводов новых записей?

местонахождение новых данных: сайдбар wp вкладки: Главная, Политика конфидейнциальности, Контакты, Общие фрагменты

Nelfimov commented 2 weeks ago

Включаешь тут: https://wp.dream-team.tech/wp-admin/admin.php?page=mlang_settings

Сделал для общих фрагментов.

image

Если что - документация

https://polylang.pro/doc/working-with-acf-pro/ https://github.com/BeAPI/acf-options-for-polylang

oksssvv commented 1 week ago

@Nelfimov

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

например, есть тип записи Not Found, в нем 2 записи RU и EN, эти записи не смотря на то, что поля у них с одинаковым названием должны иметь разные GraphQL Type Name (иначе в gql будет ошибка), из этого выходит что получение полей gql будет по разным названиям(например notFoundRu & notFoundEn)

поэтому функционал в gql ввиде поля Language > code (RU или EN) становится бесполезным, т.к. мы и так уже четко разделяем получение рускоязычного и англоязычного контента (т.е. нужно будет переписывать логику вытягивания ru и en в нынешнем коде)

вот пример как я вижу получение в такой ситуации:


query notFoundQuery {
  ru: notFound(id: "cG9zdDoxNTY1OQ==") {    
    notFoundRU {
      title
      textInButton
      subtitle
      description
    }
  }
  en: notFound(id: "cG9zdDoxNTY3MA==") {   
    notFoundEN {
      title
      textInButton
      subtitle
      description
    }
  }
}

^ или же можно разбить на 2 отдельных кверя, для РУ и ЕН

пример ответа:

``` "data": { "ru": { "notFoundRU": { "title": "404", "textInButton": "Вернуться на главную", "subtitle": "Страница не найдена", "description": "Такой страницы не существует, или она была удалена" } }, "en": { "notFoundEN": { "title": "404", "textInButton": "Go back to the main page", "subtitle": "Page not found", "description": "This page does not exist, or has been deleted" } } } ```

вопрос: такой подход подойдет? на замену сторому

получается что плагит polylang для кода не нужен, возможно только для явного разграничения записей на RU и EN в wordpress


вот пример как выглядел запрос 2х локалей ранее:


export const GET_RECRUITS = gql(`
  query GetRecruits {
    recruits {
      nodes {
        title
        featuredImage {
          node {
            mediaItemUrl
            title
          }
        }
        language {
          code           /* здесь мы получаем RU или EN что бы отфильтровать по нему данные */
        }
      }
    }
  }
`)

это конечно достаточно удобно, но я не нашла возможности также получить записи по одному пути как это сделано тут, возможно я что то упустила, и такое получение возможно с ACF, можешь меня поправить

TorinAsakura commented 1 week ago

@Nelfimov

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

например, есть тип записи Not Found, в нем 2 записи RU и EN, эти записи не смотря на то, что поля у них с одинаковым названием должны иметь разные GraphQL Type Name (иначе в gql будет ошибка), из этого выходит что получение полей gql будет по разным названиям(например notFoundRu & notFoundEn)

поэтому функционал в gql ввиде поля Language > code (RU или EN) становится бесполезным, т.к. мы и так уже четко разделяем получение рускоязычного и англоязычного контента (т.е. нужно будет переписывать логику вытягивания ru и en в нынешнем коде)

вот пример как я вижу получение в такой ситуации:

query notFoundQuery {
  ru: notFound(id: "cG9zdDoxNTY1OQ==") {    
    notFoundRU {
      title
      textInButton
      subtitle
      description
    }
  }
  en: notFound(id: "cG9zdDoxNTY3MA==") {   
    notFoundEN {
      title
      textInButton
      subtitle
      description
    }
  }
}

^ или же можно разбить на 2 отдельных кверя, для РУ и ЕН

пример ответа:

  • айдишники будут получаться из хука (который будет юзать квери)
  • во фрагменте будет использоваться хук, сам хук будет принимать переданную переменную Language, и в зависимости от нее отдавать данные из запроса RU или EN

вопрос: такой подход подойдет? на замену сторому

получается что плагит polylang для кода не нужен, возможно только для явного разграничения записей на RU и EN в wordpress

вот пример как выглядел запрос 2х локалей ранее:

export const GET_RECRUITS = gql(`
  query GetRecruits {
    recruits {
      nodes {
        title
        featuredImage {
          node {
            mediaItemUrl
            title
          }
        }
        language {
          code           /* здесь мы получаем RU или EN что бы отфильтровать по нему данные */
        }
      }
    }
  }
`)

это конечно достаточно удобно, но я не нашла возможности также получить записи по одному пути как это сделано тут, возможно я что то упустила, и такое получение возможно с ACF, можешь меня поправить

там ведь полиланг явно об этом говорит - на каждый объект локали создавать новую запись, а ты чо, пыталась это делать через поле в записях?

oksssvv commented 1 week ago

@TorinAsakura записи создавала, вот главная например: image

их поля заполнены RU и EN контентом (в зависимости от локали), но получить и RU и EN одному пути через gql я не могу, потому что в acf у записей нельзя выставить одинаковые названия для gql

вот, 2 записи 404-й страницы, одна на русском другая на анлгийском, поля с одинаковыми именами, контент отличается языком:

![Снимок экрана от 2024-06-24 11-08-41](https://github.com/torin-asakura/dream-team/assets/126156026/577f1221-1ee0-4bd1-9aa5-5cdc7f2f1c38) ![Снимок экрана от 2024-06-24 11-08-46](https://github.com/torin-asakura/dream-team/assets/126156026/f2657882-57c2-4e4d-9b58-dafadac3f592) вот как размещены в типе записи: ![image](https://github.com/torin-asakura/dream-team/assets/126156026/1c290d9c-7c49-4a2e-91df-0bb3470e281e)

GraphQL Type Name разные, а это значит что по одному пути их не получить, нужно будет вручную указывать хочу я получить notFound на русском или английском, можно это сделать указывая id записи, как показала в предыдущем комменте

TorinAsakura commented 1 week ago

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

Nelfimov commented 1 week ago

@oksssvv успех есть?