Рубрики
Uncategorized

Настройка нового Craft CMS 3 проекта

Настройка нового проекта Craft CMS 3 с выпуском Craft CMS 3, вы можете … с меткой webdev, devops, craftcms.

С выпуском Craft CMS 3 вы можете выбрать шины. Вот как настроить Craft CMS 3 Project

Эндрю Уэлч/ nystudio107.

Теперь, когда Craft CMS 3 был выпущен Вы, скорее всего, хотите пойти. Эта статья — это то, что вы можете сначала прочитать, чтобы дать вам дорожную карту для настройки вашего проекта.

Эта статья обсудит создание A Новый Проект Craft 3, чтобы вы могли поэкспериментировать с ним. Это будет не Обновление обложки существующего проекта Craft 2.x для ремесла 3; ожидать, что придет в будущую статью.

Это делает это Отлично Время начать знакомиться с ним, независимо от того, разработчик Frontend, разработчик плагинов или оба. С набором функции заморожены, вы работаете против известного количества.

Я не буду перефразировать, что новое в Craft 3; Если вы заинтересованы в этом, ознакомьтесь с ремеслом 3 бета-исполнительной статьи.

Каноническая ссылка всегда будет документацией CRAFT CMS для Требования к серверу , Установка , Конфигурация и Структура каталогов . Но есть несколько советов, трюков и подсказки, которые я хотел бы добавить в эту тему.

Итак, давайте погрузимся!

Должен ли я использовать ремесло 3 в производстве?

N.B. С Craft CMS 3 был выпущен 4 апреля TH 2018, ответ: определенно да Вы должны использовать Craft CMS 3.x в производстве. Баланс этого раздела оставлен в исторических причинах.

Одним из наиболее распространенных вопросов с выпуском Craft CMS 3 RC1 является:

Ответ — Это зависит от Отказ Я лично использую Craft 3 RC1 в производстве для клиентского сайта, а также для нового проекта самого собственного.

Самым большим недостатком является то, что ваш любимый плагин еще не может быть перенесен, но ремесло достаточно гибкое, чтобы вы, как правило, не поделились без многих плагинов, если вам нужно. Есть также довольно много Craft 3 плагины Доступно уже.

Я думаю, что это имеет смысл по крайней мере выстрелить тестовый сайт, чтобы выбрать ремесленные шины 3 RC1. Для некоторых клиентских сайтов, я думаю, также очень разумно начать использовать его сейчас. Улучшения скорости и инфраструктуры оно того стоит.

Изменения от Craft 2.x

Есть несколько изменений с точки зрения того, как все настроится в Craft 3 по сравнению с ремеслом 2.x, и все для лучшего на мой взгляд.

Некоторые из этих изменений привыкнут к:

  • Craft 3 теперь использует Композитор Для установки и обновления ремесла и любых плагинов ты мог бы имеют
  • Структура каталогов по умолчанию имеет некоторые изменения; Но это просто предложения. Вы можете использовать все, что вам нравится
  • Плагины, написанные для Craft 2.x не будет работать с ремеслом 3, им нужно будет обновляться разработчиками
  • Craft 3 теперь использует phpdotenv .env Файл по умолчанию для обработки экологических вещей, таких как пароли, имена баз данных и т. Д.
  • Есть несколько незначительных изменений шаблона для вас; Большинство всего являются лишь амортизацией, поэтому они все еще работают, но вам нужно будет обновить их по времени Craft 4 Rolls

Композитор

Первое серьезное изменение — это то, что ремесло 3 полагаются на Композитор Для таких вещей, как установка и обновления самого ремесла CMS, так и любые плагины, которые вы можете использовать.

  • Композитор это инструмент, который позволяет установить PHP пакеты, как NPM и пряжа для JavaScript
  • Pack AG IST .org это веб-сайт, который является публичным списком композиторов, похожая на npmjs .com для JavaScript

Если у вас нет композитора, установленного на вашем Местный Установка Dev еще, вот Инструкции о том, как установить композитор Отказ

Pixel & Tonic упомянул, что они планируют допустить пункт установки не композиторов, но в качестве разработчиков он на самом деле облегчает нашу жизнь намного проще обнимать композитор.

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

