drupal: แก้ไขงานของโมดูล Import HTML

บันทึกการแก้ไขด้วยมือ
จากครั้งก่อน ผมได้สร้างหน้าเปล่าขึ้นมา แล้วแปลงให้เป็น book เตรียมไว้
แล้วจึงนำเข้าเอกสาร ด้วยโมดูล import HTML ดังนั้น หน้าเปล่าของเราจะเป็น node/1 และเอกสารที่นำเข้า จะเริ่มต้นตั้งแต่ node/2 เป็นต้นไป จนถึงหน้าสุดท้าย สมมุติว่าเป็น node/100 แล้วกัน

เมื่อทำการอิมพอร์ตเข้ามาแล้ว จะพบจุดผิดพลาดมากมาย ขอบันทึกการแก้ไขไว้นิดนึง เผื่อจะขยายขอบเขตไปถึงการแก้ไขโค๊ดต้นฉบับ

ตอนอิมพอร์ต ผมเลือกที่จะไม่เพิ่มรายการในเมนูแบบอัตโนมัติ
เราจึงต้องยกเลิกหัวข้อ Add each page to menu

ตอนนี้ศึกษาเรื่อง adodb อยู่ เลยใช้ไพธอนในการทำงานไปด้วยเลย

เริ่มต้น
$ python

Python 2.4.4 (#2, Oct 20 2006, 00:23:25) 
[GCC 4.1.2 20061015 (prerelease) (Debian 4.1.1-16.1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import adodb
>>> driver = 'mysql'
>>> host = 'localhost'
>>> user = 'user'         # MYSQL USER
>>> password = 'password' # MYSQL PASSWORD
>>> db = 'testdrupal47'   # DRUPAL-4.7 DATABASENAME
>>> conn = adodb.NewADOConnection(driver)
>>> cur = conn.Connect(host,user,password,db)

งานที่ทำคือ

  • เปลี่ยน page เป็น book
  • แก้ไข title ล้น โดยใช้ฟังก์ชั่น string.strip()
  • เรียงลำดับหน้าหนังสือใหม่ ด้วยมือ

ขั้นตอน

เพิ่มหมายเลข node ลงในตาราง book ตั้งแต่ node/2 ถึง node/100
>>> for i in range(2, 101, 1):
...   cur = conn.Execute('INSERT INTO book (vid, nid, parent, weight) VALUE (%s, %s, 0, 0)' % (i, i))
เปลี่ยนฟิลด์ format ในตาราง node_revisions เป็น 1
>>> cur=conn.Execute('UPDATE node_revisions SET format=1 WHERE nid>1')
เปลี่ยนฟิลด์ type ในตาราง node เป็น 'book'
>>> cur=conn.Execute('UPDATE node SET type="book" WHERE nid>1')
เปลี่ยนให้ทุก node ที่เพิ่งอิมพอร์ตเข้ามา เข้าอยู่ภายใต้หน้าว่างคือ node/1
>>> cur=conn.Execute('UPDATE book SET parent=1 WHERE nid>1')
เปลี่ยนฟิลด์ comment ในตาราง node เป็น 2 (ไม่รู้ว่าคืออะไร)
>>> cur=conn.Execute('UPDATE node SET comment=2 WHERE nid>1')
ไม่ต้อง Promoted to front page โดยให้ฟิลด์ promote ในตาราง node เป็นศูนย์
>>> cur=conn.Execute('UPDATE node SET promote=0 WHERE nid>1')
แก้ไข title โดยใช้ฟังก์ชั่น string.strip()
ตาราง node
>>> for i in range(2, 101, 1):
...   cur=conn.Execute('SELECT title FROM node WHERE nid=%s' % (i))
...   title=cur.fields[0].strip()
...   cur=conn.Execute('UPDATE node SET title="%s" WHERE nid=%s' % (title, i))

ตาราง node_revisions

>>> for i in range(2, 101, 1):
...   cur=conn.Execute('SELECT title FROM node_revisions WHERE nid=%s' % (i))
...   title=cur.fields[0].strip()
...   cur=conn.Execute('UPDATE node_revisions SET title="%s" WHERE nid=%s' % (title, i))

เรียงลำดับหน้าหนังสือใหม่ ด้วยมือ
อันนี้นานที่สุด แต่ก็คุ้มกว่าการนำเข้าด้วยมือทั้งหมด