Переезд с Ucoz на Drupal. Шаг 1: перенос пользователей. Друпал перенос


Резервное копирование и перенос Drupal сайтов

Часто возникает ситуация, когда нужно сделать резервную копию или перенос Drupal сайта на другой хостинг. В этой статье я опишу несколько способов резервного копирования и восстановления Drupal сайтов. Способов на самом деле много, а с помощью этой статьи читатели смогут выбрать наиболее подходящий для них способ резервного копирования.Эту статью, я постараюсь периодически дописывать, чтобы в результате получилась обзорная статья по методам резервного копирования и переносу Drupal сайтов.

Исходные данные:

Способ 1. Используем стандартные средства ssh

Не самый простой способ резервного копирования, но позволяет достаточно быстро сделать архив сайта при невозможности использовать drush. Также этот способ позволяет очень гибко задать параметры архивации файлов, то есть, например, можно исключить некоторые подкаталоги из каталога сайта, добавив ключ архиватора tar. Это нужно в том случае, если, например, какой то подкаталог представляет из себя большое хранилище аудио или видео контента, размер которого может быть в сотни и тысячи раз больше самого сайта.Этот способ можно широко использовать при написании bash скриптов.

Резервное копирование

Делаем бэкап базы данных

mysqldump -uuser -ppassword --default-character-set=UTF8 sitedb > sitedb_backup.sql

Архивируем бэкап MySQL и папку сайта

tar cvvzf backup_site.tar.gz html tar cvvzf backup_sitedb.tar.gz sitedb_backup.sql

После этих манипуляций мы имеем архив сайта (backup_site.tar.gz) и архив базы данных (backup_sitedb.tar.gz)

Восстановление из резервной копии

Для восстановления из резервной копии достаточно разархивировать архивы

tar xvvzf backup_site.tar.gz tar xvvzf backup_sitebd.tar.gz

Восстановить базу данных из файла на сервере

mysql -uuser -ppassword --default-character-set=UTF8 sitedb < sitedb_backup.sql

Способ 2. Используем drush

На мой взгляд самый простой способ резервного копирования, но работает только в свежих версиях drush.

Резервное копирование

Переходим в корневой каталог сайта и выполняем команду

drush archive-dump --destination=/home/webmaster/domains/drupal-admin.ru/backup/site_backup.tar.gz

После выполнения этой команды архив сайта будет создан в /home/webmaster/domains/drupal-admin.ru/backup/site_backup.tar.gz

Восстановление из резервной копии

Для восстановления выполняем следующую команду

drush archive-restore /home/webmaster/domains/drupal-admin.ru/backup/site_backup.tar.gz --destination=/home/webmaster/domains/drupal-admin.ru/html --db-su=root --db-su-pw=password --overwrite

Стоит отметить, что в последней команде в качестве имени пользователя и пароля к БД были заданы root и password — это сделано для того, чтобы drush смог создать новую базу. Также можно удалить имеющуюся базу sitedb и тогда можно восстанавливать c теми же именем пользователя и паролем, которые были указаны в settings.php архивируемого сайта.

Способ 3. Используем модуль Backup and Migrate в связке с Backup and Migrate Files

Отличный модуль, позволяющий быстро сделать архив сайта и базы данных Drupal, при этом не нужно подключаться по ssh. Правда первоначальная установка все таки потребует подключения в терминал.

Для начала работы необходимо установить данные модули с официального сайта:Backup and MigrateBackup and Migrate FilesЧтобы заработал модуль Backup and Migrate Files необходимо:

  1. Скачать с сайта архив
  2. Разархивировать и скопировать файл Tar.php в папку модуля backup_migrate_files/includes

Далее на странице конфигурации модуля admin/config/system/backup_migrate можно выбрать что и куда архивировать.

Перенос Drupal сайтов на другой хостинг

Для осуществления переноса сайта выбираем один из вышеприведенных методов резервного копирования и выполняем следующие действия:

  1. Создаем резервную копию Drupal сайта.
  2. Выполняем перенос архива сайта и базы данных на новый хостинг. Для этого можно использовать команды scp, rsync, или просто через ftp.
  3. Восстанавливаем сайт из резервной копии.
  4. Изменяем записи на DNS сервере, указав новый IP адрес сервер нашего сайта.

После обновления DNS серверов мы получим полностью рабочую версию нашего сайта на новом хостинге. На этом перенос Drupal сайта можно считать оконченным.

drupal-admin.ru

Перенос Drupal с локального Denver’а на хостинг

Хорошо протестировав свой drupal-сайт на денвере, настроив все нужные модули и нарисовав красивый дизайн самое время перенести сайт с денвера, из закоулков жесткого диска на хороший хостинг, «показать его миру».Вот о том, как это сделать и пойдет сегодня речь.Процесс переноса сайта с денвера на хостинг рассмотрим детально на примере панели управления cPanel

Создание БД и ее настройка.Для создания базы данных, в которую мы немного позже перенесем свою базу (с денвера), нужно найти в cPanel ярлык доступа к управлению базами данных.Выглядеть он примерно будет так:

cPanel 11, базы данных MySQL

На открывшейся странице вводим имя новой базы данных — «myDrupalDB» и нажимаем «создать базу данных»

Создание новой базы данных в cPanel 11

Вы должны увидеть сообщение о том, что база была успешно создана. Теперь возвращаемся на предыдущую страницу и создаем нового пользователя баз данных «myUser» с паролем «myPass» ( конечно замените пароль на свой -) ).Нажимаем «создать пользователя»

Создание нового пользователя в cPanel 11

Как и в предыдущем случае вы увидите сообщение об успешном создании пользователя.Снова вернемся на страницу назад и определим доступ пользователя к базе данных drupal. Для этого из списка пользователей выберем «myUser», из списка бд выберем «myDrupalDB» и нажмем «Добавить»

Назначение пользователя базе данных в cPanel 11

На открывшейся странице определим права пользователя, просто установив галочку «ALL PRIVILEGES» (Все привелегии) и нажмем «Внести изменения».

Определение прав пользователя базы данных в cPanel 11

Перенос файлов

Для переноса файлов drupal, вы можете воспользоваться любым FTP-менеджером. Я, к примеру, отдаю предпочтение FileZilla, но это дело вкуса, а о вкусах как известно не спорят. Главное — перенести все файлы друпала в нужную папку, «корневую директорию». Какая именно директория у вас корневая, вы можете узнатьа) На главной странице cPanel (обычно в левом меню пункт «домашняя директория»)б) Из письма, которое обычно присылает хостер после регистрациив) У техподдержки хостераг) Методом научного тыка

Однако, перед загрузкой файлов drupal на сервер, необходимо внести изменения в файл settings.php…\www\sites\default\settings.php

Исправляем:

# $base_url = ‘http://www.example.com’; // NO trailing slash!на$base_url = ‘http://www.ваш_домен.com’;а также строку номер 94 на$db_url = ‘mysql://myUser:myPass@localhost/myDrupalDB’;Где myUser,myPass и myDrupalDB — данные, которые вы указывали при создании бд и пользователя.localhost — верно для подавляющего большинства хостеров, однако бывают и исключения, например masterhost.Теперь смело загружайте все файлы drupal на сервер.

Перенос (импорт) базы данных drupalПоследний шаг — перенос базы с помощью phpMyAdmin.Запустив предварительно денвер, открываем localhost/Tools/phpMyAdmin/, выбираем используемую базу и переходим в раздел «Экспорт».Из настроек экспорта нам необходимо поменять только вариант упаковки в «нет» на «zip».

Экспотр базы данных при помощи phpmyadmin

После того, как вы кликнете «ок», начнется загрузка zip-архива. Этот архив — и есть ваша база данных.

Осталось всего ничего — скопировать только что сохраненную вами базу в недавно созданную. Для этого в панели управления найдите ярлык phpMyAdmin

Импорт базы данных при помощи phpMyAdmin

На открывшейся странице выберете базу данных «myDrupalDB» и перейдите в раздел «Импорт», где укажите сохраненный вами файл с дампом базы данных. Когда вы кликнете ок, начнется импорт. Если ваша база перешегнула порог в несколько мегабайт, вам вероятно необходимо будет возобновлять процесс импорта (просто следуйте появляющимся инструкциям).

И вот, все закончено. Поздравляю, вы только что перенесли сайт на drupal с денвера на хостинг!Не забудьте,если необходимо, изменить именные сервера (ns-сервера) в панели управления доменом и помните, что на делегирование домена, а также на полное обновление именных серверов может уйти до двух суток.

Оригинал http://www.wisecat.ru/2008/7/13/perenos-drupal-s-denvera-na-khosting

dkws.net

Перенос данных с сайта на сайт (Drupal)

Часто возникает задача переноса контента на новый сайт или между различными версиями сайта. Рассмотрим перенос данных с одного Drupal-сайта на второй Drupal-сайт. Проблемы переноса материалов с других CMS (Joomla, Wordpress и др.) на CMS Drupal обсудим в другой раз.Под «переносом контента» будем считать перенос nod, связанных с ними терминов таксономии и комментариев, а также пользователей, написавших эти комментарии и nod-ы.

Зачем это нужно?

Выделим 2 главных случая, когда это необходимо:

Здесь-то и возникают вопросы, которые необходимо решать.

Почему не скопировать таблицы или всю БД?

Собственно, это первое, что приходит в голову. Но если немного подумать, то становится ясно, что этого нельзя делать. Если несколько разработчиков работают с одним сайтом, то вы просто поломаете что-то, что там уже сделано или делается в этот момент. Это недопустимо.Даже если вы точно знаете, что с теми таблицами, которые предстоит заменить, никто не работает, возникает другая проблема: связи между таблицами. Мы не можем просто скопировать таблицу node, потому что у нее большое количество связей с другими таблицами. К примеру, вы откроете схему модуля node и узнаете, что нужно скопировать. Это вам вряд ли поможет, потому что остается много других проблем. Например, есть такой нюанс (точнее один из многих нюансов, но рассмотрим реальный пример, который забрал немало времени у наших разработчиков): если вы удачно перенесли nod-у, но в поле автора nod-ы указан идентификатор юзера, которого не существует на этом сайте, то nod-а не будет нигде отображаться.На следующей диаграмме (рис. 1) схематически изображены основные связи таблицы node с другими таблицами в практически базовой сборке Drupal. На ней видны связи между экспортируемыми объектами, которые нужно сохранить. Иначе, весь смысл в таком переносе контента теряется.

Модули для переноса контента?

Наконец, мы дошли до самого интересного – модулей Drupal, которые осуществляют перенос контента (я перечислю только основные, наиболее известные):

Далее, обсудим каждый из пунктов отдельно.

Node export

Как уже написано выше, экспортирует nod-ы, прост в использовании. Умеет экспортировать nod-ы как по одной штуке, так и несколько сразу. Отдает результат в текстовом поле или в виде файла (это настраивается). Также можно настроить поля, которые будут очищаться при экспорте, причем для каждого content type.

Импортировать, так же, можно, вставив текст импорта в текстовое поле или загрузив файл.

Преимущества:

Недостатки:

Вывод: сайт-получатель должен быть идентичен сайту-отправителю.

Taxonomy export

Модуль отлично справляется со своей задачей. Может переносить как определения словарей, так и словари с терминами, сохраняя иерархию и соответствия «контент-тайп - словарь», если, конечно, такой контент-тайп на сайте-получатале существует.

Так же как Node export, умеет отдавать данные как в браузер в текстовое поле, так и в виде файла.Умеет обновлять существующие словари и термины. Одно главное условие – идентификаторы словарей и терминов должны совпадать на сайте-отправителе и получателе.

Недостаток один. Нет смысла использовать модуль вместе с Node export. Если вы хотите сохранить зависимости между nod-ами и терминами на сайте-получателе, то у вас ничего не получится, потому что модуль создает записи с новыми идентификаторами(отличными от  соответствующих на сайте-отправителе). Все связи теряются.

