Началось всё с освоения Laravel. Потом я узнал о существовании October CMS, который основан на этом отличном фрейворке. Затем мне стало стыдно за один сайт, который как я считал, неплохо был сделан на Wordpress. Но теперь я увидел, что сайты можно делать гораздо лучше. Там ещё были проблемы с VPS - постоянно падал Apache...
Вообщем назрели перемены. Но это всё предисловие. Итак, приступим.
UPD: 2024 год. Рекомендую использовать Winter CMS, так как October CMS стал коммерческим и теперь идёт другим путём развития. Много из того, что описано тут, можно применить к Winter CMS. PHP 7.x уже не актуален, теперь лучше использовать 8.x. Tailwind CSS - актуальна версия 3.
Если вы будете осваивать October CMS с нуля, как и я, тогда сначала нужно будет потратить своё личное время, чтобы так сказать "войти в тему". В помощь отличный официальный сайт, множество тем, плагинов и документация. Кроме того, нужно понять, как всё это разрабатывать на своем компьютере и как потом переносить на сервер.
Повозившись с этим всем, я наконец определился:
php artisan serve
Создайте папку где удобно и назовите, как хотите :) и перейдите в неё:
mkdir ~/dev/octobercms_project
cd ~/dev/octobercms_project
Теперь мы установим в консоли (мне так проще и быстрее): Для этого сначала скачаем инсталлятор:
curl -s https://octobercms.com/api/installer | php
*конечно, можно поставить через composer - я так тоже пробовал, но процесс идёт дольше, в результате количество и объём файлов больше, а так как особой необходимости в composer я не увидел, то...
Cоздадим базу данных:
mysql -u root -p
CREATE DATABASE octoberdb;
GRANT ALL PRIVILEGES ON octoberdb.* TO "octoberdbu"@"localhost" IDENTIFIED BY "octoberpass";
FLUSH PRIVILEGES;
EXIT
Установим, ответив на несколько вопросов
php artisan october:install
Поставим возможные обновления
php artisan october:update
Можно сразу удалить демо тему, если любите чистоту
php artisan october:fresh
На официальном сайте есть платные и бесплатные плагины и темы. Есть удобная страничка https://octobercms.com/leaderboard с помощью которой достаточно легко выбрать себе подходящие темы и модули.
Вот, что мне приглянулось - плагины для контента, мультиязычности, поиска по сайту от rainlab; не самый популярный, но отличный магазин offline.mall; тему сайта будем делать на основе offline.oc-mall-theme и mehedi.megakit; некоторые удобные плагины
Команды для установки:
Для контента и зависимости для магазина
php artisan plugin:install rainlab.user
php artisan plugin:install rainlab.location
php artisan plugin:install rainlab.translate
Магазин, тема для него, страницы и блог, плагин для контакт-формы:
php artisan plugin:install offline.mall
php artisan plugin:install offline.sitesearch
php artisan plugin:install rainlab.pages
php artisan theme:install offline.oc-mall-theme
php artisan plugin:install rainlab.blog
php artisan plugin:install rainlab.blogvideo
php artisan plugin:install pollozen.simplegallery
php artisan plugin:install janvince.smallcontactform
Эдакий "seo all in one" - не нужно отдельных модулей для sitemap.xml, robots.txt и прочего
php artisan plugin:install arcane.seo
Расширения Twig
php artisan plugin:install vojtasvoboda.twigextensions
Ещё для seo и контента
php artisan plugin:install vdlp.redirect
php artisan plugin:install mey.breadcrumbs
php artisan plugin:install offline.responsiveimages
php artisan plugin:install anandpatel.wysiwygeditors
php artisan plugin:install offline.speedy
Лучше всего это описано в документации: https://offline-gmbh.github.io/oc-mall-plugin/getting-started/installation.html#installation
Полезная команда, которую можно выполнять всякий раз при настройке магазина
php artisan mall:check
Создаем папку resources и там разворачиваем node_modules
npm install tailwindcss postcss-import
npx tailwindcss init --full
npx tailwindcss build tailwind.main.css -c tailwind.config.js -o ../assets/css/compiled-full.css
Какого либо подходящего инструмента для этой задачи я не нашёл, поэтому решил сделать так.
Часть задачи - скриптом, часть - шлифовать вручную, потому что есть многоязычность, метатеги, редиректы и другие нюансы.
На вордпрессе у меня стоял плагин WP All Export - его бесплатной версии достаточно, чтобы просто выгрузить содержимое всех страниц в файл xml.
Создаём в October CMS (с помощью плагина rainlab.pages) 1 страницу и настраиваем её по всем полям, в том числе и по seo.
Получаем сгенерированный файл ( с именем [slug].htm ) в папке темы content/static-pages и его будем брать за основу как шаблон для экспорта xml выгрузки
Пишем небольшой скрипт (на php или каком вам нравится языке), который загрузит xml, пройдет по нему как по массиву и сгенерирует файлы [slug].htm, которые мы потом просто перенесём в папку static-pages. Кроме того, нужно учесть, что важно добавить строки в файл meta/static-pages.yaml - тогда October CMS будет видеть сгенерированные страницы.
На PHP это может выглядеть примерно так:
<?php
$xmlpages = simplexml_load_file("stranicy-export-2020-july-06-1408.xml");
$yaml = "";
foreach ($xmlpages as $page) {
if ($page->Languages == "Русский" && $page->Content <> "") {
$pagefile = '[viewBag]
title = "' . $page->Title . '"
url = "/' . $page->Slug . '"
layout = "default"
is_hidden = 0
navigation_hidden = 0
meta_description = "' . mb_substr(strip_tags($page->Content), 0, 160) . '"
robot_index = "index"
robot_follow = "follow"
enabled_in_sitemap = 1
use_updated_at = 1
changefreq = "always"
priority = 0.1
==
';
$pagefile .= $page->Content;
file_put_contents("pages/" . $page->Slug . ".htm", $pagefile);
$yaml .= " " . $page->Slug . ": { }\n";
}
}
file_put_contents("static-pages.yaml", $yaml);
Затем уже в админке October CMS проверяем все страницы, выстраиваем меню и иерархию, если нужно.
Иллюстраций было немного в моём случае, поэтому их подправил вручную. При желании, вероятно, можно преобразовывать ссылки на них в новый вид. Я поместил загруженные картинки в специально созданную папку pages в библиотеке media.
Это можно сделать практически стандартными средствами, через экспорт-импорт в формате CSV.
Опять же используем WP All Export, чтобы выполнить экспорт записей блога в CSV.
В October CMS в панели управления блогом (/backend/rainlab/blog/posts) нужно нажать "Import posts", затем выбрать "File format" > "Custom format". Особо менять ничего не пришлось, кроме сопоставления полей (File columns) с полями базы данных (Database fields)