
ผมลองใส่ ชื่อเรื่อง ยาวๆ มันจะผิดปกติโดยตัดชื่อเรื่องให้สั้นเองเลย แล้วจะมีเครื่องหมายอะไรก็ไม่รู้ขึ้นมาแทน (?)
ไม่ทราบว่ามันเกิดขึ้นเพราะอะไรครับ และจะมีวิธีแก้ไหมครับ
ขอบคุณครับ
กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น
มันเกิดจากการตัด utf-8 ขาดระหว่างกลาง ความยาวสูงสุดคือ 128 ตัวอักษร ตามที่กำหนดไว้ใน mysql มันเลยโดนตัดฉับ ซึ่งบังเอิญคำว่า “ทดสอบ” จะยาว 15 ตัวอักษรเมื่อเก็บเป็น utf-8 ทีนี้ตอนเก็บเข้าไปใน mysql ไม่ได้เช็คความยาวสุดท้ายก่อน
ถ้าอยากจะแก้ ผมแนะนำให้เขียนโมดูลฮุคเข้าไปในขั้น
hook_nodeapi()เพื่อดักsubmitและตัด title ให้เท่ากับ 128 ด้วยdrupal_substr()ก่อนที่จะเอาไปทำอย่างอื่นต่อจะถามพอดีว่า hook_view กับ hook_nodeapi ต่างกันตรงไหนครับ
hook_viewเป็นของโหนดโมดูลมีไว้สำหรับจัดการกับเนื้อหาทุกอย่างเพื่อนำมาแสดงในหน้า view ซึ่งจะบอกว่าเป็นหน้าเดี่ยวหรือหน้ารวม และต้องการแบบสั้นหรือแบบยาวhook_nodeapiเป็นของโมดูลไหนก็ได้ มีไว้เพื่อปรับปรุงหรือเพิ่มเติมโหนดโมดูลที่มีอยู่แล้วยกตัวอย่างง่ายๆ เราทำโหนดชื่อว่า alert ซึ่งมีฟิลด์โขยงนึง และก็มีโหนด warning ซึ่งก็มีฟิลด์อีกโขยงนึง ทั้งสองโหนดจะมี
hook_viewของตัวเอง หน้าตาไม่เหมือนกันซักเท่าไหร่ แต่เอาเข้าจริงแล้วบางฟิลด์มันใกล้เคียงกัน หรือเหมือนกัน เช่น สถานที่ ตำแหน่ง ความรุนแรง และอื่นๆ อีกหลายตัว หรือจะสรุปสั้นๆ ว่ามันจะมี CAP ฝั่งอยู่ข้างใน อย่ากระนั้นเลย เราน่าจะเอาฟิลด์พวกนั้นออกไปจาก alert และ warning แล้วใส่ในโมดูลใหม่ชื่อ cap ซึ่งมีhook_nodeapiในhook_nodeapiนี้จะมีการเพิ่มฟิลด์เข้าไปในหน้า view และอาจจะทำhook_form_alterอีกซักอันเพื่อเพิ่มฟิลด์ในหน้า edit วิธีนี้จะทำให้เราเลือกชนิดของโหนดที่ต้องการให้มีฟิลด์เกี่ยวกับ CAP ได้และเพิ่มได้เรื่อยๆ ถ้าอยากเอาไปใส่ใน feed ก็ตรงนี้เหมือนกัน ไม่ต้องทำซ้ำซ้อนเอ จะว่าผมเข้าใจผิดหรือเปล่า เพราะผมไปเจอ Blog นี้ http://www.bxtra.net/node/1 ที่ต้องทำก็แค่เพิ่มความยาวของ Field title ใน table 2 อันใน mysql ก็คือ Node กับ Node_revisions จาก 128 ให้ยาวขึ้น แล้วก็จะใช้ได้ครับ ผมลองทำเองแล้วก็ทำได้นะ
ไม่ว่าจะยาวแค่ไหนก็อาจจะพบปัญหานี้ได้เมื่อความยาว title ตัดไม่พอดี การแก้ฐานข้อมูลแม้ว่าจะง่ายแต่ก็มีความเสี่ยงครับ ผมไม่แนะนำให้ใช้วิธีนี้ เพราะตอนอัพเกรด Drupal อาจไม่ราบรื่น
เดี๋ยวนะครับ ผมงง งั้นก็แปลว่าถ้าผมเขียน Module แก้เข้าไป (คือผมเขียนไม่เป็นนะครับ) ผมก็ไม่ต้องแก้ Database หรือครับ? ที่งงเพราะว่ายังไงซะถ้าไม่แก้ แล้ว Database รับได้แค่ 128 bytes ซึ่งถ้าเป็น utf8 หนึ่งตัวอักษรก็จะมากกว่า 1 Bytes นี่ครับ หรือว่าที่คุณ sugree พูดมานี่คือยังไงก็ให้ limit ไว้แค่ 128 bytes แต่ว่าให้ทำตัดให้สวยงามเท่านั้น?
ถูกต้องครับ
เข้าใจแล้วครับ ขอบคุณครับ