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: screenhunter_001 - Upanh.com Hình Table node: screenhunter_004 - Upanh.com Hình Table node_revision: screenhunter_005 - Upanh.com Hình Table taxonomy_index: screenhunter_006 - Upanh.com

Hình Table field_data_body: screenhunter_008 - Upanh.com Hình Table field_revision_body: screenhunter_009 - Upanh.com Hình Table field_data_field_linhvuc: screenhunter_011 - Upanh.com

Bình luận

  • TTCN (4)
Hải Nam  30903

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.

Ly Phuong  25

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ũ

$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ũ

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:

Hải Nam  30903

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...).

Ly Phuong  25

OK thank Hải Nam để mình kiểm tra tiếp