Node import, Menu import, User import

Скажу всего пару слов. Эти модули осуществляют импорт из CSV-файлов, которые необходимо перед этим сформировать. Эти модули не осуществляют экспорт, так как они используются в основном для переноса материалов с других систем на Drupal.

Deployment + Services

Теперь мы подошли к главному модулю, которому я уделю больше всего внимание. Основной принцип работы модуля (рис. 2) заключается в том, что, так сказать, он сам занимается импортом данных на сайте-получателе. Точнее, отправляет нужные команды, на которые реагирует модуль Services на сайте-получателе. Все, что нужно сделать, это выбрать элементы для отправки и запустить deployment.

Отметим, что на сайте-отправителе нужно установить модуль Deployment и настроить его, указав адрес сервера-получателя. А на сайте-получателе необходимо установить модуль XMLRPC и Services, включить в его настройках авторизацию по идентификатору сессии (авторизацию по ключу Deployment не поддерживает).Подробней о настройке можно почитать в файле INSTALL.txt

Состав модуля Deployment:

Достоинства:

Недостатки:

Deployment plans

Deployment plan – это набор элементов, которые необходимо отправить на сайт-получатель. В этот набор можно добавить все: nod-ы, комментарии, настройки, термины таксономии.

К примеру, можно создать деплоймент план «Настройки» и добавить туда настройки нужных нам модулей. После этого отправить все настройки за один раз.На рис. 3 мы добавляем в деплоймент план 2 ноды. Модуль сам распознает связи и, соответственно, добавляет их автоматически.

Затем (рис. 4) можно просмотреть добавленные в план элементы и удалить их, если они не нужны.

Выводы

Подведем итог:

 

Автора автра

myoversite.ru

Как перенести Drupal на WordPress

Drupal — это надежная система управления контентом (CMS) с множеством функций, но ее кривая обучения крутая, особенно если вы новичок в веб-разработке. Однако, если решение в настоящее время не оправдывает ваших ожиданий, вы можете перенести Drupal на WordPress и выяснить насколько удобнее управление.

Миграция вашего веб-сайта может показаться сложной задачей — такой вид, который вы наняли эксперта, чтобы сделать от вашего имени. Тем не менее, WordPress упрощает работу даже для новых пользователей самостоятельно выполнять всю миграцию, благодаря удобной плагиновой системе (и простоте использования).

В этой статье мы расскажем вам, как перенести Drupal на WordPress тремя простыми шагами, используя только один плагин.

Что вы должны учитывать перед миграцией

Если вы используете Drupal, у вас уже должен быть хостинг-провайдер и домен. Тем не менее, вы можете захотеть переключиться на хост, который будет соответствовать потребностям и требованиям WordPress. С учетом сказанного, если вы просто хотите быстро начать работу и с доступным и надежным хостом, мы рекомендуем. 

Прежде чем приступить к миграции, на вашем веб-сервере должен быть установлен пустой WordPress.

После того, как вы установили WordPress, вы можете начать перенос Drupal на WordPress:

Как перенести Drupal на WordPress (в 3 этапа)

В этом разделе мы будем использовать FG Drupal WordPress для выполнения нашей миграции. Этот инструмент замечательно прост в использовании, и мы рассмотрим, как его использовать в этом случае. Однако, если вы не хотите столкнуться с ошибками, изучите инструкции в документации плагина.

Стоит отметить, что этот плагин также поставляется в премиальной версии, но бесплатного варианта более чем достаточно для регулярной миграции. Однако, если вы хотите переместить несколько авторов, ваши комментарии, пользователи и даже персонализированные типы сообщений, возможно, стоит рассмотреть премиум-версию.

Шаг №1: Установите и активируйте FG Drupal для плагина WordPress

Во-первых, зайдите на новый сайт WordPress и найдите опцию Plugins> Add New на панели инструментов WordPress. Внутри введите FG Drupal в WordPress на строке поиска в правой части экрана:

Как перенести Drupal на WordPress

Если вы правильно набрали имя, должен появиться только один плагин. Нажмите кнопку «Установить сейчас» рядом с ее именем:

Как перенести Drupal на WordPress

После установки плагина кнопка изменится на «Активировать». Нажмите еще раз, и мы закончили!

Шаг №2: Узнайте параметры базы данных Drupal

Прежде чем мы сможем использовать плагин для переноса Drupal на WordPress, вам нужно найти несколько конкретных параметров. Это ваше имя пользователя Drupal, пароль, имя хоста и имя и префикс базы данных.

Вы уже должны знать пару из них, но вы можете найти остальные, вдаваясь в основные файлы установки Drupal с помощью FTP-клиента — мы рекомендуем FileZilla. Просто загрузите файлы с помощью клиента и перейдите в каталог сайта / по умолчанию. Там вы найдете файл settings.php. Откройте его с помощью любимого текстового редактора и найдите все параметры, которые мы указали ранее.

Обратите внимание на эту информацию, потому что нам понадобится она через минуту. А пока вернемся к WordPress.

Шаг №3: Импорт содержимого Drupal в WordPress

Перейдите на панель инструментов WordPress, откройте вкладку «Инструменты» и выберите опцию «Импорт». Если вы установили плагин успешно, в меню «Импорт» появится новый параметр Drupal:

Как перенести Drupal на WordPress

Нажмите «Запустить импортер», и вы попадете на новую страницу с множеством настроек для настройки. Перейдите и введите (или вставьте) информацию, которую вы указали во время шага номер два, в разделе параметров базы данных Drupal:

Как перенести Drupal на WordPress

Затем вам нужно настроить, как плагин будет импортировать ваши резюме и файлы мультимедиа Drupal. Выбор сводки импорта> в контент будет импортировать их с помощью ссылки «Подробнее». Выберите вариант, который вы предпочитаете, прежде чем перейти в раздел Media. Если вы не хотите, чтобы плагин импортировал ваш носитель, поставьте галочку рядом с опцией Пропустить медиа. Вы также можете выбрать, какие изображения должны быть установлены как ‘featured’ для ваших сообщений и страниц, а также несколько дополнительных настроек, связанных с внешними носителями:

