Skip to content
This repository has been archived by the owner on Sep 11, 2024. It is now read-only.

Рефактор WP #125

Open
4 of 6 tasks
Nelfimov opened this issue Jun 10, 2024 · 26 comments
Open
4 of 6 tasks

Рефактор WP #125

Nelfimov opened this issue Jun 10, 2024 · 26 comments
Assignees
Labels
enhancement New feature or request

Comments

@Nelfimov
Copy link
Contributor

Nelfimov commented Jun 10, 2024

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

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

1 этап

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

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

  • проанализировать текущие сущности
  • подготовить план по рефактору

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

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

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

WP drum-in

2 этап

  • Добавить необходимые типы записей, записи, поля и заполнить их контентом
    • Главная
    • Политика конфиденциальности
    • Контакты
    • Общие фрагменты
    • 404
  • Для записей создать переводы на английский, заполнить контентом
  • Настроить отображение записей в gql

3 этап

  • внедрить контент новых записей в код
@Nelfimov Nelfimov added the enhancement New feature or request label Jun 10, 2024
@oxiqod
Copy link
Contributor

oxiqod commented Jun 11, 2024

@Nelfimov

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

  • main

    • hero
    • about
    • reviews
    • team
    • feedback

    (хедер, футер, и контактную инфу берем из general-fragments) а также форму

  • contacts

    • title
    • cta

    (хедер и контактную инфу берем из general-fragments) а также форму

  • privacy-policy

    • title
    • content
  • general-fragments

    • contact-info
    • header
    • footer

  • форма (есть в main & contacts страницах). Это будет нинзя форм? сущность отдельная от ^

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

  • main
    • hero
      • RU
        • заголовок
          • (IT и GameDev рекрутинг)
        • описание
          • (Метко подбираем IT-специалистов по всему миру, в том числе с релокацией за рубеж. Командное ведение вакансии без предоплаты с гарантией найма.)
        • текст в кнопке
          • (Оставить заявку)
      • EN
        • title
          • (IT & GAMEDEV RECRUITMENT)
        • descriprion
          • (We select IT-specialists from all over the world, including those with relocations abroad. Team management of vacancies without prepayment with a guarantee of employment.)
        • text-in-button
          • (contact us)

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

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

@Nelfimov
Copy link
Contributor Author

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

  • в страницах мы держим только seo
  • есть общие фрагменты shared повторяющиеся на страницах
  • есть уникальные фрагменты

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

@oxiqod
Copy link
Contributor

oxiqod commented Jun 12, 2024

@Nelfimov

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

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

  • общие фрагменты (shared фрагмент)
  • главная (уникальный фрагмент)
  • контакты (уникальный фрагмент)
  • политика конфиденциальности (уникальный фрагмент)

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

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

@Nelfimov
Copy link
Contributor Author

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

Да.

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

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

@TorinAsakura
Copy link
Member

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

Да.

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

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

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

@oxiqod
Copy link
Contributor

oxiqod commented Jun 13, 2024

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

@TorinAsakura
Copy link
Member

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

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

  • обновил ВП до латеста (+1 мажор)
  • обновил плагины (не все)
  • провёл оптимизацию типов записей и кастомных полей добавив ACF Pro (теперь так будет везде)

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

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

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

@TorinAsakura
Copy link
Member

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

@oxiqod
Copy link
Contributor

oxiqod commented Jun 13, 2024

@Nelfimov

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

@Nelfimov
Copy link
Contributor Author

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

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

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

@oxiqod
Copy link
Contributor

oxiqod commented Jun 13, 2024

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

@TorinAsakura
Copy link
Member

@Nelfimov

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

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

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

@Nelfimov
Copy link
Contributor Author

Nelfimov commented Jun 13, 2024

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

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

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

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

@oxiqod
Copy link
Contributor

oxiqod commented Jun 13, 2024

что сделано:

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

  • Главная
    • Баннер
    • О нас
    • Отзывы
    • Команда
    • Обратная свях
  • Контакты
    • Контент
  • Политика конфиденциальности
    • Контент
  • Общие фрагменты
    • Шапка сайта
    • Подвал сайта
    • Контактная информация

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

  • добавить недостающие медиафайлы (иконки, фоны, фотографии)
  • разобраться с переводами (нет кнопки "Добавить перевод" как в старых записях)
  • дозаполнить Общие фрагменты / Контактная информация / Социальные сети
  • нужна ли 404? (там есть захардкоженый ру и ен контент)
  • добавить GraphQL Field Name для полей после привязки gql в WP
  • по окончании заполнения WP - перевести сайт на новые данные

@oxiqod
Copy link
Contributor

oxiqod commented Jun 14, 2024

@Nelfimov

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

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

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

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

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

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

  • Политика конфиденциальности (тип записи)
    • Контент (запись)
      • RU (поле Группа)
        • Заголовок (поле Текст)
        • Текст (поле Текст)
      • EN (поле Группа)
        • Title (поле Текст)
        • Text (поле Текст)

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

  • Политика конфиденциальности (тип записи)
    • Контент (запись RU)
      - Заголовок (поле Текст)
      - Текст (поле Текст)
    • Content (запись EN)
      - Title (поле Текст)
      - Text (поле Текст)

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

@Nelfimov
Copy link
Contributor Author

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

Да.

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

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

@Nelfimov
Copy link
Contributor Author

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

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

@oxiqod
Copy link
Contributor

oxiqod commented Jun 16, 2024

@Nelfimov

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

осталось:

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

Снимок экрана от 2024-06-16 12-40-04

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

@Nelfimov
Copy link
Contributor Author

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

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

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

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

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

@oxiqod
Copy link
Contributor

oxiqod commented Jun 17, 2024

@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
Copy link
Contributor Author

Включаешь тут: 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

@oxiqod
Copy link
Contributor

oxiqod commented Jun 22, 2024

@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"
      }
    }
  }
  • айдишники будут получаться из хука (который будет юзать квери)
  • во фрагменте будет использоваться хук, сам хук будет принимать переданную переменную 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, можешь меня поправить

@TorinAsakura
Copy link
Member

@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, можешь меня поправить

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

@oxiqod
Copy link
Contributor

oxiqod commented Jun 24, 2024

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

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

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

Снимок экрана от 2024-06-24 11-08-41

Снимок экрана от 2024-06-24 11-08-46

вот как размещены в типе записи:
image

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

@TorinAsakura
Copy link
Member

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

@Nelfimov
Copy link
Contributor Author

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

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants