Drupal

Migrando de Joomla a Drupal

Migración de Joomla a Drupal

Esta guía se enfoca en la migración de Joomla 1.0.x a Drupal 4.7.x/5.x. Antes de migrar debes entender algunas diferencias entre ellos para asegurarte que la migración sea satisfactoria.

En esta direccion podras encontrar el modulo que hace posible la migración: http://drupal.org/project/joomla

En mi sitio voy a publicar algunos tips mas para el trabajo con Drupal: http://drw.host.sk

Joomla! vs Drupal

  1. Joomla solo soporta una Seccion y una Categoria por cada contenido, mientras en Drupal puedes asignar al contenido varias Secciones/Categorias.
  2. Joomla no permite la configuración de multiples sitios, por lo que la migración debe estar en un solo sitio si tienes configuración multi sitio con Drupal.
  3. En esta guia asumo que tienes un foro en tu sitio Joomla. Drupal tiene generado un foro de discusion por lo que no necesitas instalar ningun modulo adicional.
  4. El termino Blog en Joomla no tiene la misma definición como el blog del diccionario de Internet. El termino 'Blog' en Joomla es actualmente una vista broma de contenido: Titulo, Introducción y un enlace de Leer Mas. 'Blog' en la terminología Joomla no es un 'WebBlog'. Si uno pregunta si Joomla esta apoyando a un blog por defecto la respuesta es afirmativa pero con diferente significado.
  5. Comentarios en contenidos no estan disponibles en Joomla por defecto, pero Drupal por defecto soporta comentarios en todo tipo de contenido.

Terminología Joomla vs. Drupal

Hay algunas diferencias de diferentes términos entre Joomla y Drupal. Aqui esta una lista para entenderlo rapidamente:
  1. Template en Joomla es llamado Theme(Tema) en Drupal.
  2. Componente = Modulo.
  3. Modulo = Bloque
  4. Mambot/Plugin = Input filter.
  5. Menu-Horizontal = Primary Links (Enlaces primarios)
  6. Menu-Vertical = Navigation (Navegacion)
  7. Contenido Dinamico = Story (Historia)
  8. Contenido Estatico= Page (Pagina)
  9. Back-end = No hay back-end en Drupal, pero modulos como Administration Menu provee similar interface.
  10. SEF = URL limpios (pero algunos docs se refieren a SEF, tambien).
  11. Seccion = Taxonomy Vocabulary/Term (Taxonomia Vocabulario/Termino)
  12. Section Title = Taxonomy Term (Termino Taxonomia)
  13. Category = Taxonomy Term (Termino Taxonomia)
  14. Introtext = Teaser
  15. Maintext = Body (see explanation below)
  16. Pathway = Breadcrumb
Otros terminos son los mismos como: foro de discusion, editor, busqueda, region, comentario, asunto/titulo, vista previa, tag html, vista, editar, publicidad/banner, log in/log out, perfil, avatar, control de acceso, logs, cache, mantenimiento del sitio, RSS, padre-hijo y fragmentos.

Migrando Contenido/Items de Joomla

Primero, debes transferir todas las Secciones Joomla a Categoria Drupal y transferir Categorias a Term en Drupal acorde a su padre(pariente), Despues que tu puedas transferir Contenido/Item de Joomla desde la tabla jos_content. Las tablas Drupal para guardar articulos son drupal.node y drupal.node_revisions!

Migrando Introtext de Joomla

Introtext vs Teaser, esto es muy importante, debes saber que Drupal puede automaticamente cambiar el inicio de un articulo en un introtext, El introtext es llamado teaser en Drupal. Ahora, como convertir Introtext a Drupal ?.
  1. Copiar el Joomla Introtext a drupal.node_revisions:teaser
  2. Copiar el Joomla Introtext+Maintext a drupal.node_revisions:body (cuerpo)
Puedes confundirte porque el paso #2 incluye el Introtext nuevamente? Porque en Drupal, hay una posibilidad de establecer un diferente Teaser desde el primer párrafo del contenido. En otras palabras, El primer parrafo de Drupal no siempre sera un Teaser ! Si quieres editar el contenido migrado luego en Drupal, deberias copiar Introtext + "" + Maintext en paso #2.

