Как осуществить миграцию корпоративного сайта-магазина Wordpress + Woocommerce на October CMS + oc-Mall

Andy Wits Blog

Как осуществить миграцию корпоративного сайта-магазина Wordpress + Woocommerce на October CMS + oc-Mall

Началось всё с освоения Laravel. Потом я узнал о существовании October CMS, который основан на этом отличном фрейворке. Затем мне стало стыдно за один сайт, который как я считал, неплохо был сделан на Wordpress. Но теперь я увидел, что сайты можно делать гораздо лучше. Там ещё были проблемы с VPS - постоянно падал Apache...

Вообщем назрели перемены. Но это всё предисловие. Итак, приступим.

UPD: 2024 год. Рекомендую использовать Winter CMS, так как October CMS стал коммерческим и теперь идёт другим путём развития. Много из того, что описано тут, можно применить к Winter CMS. PHP 7.x уже не актуален, теперь лучше использовать 8.x. Tailwind CSS - актуальна версия 3.

Что такое October CMS и как начать с ним работать?

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

Повозившись с этим всем, я наконец определился:

  • для разработки на своем ноутбуке с линукс буду использовать Microsoft Visual Studio Code
  • в качестве CSS фреймворка будем использовать tailwindcss v1.4.6
  • для выгрузки будем использовать плагин Sync-Rsync (vscode-ext.sync-rsync)
  • поскольку в основе October CMS лежит Laravel - то у нас есть встроенный сервер для локального тестирования. Он запускается командой консоли из папки проекта:
php artisan serve
  • нужно установить Mysql server или Maria DB на компьютер (лучше через docker)
  • также нужно иметь php-cli (лучше 7.3), а также некоторые php модули (php-gmp, php-bcmath и т.д.), которых может не хватать для этой CMS

Установка October CMS в папку на локальном компьютере.

Создайте папку где удобно и назовите, как хотите :) и перейдите в неё:

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

October CMS - какие плагины и темы использовать для корпоративного сайта-магазина?

На официальном сайте есть платные и бесплатные плагины и темы. Есть удобная страничка 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

Создание магазина на основе October CMS

Лучше всего это описано в документации: 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

Экспорт страниц из Wordpress в October CMS (Rainlab Pages). Полуавтоматический метод.

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

Часть задачи - скриптом, часть - шлифовать вручную, потому что есть многоязычность, метатеги, редиректы и другие нюансы.

  1. На вордпрессе у меня стоял плагин WP All Export - его бесплатной версии достаточно, чтобы просто выгрузить содержимое всех страниц в файл xml.

  2. Создаём в October CMS (с помощью плагина rainlab.pages) 1 страницу и настраиваем её по всем полям, в том числе и по seo.

  3. Получаем сгенерированный файл ( с именем [slug].htm ) в папке темы content/static-pages и его будем брать за основу как шаблон для экспорта xml выгрузки

  4. Пишем небольшой скрипт (на 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);

  1. Затем уже в админке October CMS проверяем все страницы, выстраиваем меню и иерархию, если нужно.

  2. Иллюстраций было немного в моём случае, поэтому их подправил вручную. При желании, вероятно, можно преобразовывать ссылки на них в новый вид. Я поместил загруженные картинки в специально созданную папку pages в библиотеке media.

Экспорт страниц из Wordpress в October CMS (Rainlab Blog).

Это можно сделать практически стандартными средствами, через экспорт-импорт в формате CSV.

  1. Опять же используем WP All Export, чтобы выполнить экспорт записей блога в CSV.

  2. В October CMS в панели управления блогом (/backend/rainlab/blog/posts) нужно нажать "Import posts", затем выбрать "File format" > "Custom format". Особо менять ничего не пришлось, кроме сопоставления полей (File columns) с полями базы данных (Database fields)

Published on Jul 10 2020 at 2:00 pm
Time to read 3 minute(s)
Categories
  • Web Development

Contact me on