Cách chuyển đổi từ Joomla! sang Drupal

Events happening in the community are now at Drupal community events on www.drupal.org.
jcisio's picture

Tôi đang nghiên cứu chuyển đổi http://thongtincongnghe.com từ Joomla! sang Drupal. Trong quá trình cũng gói được một module mà tôi nghĩ mọi người có thể dùng được. Module này được sửa đổi từ joomla2drupal http://joomla2drupal.teodorani.com/

Cách dùng:
- Cài đặt Drupal 5.3, tạo tài khoản admin
- Giải nén và chép thư muc joomla2d này vào thư mục sites/all/modules (nếu chưa có thư mục modules thì bạn tự tạo).
- Chép tập tin configuration.php của Joomla! vào thư mục sites/all/modules/joomla2d (vừa mới chép)
- Vào admin của Drupal, bật module này lên, sẽ thấy một menu mới xuất hiện trong phần Admin (bên trái)
- Hãy sao lưu database của Drupal, để nếu bước tiếp theo làm sai thì còn backup, đỡ mất công cài lại Drupal
- Chọn menu này để bắt đầu chuyển đổi, gồm 4 bước:
0/ click qua bước 1
1/ (có thể kiểm tra các thông tin được detect tự động, nhưng chắc không có gì sai). Click OK để convert, ngồi chờ một lát qua bước 2
2/ hiện thông báo thành công, click bước 3
3/ xong.
- Quay ra trang chủ xem kết quả.

Tôi đã thử thành công convert một website Joomla! 1.0.12 với 1600 bài viết, 10 section và khoảng 60 category. Mất chừng 20 giây (Macbook Pro 2,12 GHz Core 2 Duo, 2 GB RAM).

Module này đang làm dở, nhưng nói chung dùng được. Nếu có lỗi gì xin báo giúp. Link download http://jcisio.com/joomla2d.tar.gz (link tạm)

Comments

(Macbook Pro 2,12 GHz Core 2

thehong's picture

(Macbook Pro 2,12 GHz Core 2 Duo, 2 GB RAM)

Code mà chơi hàng độc quá :-D

Thế Hồng

Người ta mua cho cái gì

jcisio's picture

Người ta mua cho cái gì xài cái đó thôi, xài không hết uổng...

Tin tức CNTT, điện tử, viễn thông...
http://thongtincongnghe.com

Xao qua di

thenhan007's picture

he he :)

Ho Chi Minh muon nam

Cho TH hỏi thăm

thehong's picture

Có phải anh thanhhai cũng là anh Thanh Hải ở thongtincongnghe.com? Bản Drupal 6 RC 1 tới đây sẽ string free, TH muốn biết là anh thanhhai có tiếp tục dịch thuật hay không; ở bản 6 này có nhiều khái niệm mới (OpenID, Trigger, ...), có lẽ cần thảo luận nhiều để có bản dịch tốt, phù hợp với nhiều người dùng.

Thế Hồng

Trong topic này đâu có

jcisio's picture

Trong topic này đâu có ai là thanhhai :) Còn thanhhai ở TTCN thì chắc là người khác rồi.

Chưa nắm rõ Drupal 6 nên việc convert cái module này gặp nhiều khó khăn quá. Cho hỏi cái, làm sao ở menu Administer tạo item Import from Joomla! bây giờ ? Thử bắt chước hệ thống menu trong Drupal 6 viết thế này :

<?php
function joomla2drupal_boot() {
}

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

// Top-level item
 
$items['admin/joomla2drupal'] = array(
      
'title' => 'Import from Joomla',
       
'page callback' => 'joomla2drupal_form_introduction',
      
'access arguments' => array('import from Joomla')
   );

  
// Tabs
   
$items['admin/joomla2drupal/introduction'] = array(
     
'title' => '0. Introduction',
      
'access arguments' => array('import from Joomla'),
     
'type' => MENU_DEFAULT_LOCAL_TASK,
       
'weight' => 0
);

   
$items['admin/joomla2drupal/settings'] = array(
     
'title' => '1. Settings',
      
'access arguments' => array('import from Joomla'),
     
'type' => MENU_LOCAL_TASK,
       
'page callback' => 'joomla2drupal_form_settings',
      
'weight' => 1
);

   
$items['admin/joomla2drupal/results'] = array(
      
'title' => '2. Results',
       
'page callback' => 'joomla2drupal_form_results',
       
'access arguments' => array('import from Joomla'),
     
'type' => MENU_LOCAL_TASK,
       
'weight' => 2
);

    return
$items;
}
?>

Nhưng không thành công.

Tin tức CNTT, điện tử, viễn thông...
http://thongtincongnghe.com

hook_menu () chứ không

thehong's picture

hook_menu () chứ không phải hook_init (). Đã gửi mail cho ông thanhhai@drupal, vẫn chưa thấy hồi âm.

Thế Hồng

Theo hướng dẫn ở

jcisio's picture

Theo hướng dẫn ở http://drupal.org/node/114774#hook-boot-init thì hook_menu được chuyển thành hook_init và hook_boot rồi mà.

Tin tức CNTT, điện tử, viễn thông...
http://thongtincongnghe.com

Huynh đọc lộn rồi,

thehong's picture