Migrando el Foro de Joomla

Supongo que usas el foro Joomlaboard para Joomla. En Drupal es generado internamente, entonces debes solamente activarlo en el administrador de modulos mostrarlo en la pagina principal mediante el administrador de bloques. Debes transferir la Categoria Padre del foro a Contenedor de Foro Drupal y la categoria Hija del Foro a Categoria del Foro Drupal. Nuevamente, estoy usando SQLyog para transferir la entrada de contenidos del foro. SQLyog es muy facil porque es un Entorno grafico.

Editor

Drupal por defecto no tiene editor WYSIWYG, significa que debes tipear cualquier contenido HTML manualmente para darle formato al articulo. Joomla tiene el editor TinyMCE interno. En Drupal, puedes usar la contribucion de editores de los usuarios como el TinyMCE Editor o FCKeditor.

Consejos

Usualmente mejor es instalar Drupal en una carpeta como nombrededominio/drupal, puedes entonces accesar a los dos sitios durante la migración. Mejor no conviertas el template de Joomla a Tema de drupal, pero edita cualquier tema drupal existente al conocer tus requerimientos porque Drupal soporta temas de tipo (PHPTemplate) y separa templates como comment.tpl.php significa que puedes aplicar cualquier comentario.

Módulos de ayuda

Puedes tambien querer chequear los siguientes modulos: User Import - for users (para usuarios) http://drupal.org/project/user_import Node Import - for content (para contenido) http://drupal.org/project/node_import Joomla migration (not on drupal.org) http://joomla2drupal.teodorani.com/ Cabes destacar que trabaje por algun tiempo con Joomla y se que es muy amigable en sus interfaces pero al momento de querer implementar nuestro propio codigo.. realmente es un dolor de cabez. Saludos.
Secciones: 

Control Panel en otros idiomas

