Автор: Деннис Муася

Это руководство научит вас создавать внешний и внутренний интерфейс школьного веб-сайта с использованием Strapi API, HTML, CSS и Vanilla Javascript. В нем не будет никаких рамок. Учитывая целевую аудиторию, дизайн будет простым и лаконичным. В этом посте я расскажу о школьном веб-сайте, который я создал с помощью бэкэнд-сервисов. Раньше я работал с локальными данными JSON, и мне сложно обновлять и удалять материал.

Strapi — это бесплатная Headless CMS с открытым исходным кодом, которая позволяет быстро и легко разрабатывать API и управлять контентом. Вы узнаете, как использовать ванильный JavaScript и Strapi CMS для создания школьного веб-сайта.

Предпосылки

Прежде чем мы начнем, убедитесь, что на вашем компьютере установлено следующее.

  • Node.js: поскольку NPM и Strapi построены на Nodejs, это первый инструмент, который вам понадобится. Загрузите его с этой страницы. Необходимая версия NodeJS варьируется от 14.19.1 до 16.x.x.
  • NPM: это менеджер пакетов для Node. Двоичный файл Nodejs включен в него. Нужна версия NPM ›= 6.x.
  • IDE: интегрированная среда разработки, такая как Microsoft Visual Studio Code, Android Studio и Sublime Text.
  • Базовое понимание асинхронного JavaScript.

Что такое REST API?

REST API, часто называемый RESTful API, делит транзакцию на несколько крошечных компонентов. Каждый модуль имеет дело с фундаментальным аспектом транзакции. Хотя эта модульность предлагает разработчикам большую свободу, разработчикам может быть сложно создать REST API с нуля. Некоторые компании уже предоставляют модели для использования разработчиками; наиболее популярны модели, предлагаемые Strapi. Команды используются RESTful API для доступа к ресурсам. Представление ресурса — это состояние ресурса в любой конкретной метке времени.

REST API в Strapi обеспечивает доступ к различным типам контента через конечные точки API. Когда тип контента создается с помощью Strapi, автоматически создаются конечные точки API. При выполнении запроса к конечной точке API можно использовать параметры API для фильтрации результатов. При использовании REST API по умолчанию нет отношений, медиа-полей, компонентов или динамических зон. Заполните определенные поля, используя аргумент заполнения.

Как читать документы

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

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

Наконец, ознакомьтесь с кодом. Одного чтения документации, вероятно, будет недостаточно, чтобы понять, что делает программа. Небольшой взгляд на исходный код может оказать существенное влияние. Используйте каждый фрагмент кода, копируя его, читая и определяя, что он делает. Попробуйте код самостоятельно, чтобы увидеть, как он работает. Начни заново. Разбить его. затем выберите разрешение.

Как работать с CMS Strapi

Используйте эту ссылку GitHub, чтобы клонировать веб-сайт школы. Последним шагом является добавление общих файлов JavaScript для доступа к данным из Strapi. Чтобы сохранить веб-сайт школы, решите, куда его поместить на вашем компьютере.

  1. На своем терминале введите следующую команду:
git clone https://github.com/Dmuasya/SchoolWebsiteStrapi.git
  1. После завершения клонирования измените каталоги на школьный веб-сайт.
cd SchoolWebsiteStrapi
  1. Введите следующий код в терминал, чтобы создать новое приложение Strapi во внутренней папке.
npx create-strapi-app backend --quickstart

Это приводит к созданию нового приложения Strapi в бэкэнд-папке. Флаг —quickstart указывает Strapi использовать SQLite в качестве предпочтительной базы данных. Когда предоставляется возможность использовать другую базу данных, опустите флаг и вместо этого выберите эту базу данных.

Время, необходимое для завершения установки, будет зависеть от того, насколько быстро работает ваша сеть.

  1. После этого запустите следующий фрагмент, чтобы запустить Strapi в режиме разработки.
strapi develop

Вы должны увидеть, как ваш браузер запускается по адресу http://localhost:1337/admin/auth/register. Если нет, вручную запустите предпочитаемый браузер. Он отобразит форму регистрации, аналогичную приведенной ниже.

  1. Теперь введите свои данные в форму. Этот шаг важен для последующих входов в панель администратора. Теперь ваша панель инструментов должна выглядеть так:

На этой странице ваши API перечислены в верхнем левом углу. На данный момент он должен содержать только Users API.

  1. Чтобы создать конечную точку оценки, выберите «Конструктор типов содержимого» на боковой панели.
  2. После перенаправления выберите «Создать новый тип коллекции» и дайте ему отображаемое имя «Оценка». Несмотря на то, что этот термин используется в единственном числе, Strapi по умолчанию ставит его во множественное число. Модальный экран должен выглядеть так:

Добавить новую оценку

Поля для этой коллекции можно выбрать на новом экране, который должен появиться после нажатия «Продолжить». В списке выберите поле «Текст», затем дайте ему имя.

При создании новой оценки убедитесь, что эта информация является обязательной, выбрав «Дополнительные параметры» и установив флажок «Обязательное поле».

Вы закончили создание конечной точки оценок.

Структура HTML со значимыми классами

HTML — это мощный инструмент, который дает вашему коду сверхвозможности, если вы хотите его использовать. Встроенные в HTML варианты поведения позволяют сократить объем явного кода, который необходимо использовать. Организовав свои документы так, чтобы они хорошо работали и хорошо выглядели, вы можете сделать свой контент доступным для большего количества людей и программного обеспечения.

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

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

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>School Website - Strapi CMS</title>
   <link rel="stylesheet" href="css/minified/style.min.css">
   <script
   src="https://kit.fontawesome.com/fc31dedf63.js"
   crossorigin="anonymous"
 ></script>
</head>
<body>

 <!-- Modal on page load -->
 <div class="modal" id="modal-one" aria-hidden="true">
   <div class="modal-dialog">
       <div class="modal-header">
            <h2>Namaste !</h2>
<a href="#modal-one" class="btn-close" aria-hidden="true">×</a>

       </div>
       <div class="modal-body">
           <p>This is the Moi Forces Academy  Website but it's <br />

By following the few straightforward guidelines below, we can maintain our code well-organized.

  • The indentation of nested elements is required.
  • For elements, attributes, and values, lowercase is preferred.
  • Use either single or double quote marks, but be sure you use them both consistently.
  • It is recommended to ignore the Boolean attribute values for complete organization.

When we decide on a technique that we like. It must be adhered to strictly, applied everywhere, and kept separate.

<!-- acheivements section -->

    <section class="achieve">

      <!-- achieve container -->
      <div class="achieve__container">
        <h1 class="achieve__h1"></h1>
        <div class="achieve__section">
          <div class="achieve__sectionList">
            <img class="achieve__imgIcon" src="./img/ach1.png" alt="achieveIcon" />
            <h3 class="achieve__h3"></h3>
            <p class="achieve__p"></p>
          </div>

          <div class="achieve__sectionList">
            <img class="achieve__imgIcon1" src="./img/ach2.png" alt="achieveIcon" />
            <h3 class="achieve__h31"></h3>
            <p class="achieve__p1"></p>
          </div>

          <div class="achieve__sectionList">
            <img class="achieve__imgIcon" src="./img/ach3.png" alt="achieveIcon" />
            <h3 class="achieve__h32"></h3>
            <p class="achieve__p2"></p>
          </div>

          <div class="achieve__sectionList">
            <img class="achieve__imgIcon" src="./img/ach4.png" alt="achieveIcon" />
            <h3 class="achieve__h33"></h3>
            <p class="achieve__p3"></p>
          </div>

        </div>
      </div>
      <!-- End achieve container -->

    </section>

    <!-- End acheivements section -->

И последнее, но не менее важное: хотя встроенные стили сначала кажутся более простыми, на самом деле они требуют большего обслуживания и добавляют к строке кода. Если мы используем внешнюю таблицу стилей, мы можем повторно использовать наш код. Единую внешнюю таблицу стилей также можно использовать для оформления всех наших страниц.

DOM в JS, синтаксисе ES6 и модулях ES6

Объектная модель документа (DOM) представляет объекты, составляющие структуру и содержимое веб-документа (DOM), в виде данных. Он иллюстрирует, как использовать API для создания веб-сайтов и веб-приложений, а также то, как HTML-документ представляется в памяти.

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

import { localhost } from "./../../adminUrl.js";

export const Blog = async () => {

  try {

      const url = `${localhost}/eventsblogs?_sort=id:DESC`;
      const ftch = await fetch(url);
      const data = await ftch.json();
      const result = data;
      //console.log(result[0].content);

  
      for (let i in result) {

          const container = document.querySelector(".blog__container");

          const dv = document.createElement("div");
          dv.classList = "blog__single";

          const img = document.createElement("img");
          img.classList = "blog__img"
          img.src= `${result[i].thumbnailimg.url}`;

         
          const heading = document.createElement("h1");
          heading.classList = "blog__heading";
          heading.textContent = `${result[i].title}`;

          const desc = document.createElement("p");
          desc.classList =" description";
          desc.textContent = `${result[i].description}`;

          const date = document.createElement("p");
          date.classList ="date";
          date.textContent = `${result[i].date}`;

         const hrf = document.createElement("a");
         hrf.classList = "below";
         hrf.textContent = "Read More Below:";
       

          const readmore = document.createElement("div");
          readmore.classList = "readmore";
          readmore.textContent = `${result[i].content}`;


          const hr = document.createElement("hr");
         
          dv.appendChild(img);
          dv.appendChild(heading);
          dv.appendChild(desc);
          dv.appendChild(date);
          dv.appendChild(hrf);
          dv.appendChild(readmore);
          dv.appendChild(hr);
        

          container.appendChild(dv);     
     
      }

  }
 
  catch(error) {
      console.log("failed", error);
  }
  }

Объявления импорта и экспорта необходимы для использования собственных модулей JavaScript. Представьте себя в ситуации, когда вам нужно повторно использовать некоторый код JavaScript. На помощь приходит концепция модулей ES6.

Каждый модуль соответствует корпусу кода JavaScript. Модули содержат как функции, так и переменные. Модуль — это не что иное, как сегмент кода JavaScript, записанный в файле. Внутренние переменные и функции модуля по умолчанию недоступны. Экспортируя их из модуля, можно получить доступ к переменным и функциям из других файлов. В ES6 модули могут работать только в строгом режиме. Это означает, что любые переменные или функции, определенные в модуле, не будут доступны глобально.

Модули для SASS (SCSS) и BEM Convention

Sass — самый продвинутый, надежный и эффективный язык расширений CSS в мире. Благодаря интеграции внутренних возможностей Sass в модульную систему теперь у нас есть полный контроль над глобальным пространством имен. Перед использованием встроенные модули math, color, text, list, map, selector и meta должны быть вручную импортированы в файл.

.blog {
    margin-top: 7rem;
    margin-left: 7rem;
    margin-right: 7rem;
    margin-bottom: 3rem;
}

.blog__h1 {
    // text-align: center;
    font-size: 2.3rem;
    margin-bottom: 5rem;
}

.blog__img {
    object-fit: cover;
    width: 40%;
    height: 230px;
    border-radius: 21px;
    margin-bottom: 2.5rem;
}

.blog__heading {
    margin-bottom: 1rem;
}

.description {
    max-width: 85ch;
    margin-bottom: 0.5rem;
}

.date {
    margin-bottom: 0.4rem;
    font-size: 1.3rem;
    color: blueviolet;
}
.below {
    // margin-bottom: 0.6rem;
    background-color: burlywood;
    color: #fff;
    padding: 0.2rem;
    font-size: 1rem;
    margin-top: 2rem;
}

.readmore {
    margin-top: 2rem;
    max-width: 97ch;
    color: #3a3838;
    word-spacing: 0.2rem;
    letter-spacing: 0.1rem;
    line-height: 1.7;
}

.blog__single {
    margin-top: 4rem;
}

@media all and (max-width: 768px) {
    .blog {
       
        margin-left: 1rem;
        margin-right: 1rem;
        margin-bottom: 3rem;
    }

    .blog__img {
        
        width: 100%;
        
    }
    
}

В компьютерных науках есть только две сложные проблемы: аннулирование кешей и присвоение имен вещам. Общеизвестно, что использование надлежащего руководства по стилю может ускорить разработку, отладку и интеграцию новых функций в унаследованный код. К сожалению, большинство кодовых баз CSS иногда создаются без организации или правил именования. В долгосрочной перспективе это приводит к невозможности сопровождения кодовой базы CSS.

Название модификатора блочного элемента сокращено до БЭМ. Это гарантирует, что все, кто участвует в создании веб-сайта, используют одну и ту же кодовую базу и один и тот же язык. Вы можете быть готовы к изменениям внешнего вида сайта, используя правильное название.

Дизайн школьного сайта

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

Заключение

В рамках этого руководства вы загрузили приложение Strapi и создали API. Затем вы добавили образцы оценок для отображения и сделали доступными несколько маршрутов API. И последнее, но не менее важное: вы скопировали базовый веб-сайт школы JavaScript и добавили скрипты для получения и отображения данных из приложения Strapi. Подумайте о том, чтобы разместить оценки на сайте и сделать теги кликабельными, если вы хотите предоставить приложению дополнительные возможности. В заключение я предлагаю вам сделать еще один шаг, добавив больше полей в API и включив резервную опцию, чтобы вы могли проверить, как она работает, когда новые данные добавляются в серверную часть.

Если вы хотите опубликовать школьный контент, Strapi — отличный вариант. Помимо поддержки форматированного текста, он также предлагает удобный интерфейс композиции в панели администратора. Контент также может использоваться вашим школьным веб-сайтом через полностью настраиваемый API. Ознакомьтесь с этим обзором функций Strapi на его веб-сайте, чтобы узнать больше о том, что еще он может предложить. Наконец, исходный код этого приложения доступен на Github.