Найти в Дзене
IT-предприниматель

Разработка мультиязычного мобильного справочного сайта на React и Laravel. Часть №2

Оглавление

Добрый день, уважаемые читатели блога. Продолжаю рассказывать о своих успехах по создания справочного сайта для мобильного приложения, с использования React для front-end и Laravel для back-end.

Содержание цикла статей:

  1. Разработка мультиязычного мобильного справочного сайта на React и Laravel. Часть №2

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

Front-end на React

В предыдущие разы я начал разбираться с фреймворком, сделал AppBar и выкатывающееся меню.

Теперь я приступил к созданию основного экрана приложения. С этапа проектирования помним, как оно должно выглядеть

Макет основной страницы справочного сайта
Макет основной страницы справочного сайта

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

  • "start" — основное окно
  • "faq" — раздел с ответами и вопросами
  • "instructions" — раздел с инструкциями

Состояния (инструмент фреймворка React) выглядят примерно так для компонента App:

this.state = {type: "start", languages: []};

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

В макете выше видно, что на главная страница состоит из 4 элементов — заголовок, компонент с выбором языка, две ссылки на разные разделы.

Под содержание основной страницы я выделил отдельный компонент MainPage. С заголовком и ссылками на разделы всё просто, добавляем их в виде HTML и немного дописываем для них стили, чтобы они выглядели приятно. Компонент же выбора языка имеет смысл выделить в отдельный, так как этот компонент потом будет использоваться в других местах (в выкатывающемся меню).

Компонент выбора языка

По сути можно было использовать простой <select> элемент и не париться, но так как я наверняка захочу сделать внешний вид компонента более гибки для стилей и настройки внешнего вида, то от <select> я отказался, к тому же хочу, чтобы у каждого пункта списка был флаг страны языка, где он наиболее распространён, а в обычном <select>, насколько я знаю этого сделать нельзя.

Компонент и внешний вид выбора языка состоит из нескольких div'ов с анимацией появления списка для выбора. Всё это конечно же приправлено красивыми стилями. Не буду вдаваться в подробности программирования, но любой, кто знает HTML, CSS и немного JS справится с этим.

Стоит отметить, что хранить выбранный язык я буду в компоненте App в качестве одного из параметров состояния, чтобы менять выбранный язык для всего сайта, а не только внутри компонента выбора языка. В React это делается при помощи передачи функций в качестве props и их вызов при изменении языка, а уже в этой функции компонента App менять выбранный язык.

Вот как выглядит сейчас основная страница сайта:

Основная страница справочного сайта
Основная страница справочного сайта

А так выглядит компонент выбора языка, стоит отметить, что уже сейчас я сделал основное API, которое при помощи ajax-запроса обращается к серверу с данными и достает оттуда информацию о языках, на которых доступен сайт с изображениями флагов (об этом подробнее далее в статье):

Основная страница - компонент выбора языка
Основная страница - компонент выбора языка

По моему получилось очень даже неплохо в плане дизайна, но не исключаю в будущем каких-то изменений.

Back-end на Laravel

Стоит упомянуть и сервер данных с API для front-end'а, который я решил делать на PHP фреймворке Laravel, который предоставляет очень удобные инструменты для работы с БД и обработкой запросов. С этой технологией я опять же сталкиваюсь в первый раз и постепенно разбирался в процессе разработки (PHP конечно я знал и использовал до этого много раз, он имеет лишь некоторые отличия от других языков программирования. Как мне кажется, с пониманием как работают языки программирования изучить новый не составляет труда).

Laravel — довольно мощная штука, её я также буду использовать для административной панели сайта, чтобы иметь возможность изменять наполнение справочного сайта. Но в данной статье я рассмотрю его в качестве инструмента для работы с БД и предоставления API. Здесь также не будет подробного разбора самой библиотеки или её отдельных инструментов (если это требуется, то напишите в комментариях, дайте мне знать, какие вопросы стоит рассмотреть и я обязательно выпущу отдельные статьи).

Я установил одну из последних стабильных версий фреймворка — 6.2 и работал с ней. Скажу честно, что довольно сложно разобраться в таком обширном фреймворке, если ранее с ним не сталкивался. Но мне удалось себя заставить и шаг за шагом я изучил основные моменты. Что я сделал на данный момент:

  1. Создал модели данных
  2. Продумал и создал структуру БД при помощи Миграций
  3. Реализовал запрос к API, который возвращает список языков

С созданием моделей данных и миграциями не было никаких проблем, с этим помогает artisan и документация по фреймворку. К тому же, на данный момент у меня БД состоит из трех таблиц — Категории, Статьи, Языки. Стоит отметить, что мудрить с выбором СУБД (Систе́ма управле́ния ба́зами да́нных) я не стал и выбрал MySQL.

Соответственно все статьи будут иметь категории, и корневыми категориями как раз буду являться разделы сайта — Инструкции, FAQ (раздел вопросов и ответов)

Реализовать запрос к API после изучения Запросов (Request) и других особенностей фреймворка было довольно просто. Добавил пару строчек кода куда нужно и вуаля! Теперь мой front-end при помощи ajax-запроса асинхронно получает данные с сервера и отображает их в компоненте выбора языка.

Небольшими шагами, кропотливой работой я иду к своей цели и теперь сайт выглядит намного привлекательнее, кажется, что завершение работы уже недалеко, но это не совсем так. Теперь я думаю чем заняться дальше — разработать административную панель для создания и редактирования статей или продолжить работать над fron-end. Скорее всего это будет выбор в пользу административной панели, чтобы заполнить БД тестовыми данными своими руками (можно это сделать и программно, при помощи seeding в Laravel), всё равно рано или поздно административную панель сделать придется.

А вас прошу ставить лайки, писать комментарии, делиться статьей с друзьями, кого она может заинтересовать. А я буду продолжать писать эти душные статьи про процесс разработки ^_^, что ж, такова жизнь программиста.