En dias anteriores habia instalado el modulo de control panel para que tenga una interaccion mas amigable de la administracion de drupal el cual funcionaba a toda maquina hasta que instale el modulo de multilenguaje i18n con el cual se danio todo es decir l a presentacion porque ya no aparecian los iconos personalizados para cada seccion en el control panel excepto el icono por defecto para lo cual buscando y buscando di con una solucion implementada en el sitio de drupal cabe destacar que esta correccion sirve para la version 5.x que es con la que estoy trabajando segun tengo entendido todavia no hay nada para la version 6.x en este sentido. Bueno basta de palabreria y vamos con la solucion: En la solucion debemos ubicar la funcion control_panel_view y reemplazarla con lo siguiente podran observar que se hace una comprobacion de que existe el modulo i18n. function theme_controlpanel_panel_view($pid, $block = NULL) { $content = ''; $menu = menu_get_menu(); $menu_visible = $menu['visible']; $theme_path = path_to_theme() . '/controlpanel/' . variable_get('controlpanel_icon_size' . $block, '48x48'); if (file_exists($theme_path . '/control_panel_default.png')) { $image_directory = $theme_path; } else { $image_directory = drupal_get_path('module', 'controlpanel') . '/images/' . variable_get('controlpanel_icon_size' . $block, '48x48'); } $content .= '<div id="control-panel-' . $pid . '" class="control-panel">'; if (isset($menu_visible[$pid]) && $menu_visible[$pid]['children']) { foreach ($menu_visible[$pid]['children'] as $mid) { if ($menu_visible[$mid]['children'] && (variable_get('controlpanel_build_children' . $block, 0) != 0)) { //do nothing } else { $content .= '<div class="control-panel-item control-panel-icon-size-' . variable_get('controlpanel_icon_size' . $block, '48x48') . '">'; $content .= '<a href="' . url($menu_visible[$mid]['path']) . '">'; $working_path = drupal_get_path_alias($menu_visible[$mid]['path']); if (module_exists('i18n')) { global $i18n_langpath; $current_lang = is_null($i18n_langpath) ? i18n_default_language() : $i18n_langpath; $working_path_parts = explode('/', $working_path); if ($working_path_parts[0] == $current_lang) { unset($working_path_parts[0]); } $working_path = implode('/', $working_path_parts); } if (is_numeric(substr($working_path, strrpos($working_path, "/") + 1))) { $working_path = substr($working_path, 0, strrpos($working_path, "/")); } $file_name = $image_directory . '/' . str_replace('/', '_', $working_path) . '.png'; //drupal_set_message($file_name); if (file_exists($file_name)) { $src = $file_name; } else { $src = $image_directory . '/control_panel_default.png'; } $content .= '<span style="display:block;">'; $content .= '<img src="' . base_path() . $src . '" alt="'. $menu_visible[$mid]['title'] .'" title="'. $menu_visible[$mid]['title'] .'" />'; $content .= '<br />' . $menu_visible[$mid]['title']; $content .= '</span>'; $content .= '</a>'; $content .= '</div>'; } } } $content .= '</div>'; return $content; } Espero les sea de mucha ayuda y saludos.
Secciones: 

Control Panel en otros idiomas

En dias anteriores habia instalado el modulo de control panel para que tenga una interaccion mas amigable de la administracion de drupal el cual funcionaba a toda maquina hasta que instale el modulo de multilenguaje i18n con el cual se danio todo es decir l a presentacion porque ya no aparecian los iconos personalizados para cada seccion en el control panel excepto el icono por defecto para lo cual buscando y buscando di con una solucion implementada en el sitio de drupal cabe destacar que esta correccion sirve para la version 5.x que es con la que estoy trabajando segun tengo entendido todavia no hay nada para la version 6.x en este sentido. Bueno basta de palabreria y vamos con la solucion: En la solucion debemos ubicar la funcion control_panel_view y reemplazarla con lo siguiente podran observar que se hace una comprobacion de que existe el modulo i18n. function theme_controlpanel_panel_view($pid, $block = NULL) { $content = ''; $menu = menu_get_menu(); $menu_visible = $menu['visible']; $theme_path = path_to_theme() . '/controlpanel/' . variable_get('controlpanel_icon_size' . $block, '48x48'); if (file_exists($theme_path . '/control_panel_default.png')) { $image_directory = $theme_path; } else { $image_directory = drupal_get_path('module', 'controlpanel') . '/images/' . variable_get('controlpanel_icon_size' . $block, '48x48'); } $content .= '<div id="control-panel-' . $pid . '" class="control-panel">'; if (isset($menu_visible[$pid]) && $menu_visible[$pid]['children']) { foreach ($menu_visible[$pid]['children'] as $mid) { if ($menu_visible[$mid]['children'] && (variable_get('controlpanel_build_children' . $block, 0) != 0)) { //do nothing } else { $content .= '<div class="control-panel-item control-panel-icon-size-' . variable_get('controlpanel_icon_size' . $block, '48x48') . '">'; $content .= '<a href="' . url($menu_visible[$mid]['path']) . '">'; $working_path = drupal_get_path_alias($menu_visible[$mid]['path']); if (module_exists('i18n')) { global $i18n_langpath; $current_lang = is_null($i18n_langpath) ? i18n_default_language() : $i18n_langpath; $working_path_parts = explode('/', $working_path); if ($working_path_parts[0] == $current_lang) { unset($working_path_parts[0]); } $working_path = implode('/', $working_path_parts); } if (is_numeric(substr($working_path, strrpos($working_path, "/") + 1))) { $working_path = substr($working_path, 0, strrpos($working_path, "/")); } $file_name = $image_directory . '/' . str_replace('/', '_', $working_path) . '.png'; //drupal_set_message($file_name); if (file_exists($file_name)) { $src = $file_name; } else { $src = $image_directory . '/control_panel_default.png'; } $content .= '<span style="display:block;">'; $content .= '<img src="' . base_path() . $src . '" alt="'. $menu_visible[$mid]['title'] .'" title="'. $menu_visible[$mid]['title'] .'" />'; $content .= '<br />' . $menu_visible[$mid]['title']; $content .= '</span>'; $content .= '</a>'; $content .= '</div>'; } } } $content .= '</div>'; return $content; } Espero les sea de mucha ayuda y saludos.
Secciones: