Upload
modx-
View
600
Download
8
Embed Size (px)
Citation preview
Ты кто такой?
• MODX Ambassador
• MODX Professinal
• Опыт работы с MODX — 4 года
• Люблю MODX
2
Разработка
Этапы разработки
• Установка MODX
• Настройка (ЧПУ, имя сайта, почта и тд.)
• Установка дополнений
• Заполнение дерева (структура)
• Наполнение шаблонов и чанков
• Творческий процесс разработчика
4
Известные недостатки MODX
• Элементы в БД
• Необходимость работы через админпанель
• Git? Бесполезен
5
Тестирование
Перенос сайта
• FTP
• SSH (SFTP)
• scp / rsync / ...
• PhpMyAdmin / mysqldump
• Vapor
• только для MODX Revo 2.2+
• только MODX Cloud
7
OK. Перенесли
И тут заказчик решает добавить на сайт новый раздел
— Я все оплачу, делайте!
Заказчик“8
¯\_(ツ)_/¯
Неужели нет решения?
• SE Manager + StaticSaver + git
• ElementHelper + git
• Cast
• Gitify
• Общие недостатки
10
SE Manager + StaticSaver + git
+ Быстрый экспорт элементов в файлы из админки
+ Автоматическая подстановка имени файла в форму ресурса
+ Контроль версий для статических элементов
- При добавлении файла нельзя автоматически создать элемент
- Нельзя использовать ссылки на ресурсы по id
- Нет сведений о состоянии системы
11
ElementHelper + git
+ Умеет TV
+ Умеет отслеживать историю изменений элемента
+ Есть автоудаление элементов
+ Умеет создавать элементы из файлов
- Нельзя использовать ссылки на ресурсы по id
- Нет сведений о состоянии системы
12
Cast
CAST - Content Addressable Storage and Transfer, библиотека для MODX, построенная вокруг git.
+ Работает с объектами xPDO
+ Обертки git-команд в самой библиотеке
+ Есть настройка того, что нужно сериализовать
- Не поддерживает команды с взаимодействием с пользователем
- Перед десереализацией удаляет записи из таблиц
13
Gitify
Новый инструмент от Марка Хамстры, презентованный на MODX Weekend.
+ Конфигурация в YAML
+ Дополнительные команды для управления сайтом
+ Данные хранятся в виде обычных файлов, конфиги в заголовках
- На сегодня очень мало умеет и еще в разработке
- Не удобно править файлы, не срабатывает подстветка синтаксиса
14
Общие проблемы
• Однонаправленность
• Недостаток документации
• Сложность для обычного пользователя
15
Teleport
Teleport
Teleport - это расширяемый набор скриптов для работы с одним
или несколькими локальными экземлярами MODX Revolution.
github.com/modxcms/teleport
Автор: Jason Coward
MODX Cloud
17
Установка
1. Создать папку teleport там, где удобно. Обычно в /home/username
2. Скачать в нее teleport.phar
Каталоги
Во время работы teleport создает каталоги:
• profile - в нем будут размещены профили сайтов
• workspace - в нем будут размещены собранные пакеты
18
Как работает?
1. Создание профиля
2. Упаковка сайта в пакет
3. Перенос пакета в нужное место
4. Создание профиля целевого сайта
5. Распаковка и установка обновлений
19
Что умеет?
• Profile
• Extract
• Inject
• Push
• UserCreate
• Packages/GC
20
Profile
php teleport.phar \
--action=Profile \
--name="MySite" \
--code=mysite \
--core_path=/path/to/mysite/modx/core/ \
--config_key=config
01.
02.
03.
04.
05.
06.
21
Extract
php teleport.phar \
--action=Extract \
--profile=profile/mysite.profile.json \
--tpl=phar://teleport.phar/tpl/complete.tpl.json
01.
02.
03.
04.
22
Inject
php teleport.phar \
--action=Inject \
--profile=profile/mysite.profile.json \
--source=workspace/mysite_develop-120315.1106.30-2.2.1-dev.transport.zip
01.
02.
03.
04.
23
Push
php teleport.phar \
--action=Extract \
--profile=profile/mysite.profile.json \
--tpl=phar://teleport.phar/tpl/complete.tpl.json \
--target=s3://mybucket/snapshots/ \
--push
01.
02.
03.
04.
05.
06.
24
UserCreate
php teleport.phar \
--action=UserCreate \
--profile=profile/mysite.profile.json \
--username=superuser \
--password=password \
--sudo \
--active \
--fullname="Test User" \
01.
02.
03.
04.
05.
06.
07.
08.
09.
25
Packages/GC
php teleport.phar \
--action=Packages/GC \
--profile=profile/mysite.profile.json
01.
02.
03.
26
Шаблоны
Шаблоны
• Запакованы в phar: phar://teleport.phar/tpl/*.json.tpl
• Формат - json
• 11 шаблонов из коробки: changeset, complete, complete_db,
develop, elements, packages, resource_children, resources,
settings, user, users
28
changeset.json.tpl
Извлекает определенный набор изменений, зафиксированный
обратной функцией, заданной в настройках MODX.
settings.json.tpl
Извлекает все настройки из первого сайта для импорта во второй,
обновляет и дополняет существующие.
29
complete.json.tpl
Извлекает все объекты ядра, файлы и пользовательские таблицы
из первого сайта и заменяет все это во втором.
complete_db.json.tpl
Извлекает все объекты ядра и пользовательские таблицы, без
файлов.
packages.json.tpl
Извлекает все пакеты из первого сайта и устанавливает во втором.30
develop.json.tpl
Извлекает все объекты ядра, файлы и пользовательские таблицы
из первого сайта для импорта во второй, дополняет существующие
объекты и таблицы.
elements.json.tpl
Извлекает все элементы и связанные с ними данные из первого
сайта для импорта во второй, обновляет и дополняет
существующие.
31
resources.json.tpl
Извлекает все ресурсы из первого сайта для импорта во второй,
обновляет и дополняет существующие.
resource_children.json.tpl
Извлекает все ресурсы, которые являются потомками заданного
родительского ресурса.
32
user.json.tpl
Излекает одного указанного пользователя и сопутствующие
данные из первого сайта для импорта во второй.
users.json.tpl
Излекает все пользователей из первого сайта для импорта во
второй, обновляет и дополняет существующих.
33
Собственные шаблоны
Простейший шаблон
{"name":"elements", "vehicles":[]}
• Обычный json
• Отношения и условия как в map-файлах modx
34
Пример собственного шаблона
{"name":"elements", "vehicles":[
{
"vehicle_class":"xPDOFileVehicle",
"object":{
"source":"{+properties.modx.core_path}components",
"target":"return MODX_CORE_PATH;"
},
"attributes":{
"vehicle_class":"xPDOFileVehicle"
}
}
]}
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12. 35
Пример собственного шаблона
{"name":"elements", "vehicles":[
{
"vehicle_class":"xPDOObjectVehicle",
"object":{
"class":"modPropertySet",
"criteria":["1 = 1"],
"graph":{
"Category":[]
},
"package":"modx"
},
"attributes":{
"preserve_keys":false,
"update_object":true,
"unique_key":"name",
"related_objects":true,
"related_object_attributes":{
"Category":{
"preserve_keys":false,
"update_object":true,
"unique_key":"category"
}
}
}
},
]}
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
36
Телепортация
Телепортация A в B
Сайт A Сайт B
Profile: sitea.profile.json Profile: siteb.profile.json
Extract:
packages
develop
Inject:
packages
develop
Синхронизированы
38
Телепортация modx.by
Профиль для modx.by.dev.alroniks.com
php teleport.phar --action=Profile \
--name="modxbydevalronikscom" --code=modxbydevalronikscom \
--core_path=/var/www/modx.by.dev.alroniks.com/www/core/ \
--config_key=config
01.
02.
03.
04.
39
Телепортация modx.by
Профиль для modx.by
php teleport.phar --action=Profile \
--name="modxby" --code=modxby \
--core_path=/var/www/modx.by/www/core/ \
--config_key=config
01.
02.
03.
04.
40
Телепортация modx.by
Упаковка для modx.by.dev.alroniks.com
php teleport.phar --action=Extract \
--profile=profile/modxbydevalronikscom.profile.json /
--tpl=phar://teleport.phar/tpl/elements.tpl.json /
--target=/var/www/modx.by/www/core/packages/
--push
01.
02.
03.
04.
05.
41
Телепортация modx.by
Установка для modx.by
php teleport.phar --action=Inject \
--profile=profile/modxby.profile.json \
--source=/var/www/modx.by/www/core/packages/
modxbydevalronikscom_complete-141125.1702.46-2.3.2-pl.transport.zip
01.
02.
03.
42
Проблемы
• complete и complete_db не подходит для установки через менеджер
пакетов
• в конфиге нельзя исключить из упаковки отдельную папку
• не на все действия есть документация
• до сих пор нет документации по custom tpls
45
Планы
• Панель управления dev-экземлярами
• Автоматическая сборка пакетов
• Специальный репозиторий для обновлений
• Continuous Delivery через пакеты
46
Создание сложных интернет-магазинов и сайтов на MODX
• alroniks.com - команда
• klimchuk.by - личный и контакты
• modx.by - сообщество
47
Вопросы?