Как перенести Drupal на WordPress

В то время как ваши файлы миграции должны импортированы гладко, но, если действительно возникнут какие — либо вопросы, в процессе импорта, вы можете увеличить таймаут для каждого мультимедийного файла, который является последней настройкой на странице конфигурации (как показано выше). Это будет учитывать переменную скорость загрузки, которая позволяет импортировать ваш медиафайл.

После того, как вы настроены, нажмите кнопку «Начать / возобновить импорт» и отдохните, когда плагин выполняет свою работу. Когда миграция завершена, в журнале плагина появится сообщение об успешном завершении. Затем прокрутите страницу до конца и нажмите кнопку «Изменить внутренние ссылки». Это позволит обновить любые внутренние ссылки вашего сайта, чтобы они соответствовали его новой структуре.

Как только вы закончите, вот и все! Вы смогли успешно перенести Drupal на WordPress!

Что делать, как только вы перенесли свой сайт Drupal в WordPress

Теперь, когда вы перешли на WordPress, вы захотите в полной мере использовать функциональность платформы. Во-первых, мы рекомендуем вам выбрать стильную тему для вашего сайта. Как только это не работает, вы должны установить любые плагины, которые могут вам понадобиться. Поиск правильных плагинов может занять некоторое время, но это стоит усилий в зависимости от функций, которые вы хотите реализовать — некоторые из них необходимы для безопасного сайта.

Вывод

Миграция веб-сайта в WordPress не должна быть сложной. Пока вы выбираете подходящий инструмент для работы, выстраивайте дружественный WordPress хост и заранее настраивайте платформу, вы будете удовлетворены.

Фактически, если вы являетесь пользователем Drupal, все, что требуется, это три простых шага, чтобы переместить весь ваш сайт в WordPress. Вот они:

  1. Установите и активируйте FG Drupal для плагина WordPress.
  2. Узнайте параметры базы данных Drupal.
  3. Импортируйте содержимое Drupal в WordPress.

У вас есть вопросы о том, как перенести Drupal на WordPress? Задайте вопрос в разделе комментариев ниже!

 

maining48.ru

Переезд с Ucoz на Drupal. Шаг 1: перенос пользователей.

Есть у меня сайт на Ucoz. Точнее, не у меня, но у хорошего знакомого. Я на этом сайте являюсь постоянным посетителем и администратором. Сайт довольно неплохо развивается, и тот факт, что он по большому счету не принадлежит создателям, в последнее время стал напрягать. Задумки перенести сайт на другую CMS появились уже давно, но вопрос – на какую и как – оставался актуальным. Видела предложения перенести на Joomla за $100, но такой подход меня как программиста не устраивает. Хочется разбираться в той системе, куда собираемся переезжать. Я уже было взялась разбираться с Джумлой, как появился очередной заказ на сайт на Друпале, и, выполнив его, я поняла – это же то, что мне нужно! Да, система сложна для новичка, и на первый достаточно простой сайт я потратила почти 3 месяца. Ядро было хакнуто не раз в порыве отчаяния понять API… Но после третьего сайта всё более-менее встало на свои места.

Поискав информацию по поводу производительности (т.к. она мне видится слабым местом Друпала), нашла некоторые сравнительные характеристики с Джумлой.http://cpcs.ws/news/2009/04/03/cahephp-joomla-drupalhttp://buytaert.net/drupal-vs-joomla-performancehttp://buytaert.net/drupal-vs-joomla-hosting-costshttp://buytaert.net/cms-code-base-comparisonВ общем, Друпал выглядит не так уж и плохо!

Ну что ж, приступим.

Для начала я поставила на localhost девственно чистый Drupal. Включила только модули Profile (он нам понадобится для данных пользователей) и Administration menu (для удобства администрирования сайта).

Готового решения (модуля) для импорта данных я не нашла, поэтому придется писать свой модуль. Но нашла модули для переезда с Джумлы, их я взяла на заметку при создании своего модуля.

Итак, первой задачей будет перенести пользователей.

Бэкап данных на Ucoz можно получить в виде текстовых файлов. Данные о пользователях хранятся в файле users.txt. Формат файла таков:

Admin|0|$1$EW9d$R/szWQXqeIcG/C5skBY90|http://******.ucoz.ru/avatar/53/435992.jpg|18|Евгений|1|[email protected]|http://*****.ucoz.ru/||0|||Моя подпись|Admin|1190520411|195.112.227.234|0mysite||||0|1984-01-11|0||1192225866

Так выглядит одна строка с данными о пользователе. Поля разделены знаком «|». Значения полей следующие:

0. user1. unetID2. password3. avatar4. flags5. fullname6. gender7. email8. homepage9. icq10. country11. state12. city13. signature14. title15. regdate16. ip17. old-field18. aol19. msn20. yahoo21. ispm22. birthday23. verify24. options25. lastmodified

Приступим к написанию модуля. Для этого в папке sites/all/ создадим папку modules (у меня она уже была создана, туда я сохранила модуль Administration menu перед его установкой), а в ней – папку ucoz. Создадим файл ucoz.info. Его содержимое:

; $Id$name = Ucozdescription = "Ucoz2Drupal import module"dependencies[] = profiledependencies[] = taxonomycore = 6.x

Следующий шаг – создание файла модуля ucoz.module.Начинаем наш код описанием модуля

// $Id$

/** * @file * The Ucoz module used for migrate Ucoz to Drupal. */

Определим права доступа

/** * Implementation of hook_perm(). */function ucoz_perm() {         return array('administer ucoz');}

Добавим пункты менюadmin/settings/ucoz – страница настроек модуляadmin/content/ucoz_import – страница импорта

/** * Menu callback. Prints a listing of active nodes on the site. */

