Предпосылками к проекту мастера перетягивания контента jom2bit послужил собственный опыт. Ряд сайтов, сделанных мною на Joomla в разное время были перенесены на Битрикс ввиду явных преимуществ последнего. Естественно при переносе встал вопрос, как тянуть контент. Был написан скрипт, достаточно тривиально подключавшийся к базе данных удаленного хоста и тянувший все данные оттуда напрямую. Оставалось лишь сделать сопоставление полей и распихать все по инфоблокам.
Все было хорошо, пока не дошли до сайта на котором не поддерживались удаленные подключения к БД. Вот тут уже задача стала серьезней. Во первых скрипт пришлось разделить на 2 части. Одна ставилась на сайт донор, а вторая работала на акцепторе. Естественно пришлось продумывать протокол обмена данными, в качестве которого естественно был выбран XML, согласование кодировок между сайтами, ряд других вопросов. Все вопросы решились и скрипт заработал.
Дальше больше. Перенос товаров из VirtueMart в каталог, обработка метатегов {mosimage} в тексте, перенос других компонентов Joomla, но..... сайты кончились, а задача интересная.
Отчасти из форума Битрикс, отчасти и изначального желания сделать нормальный, тиражируемый продукт скрипт обрел форму мастера Битрикс демоверсию которого я и выложил сегодня на своем сайте.
Итак, как работает jom2bit.
[spoiler] Настоящее описание действительно только для демо версии Мастера! 1. Скачиваем архив мастера с моего сайта Wblame.ru;
2. Заходим в панель настройки административного раздела. Выбираем Мастера и устанавливаем мастер jom2bit.
3. Мастер появился в списке мастеров? Можно приступать к работе.
4. Перед началом импорта контента желательно продумать будущую структуру инфоблоков. Я предусмотрел 2 возможности импорта контента: 1 режим. Разделы Joomla становятся корневыми секциями инфоблока, а категории Joomla - подсекциями. Инфоблок нужно создать до начала импорта. Этот режим может быть использован для импорта в инфоблок для которого уже настроена публичная часть. Например - статьи из базовой поставки Битрикс. 2 режим. - Разделы Joomla становятся инфоблоками, а категории секциями инфоблоков. Этот "продвинутый" режим позволяет разнести контент по инфоблокам и разнести контент по разделам сайта.
5. Запускам мастер, соглашаемся с условиями использования, и переходим на шаг установки скрипта экспорта.
Скачиваем архив со скриптом к себе на машину. Архив содержит всего 1 файл, который необходимо поместить в любую директорию вашего сайта на Joomla с правами на исполнение. Скрипт желательно переименовать в самое нестандартное имя. Хотя скрипт будет находится на вашем сайте ограниченное время, но он предоставляет доступ ко всей базе и уж лучше береженого бог бережет. Адрес скрипта на исходном сайте пишем в поле адреса и если все нормально, переходим к следующему шагу.
Шаг 3. Импорт пользователей из Joomla. [spoiler]
Мастер предлагает вам 2 режима импорта. Все пользователи помещаются в 1 группу - "Импортированные из Joomla" либо для каждой группы пользователей Joomla создается соответствующая группа. Вы в последствии сможете настроить права для каждой группы или перенести пользователей в группы Битрикс. По окончании импорта выдается протокол импорта:
По меньшей мере 1 пользователь у вас будет не перенесен. Протокол покажет ошибку "Пользователь с таким логином уже существует". Пытливые умы догадаются, что это admin. Важно. Пароли пользователей не переносятся из Joomla. Предлагаю сообществу обсудить этот момент. А также, как извещать пользователей, что их аккаунты перенесены.
Импорт пользователей можно пропустить нажав соответствующую кнопку.
Шаг 4. Импорт контента.
Приступаем к импорту контента. Выбираем тип инфоблоков, в которые будем переносить контент и способ переноса. В один или несколько инфоблоков. В случае переноса в один инфоблок на следующем шаге вам будет необходимо выбрать инфоблок для переноса.
После подтверждения выбора будет произведен импорт разделов и категорий из Joomla.
Шаг 5. Настройка импорта контента.
На данном шаге Вам предлагается произвести только одно действие, выбрать количество записей переносимых за 1 шаг. По умолчанию это 5 записей. Это сделано для возможности обойти время исполнения скрипта и ограничения нагрузки на сервер. Для "тяжелых" сайтов с большими статьями и множеством изображений в них или хостов с таймлимит 60 секунд рекомендуется оставить это значение или даже установить его в 1. Для новостных лент с множеством коротких заметок - 20 или даже 100. Это сокращает трафик, но увеличивает скорость работы мастера и нагрузку на сервер. Чем то надо жертвовать . В перспективе, после сбора соответствующей статистики, постараюсь добавить в скрипт автоматическое определение этого параметра.
Импорт контента.
Чтобы не было совсем скучно, смотрим, как движется прогресс бар.
Результат импорта (пока без протокола)
В конце напоминаем удалить скрипт экспорта.
Работа мастера завершена. [spoiler] Продолжение следует))
Автоудаление скрипта в плане. Быстрее всего в первой рабочей версии уже будет такая возможность, правда возникнет вопрос с правами. Их может не хватить на удаление. Сейчас я делаю некоторые шаги, что бы обезопасить наличие скрипта на сайте. Забывчивость не будет столь критичной.
Как я понял, скрипт экспорта для авторизации на сервере БД берет данные из файла конфига Жумлы. Я думаю тот кто занимается экспортом знает соответствующие пароли. Так может быть сделать, чтобы скрипт импорта проходил авторизацию при обращении к скрипту экспорта.
А вообще обычно после переноса, сайт на Джумле обычно удаляют вообще. Так что, вообщем-то и так все ОК!
Что то в этом роде, только без гоняния паролей от базы по сети. Перенесенные сайты я не удаляю. По меньшей мере пока позволяет хостинг. Возвращаться к ним приходится не раз.
Важно. Пароли пользователей не переносятся из Joomla. Предлагаю сообществу обсудить этот момент. А также, как извещать пользователей, что их аккаунты перенесены.
Ну вариант вроде два. Делать пользователям пароль высылать его, или делать временный и предлагать сразу менять. Кстати, можно попользоваться функционалом активации аккаунта, который есть с недавних пор. Т.е. делать пользователю пароль, высылать его и просить активировать себя нажав на ссылку.
Мастер надо сначала довести до ума. Пока накладывал линейный скрипт на пошаговый мастер возникла новая мысль. Сейчас полностью переделываю структуру, которая позволит не меняя сам мастер добавлять в него скины импорта. В Joomle очень много компонентов, будем наращивать функционал добавлением скинов. Кроме того, готовлю включение в мастер набора шаблонов и компонентов, позволяющих повторить структуру Joomla, чтобы сразу после импорта получить работающий сайт похожий на исходник (точного соответствия не обещаю). Дальше больше - Drupal и другие CMS, включая самописные. По поводу продажи естественно думал. Поэтому демку закодировал. С ценой и политикой продаж еще не определился.
Сейчас вижу себе это в двух вариантах: 1. Продажа услуги по переносу сайта с Joomla на Битрикс (может за счет партнерской скидки на лицензию Битрикс при приобретении у меня - бесплатно); 2. Продажу партнерам Битрикс (это в общем то и есть целевая группа) с партнерской скидкой, ну и прямая продажа.
Понятно так же, что буду делать разные сборки: Старт, Эксперт, Бизнес, Проф.
Прежде чем продавать надо еще решить ряд вопросов с обновлением скрипта и организации техподдержки. Поддержка в режиме 24/7/365 требует средств. А коммерческий эффект продукта пока не понятен. Ну в общем это не в блоге.
Пробовал ставить галочку "известить пользователя" при добавлении. Получается нелогичная ерунда. Если старый сайт еще работает, а новый еще не зафункционировал (не думаю, что кто то будет делать импорт на "живом" сайте) получится, что пользователь получит сообщение о смене пароля на сайте, к которому у него еще нет доступа и сайта то еще нет по хорошему. Лучше уж извещать пользователей о необходимости смены пароля уже в рассылке по поводу смены движка.
Не понимаю почему перенос пароля должен предоставлять сложности в joomla так как и в Битрикс пароль пользователя зашифрован функцией md5, не так ли?
А следсвенно нам даже не надо ничего менять, мы просто копируем пароль с одного сайта на другой, правда средствами API битрикса это не сделать (но можно же в БД поменять) Структура таблицы B_USERS на счет пароля вроде не меняется
Сложность не в переносе самого пароля. Да, при сохранении пароля и в Joomla и в Битрикс используется MD5. Смысл функции - невосстановимое шифрование строки, то есть восстановить исходную невозможно. Это раз. Второе - и в Joomla и в Битрикс исходные пароли перед шифрованием еще и преобразовываются. Другими словами невозможно восстановить строку пароля в Joomla, что бы потом ее правильно занести Битрикс. В демке мастера например строка БД содержащая MD5 служит паролем для Битрикса. Совсем без пароля нельзя.
Сложность в другом на самом деле. Мы переносим пользователей с одного сайта на другой. Цель переноса вероятнее всего заменить один сайт - другим. То есть с действующего сейчас, на тот который будет. В один прекрасный момент мы заменим исходный на новый и вот тогда каждому зашедшему зарегистрированному на старом сайте придется воспользоваться процедурой смены пароля. А что бы тут не возникло трудностей необходимо всех известиь, что сайт переехал и пожалуйста, смените пароль рассылкой или прямо на сайте.
Да уже посмотрел код создания паролей в Битрикс и в Joomla, раньше просто ни тот ни другой движок не обрабатывали пароль перед добавлением, и проблема заключалась только в разном типе таблиц.
Сейчас же можно воспользоватся следующим решением: Действительно пароль нужно создать (любой рандомный).
Потом создать скрипт который при запуске сделает следующее: <php $res = CUser::GetList(); while ($rc = $res->GetNext()) { $pass = randString(8); $chek = randString(8); CUser::ChangePassword($rc['LOGIN', $chek, $pass, $pass); } для каждого пользователя системы, ну и по событию смены пароля оповестить пользователя.
Ну это конечно не пик совершенства но все-же один раз ручками толкнуть скрипт и разослать всем пароли.
Может мое решение далеко от идеала но в его работоспособности врятли кто-то усомнится.
Рандомный пароль создается мастером уже при добавлении. Без него CUser->Add() не выполнишь. Только добраться до этого пароля очень тяжело, да и не имеет смысла.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».