Chuyển Cơ sở dữ liệu từ Website cũ sang Website Drupal 7
Chào Hải Nam!
Mình gặp trục trặc.
Mình tiến hành chuyển các bài viết trong một lĩnh vực trong Website cũ sang Website sử dụng Drupal 7
Một bài viết cần chuyển gồm 4 thành phần chính: Tiêu đề bài, Mô tả bài viết, Nội dung bài viết, Thuộc 1 lĩnh vực
Trong D7:
Tạo thêm field Lĩnh vực cho Article ( để mỗi một node thuộc một term trong D7)
Khảo sát cấu trúc CSDL Drupal7: database, table, field
Một node thuộc 1 term trong D7 dữ liệu sẽ nằm trong 8 table có liên quan với nhau:
node, node_revision, taxonomy_index, node_comment_statistics, field_data_body, field_revision_body, field_data_field_linhvuc, field_revision_field_linhvuc
Code chuyển: ( ví dụ chuyển các bài viết sang D7, thuộc Tin địa phương có term id=2) đoạn lệnh chính các query Insert
for($i=0;$i<$form_count;$i++) { $increment++; echo '<br><b>tang-'.$increment.'</b>'; $form_id=$form["ArticleID"][$i]; $form_name=addslashes($form["Title"][$i]); // Biến tiêu đế bài viết từ CSDL cũ $form_desc=addslashes($form["Description"][$i]); // Biến mô tả bài viết từ CSDL cũ $form_content=addslashes($form["Content"][$i]); // Biến nội dung bài viết từ CSDL cũ //$catid=19; //$sectionid=3; //echo $increment+1033; //$query = "insert into node values($increment+3,$increment+3,'article','en','$form_name',1,1,1307794974,1307794974,2,1,0,0,0)"; //$query = "insert into node_revision values($increment+3,$increment+3,1,'$form_name','',1307794974,1,2,1,0)"; //$query = "insert into taxonomy_index values($increment+3,2,0,1307794974)"; $query = "insert into node_comment_statistics values($increment+3,0,1307794974,NULL,1,0)"; //$query = "insert into field_data_body values('node','article',0,$increment+3,$increment+3,'en',0,'$form_content','$form_desc','filtered_html')"; //$query = "insert into field_revision_body values('node','article',0,$increment+3,$increment+3,'en',0,'$form_content','$form_desc','filtered_html')"; //$query = "insert into field_data_field_linhvuc values('node','article',0,$increment+3,$increment+3,'en',0,2)"; //$query = "insert into field_revision_field_linhvuc values('node','article',0,$increment+3,$increment+3,'en',0,2)"; $dbsql->query($query); echo ": \n".$form_id." ".$form_name." <br>".$form_desc."<br> "; //.$form_content; }
Kết thúc hoàn thành chuyển tất cả bài viết sang D7
Sử dùng phpMyAdmin xem CSDL đã chuyển vào đúng vị trí
nid, title (trong table: node, node_revision)
entity_id, revision_id, body_value, body_summary (trong table: field_data_body, field_revision_body)
Tương tự các trường khác và table còn lại cũng vậy.
Trang web D7 hiển thị tất cả bài viết, nhưng chỉ hiển thị phần tiêu đề của các node, không hiển thị mô tả.
Và khi Click xem chi tiết một node thì cũng hiển thi tiêu đề không hiển thị phần mô tả và phần nội dung.
Xem bên phần Edit node cũng chỉ có phần tiêu đề các phần còn lại trống.
Hình trang web hiện bài viết: Hình Table node: Hình Table node_revision: Hình Table taxonomy_index:
Hình Table field_data_body: Hình Table field_revision_body: Hình Table field_data_field_linhvuc:
Bình luận
Trong template node (hoặc trong preprocess node) bạn in ra các biến có trong node ngay trước khi hiển thị, xem nội dung nó thế nào, rồi từ đó dự đoán nguyên nhân, tìm lỗi.
Code của bạn không có chú thích, lại còn chừa lại những đoạn không cần thiết, nên mình cũng chẳng đọc.
Trong cấu trúc node mình thêm trường Lĩnh vực như hình bên dưới, khi mình nhập bài theo giao diện nhập D7 thì nó hiển thị đầy đủ.
Và mình xem dữ liệu nó đưa vào các table có liên quan ràng buộc với nhau trong CSDL.
Từ đó mình mới tiến hành code chuyển CSDL
Ngoài 8 table ràng buộc bên dưới Hải Nam còn thấy có thiếu table nào nữa không.
Mình không thấy phần đưa code vào thẻ code cho dễ đọc, Do bài trước mình copy code trong lúc mình lập trình và phân nhóm để kiểm tra từng đoạn, đưa lên đây không có sửa cole lại.
Ba dòng lấy từ CSDL cũ
8 câu lệnh Insert dữ liệu vào 8 table, term id mình truyền bằng 2, $increment là biến tăng khi Insert mỗi bài
$query = "insert into node values($increment+3,$increment+3,'article','en','$form_name',1,1,1307794974,1307794974,2,1,0,0,0)";
$query = "insert into node_revision values($increment+3,$increment+3,1,'$form_name','',1307794974,1,2,1,0)";
$query = "insert into taxonomy_index values($increment+3,2,0,1307794974)";
$query = "insert into node_comment_statistics values($increment+3,0,1307794974,NULL,1,0)";
$query = "insert into field_data_body values('node','article',0,$increment+3,$increment+3,'en',0,'$form_content','$form_desc','filtered_html')";
$query = "insert into field_revision_body values('node','article',0,$increment+3,$increment+3,'en',0,'$form_content','$form_desc','filtered_html')";
$query = "insert into field_data_field_linhvuc values('node','article',0,$increment+3,$increment+3,'en',0,2)";
$query = "insert into field_revision_field_linhvuc values('node','article',0,$increment+3,$increment+3,'en',0,2)";
Hình Cấu trúc Article:
Hình Quản lý các bài viết:
Bạn tạo 1 node mới, rồi so sánh CSDL hiện tại với CSDL cũ là biết cái gì được thêm vào thôi mà, rồi so sánh với cái cũ. Chứ mình không debug giúp được.
Trừ 1 vài trường hợp đặc biệt, còn lại cách làm của bạn không chuẩn. Lẽ ra phải dùng node_save(). Mà dùng query trực tiếp như vậy cũng sai cơ bản về PHP (không dùng holder, không lọc dữ liệu...).
OK thank Hải Nam để mình kiểm tra tiếp