function ucoz_menu() {        $items = array();

        $items['admin/content/ucoz_import'] = array(        'title' => 'Import from Ucoz',        'page callback' => 'drupal_get_form',        'page arguments' => array('ucoz_import_form'),        'access arguments' => array('administer ucoz'),        'description' => 'Import content, categories and users from a Ucoz website',        );

        $items['admin/settings/ucoz'] = array(        'title' => 'Ucoz to Drupal',        'page callback' => 'drupal_get_form',        'page arguments' => array('ucoz_admin_settings'),        'access arguments' => array('administer ucoz'),        'description' => 'Migrate Ucoz to Drupal.'        );

        return $items;}

Далее создадим форму настроек.Добавим следующие настройки:

function ucoz_admin_settings() {

        // only administrators can access this function

        $weight = -20;

        // Generate the form - settings applying to all patterns first        $form['ucoz_import_settings'] = array(        '#type' => 'fieldset',        '#weight' => $weight,        '#title' => t('Import defaults'),        '#collapsible' => FALSE,        '#collapsed' => FALSE,        '#description' => 'Set the default values for the '. l('Import from Ucoz', 'admin/content/ucoz_import') .' form',        );

        $form['ucoz_import_settings'][] = ucoz_import_form_checkboxes();        $weight++;

        $form['ucoz_settings_files'] = array(        '#type' => 'fieldset',        '#title' => t('Files settings'),        '#collapsible' => TRUE,        '#collapsed' => false        );

        $form['ucoz_settings_files']['ucoz_path'] = array(        '#type' => 'textfield',        '#title' => 'Path of your Ucoz files',        '#default_value' => variable_get('ucoz_path', UCOZ_PATH),        '#description' => 'The path where you saved backup Ucoz files.');

        $form['ucoz_settings_files']['ucoz_live_url'] = array(        '#type' => 'textfield',        '#title' => 'URL of your Ucoz site',        '#default_value' => variable_get('ucoz_live_url', UCOZ_LIVE_URL),        '#description' => 'The URL of a live version of your Ucoz site'        );

        return system_settings_form($form);}

Поля (а точнее чекбоксы), которые будут повторяться также и в форме импорта, я вынесла в отдельную функцию ucoz_import_form_checkboxes

/** * These checkboxes are used on both the admin and import forms */function ucoz_import_form_checkboxes(&$form_state = NULL) {

        $form['ucoz_import'] = array(        '#type' => 'fieldset',        '#title' => t('Items to import'),        '#collapsible' => FALSE,        '#collapsed' => FALSE,        );

        $form['ucoz_import']['ucoz_import_users'] = array(        '#type' => 'checkbox',        '#title' => t('Import users'),        '#default_value' => variable_get('ucoz_import_users', UCOZ_IMPORT_USERS),        );

        $form['ucoz_update_duplicate'] = array(        '#type' => 'checkbox',        '#title' => t('Update previously imported items?'),        '#description' => t('If selected, any items which have already been imported, and which have been updated on the Ucoz website, will be updated.'),        '#default_value' => variable_get('ucoz_update_duplicate', UCOZ_UPDATE_DUPLICATE),        );

        return $form;}

Данные функции сгенерируют нужные нам элементы формы настроек и автоматически запомнят указанные пользователями значения.

Для сохранения исходных данных о пользователях (которые нам еще понадобятся в дальнейшем) создадим таблицу в базе данных, назовем ее ucoz_users. В нее занесем ID пользователя (uid), имя пользователя в базе Ucoz (ucoz_name) его пароль в формате Ucoz (password) и метку converted, которая будет показывать, был ли конвертирован пароль в формат Drupal (это произойдет при первой авторизации пользователя на новом сайте). Таблицу будем создавать при подключении модуля. Для этого создадим файл ucoz.install.

Таблица в Друпал создается специальной схемой, в которой описаны все поля.

/** * Implementation of hook_schema(). */function ucoz_schema() {   $schema['ucoz_users'] = array(   'description' => 'Stores the original Ucoz user ID and password and links to the {users} table',     'fields' => array(       'uid' => array(         'type' => 'int',         'unsigned' => TRUE,         'not null' => TRUE,         'default' => 0,         'description' => "The users {users}.uid.",       ),       'ucoz_uid' => array(         'type' => 'int',         'unsigned' => TRUE,         'not null' => TRUE,         'default' => 0,         'description' => "The users id from the Ucoz database.",       ),       'password' => array(         'type' => 'varchar',         'length' => 100,         'not null' => TRUE,         'default' => '',         'description' => "The users original Ucoz password.",       ),       'converted' => array(         'type' => 'int',         'unsigned' => TRUE,         'not null' => TRUE,         'default' => 0,         'description' => "Boolean value storing whether or not the users Ucoz password has been converted to an entry in the {users}.pass table.",       ),     ),     'primary key' => array('uid'),     'unique keys' => array(       'ucoz_uid' => array('ucoz_uid'),     ),   );

  return $schema;}

Функция ucoz_install() выполняется при первой активации модуля ucoz и читает схему, которую мы описали. Она переводит ее в SQL-код и создает нужные нам таблицы.

/** * Implementation of hook_install(). */function ucoz_install() {   // Create tables.   drupal_install_schema('ucoz');}

Чтобы удалить ненужные таблицы при удалении модуля, используем функцию ucoz_uninstall(), которая будет удалять таблицы из БД и переменные, используемые модулем.

Теперь попробуем включить наш модуль. Т.к. он уже был однажды запущен (проверка правильности создания), то его нужно переустановить. Сначала мы отключим модуль на странице Главная › Управление › Конструкция сайта, а затем удалим на вкладке Удалить. Drupal выдал ошибку, т.к. не смог удалить таблицу из базы данных – и это правильно, ведь таблица еще не была создана. Снова подключим наш модуль. Всё получилось, таблица в БД была создана.

Итак, пришло время для самой функции импорта.Для переноса данных нам нужно прочитать файл users.txt, находящийся в указанной пользователем папке, распарсить его и занести полученные данные в БД.

Сначала проверим наличие нужного файла.

Если файл users.txt не найден, то пользователю выдается текст ошибки и импорт не состоится.

function ucoz_import_users($ucoz_update_duplicate = NULL) {         $ucoz_path = variable_get('ucoz_path', UCOZ_PATH);         $file_handle = fopen(file_directory_path().'/'.variable_get('ucoz_path', UCOZ_PATH).'/users.txt', "r");

        while (!feof($file_handle)) {

                $line = fgets($file_handle);                if (!empty($line)){                        $data = explode('|',$line);                        echo "";                        print_r($data);                        echo "";                }        }}

Наша функция читает файл и выводит полученные массивы на экран. Теперь нам нужно сохранить их в базу.

function ucoz_import_users($ucoz_update_duplicate = NULL) {         if ($ucoz_update_duplicate === NULL) {                 $ucoz_update_duplicate = variable_get('ucoz_update_duplicate', UCOZ_UPDATE_DUPLICATE);         }

        $ucoz_path = variable_get('ucoz_path', UCOZ_PATH);        $file_handle = fopen(file_directory_path().'/'.variable_get('ucoz_path', UCOZ_PATH).'/users.txt', "r");

        $users_total = 0;        $users_updated = 0;        $users_new = 0;        $users_failed =  0;

        while (!feof($file_handle)) {                $line = fgets($file_handle);                if (!empty($line)){                        $data = explode('|',$line);

                        // проверка, был ли такой пользователь импортирован ранее                        $uid = db_result(db_query("SELECT uid FROM {ucoz_users} WHERE ucoz_name = '%s'", $data[0]));

                        // Нужно ли обновлять данные пользователя                        if ($uid && !$ucoz_update_duplicate) {                                continue;                        }

                        // создание записи пользователя                        $user = new stdClass();                        if ($uid) {                                $user->uid = $uid;                        }                        $user->name = $data[0];                        $user->mail = $data[7];                        $user->status = 1;                        $user->created = $data[15];                        $user->access = $data[25];

                        $res = FALSE;                        // запись данных в БД                        if ($uid) {                                $res = drupal_write_record('users', $user, 'uid');                        }elseif ($ucoz_update_duplicate) {                                $res = drupal_write_record('users', $user);                        }

                        if ($res) {                                // если пользователь создан, записываем его данные во вспомогательную таблицу ucoz_users                                $ucoz_user = new stdClass();                                $ucoz_user->uid = $user->uid;                                $ucoz_user->ucoz_name = $user->name;                                $ucoz_user->password = $data[2];

                                // Был ли пароль конвертирован в формат Друпал                                if (!empty($user->pass)) {                                        $ucoz_user->converted = 1;                                }                                // запись данных в БД                                if ($uid) {                                        drupal_write_record('ucoz_users', $ucoz_user, 'uid');                                }else {                                        drupal_write_record('ucoz_users', $ucoz_user);                                }

                                // подсчет статистики                                switch ($res) {                                        case SAVED_NEW:                                        $users_new++;                                        break;

                                        case SAVED_UPDATED;                                        $users_updated++;                                        break;

                                        default:                                        $users_failed++;                                        break;                                }

                        }                }        }        drupal_set_message(t('Processed @users_total users (@users_new new, @users_updated updated, @users_failed errors)', array('@users_total' => $users_total, '@users_new' => $users_new, '@users_updated' => $users_updated, '@users_failed' => $users_failed))); }

Запускаем импорт данных.

Обработано 281 пользователей, 0 обновлений, 0 ошибок. Отлично. Наши пользователи в базе (можно проверить, пройдя на страницу Управление › Управление пользователями). Но перенеслись только самые основные данные о пользователе, а у нас есть еще много дополнительных.

Дополнительные поля для пользователей позволяет добавлять модуль Profile. Добавим поле Realname к профилю пользователя

//Add Realname to Profileif (db_result(db_query("SELECT COUNT(*) FROM {profile_fields} WHERE name='profile_realname'")) == 0) {                 db_query(" INSERT INTO {profile_fields} (title,name,type,weight,visibility,category) VALUES ('Real Name','profile_realname','textfield','0','2','Личные данные')");         }         $results_fid_realname = db_query("SELECT fid from {profile_fields} WHERE name='profile_realname'");         $data_fid_realname = db_fetch_object($results_fid_realname);         $fid_realname = $data_fid_realname->fid;

В функции ucoz_import_users для каждого пользователя заполним это поле.

//Check and Update Realname$profile_value = new stdClass();$profile_value->fid = $fid_realname;$profile_value->uid = $user->uid;$profile_value->value = $data[5];

if ($uid) {        drupal_write_record('profile_values', $profile_value, array('fid', 'uid'));}else {        drupal_write_record('profile_values', $profile_value);}

То же самое сделаем с полями пол, город, web-сайт, ICQ, AOL, MSN и Yahoo. Эти поля могут иметь другое название и назначение на сайте Ucoz. На сайте Друпал мы также сможем их переименовать и настроить.

Ах, да, у пользователей же еще есть аватары!

if (!empty($data[3])){         $new_file = file_directory_path().'/'.variable_get('user_picture_path', 'pictures') .'/picture-'.$uid.'.'.substr(strrchr($data[3], '.'), 1);         // Удаление старого аватара         if (file_exists($new_file)) {                 file_delete($new_file);         }         //echo '';         if ($avatar=file_get_contents($data[3])){                 file_put_contents($new_file,$avatar);                 $user->picture = $new_file;         }}

Данный код я вставила перед сохранением объекта $user. Он собирает изображения (аватары) и сохраняет их на наш сервер, а также записывает в базу данные об аватаре. К сожалению, мне удалось таким образом скопировать лишь часть аватаров пользователей (вида http://src.ucoz.net/a/02/1298.jpg). Остальные выдали ошибку

warning: file_get_contents(http://****.ucoz.ru/avatar/53/435992.jpg) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden in ***\www\sites\all\modules\ucoz\ucoz.module on line 267.

Обидно, конечно, но не смертельно. Что-нибудь придумаем.

Осталась самая малость – конвертация паролей. Скажу честно, взяла функции с модуля Joomla, только изменила метод проверки пароля.

function ucoz_form_alter(&$form, $form_state, $form_id) {         if ($form_id == 'user_login' || $form_id == 'user_login_block') {                 if (isset($form_state['post']['name'])) {                         $last_validator = array_pop($form['#validate']);                         $form['#validate'][] = 'ucoz_login_validate';                         $form['#validate'][] = $last_validator;                 }         }}

function ucoz_login_validate($form, &$form_state) {        ucoz_authenticate($form_state['values']);}

function ucoz_authenticate($form_values = array()) {        global $user;

        if (!empty($user->uid)) {                // Пользователь уже авторизован                return;        }

        if (form_get_errors() || empty($form_values['name']) || empty($form_values['pass'])) {                // Проверка правильности введенных данных                return;        }

        $account = user_load(array('name' => $form_values['name'], 'status' => 1));        // Пользовтель не существует        if (!$account) {                return;        }

        // Ищем запись пользователя в таблице ucoz_user        $ucoz_user = db_fetch_object(db_query("SELECT * FROM {ucoz_users} WHERE converted=%s and uid = %d", 0, $account->uid));        if (!$ucoz_user) {                return;        }

        // Проверяем правильность введенного пароля        $hash = $ucoz_user->password;        preg_match('/(\$1\$[^\$]+)/',$hash,$salt);        $salt = $salt[0];        if ($hash == crypt($form_values['pass'],$salt)) {                $user = $account;                watchdog('ucoz', 'Converting password for user @Name (Ucoz id @juid)', array('@name' => $user->name, '@juid' => $ucoz_user->juid));

                // Обновляем пароль пользователя Drupal                user_save($user, array('pass' => $form_values['pass']));

                $ucoz_user->converted = 1;                drupal_write_record('ucoz_users', $ucoz_user, array('uid'));

                user_authenticate_finalize($form_values);                return $user;        }}

Попробовала зайти под своим пользователем в системе ucoz – авторизация прошла успешно. Пароль добавился в таблицу users. Задача успешно выполнена. Правда, остались еще роли пользователей, но думаю, к этому я вернусь уже позже. Следующая задача – перенос материалов сайта.

drupal.ru

Перенос Drupal-сайта на новый хостинг от «А» до «Я»

ПреамбулаПо роду своей деятельности довольно часто приходится сталкиваться с задачей переноса клиентских сайтов на наш хостинг. Так же опыт показывает, что для многих данная операция представляет довольно большую сложность, собственно это и послужило мотивацией для написания данной статьиЭтап 1. ИнвентаризацияДля удачного и быстрого переноса нужно иметь следующее:

  1. SSH- или FTP-доступ к старому
  2. Доступ к базе данных на старом хостинге
  3. SSH- или FTP-доступ к новому хостингу
  4. Доступ к БД на новом хостинге
  5. Доступ к панеле управления доменом

SSH-доступ не обязателен, но очень часто необходим, например, когда требуется сохранить даты изменения файлов или ещё что-то, так в частности было с http://drupaler.ruДоступ к панеле управления доменом нужен для оперативной смены NS-серверов домена на сервера нового хостинга, если вы регистрировали домен через хостера, то уточните, предоставляет ли он интерфейс для управления доменом, некоторые хостеры не только не предоставляют интерфейс, но и берут деньги за смену NS-серверов для домена. В случае, если вы регистрировали домен напрямую через регистратора, то обычно волноваться не о чем.Этап 2. Подготавливаем рабочее местоГотовим новый хостинг

  1. Добавляем домен в контрольную панель, в примере это blablabla.com
  2. Создаём базу данных и пользователя к ней, если это необходимо(зависит от хостера)
  3. [опционально] Создаём "технический" домен, т.е. домен предоставляемый хостером

Домен к новому хостеру лучше добавить в самом начале, так как NS-сервера на которые вы будете делегировать домен, должны о нём знать, а репликация между серварами не всегда происходит мгновенно.Готовим сайт к переносу

  1. Отключаем модули кеширования, такие как boost, authcache и т.п.
  2. Переводим сайт в режим обслуживания

На этом второй этап можно считать законченным. Медленно, но верно, переходим к этапу номер 3Этап 3. Собираем вещиКопируем файлыТут возможны много путейНа новом хостинге есть SSH, на старом есть SSH:Авторизуемся по SSH на новом хостинге, вводим команду:mcОткроется файловый менеджер очень похожий на Far.В левой панеле выберем каталог домена, что-то вроде ~/domains/blablabla.com/public_html, это новый хостингВ правой нажмём на пункт меню "Right", выбираем "Shell link" и введём параметры подключения к старому хостингу:[email protected]Нажмём EnterПотом mc запросит пароль, введём его, нажмём EnterЧерез несколько секунд на правой панеле увидите файловую систему вашего аккаунта на старом хостинге.Далее нам выделить все файлы и каталоги из корня друпала и нажимаем F5, пойдёт копирование, когда скопируются файлы, переходите к разделу перенос БДНа новом хостинге есть SSH, на старом нет SSH:Авторизуемся по SSH на новом хостинге, вводим команду:mcОткроется файловый менеджер очень похожий на Far.В левой панеле выберем каталог домена, что-то вроде ~/domains/blablabla.com/public_html, это новый хостингВ правой нажмём на пункт меню "Right", выбираем "FTP link" и вводим параметры подключения к старому хостингу:user:[email protected]Нажмём EnterОткроется FTP-соединение со старым хостингомВыделяем, копируем, переходим к переносу БДПеренос БДКак это не странно, но данный пункт может изрядно добавить гемороя при переезде.Вариант 1. Используем SSHЛогинимся по SSHвводим в консоль команду mysqldump, если есть, то нам повезло, есть хостеры запрещающие использовать данную утилиту.Вводим команду:mysqldump -uusername -ppassword -hhost db_name > /path/dump.sqlГде:username - ваш MySQL-пользовательpassword - Пароль данного юзераdatabasename - Имя БДhost - опционально, зависит от места размещения вашей БД, зависит от хостера, если не указать, то будет localhostpath- путь куда будет записан дамп, возможно будет достаточно просто ~, т.е. домашняя директория пользователя, зависит от хостераПользователя, пароль, хост и имя базы данных можно подсмотреть в файле settings.php вашеего друпал-сайта, чаще всего он находится по пути sites/default/settings.phpОн имеет следующий синтаксис:$db_url = 'mysql://username:password@localhost/databasename';Вариант 2. Используем утилитыКогда нет вариантов сделать дамп через mysqldump, приходится извращаться, способов достаточно, описывать всех их не буду, перечислю просто их:

Так же хотелось бы сказать, что дампы от Sypex и phpMyAdmin подходят для импорта посредством утилиты mysql, что может быть достаточно полезным, потому что дамп весом около сотни мегабайт тяжеловато разворачивать с помощью phpMyAdmin.Этап 4. НовосельеДомен добавлен на новый хостинг, БД создана, файлы переброшены, дамп БД вы тоже надеюсь перекинуть на новый хост не забыли, если хотите разворачивать через консоль, можно разворачиватьсяИмпорт БДМожно импортировать базу данных через Sypex, phpMyAdmin, etc, но мы не ищем лёгких путей, консоль в руки и:mysql -u username -pвводим пароль и попадаем в консоль mysqlUSE databasename;Таким образом мы выбираем базу данных для дальнейшей работыSOURCE /path-to-sql-dump/dump.sqlС помощью этой команды мы развернём дамп в базу данных databasename, естественно, дамп должен быть заранее скопирован на новый хостинг.Правка settings.phpФайлы размещены, БД развёрнута, теперь надо подключить Drupal к базе данных, делается это в файле settings.php, а именно за параметры подключения к базе данных отвечает следующая строка

Все статьи блоггера: RxB.name

drupal-bloggers.com

Перенос drupal с денвера на хостинг

Хорошо протестировав свой drupal-сайт на денвере, настроив все нужные модули и нарисовав красивый дизайн самое время перенести сайт с денвера, из закоулков жесткого диска на хороший хостинг, "показать его миру".Вот о том, как это сделать и пойдет сегодня речь.Процесс переноса сайта с денвера на хостинг рассмотрим детально на примере панели управления cPanel

 

Создание БД и ее настройка.Для создания базы данных, в которую мы немного позже перенесем свою базу (с денвера), нужно найти в cPanel ярлык доступа к управлению базами данных.Выглядеть он примерно будет так:

cPanel 11, базы данных MySQL

На открывшейся странице вводим имя новой базы данных - "myDrupalDB" и нажимаем "создать базу данных"

Создание новой базы данных в cPanel 11

Вы должны увидеть сообщение о том, что база была успешно создана. Теперь возвращаемся на предыдущую страницу и создаем нового пользователя баз данных "myUser" с паролем "myPass" ( конечно замените пароль на свой -) ).Нажимаем "создать пользователя"

Создание нового пользователя в cPanel 11

Как и в предыдущем случае вы увидите сообщение об успешном создании пользователя.Снова вернемся на страницу назад и определим доступ пользователя к базе данных drupal. Для этого из списка пользователей выберем "myUser", из списка бд выберем "myDrupalDB" и нажмем "Добавить"

Назначение пользователя базе данных в cPanel 11

На открывшейся странице определим права пользователя, просто установив галочку "ALL PRIVILEGES" (Все привелегии) и нажмем "Внести изменения".

Определение прав пользователя базы данных в cPanel 11

Перенос файлов

Для переноса файлов drupal, вы можете воспользоваться любым FTP-менеджером. Я, к примеру, отдаю предпочтение FileZilla, но это дело вкуса, а о вкусах как известно не спорят. Главное - перенести все файлы друпала в нужную папку, "корневую директорию". Какая именно директория у вас корневая, вы можете узнатьа) На главной странице cPanel (обычно в левом меню пункт "домашняя директория")б) Из письма, которое обычно присылает хостер после регистрациив) У техподдержки хостераг) Методом научного тыка