Huynh đọc lộn rồi, nguyên văn cái subtitle "hook_init() is split up into hook_init() and hook_boot()"

Hệ thống menu mới rất hay, tuy nhiên hơi khó hiểu ở "Dynamic arguments replacement". Chi tiết về hệ thống menu mới: http://drupal.org/node/102338

Thế Hồng

Hôm nay đã bỏ nguyên

jcisio's picture

Hôm nay đã bỏ nguyên một ngày để đọc toàn bộ phần liên quan đến Drupal 6 rồi. Hệ thống menu mới dùng key là path, thay cho numeric key, nên đã sửa lại như ở trên. Nhưng theo như hướng dẫn ở link bài trên (http://drupal.org/node/114774#hook-boot-init) thì hook_init và hook_menu được thay bằng hook_boot và hook_init (đoạn code demo trong link đó).

Thôi, cụ thể thì code cũ:

<?php
function joomla2drupal_menu($may_cache) {
 
$items = array();

  if (!
$may_cache) {
 
   
// Top-level item
   
$items[] = array(
     
'path' => 'admin/joomla2drupal',
     
'title' => t('Import from Joomla'),
     
'callback' => 'joomla2drupal_form_introduction',
     
'access' => user_access('import from Joomla')
    );
   
   
// Tabs
   
$items[] = array(
     
'path' => 'admin/joomla2drupal/introduction',
     
'title' => t('0. Introduction'),
     
'access' => user_access('import from Joomla'),
     
'type' => MENU_DEFAULT_LOCAL_TASK,
     
'weight' => 0
   
);

   
$items[] = array(
     
'path' => 'admin/joomla2drupal/settings',
     
'title' => t('1. Settings'),
     
'access' => user_access('import from Joomla'),
     
'type' => MENU_LOCAL_TASK,
     
'callback' => 'joomla2drupal_form_settings',
     
'weight' => 1
   
);

   
$items[] = array(
     
'path' => 'admin/joomla2drupal/results',
     
'title' => t('2. Results'),
     
'callback' => 'joomla2drupal_form_results',
     
'access' => user_access('import from Joomla'),
     
'type' => MENU_LOCAL_TASK,
     
'weight' => 2
   
);

   
$items[] = array(
     
'path' => 'admin/joomla2drupal/finalsteps',
     
'title' => t('3. Final steps'),
     
'callback' => 'joomla2drupal_form_final_steps',
     
'access' => user_access('import from Joomla'),
     
'type' => MENU_LOCAL_TASK,
     
'weight' => 3
   
);
 
  }

  return
$items;
}
?>

Sẽ được sửa thế nào. Sửa theo bài đầu tiên (đã post) thì không hiển thị menu. Module này (5.x) không bắt hook_init.

Thông tin công nghệ : Tin tức CNTT, điện tử, viễn thông...

TH chắc chắn là anh

thehong's picture

TH chắc chắn là anh đã đọc lộn: http://drupal.org/node/114774#hook-boot-init
- Nguyên văn: hook_init() is split up into hook_init() and hook_boot()
- Anh lộn thành: hook_menu() is split up into hook_init() and hook_boot()

TH đổi hook_boot, hook_init thành hook_menu và hoạt động bình thường, không trở ngại, chí ít là với root user: http://toila.net/files/joomla2drupal.zip

Thế Hồng

Ừ, loay hoay chỉnh lại

jcisio's picture

Ừ, loay hoay chỉnh lại hook_menu, xóa 2 cái hook kia thì nó chạy rồi, cảm ơn nhé ;) Thế Hồng có thể giải thích đoạn này không ?

<?php
  mymodule_init
() {
   
// Code that is executed on each page request, even for cached pages.
 
}
 
mymodule_menu($may_cache) {
    if (!
$may_cache) {
     
// Code that is executed on page requests for non-cached pages only.
   
}
  }
?>

Tại sao trong thí dụ nó đưa ra nó xóa luôn cái mymodule_menu ?

Năm mới vui vẻ.

Thông tin công nghệ : Tin tức CNTT, điện tử, viễn thông...

Ở Drupal 5, chúng ta

thehong's picture
  1. Ở Drupal 5, chúng ta cần hệ thống thực thi một đoạn code nào đó trong giai đoạn đầu của quá trình xử lý request:

    <?php
    function  mymodule_init () {
       
    // (i) Code that is executed on each page request, even for cached pages.
     
    }
    function 
    mymodule_menu ($may_cache) {
        if (!
    $may_cache) {
         
    // (ii) Code that is executed on page requests for non-cached pages only.
       
    }
      }
    ?>
  2. Ở Drupal 6, menu system thay đổi nhiều, bỏ argument $may_cache, cho nên hook_init ở Drupal 5 sang Drupal 6 được tách ra thành 2 hook, hook_init & hook_boot, với:

- hook_boot thay thế cho hook_init ở Drupal 5
- hook_init thay thế cho hook_menu, $may_cache là false ở Drupal 5

<?php
function  mymodule_boot () {
   
// (i) Code that is executed on each page request, even for cached pages.
 
}
function 
mymodule_init () {
   
// (ii) Code that is executed on page requests for non-cached pages only.
 
}
?>

(i) Đoạn code được thi ở mọi request
(ii) Đoạn code chỉ được thực thi ở những trang không bao giờ được cache.

Thế Hồng