Чтобы установить новый проект Craft 3, все, что нам нужно сделать, это следующее:

composer create-project craftcms/craft PATH

Давайте сломаем это:

  • композитор просто Глобально установленный композитор команда
  • Создать-проект говорит композитору, что мы хотим Создать новый проект из существующего шаблона (больше на это позже)
  • CraftCMS/Craft это Pack AG IST .org пакет, который мы хотим использовать в качестве шаблона при создании нашего проекта
  • Путь это относительный или абсолютный путь к тому, где мы хотим создать наш проект; Обычно это будет что-то вроде Craft3. или ~/webdev/сайты/mysitename или что есть ты

Итак, из моего усадьбы VM, который я использую для местного развития, команда, которую я бегут:

vagrant@homestead ~/sites $ composer create-project craftcms/craft crafttest

Целая куча текста будет летать, но давайте поговорим о том, что на самом деле происходит. Композитор выходит на Pack AG IST .org Искать посылку имени CraftCMS/Craft И тогда это по сути Гит клон На этот репозиторий, но без того, чтобы потянуть .git данные.

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

Посмотрите на фактическое Репозиторий CraftCMS/Craft на Github .com , и вы увидите, что это не очень много, правда. Это просто некоторые файлы конфигурации ремесла, Composer.json , и т.д. Так что это просто проект голых костей, которые сделают для нас в качестве отправной точки.

Тогда он будет работать Композитор установить Чтобы установить любой из пакетов композиторов, которые CraftCMS/Craft претензии как зависимости, очень похоже на Установка NPM или пряжа делает для пакетов NPM.

Критическая вещь, чтобы понять вот то, что CraftCMS/Craft Пакет — это просто леса, что пиксель и тоник, созданный с тем, что они думают, является хорошей отправной точкой для вашего нового проекта Craft 3. На самом деле это может быть любой пакет AG IST .org, который имеет «Тип»: «Проект» Действительно

Например, я настроил пакет nystudio107/ремесло Это позволяет мне установить ремесло 3 с помощью структуры каталогов и зависимостями, которые я хочу, и я могу запустить новый проект Craft 3 с помощью Мой Леса, делая:

vagrant@homestead ~/sites $ composer create-project nystudio107/craft crafttest

nystudio107/ремесло Пакет проекта делает все Pixel & Tonic CraftCMS/Craft Пакет проекта делает, а затем устанавливает ряд инструментов и лесов, которые я использую, и был описан в статьях в этом блоге. Так что это делает отличную отправную точку.

Это не только это полезно, если вы хотите настроить свои собственные леса, это ключевое значение, чтобы понять что происходит. Давайте посмотрим на Composer.json файл, который поставляется с CraftCMS/Craft упаковка:

{
  "name": "craftcms/craft",
  "description": "Craft CMS",
  "keywords": [
    "craft",
    "cms",
    "craftcms",
    "project"
  ],
  "license": "MIT",
  "homepage": "https://craftcms.com/",
  "type": "project",
  "support": {
    "email": "support@craftcms.com",
    "issues": "https://github.com/craftcms/cms/issues",
    "forum": "https://craftcms.stackexchange.com/",
    "source": "https://github.com/craftcms/cms",
    "docs": "https://craftcms.com/docs",
    "rss": "https://craftcms.com/changelog.rss"
  },
  "require": {
    "craftcms/cms": "^3.0.0",
    "vlucas/phpdotenv": "^2.4.0"
  },
  "autoload": {
    "psr-4": {
      "modules\\": "modules/"
    }
  },
  "config": {
    "optimize-autoloader": true,
    "platform": {
      "php": "7.0"
    }
  },
  "scripts": {
    "post-create-project-cmd": [
      "@php -r \"copy('.env.example', '.env');\"",
      "@php -r \"unlink('composer.json');\"",
      "@php -r \"unlink('LICENSE.md');\"",
      "@php -r \"unlink('README.md');\"",
      "@php -r \"rename('composer.json.default', 'composer.json');\"",
      "@composer dump-autoload -o",
      "@php craft setup/welcome"
    ]
  }
}

Так что это довольно интересно! CraftCMS/Craft Списки Project Package CraftCMS/CMS как зависимость. Это может немного запутать, поэтому помните:

  • CraftCMS/Craft Является ли пакет леса стартера проекта для ваших проектов Craft 3
  • CraftCMS/CMS является фактическим пакетом Craft 3, который содержит весь код, который в совокупности составляет CRAFT CMS

Таким образом, сам ремесло — это просто еще один пакет композиторов, который вытягивается. Он работает так же для любых плагинов, которые вы можете использовать, вы можете просто добавить их в свой Composer.json И они будут установлены как PHP-пакеты.

Конечно, Craft обеспечивает хороший графический интерфейс для всех этого, но полезно понять, как все работает под капотом.

Если вы хотите сделать глубокую погружение на композитору, я бы предложил проверить статьи Композитор Флаги устойчивости & Особенности автолона композитора (Есть несколько частей к этой статье, обязательно прочитайте их все!).

Также чрезвычайно полезно для понимания композитора/смуляции Packagist Semver — это Packagist Semver Checker. .

Ремесло 3 Первоначальная настройка

Хорошо, поэтому после того, как мы создали проект Craft 3, теперь нам нужно сделать немного работы, установив его.

На хвостовом конце установки вы увидите сообщение, подобное этому из Craft:

Generating a security key...
done (UDRBoBjQAzfgY5J9S-543Ie0PrxwCwZG)

Welcome to Craft CMS! Run the following command if you want to setup Craft from your terminal:

    ~/sites/crafttest/craft setup

Ключ безопасности что генерирует это просто случайная строка символов (например, пароль) Это уникально на основе в рамках проекта. Для многоутробных установок вы захотите использовать один и тот же ключ безопасности в каждой среде.

Craft использует это для шифрования данных, поэтому это просто уникальное семя, которое установлено в general.php Отказ

Если вы запустите команду ~/сайты/Crafttest/Craft Setup (или все, что выводят для вашего проекта), он настроит ваш .env Файл для вас:

vagrant@homestead ~/sites $ ~/sites/crafttest/craft setup
Which database driver are you using? [mysql,pgsql,?]: mysql
Database server name or IP address: [localhost]
Database port: [3306]
Database username: [root] homestead
Database password:
Database name: crafttest
Database table prefix:
Testing database credentials... success!
Saving database credentials to your .env file...
done

Ваша (пустая) база данных должна быть создана уже, как по ремеслу 2.x. Затем он спросит вас, хотите ли вы установить ремесло сейчас. Если вы говорите Да , по сути, это просто командная строка, эквивалентна знакомой мастере установки:

Install Craft now? (yes|no) [yes]:

Username: [admin]
Email: andrew@nystudio107.com
Password:
Confirm:
Site name: crafttest
Site URL: http://crafttest.dev
Site language: [en-US]

Конечно, вам не нужно делать это таким образом. Вы можете сказать нет и установите его, собираясь на http://mysite.dev/admin URL так же, как вы сделали для Craft 2.x если хочешь.

В любом случае, у вас сейчас есть phpdotenv .env Файл в вашем корне проекта, который имеет ваши учетные данные в нем:

vagrant@homestead ~/sites $ cat crafttest/.env
# The environment Craft is currently running in ('dev', 'staging', 'production', etc.)
ENVIRONMENT="dev"

# The secure key Craft will use for hashing and encrypting data
SECURITY_KEY="UDRBoBjQAzfgY5J9S-543Ie0PrxwCwZG"

# The database driver that will used ('mysql' or 'pgsql')
DB_DRIVER="mysql"

# The database server name or IP address (usually this is 'localhost' or '127.0.0.1')
DB_SERVER="localhost"

# The database username to connect with
DB_USER="homestead"

# The database password to connect with
DB_PASSWORD="secret"

# The name of the database to select
DB_DATABASE="crafttest"

# The database schema that will be used (PostgreSQL only)
DB_SCHEMA="public"

# The prefix that should be added to generated table names (only necessary if multiple things are sharing the same database)
DB_TABLE_PREFIX=""

# The port to connect to the database with. Will default to 5432 for PostgreSQL and 3306 for MySQL.
DB_PORT="3306"

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

