- PVSM.RU - https://www.pvsm.ru -
Третьего дня задали задачу — написать скрипт для переезда с Битрикс на MODx. Задача показалась интересной, тем более, что с Битрикс толком ни разу не работал — пришло время попробовать.
Не буду ничего писать про систему, я даже в админку не заходил — работал сразу с базой данных. А это 250 таблиц, против 68 у MODx.
Сразу видно, насколько Битрикс круче!
О полном переносе всего-всего речи конечно не шло, была поставлена задача перенести содержимое определенных инфоблоков (статей и новостей), с авторами и некоторыми свойствами (картинки, дата публикации).
И конечно, сохранить все адреса, хорошо проиндексированные поисковиками.
В конце топика архив для скачивания, а я пока немного расскажу, как он работает.
3 файла:
Все нужные для работы данные вносим в массив:
'table_prefix' => 'bitrix_'
,'blocks' => array(
'articles' => array(
'id' => 3
,'cat_tpl' => 3
,'tpl' => 3
,'uri_override' => 1
,'preview_picture' => 'preview_picture'
,'detail_picture' => 'detail_picture'
)
В массиве blocks хранятся настройки импорта конкретных инфоблоков:
Также в настройках указывается префикс таблиц Битрикса. Я считаю, что они лежат в одной базе данных с таблицами MODx.
Теперь нужно заглянуть в файл proccess.php.
Там подключается сам MODx, класс импорта и вызываются нужные методы для импорта:
В целом, практически все методы написаны чтобы работать в importBlock.
При его запуске достаются свойства секции, создаются ее подкатегории, потом импортируются в них ресурсы и сохраняются картинки в ТВшечки.
Самое главное — работают все uri, при использовании следующего плагина, конечно:
<?php
if ($modx->event->name == 'OnPageNotFound') {
$uri = parse_url(substr($_SERVER['REQUEST_URI'],1));
$query = explode('&', $uri['query']);
$num1 = count($query);
$query = array_unique($query);
$num2 = count($query);
if ($num1 != $num2) {
$modx->sendRedirect($modx->getOption('site_url').$uri['path'].'?'.implode('&', $query));
}
else if ($res = $modx->getObject('modResource', array('uri' => $uri['path'].'?'.$query[0]))) {
$modx->sendForward($res->get('id'));
}
}
Так как в Битриксе (не знаю, всегда, или только в моем случае) вот такие адреса — news/detail.php?news=6868, нужно еще заставить веб-сервер отдавать их на index.php в корне сайта. То есть, это как бы у нас такие friendly urls выходят.
Плагин даже заставляет работать пагинацию с getPage. То есть news/detail.php?news=6868&page=5 — отработает корректно.
Скрипт я старался писать как можно универсальнее, но не в ущерб основной работе. В любом случае, желающим переехать с Битрикс на MODx теперь есть от чего отталкиваться.
Работает довольно быстро, импорт 5000 ресурсов и линковка между собой через ТВ занимает около 4х, 5ти минут на обычном домашнем компе. Линковка — это моя специфическая задача, не знаю, пригодится ли кому еще.
Дописывать, модифицировать и развивать этот скрипт я не буду — только если попросят перенести еще один сайт с Битрикс на Revo. В общем, отдаю, как есть.
Напоследок, коротко:
Очень прошу не разворачивать очередные холивары на тему «лучшей в мире CMS»!
P.S. Заказали, оплатили, и разрешили поделиться ребята из Webmaster Agency [2]
Автор: bezumkin
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/modx/5837
Ссылки в тексте:
[1] Скачать архив: http://narod.ru/disk/46621704001.e89c022fe7458b188cff93de08c2c463/import.zip.html
[2] Webmaster Agency: http://www.wm.ru/
Нажмите здесь для печати.