Однако, перед загрузкой файлов drupal на сервер, необходимо внести изменения в файл settings.php...\www\sites\default\settings.php 

Исправляем:

# $base_url = 'http://www.example.com'; // NO trailing slash!на$base_url = 'http://www.ваш_домен.com';а также строку номер 94 на$db_url = 'mysql://myUser:myPass@localhost/myDrupalDB';Где myUser,myPass и myDrupalDB - данные, которые вы указывали при создании бд и пользователя.localhost - верно для подавляющего большинства хостеров, однако бывают и исключения, например masterhost.Теперь смело загружайте все файлы drupal на сервер.

Перенос (импорт) базы данных drupalПоследний шаг - перенос базы с помощью phpMyAdmin.Запустив предварительно денвер, открываем localhost/Tools/phpMyAdmin/, выбираем используемую базу и переходим в раздел "Экспорт".Из настроек экспорта нам необходимо поменять только вариант упаковки в "нет" на "zip".

Экспотр базы данных при помощи phpmyadmin

После того, как вы кликнете "ок", начнется загрузка zip-архива. Этот архив - и есть ваша база данных.

Осталось всего ничего - скопировать только что сохраненную вами базу в недавно созданную. Для этого в панели управления найдите ярлык phpMyAdmin

Импорт базы данных при помощи phpMyAdmin

На открывшейся странице выберете базу данных "myDrupalDB" и перейдите в раздел "Импорт", где укажите сохраненный вами файл с дампом базы данных. Когда вы кликнете ок, начнется импорт. Если ваша база перешегнула порог в несколько мегабайт, вам вероятно необходимо будет возобновлять процесс импорта (просто следуйте появляющимся инструкциям).

И вот, все закончено. Поздравляю, вы только что перенесли сайт на drupal с денвера на хостинг!Не забудьте,если необходимо, изменить именные сервера (ns-сервера) в панели управления доменом и помните, что на делегирование домена, а также на полное обновление именных серверов может уйти до двух суток.

www.wisecat.ru


Prostoy-Site | Все права защищены © 2018 | Карта сайта