Константы в .env Файл проанализирован и установлен как PHP Окружающая среда Переменные которые читаются по general.php , db.php , и т.д. Ремесло 3 config/ . Файлы:

 getenv('DB_DRIVER'),
    'server' => getenv('DB_SERVER'),
    'user' => getenv('DB_USER'),
    'password' => getenv('DB_PASSWORD'),
    'database' => getenv('DB_DATABASE'),
    'schema' => getenv('DB_SCHEMA'),
    'tablePrefix' => getenv('DB_TABLE_PREFIX'),
    'port' => getenv('DB_PORT')
];

В то время как .env.env. Файлы отлично подходят для разработки, для живого производства я рекомендую переместить велосипедные переменные к вашему веб-серверу config или использовать что-то вроде Craft 3 Multi-Environment Как описано в Multi-Environment Config для Craft CMS статья.

Структура каталогов ремесло 3

Хорошо, теперь, когда у нас есть новый проект Craft 3, установленный и настроен, давайте возьмем небольшой опрос того, что мы на самом деле установили.

Вот как выглядит наш свежеустановленный каталог проекта:

vagrant@homestead ~/sites/crafttest $ tree -L 2 -a .
.
├── composer.json
├── composer.lock
├── config
│ ├── app.php
│ ├── db.php
│ ├── general.php
│ ├── redactor
│ └── routes.php
├── craft
├── craft.bat
├── .DS_Store
├── .env
├── .env.example
├── .gitignore
├── LICENSE.md
├── modules
│ └── Module.php
├── README.md
├── storage
│ ├── .gitignore
│ ├── logs
│ └── runtime
├── templates
│ └── .gitkeep
├── vendor
│ ├── autoload.php
│ ├── bin
│ ├── cebe
│ ├── composer
│ ├── craftcms
│ ├── creocoder
│ ├── danielstjules
│ ├── .DS_Store
│ ├── enshrined
│ ├── ezyang
│ ├── guzzlehttp
│ ├── justinrainbow
│ ├── league
│ ├── mikehaertl
│ ├── paragonie
│ ├── pixelandtonic
│ ├── psr
│ ├── seld
│ ├── swiftmailer
│ ├── symfony
│ ├── twig
│ ├── vlucas
│ ├── yiisoft
│ └── zendframework
└── web
    ├── cpresources
    ├── .htaccess
    ├── index.php
    └── web.config

33 directories, 22 files

Первое, что вы заметите, так это то, что нет Ремесло/ Справочник здесь вообще больше, что то, что мы использовали для просмотра в Craft 2.x. Каждый каталог, который был внутри Ремесло/ Каталог в Craft 2.x теперь находится в нашем каталоге корневого проекта.

Это имеет смысл, если вы думаете об этом, поскольку сам ремесло сейчас просто устанавливается в качестве другой зависимости композитора в Продавец/Craftcms. каталог.

Итак, давайте посмотрим на некоторые заметные файлы/каталоги, которые мы имеем в наших проектах сейчас:

  • Composer.json Имеет всю информацию для нашего проекта, включая пакетные зависимости PHP и их минимум семенные версии
  • Композитор. Блок Имеет информацию о том, какие пакеты PHP и их версии являются на самом деле установлен (Они могут быть новыми, чем нашими минимальными версиями)
  • config/ . это то, что раньше было Craft/Config/ и имеет все знакомые файлы CMAFT CMS CONFIG
  • Ремесло это инструмент командной строки, который именно аналогичен веб-обращению index.php Отказ Это то, что вы используете для запуска ремесла 3 через командную строку (больше на этом ниже)
  • .env это наш phpdotenv. .env Файл, который имеет наши удобные вещи, такие как пароли базы данных и т. Д. хранится
  • .gitignore говорит git, какие шаблоны файлов игнорируют полностью, и никогда не проверяют git
  • Хранение/ это то, что раньше было Ремесло/Хранение/ и где хранятся временные файлы времени выполнения, журналы и т. Д. Сохраняются, как в Craft 2.x
  • Шаблоны/ это то, что раньше было Ремесло/шаблоны/ и является где хранятся ваши шаблоны веточки
  • поставщик/ Если все зависимости пакета PHP, которые используют ваш проект (включая сам ремесло), хранятся
  • Веб/ это то, что раньше было Публичный/ , который содержит наш index.php, .htaccess и т. Д. Файлы и это где должен быть указан корню веб-сервера

Важно отметить, что ремесло на самом деле не заботится о том, что вы используете в качестве структуры каталогов, это только то, что Pixel & Tonic предоставляет вам в качестве базовой установки. Если вам не нравится перемен с Публичный/ к веб/ , это нормально. Просто переименуйте это!

Ремесло Инструмент командной строки на самом деле мы использовали ранее, чтобы настроить .env Файл и необязательно установить ремесло. Просто подумайте об этом как об этом, чтобы запустить ремесло из командной строки. Он наследует ряд инструментов из YII2 Консоль Команды И Pixel & Tonic также добавил ряд специфичных для него вещей.

Например, вы можете использовать ./ремесло Установка/плагин мой-плагин-ручка Чтобы установить плагины из командной строки. Прохладный!

Развертывание Craft CMS.

Изменение того, как композитор используется для Craft 3, обсуждаемые ранее приводит непосредственно к тому, как мы должны быть обновления, тестированием и развертыванием ремесла 3.

Для Craft 2.x мы просто проверили все Ремесло/ (в том числе Vendor/ подкаталог) в Git, обновляемый и проверенный его в Местный Dev, а затем развернул его на Постановка / жить Производство через наш инструмент развертывания выбора, например Ласка , Buddy.works , Larave Enrewoyer , DeployBot , и т.д.

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

  • Composer.json Имеет всю информацию о нашем проекте, и какие пакетные зависимости PHP требуется как минимум семенные версии
  • Композитор. Блок Имеет информацию о том, что PHP пакетные зависимости являются на самом деле установлен (У нас могут быть новые версии, чем наши минимальные версии)
  • поставщик/ это каталог, который имеет все фактические пакеты PHP (в том числе сама CRAFT CMS!)
  • .gitignore говорит git какие шаблоны файлов игнорировать При отслеживании изменений в Git

Вот по умолчанию .gitignore Файл, предоставленный пакетом CraftCMS/Craft:

/.env
/.idea
/vendor
.DS_Store

Последствия, что мы никогда не проверяем наших .env Файлы в git (потому что положив чувствительные вещи, такие как пароли в управление версией, — это плохое представление), но мы также игнорируем весь /продавец каталог.

Так что, если мы не проверяем никаких наших пакетов PHP в /продавец Каталог в Git (это включает в себя сам Craft CMS, запомнить!) Как мы обновляем и развертываем вещи?

Мы воспользуемся тем, как работает композитор:

  • В местном разработке мы все обновим через Обновление композитора (или мы можем обновить только определенные пакеты через Composer Update PackageVendor/Package )
  • Вышеуказанный шаг также можно сделать через AdminCP UI, нажав на обновление, либо для самого CRAFT CMS, либо на любом из его плагинов. Под капотом он заканчивается бегущий композитор, как описано выше
  • Это вызывает композитор для загрузки и установки обновленного пакета (а), а затем он выписывает то, что установлено на Композитор. Блок файл
  • Тогда мы проверим все в Местный разработан, как мы привыкли, чтобы убедиться, что он готов к первому времени
  • Так как мы игнорируем все /продавец каталог, единственное, что будет изменено, насколько связано GIT, это Композитор. Блок файл, который перечислены в какие версии каких пакетов на самом деле установлен

Затем на стороне сервера развертываем вещей, мы выполним следующее из нашего каталога проекта на сервере:

composer install --no-interaction --prefer-dist --optimize-autoloader

Что Композитор установить это посмотри на то, что находится в Композитор. Блок Файл, и если он новее, чем то, что он видит, установлен локально, он обновляется и устанавливает его! Вы можете увидеть полные варианты, доступные для Композитор Установите здесь Отказ

Аккуратная вещь о том, чтобы сделать это таким образом, у нас меньше Cruft зарегистрирована в нашу REPOS Git, и мы также можем разделить только конкретные вещи.

Может быть, мы только хотим обновить определенный плагин, мы можем сделать это, обновив только этот плагин через Пакет обновления композитора/плагин от местного дева. Поскольку это единственное изменение, которое записано на Композитор. Блок Файл, это единственное, что обновляется, когда наш сервер работает Установка композитора

Хороший.

Единственный недостаток на это то, что Композитор установить может занять немного дольше, чем простой Git Pull Для выполнения, так что выглядят в атомные развертывания через Buddy.works. , Larave Enrewoyer , DeployBot и т. Д. Не может быть плохой идеей.

Craft 3 плагины

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

Хорошая новость заключается в том, что Pixel & Tonic сделали хорошее руководство по Ремесло 3 Разработка плагина И многие плагины уже были портированы. Проверьте Страница плагинов Craft 3 чтобы увидеть, что уже доступно.

Также инструменты, как Подключите Fac для RY .io и статьи типа Так ты хочешь сделать ремесло 3 плагин? доступны, чтобы помочь разработчикам.

Лучшее, что вы можете сделать, это проверить поставщику плагина, чтобы увидеть, насколько далеко они находятся на портировании своих плагинов в ремесло 3.

Pixel & Tonic заявил, что бета-версия магазина плагина (которая интегрирована в ремесло 3 ALMICP), будет отправлен с ремеслом 3 CMS RC 1, но только бесплатные плагины будут доступны изначально. Разработчики могут сделать плагины, которые будут платными плагинами, доступными бесплатно, но им потребуется покупка после выпуска ремесла CRAFT CMS 3.

Полная развертывание хранилища плагинов с платных плагинов, Commerce 2 и выпуск общего доступности ремесла 3, произойдет 4 апреля TH , 2018. Проверьте Что мы объявили в DOT Все 2017 Статья для деталей.

Говоря о плагинах, ремесло 3 поставляется с Нет богатого текстового поля по умолчанию. Вам нужно установить Плагин редактирования Сначала (не волнуйтесь, ваш существующий контент все еще там). Это потому, что P & T будет предлагаться Ckeditor Богатый текстовый плагин, а также в ближайшее время.

Изменения шаблона

Хорошая новость заключается в том, что с точки зрения фактических изменений в ваших шаблонах веточек не так много. Pixel & Tonic проделал отличную работу, изложение изменений в Twig 2 а также изменения в Теги шаблона ремесло Что вам нужно будет знать о.

Подавляющее большинство изменений являются просто Ошибки обесценений Отказ Это означает, что Pixel & Tonic планирует показывать их, когда ремесло 4 приходит, но они все равно будут работать сейчас.

Вы можете проверить любые ошибки амортизации внутри ремесла 3, собираясь на УтилитыОшибки обесценений Отказ

Другое действительно интересное, что в ремесле 3, весь Craft.app Экземпляр приложения доступен для ваших шаблонов Twig.

Что это значит в реальном выражении, состоит в том, что вы можете сделать что угодно с ремеслом 3 API через Twig, которые вы можете через PHP. Таким образом, многие маленькие плагины, которые необходимы, чтобы разоблачить некоторые необходимые функциональные возможности, больше не понравятся вообще.

Один абсолютно Удивительно вещь, которую вы можете сделать, если вы используете Phpstorm Получите полное автоматическое завершение всего ремесло. API в твоих веточных шаблонах тоже! Чтобы сделать магию, установите Симфония плагин Тогда иди к ПредпочтенияЯзыки и рамкиPHPСимфония и проверьте Включить плагин для этого проекта Отказ

Тогда все, что вам нужно сделать, это поместить эту инспекционную подсказку в верхней части ваших шаблонов Twig:

{# @var craft \craft\web\twig\variables\CraftVariable #}

… И просто так, вы получаете то же самое волшебное автоматическое завершение в ваших шаблонах веточки, которые у вас есть в вашем PHP-коде. И поскольку все это ремесло доступно в наших шаблонах веточки сейчас, это делает запись WhiG-код, который использует API на API намного лучше.

Удаление!

Это, несомненно, первая из нескольких статей я буду писать на ремесе 3. Но, надеюсь, это дало вам представление о положении земли для разработки ремесла 3.

Иди и сделай классные вещи!

Дальнейшее чтение

Если вы хотите быть уведомленным о новых статьях, следуйте nystudio107. в Твиттере.

Copyright © 2020 Nystudio107. Разработанный Nystudio107.

Оригинал: «https://dev.to/gaijinity/setting-up-a-new-craft-cms-3-project-bl0»