1 Blog Excerpts စနစ္တစ္ခုအား PHP/MySQL ၿဖင့္ လြယ္ကူစြာေရးသားၿခင္း [Tutorial] 30th November 2010, 5:29 pm
sHa92
Founder
Tutorial Title : Blog Excerpts စနစ္တစ္ခုအား PHP/MySQL ၿဖင့္ လြယ္ကူစြာေရးသားၿခင္း
Level : Beginner/Intermediate
ဒီစနစ္ေလးကေတာ့ နာမည္ၾကားတာနဲ႔တင္ သိတဲ့သူလည္း သိၾကပါလိမ့္မယ္။ ဒီစနစ္ေလးကို သင္တုိ႔အေနနဲ႔ Blog ေတြမွာ အေတြ႔မ်ားပါလိမ့္မယ္။ Blog တစ္ခုကို ၀င္လိုက္မယ္ဆုိရင္ ပထမဆုံးေတြ႔ရမွာက ေရးထားတဲ့ စာေတြကို စာၿမည္းသေဘာနဲ႔ ေဖာ္ၿပေပးထားတာေတြ႔ပါလိမ့္မယ္။ အဲဒီ့ကမွ တစ္ဆင့္ ေဖာ္ၿပေပးထားတဲ့ စာၿမည္းက စိတ္၀င္စားဖို႔ေကာင္းေတာ့ ၊ စာအားလုံးကို ဖတ္ခ်င္လာတာနဲ႔ ၊ Read More သို႔မဟုတ္ “ဆက္လက္ဖတ္ရႈရန္” ဆုိတဲ့ Link မ်ိဳးကို ႏွိပ္ၿပီး ၊ စာအၿပည့္အစံုေရးထားတဲ့အထဲ ၀င္သြားဖတ္ေလ့ရိွၾကပါတယ္။
သင့္အေနနဲ႔ အဲဒီ့လို စနစ္တစ္ခုကို CMS ေတြ Blog Engine ေတြမသံုးဘဲနဲ႔ ကိုယ့္ရဲ႕ Application ထဲမွာ ထည့္သြင္းခ်င္လာၿပီဆုိရင္ေတာ့ ဒီသင္ခန္းစာကို တစ္ဆင့္ခ်င္း လိုက္လုပ္သြားတဲ့အခါမွာ သင္တုိ႔လုပ္ခ်င္တဲ့ Blog Excerpt System ကို လြယ္လြယ္ကူကူဘဲ ရလာပါလိမ့္မယ္။
ကြ်န္ေတာ္တို႔ သင္ခန္းစာေလးကို မစခင္မွာ အရင္ဆုံး ဒီ စနစ္နဲ႔ ပတ္သက္ၿပီးေတာ့ လိုခ်င္တဲ့အခ်က္အလက္ေလးေတြကို ခ်စဥ္းစားၾကည့္ပါမယ္။ (ၾကံဳတုန္း တစ္ခုအၾကံၿပဳခ်င္တာက Application တစ္ခုေရးသားရာမွာ ၾကီးရင္ဘဲၿဖစ္ၿဖစ္ ၊ ေသးရင္ဘဲၿဖစ္ၿဖစ္ Text Editor or IDE မဖြင့္ခင္ (Code ဆုိလို႔ တစ္လုံးတစ္ပါဒ မွ်မေရးရေသးခင္) မွာ Application နဲ႔ ဆုိင္တဲ့ ကိုယ္လိုခ်င္တာေတြ ၊ အဲဒီ့ Apps က လုပ္ေပးမွာေတြကို အေသးစိတ္မဟုတ္ေတာင္ ၊ အၾကမ္းသေဘာနဲ႔ အေနနဲ႔ စာအုပ္တစ္ခုထဲမွာ (သို႕) MS-Word ထဲမွာ ခ်ေရးေစခ်င္ပါတယ္။ ၾကီးၾကီးက်ယ္က်ယ္ေၿပာရရင္ေတာ့ Requirement Define လုပ္တယ္ေပါ့။ အဲဒီ့အေလ့အက်င့္က သင့္ကို တစ္နည္းနည္းနဲ႔ေတာ့ အေထာက္အကူၿဖစ္ေစပါလိမ့္မယ္။)
အဲဒီ့ေတာ့ ကြ်န္ေတာ္တုိ႔လည္း ကြ်န္ေတာ္တို႔ေရးမယ့္ စနစ္နဲ႔ ပတ္သက္လို႔ အရင္ဆုံး လုပ္ခ်င္တာေလးေတြ ခ်ေရးၾကည့္ပါမယ္...
အခု စနစ္မွာေတာ့ Main Case အေနနဲ႔ကေတာ့ တစ္ခုဘဲရိွပါလိ့မ္မယ္...
“Website ကို လာမယ့္ Visitor ေတြအေနနဲ႔ ၀င္၀င္လာခ်င္းမွာ Post ရဲ႕ တစ္ခ်ိဳ႕တစ္၀က္ကိုဘဲ စာၿမည္းအေနနဲ႔ ၿမင္ေနရမယ္။ အဲဒီ့ကမွတဆင့္ “Read More” ကိုႏွိပ္ရင္ ေနာက္ထပ္ Page တစ္ခုမွာ Full Post အေနနဲ႔ ၿပမယ္။”
အကယ္လို႔မ်ား သင္ဟာ သင့္ရဲ႕ေရးလက္စ Application မွာ ၿဖည့္စြက္အသံုးၿပဳခ်င္တာဆုိရင္ေတာ့ ဒီစနစ္နဲ႔ ကို သင့္ရဲ႕ Application ထဲမွာ ေပါင္းထည့္ဖို႔အတြက္ အနည္းငယ္ၿပဳၿပင္ေၿပာင္းလဲမႈေတြေတာ့ ရိွပါလိမ့္မယ္။
ဒီသင္ခန္းစာမွာေတာ့ Data ေတြကို excerpt အေနနဲ႔ၿပတာရယ္ ၊ ေနာက္ထပ္ စာမ်က္ႏွာ တစ္ခုမွာမွ Full Data ကို ၿပတာရယ္က မင္းသား ၊ မင္းသမီး ၿဖစ္ေနေတာ့ ၊ က်န္တာေတြကို အေသးစိတ္ရွင္းလင္းၿခင္း မၿပဳေတာ့ပါဘူး။
အခုဆက္ၿပီးေတာ့ လုပ္ရမွာကေတာ့ Database တည္ေဆာက္ၿခင္းဘဲၿဖစ္ပါတယ္။
ေအာက္မွာကေတာ့ ကြ်န္ေတာ့္အေနနဲ႔ ဒီ သင္ခန္းစာေရးဖို႔ ၿပင္ဆင္ထားတဲ့ Database ၿဖစ္ပါတယ္။ (Beginner Level ၿဖစ္ေပမယ့္ စာဖတ္သူအေနနဲ႔ PHP Fundamental ကိုသိၿပီးသားလို႔ ယူဆၿပီး ေရးထားတဲ့အတြက္ေၾကာင့္ Database တည္ေဆာက္ပံုတည္ေဆာက္နည္း ႏွင့္ အၿခားေသာ အေသးစိတ္အခ်က္ေတြကို ပယ္ထားခဲ့ပါတယ္။)
သင္ေတြ႔ရသလိုဘဲ ရိုးရိုးရွင္းရွင္းေလးပါ... ကြ်န္ေတာ့္အေနနဲ႔ ဒီ သင္ခန္းစာေရးဖို႔ ၿပင္ဆင္ထားတာၿဖစ္လို႔ Table Name ကို Post အေနနဲ႔ သတ္မွတ္လိုက္ပါတယ္။ အဲဒီ့ Post မွာ ဘာေတြရိွမလဲဆုိရင္ေတာ့ ID, Title, နဲ႔ Body ေတြပါပါလိမ့္မယ္။
ေနာက္တစ္ဆင့္အေနနဲ႔ Database ထဲကေန Data ကုိ ထုတ္ၿပရမွာၿဖစ္လို႔ ၊ Data ႏွစ္ခုေလာက္ကို Sample အေနနဲ႔ ၾကိဳတင္ထည့္သြင္းထားပါမယ္။
Data ေတြလည္း Table ထဲ ၀င္သြားၿပီ။ ေနာက္ထပ္ လိုခ်င္တာက Body ထဲမွာရိွေနမယ့္ စာေတြရဲ႕ တစ္ခ်ိဳ႕တစ္၀က္ကို User ကို ၿပန္ထုတ္ေပးခ်င္တာၿဖစ္ပါတယ္။ အဲဒီ့အတြက္ သံုးရမွာကေတာ့ MySQL's LEFT() function ၿဖစ္ပါတယ္။
သုံးပံုသံုးနည္းကေတာ့ LEFT(field name, ေဖာ္ၿပမယ့္ text amout) လို႔သံုးပါတယ္။ အဲဒါကိုမွ ကြ်န္ေတာ္တို႔ စိတ္ၾကိဳက္ name အသစ္တစ္ခုထပ္ေပးမယ္ဆုိရင္ေတာ့ LEFT(field name, ေဖာ္ၿပမယ့္ text amout) AS post_excerpt ဆုိၿပီးေပးလို႔ရပါေသးတယ္။
ဥပမာ။ ေအာက္က SQL statement ေလးကို Run ၾကည့္မယ္ဆုိရင္ သင့္အေနနဲ႔ post_excerpt ဆုိတဲ့ Field Name အသစ္တစ္ခုကို သင့္ရဲ႕ Database ထဲမွာ အမွန္တကယ္ရိွေနမယ့္ Field Name ၃ ခုအေနာက္မွာ ေဖာ္ၿပေပးပါလိမ့္မယ္။ သူ႔မွာ ပါလာမယ့္ data ကို ၾကည့္မယ္ဆုိရင္လည္း body ထဲက data ရဲ႕ အလုံး ၁၀၀ ကို ၿဖတ္ထုတ္ၿပီး ၿပေပးတာေတြ႔ရပါလိမ့္မယ္။
ကြ်န္ေတာ္တို႔ စနစ္ေလးကို အၿပည့္အစံုသံုးလုိ႔ရဖို႔အတြက္ ပထမဆုံးအေနနဲ႔ index.php တစ္ဖိုင္ Create လုပ္ပါမယ္။ အထဲမွာ ပါမယ့္ Code ေတြကေတာ့ ေအာက္ကအတိုင္းပါဘဲ။
Code မွာပါတာ ေတာ္ေတာ္မ်ားမ်ားကိုေတာ့ အားလုံးနားလည္ၾကမယ္လို႔ထင္ပါတယ္။ ကြ်န္ေတာ္ေရးထားတာလည္း အေကာင္းဆုံးပံုစံနဲ႔ မဟုတ္ေပမယ့္ ၊ ရွင္းေတာ့ရွင္းမယ္လို႔ ထင္ပါတယ္။ အကယ္လို႔ အဲဒီ့ Index File ကို Run မယ္ဆုိရင္ေတာ့ ေအာက္ကပံုအတိုင္း ရပါလိမ့္မယ္။
အဲဒီ့မွာ First Post ဆုိတာကို ေထာက္ထားလိုက္ေတာ့ Browser ေအာက္ေၿခမွာ post.php?id=1 ဆုိၿပီးေပၚေနတာေတြ႔ပါလိမ့္မယ္။ Next One ကို ေထာက္လုိက္မယ္ဆုိရင္ id 2 ကိုၿပပါလိမ့္မယ္။ အဲဒီ့ကမွ ဆက္ႏွိပ္လိုက္ရင္ post.php ထဲမွာ Full Post အေနနဲ႔ သက္ဆုိင္ရာ Post ကို Full Post အေနနဲ႔ ၿပမွာပါ။
အဲဒါကို ဆက္မလုပ္ခင္ အရင္ဆုံး index.php မွာ ရွင္းဖို႔ က်န္ေနတာေလးေတြကို ဆက္ရွင္းပါမယ္။
ရွင္းရမွာကေတာ့ strrpos လို႔ဘဲထင္ပါတယ္။ phpmanual ကို အမွန္အကန္ သံုးတဲ့သူကေတာ့ index.php ကို copy/paste လုပ္တုန္းကတင္ Function List မွာ သြားရွာၿပီးေလာက္ၿပီလုိ႔ ထင္ပါတယ္။ မရွာရေသးတဲ့သူေတြအေနနဲ႔လည္း PHP Manual မွာ ကိုယ္တုိင္ရွာၾကည့္ၾကဖို႔ တုိက္တြန္းပါတယ္။ သူ႔ရဲ႕ Def: ကို phpmanual မွာေတာ့ “Find position of last occurrence of a char in a string” လို႔ ဖြင့္ထားပါတယ္။
အခုအခ်ိန္မွာ သင့္အေနနဲ႔ ဒီ String Function ကို ဘာေၾကာင့္သံုးတာလဲလို႔ ေတြးေကာင္းေတြးေနႏုိင္ပါတယ္။ ဘာေၾကာင့္သံုးလဲဆုိတာကေတာ့ အကယ္လို႔မ်ား ကြ်န္ေတာ္တို႔အေနနဲ႔ Post Excerpt ကို ဆြဲထုတ္လုိက္ရာမွာ “Hello, Greeting from Second Post. Lorem Ipsum is simple dum” အၿဖစ္နဲ႔ ရပ္သြားတယ္ဆုိရင္ ၾကည့္ရတာ အေတာ္ရုပ္ဆုိးပါတယ္။ ၿမန္မာစာလိုမ်ိဳးဆုိပိုေတာင္ ဆုိးပါဦးမယ္။ အဲဒီ့ေတာ့ ေနာက္ဆုံးက ပိုေနတဲ့ dum ေလးကိုၿဖဳတ္ ၊ simple မွာ ရပ္ၿပီး ၾကည့္ေကာင္းရႈေကာင္း စာၿမည္းတစ္ခုဖန္တီးဖို႔ရာအတြက္ သံုးရတာၿဖစ္ပါတယ္။ ေနာက္ဆုံးေတြ႔ရတဲ့ space မွာရပ္မယ္ေပါ့။ အဲဒီ့လို ရပ္ဖို႔အတြက္ ေနာက္ထပ္ String Function ကို သံုးရပါဦးမယ္။ substr လို႔ေခၚပါတယ္။
ေရးပံုေရးနည္းကေတာ့ string substr ( string $string , int $start [, int $length ] ) ၿဖစ္ပါတယ္။
အေပၚက index.php မွာ implement လုပ္ခဲ့တာကေတာ့ ေအာက္ကပံုစံအတိုင္းၿဖစ္ပါတယ္။
အဲဒီ့ ကုဒ္ကေတာ့ Post_Excerpt အၿဖစ္ပါလာမယ့္ String ေတြကို ၊ 0 ကေနစ ၊ ခုနက သတ္မွတ္ထားခဲ့တဲ့ ေနာက္ဆုံး space ရိွမယ့္ ေနရာမွာဆုံးေအာင္လုပ္လိုက္တာပါဘဲ။ ၿပီးေတာ့ ... နဲ႔ေပါင္း ၊ read more link ဆက္ထည့္လုပ္လိုက္တယ္ဆုိရင္ဘဲ ၊ ကြ်န္ေတာ္တုိ႔လိုခ်င္တဲ့ excerpt system တစ္ခုရလာတာၿဖစ္ပါတယ္။
substr က အေပၚမွာ ရွင္းၿပခဲ့တဲ့ LEFT နဲ႔ သိပ္မကြာတာလည္း သတိထားမိပါလိမ့္မယ္။ (အခု ေရးေနရင္းနဲ႔ေတာင္ စဥ္းစားမိတာက substr ကို ႏွစ္ခါသံုးလိုက္ရင္ေတာင္မွ LEFT မသံုးဘဲေရးလို႔ရႏုိင္ေသးတယ္ လို႔ စဥ္းစားမိပါတယ္။ သင့္အေနနဲ႔ စမ္းသပ္ၾကည့္ခ်င္ရင္ စမ္းၾကည့္ႏုိင္ပါတယ္။)
အခုဆုိရင္ေတာ့ ေနာက္ဆုံးက်န္တာက Post ကို One Page ထဲမွာ Full Post အေနနဲ႔ ၿပဖို႔ဘဲ က်န္ပါေတာ့တယ္။ အဲဒါက ဘာမွေတာ့ ခက္လွတယ္လည္းမဟုတ္ပါဘူး။ သမားရိုးက် Data အသြင္းအထုတ္လုပ္တာပါဘဲ။ ခုနက index.php File နဲ႔ နည္းနည္းေလးဘဲ ကြာပါတယ္။
အရင္ဆုံး Post ID ကို URL ကေနယူရပါမယ္။ ဒါမွ ဘယ္ Post ကို Full Post အေနနဲ႔ ၿပတာကိုသိမွာ ၿဖစ္ပါတယ္။ ေနာက္ေတာ့ Query မွာ WHERE နဲ႔ တုိက္စစ္လိုက္ၿပီး Data ကို သမားရိုးက် DB ထဲကထုတ္ၿပီး ၿပလိုက္မယ္ဆုိရင္ ရပါၿပီ။
Browser ဖြင့္ၿပီးေတာ့ Index.php ကိုဖြင့္။ ၿပီးရင္ Read More ကို ႏွိပ္ၾကည့္မယ္ဆုိရင္ ကြ်န္ေတာ္တို႔လိုခ်င္ေနတဲ့ Full Post View ကို single Page အေနနဲ႔ ေအာက္ပါအတုိင္းၿမင္ရပါလိမ့္မယ္။
အခ်ဳပ္အားၿဖင့္ ၿပန္ၾကည့္မယ္ဆုိရင္ ဒီသင္ခန္းစာမွာ သင္တို႔အေနနဲ႔ ေလ့လာခဲ့ရမွာကေတာ့
၁- LEFT Function အသံုးၿပဳၿပီး ၊ လိုခ်င္တဲ့စာကို Field Name တစ္ခုအေနနဲ႔ ဆြဲထုတ္ပံု
၂- strrpos ကို အသံုးၿပဳၿပီး ၊ string တစ္ေၾကာင္းမွာ ကိုယ္လိုခ်င္တဲ့ ေနာက္ဆုံးပိတ္စာလုံးအား ရွာေဖြပံု
၃- substr ကို အသံုးၿပဳၿပီး ၊ string တစ္ေၾကာင္းရဲ႕ လုိအပ္တဲ့စာမ်ားကိုသာ ၿဖတ္ထုတ္ပံု
စသည္တုိ႔ဘဲၿဖစ္ပါတယ္။ သင့္အေနနဲ႔ စိတ္ကူးဥာဏ္ကြန္႔ၿမဴးႏိုင္သေလာက္ အၿခားေနရာမ်ားမွာလည္း ဤ system ထက္ပင္ပိုေကာင္းေသာ ၊ system မ်ားကို ေရးသားႏုိင္ၾကမယ္လို႔ ယံုၾကည္မိပါတယ္။
ကြ်န္ေတာ့္အေနနဲ႔ PHP ကို ေသခ်ာ စလုပ္ၿဖစ္တာ ၁ လေတာင္ မၿပည့္ေသးပါဘူး။ ဒီ Tutorial က Beginner to Beginner Tutorial ၿဖစ္ေနတဲ့အတြက္ ၊ Senior မ်ား ၊ Expert မ်ား နဲ႔ Ninja မ်ား က ကြ်န္ေတာ့္ရဲ႕ လိုအပ္ခ်က္မ်ားကို ၀င္ေရာက္ၿဖည့္စြက္ေပးမယ္ဆုိရင္ေတာ့ အတုိင္းမသိ ၀မ္းသာမိမွာ အမွန္ပါဘဲ။
Ref: NetTuts+ မွ Jeffrey Way ၏ “How to Create Blog Excerpts with PHP” Podcast အားမွီၿငမ္း၍ ေရးသားထားပါသည္။
အိမ္မွာ ဖတ္ၿပီး ေလ့လာခ်င္သူေတြအတြက္ PDF ၿပင္ဆင္ေပးထားပါတယ္။
sHa92
30.11.2010
Level : Beginner/Intermediate
ဒီစနစ္ေလးကေတာ့ နာမည္ၾကားတာနဲ႔တင္ သိတဲ့သူလည္း သိၾကပါလိမ့္မယ္။ ဒီစနစ္ေလးကို သင္တုိ႔အေနနဲ႔ Blog ေတြမွာ အေတြ႔မ်ားပါလိမ့္မယ္။ Blog တစ္ခုကို ၀င္လိုက္မယ္ဆုိရင္ ပထမဆုံးေတြ႔ရမွာက ေရးထားတဲ့ စာေတြကို စာၿမည္းသေဘာနဲ႔ ေဖာ္ၿပေပးထားတာေတြ႔ပါလိမ့္မယ္။ အဲဒီ့ကမွ တစ္ဆင့္ ေဖာ္ၿပေပးထားတဲ့ စာၿမည္းက စိတ္၀င္စားဖို႔ေကာင္းေတာ့ ၊ စာအားလုံးကို ဖတ္ခ်င္လာတာနဲ႔ ၊ Read More သို႔မဟုတ္ “ဆက္လက္ဖတ္ရႈရန္” ဆုိတဲ့ Link မ်ိဳးကို ႏွိပ္ၿပီး ၊ စာအၿပည့္အစံုေရးထားတဲ့အထဲ ၀င္သြားဖတ္ေလ့ရိွၾကပါတယ္။
သင့္အေနနဲ႔ အဲဒီ့လို စနစ္တစ္ခုကို CMS ေတြ Blog Engine ေတြမသံုးဘဲနဲ႔ ကိုယ့္ရဲ႕ Application ထဲမွာ ထည့္သြင္းခ်င္လာၿပီဆုိရင္ေတာ့ ဒီသင္ခန္းစာကို တစ္ဆင့္ခ်င္း လိုက္လုပ္သြားတဲ့အခါမွာ သင္တုိ႔လုပ္ခ်င္တဲ့ Blog Excerpt System ကို လြယ္လြယ္ကူကူဘဲ ရလာပါလိမ့္မယ္။
ကြ်န္ေတာ္တို႔ သင္ခန္းစာေလးကို မစခင္မွာ အရင္ဆုံး ဒီ စနစ္နဲ႔ ပတ္သက္ၿပီးေတာ့ လိုခ်င္တဲ့အခ်က္အလက္ေလးေတြကို ခ်စဥ္းစားၾကည့္ပါမယ္။ (ၾကံဳတုန္း တစ္ခုအၾကံၿပဳခ်င္တာက Application တစ္ခုေရးသားရာမွာ ၾကီးရင္ဘဲၿဖစ္ၿဖစ္ ၊ ေသးရင္ဘဲၿဖစ္ၿဖစ္ Text Editor or IDE မဖြင့္ခင္ (Code ဆုိလို႔ တစ္လုံးတစ္ပါဒ မွ်မေရးရေသးခင္) မွာ Application နဲ႔ ဆုိင္တဲ့ ကိုယ္လိုခ်င္တာေတြ ၊ အဲဒီ့ Apps က လုပ္ေပးမွာေတြကို အေသးစိတ္မဟုတ္ေတာင္ ၊ အၾကမ္းသေဘာနဲ႔ အေနနဲ႔ စာအုပ္တစ္ခုထဲမွာ (သို႕) MS-Word ထဲမွာ ခ်ေရးေစခ်င္ပါတယ္။ ၾကီးၾကီးက်ယ္က်ယ္ေၿပာရရင္ေတာ့ Requirement Define လုပ္တယ္ေပါ့။ အဲဒီ့အေလ့အက်င့္က သင့္ကို တစ္နည္းနည္းနဲ႔ေတာ့ အေထာက္အကူၿဖစ္ေစပါလိမ့္မယ္။)
အဲဒီ့ေတာ့ ကြ်န္ေတာ္တုိ႔လည္း ကြ်န္ေတာ္တို႔ေရးမယ့္ စနစ္နဲ႔ ပတ္သက္လို႔ အရင္ဆုံး လုပ္ခ်င္တာေလးေတြ ခ်ေရးၾကည့္ပါမယ္...
အခု စနစ္မွာေတာ့ Main Case အေနနဲ႔ကေတာ့ တစ္ခုဘဲရိွပါလိ့မ္မယ္...
“Website ကို လာမယ့္ Visitor ေတြအေနနဲ႔ ၀င္၀င္လာခ်င္းမွာ Post ရဲ႕ တစ္ခ်ိဳ႕တစ္၀က္ကိုဘဲ စာၿမည္းအေနနဲ႔ ၿမင္ေနရမယ္။ အဲဒီ့ကမွတဆင့္ “Read More” ကိုႏွိပ္ရင္ ေနာက္ထပ္ Page တစ္ခုမွာ Full Post အေနနဲ႔ ၿပမယ္။”
အကယ္လို႔မ်ား သင္ဟာ သင့္ရဲ႕ေရးလက္စ Application မွာ ၿဖည့္စြက္အသံုးၿပဳခ်င္တာဆုိရင္ေတာ့ ဒီစနစ္နဲ႔ ကို သင့္ရဲ႕ Application ထဲမွာ ေပါင္းထည့္ဖို႔အတြက္ အနည္းငယ္ၿပဳၿပင္ေၿပာင္းလဲမႈေတြေတာ့ ရိွပါလိမ့္မယ္။
ဒီသင္ခန္းစာမွာေတာ့ Data ေတြကို excerpt အေနနဲ႔ၿပတာရယ္ ၊ ေနာက္ထပ္ စာမ်က္ႏွာ တစ္ခုမွာမွ Full Data ကို ၿပတာရယ္က မင္းသား ၊ မင္းသမီး ၿဖစ္ေနေတာ့ ၊ က်န္တာေတြကို အေသးစိတ္ရွင္းလင္းၿခင္း မၿပဳေတာ့ပါဘူး။
အခုဆက္ၿပီးေတာ့ လုပ္ရမွာကေတာ့ Database တည္ေဆာက္ၿခင္းဘဲၿဖစ္ပါတယ္။
ေအာက္မွာကေတာ့ ကြ်န္ေတာ့္အေနနဲ႔ ဒီ သင္ခန္းစာေရးဖို႔ ၿပင္ဆင္ထားတဲ့ Database ၿဖစ္ပါတယ္။ (Beginner Level ၿဖစ္ေပမယ့္ စာဖတ္သူအေနနဲ႔ PHP Fundamental ကိုသိၿပီးသားလို႔ ယူဆၿပီး ေရးထားတဲ့အတြက္ေၾကာင့္ Database တည္ေဆာက္ပံုတည္ေဆာက္နည္း ႏွင့္ အၿခားေသာ အေသးစိတ္အခ်က္ေတြကို ပယ္ထားခဲ့ပါတယ္။)
- Code:
CREATE TABLE posts (
`id` INT( 255 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`title` VARCHAR( 255 ) NOT NULL ,
`body` TEXT NOT NULL
);
သင္ေတြ႔ရသလိုဘဲ ရိုးရိုးရွင္းရွင္းေလးပါ... ကြ်န္ေတာ့္အေနနဲ႔ ဒီ သင္ခန္းစာေရးဖို႔ ၿပင္ဆင္ထားတာၿဖစ္လို႔ Table Name ကို Post အေနနဲ႔ သတ္မွတ္လိုက္ပါတယ္။ အဲဒီ့ Post မွာ ဘာေတြရိွမလဲဆုိရင္ေတာ့ ID, Title, နဲ႔ Body ေတြပါပါလိမ့္မယ္။
ေနာက္တစ္ဆင့္အေနနဲ႔ Database ထဲကေန Data ကုိ ထုတ္ၿပရမွာၿဖစ္လို႔ ၊ Data ႏွစ္ခုေလာက္ကို Sample အေနနဲ႔ ၾကိဳတင္ထည့္သြင္းထားပါမယ္။
- Code:
INSERT INTO posts VALUES (2, 'First Post', 'Hello, Greeting from First Post. Lorem Ipsum is simple dummy text of the blah blah and typesetting industry. We are now testing our blog excerpt system.');
INSERT INTO posts VALUES (2, 'Next One', 'Hello, Greeting from Second Post. Lorem Ipsum is simple dummy text of the blah blah and typesetting industry. We are now testing our blog excerpt system. Just Testing Testing Testing');
Data ေတြလည္း Table ထဲ ၀င္သြားၿပီ။ ေနာက္ထပ္ လိုခ်င္တာက Body ထဲမွာရိွေနမယ့္ စာေတြရဲ႕ တစ္ခ်ိဳ႕တစ္၀က္ကို User ကို ၿပန္ထုတ္ေပးခ်င္တာၿဖစ္ပါတယ္။ အဲဒီ့အတြက္ သံုးရမွာကေတာ့ MySQL's LEFT() function ၿဖစ္ပါတယ္။
သုံးပံုသံုးနည္းကေတာ့ LEFT(field name, ေဖာ္ၿပမယ့္ text amout) လို႔သံုးပါတယ္။ အဲဒါကိုမွ ကြ်န္ေတာ္တို႔ စိတ္ၾကိဳက္ name အသစ္တစ္ခုထပ္ေပးမယ္ဆုိရင္ေတာ့ LEFT(field name, ေဖာ္ၿပမယ့္ text amout) AS post_excerpt ဆုိၿပီးေပးလို႔ရပါေသးတယ္။
ဥပမာ။ ေအာက္က SQL statement ေလးကို Run ၾကည့္မယ္ဆုိရင္ သင့္အေနနဲ႔ post_excerpt ဆုိတဲ့ Field Name အသစ္တစ္ခုကို သင့္ရဲ႕ Database ထဲမွာ အမွန္တကယ္ရိွေနမယ့္ Field Name ၃ ခုအေနာက္မွာ ေဖာ္ၿပေပးပါလိမ့္မယ္။ သူ႔မွာ ပါလာမယ့္ data ကို ၾကည့္မယ္ဆုိရင္လည္း body ထဲက data ရဲ႕ အလုံး ၁၀၀ ကို ၿဖတ္ထုတ္ၿပီး ၿပေပးတာေတြ႔ရပါလိမ့္မယ္။
- Code:
SELECT id, title, body, LEFT(body, 100) AS post_excerpt FROM posts
ကြ်န္ေတာ္တို႔ စနစ္ေလးကို အၿပည့္အစံုသံုးလုိ႔ရဖို႔အတြက္ ပထမဆုံးအေနနဲ႔ index.php တစ္ဖိုင္ Create လုပ္ပါမယ္။ အထဲမွာ ပါမယ့္ Code ေတြကေတာ့ ေအာက္ကအတိုင္းပါဘဲ။
- Code:
<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title>All Posts - Index</title>
</head>
<body>
<?php
// create database related data array
$db = array(
'name' => 'excerpt_sys',
'user' => 'guest',
'password' => 'guess',
'host' => 'localhost'
);
// open database connection
$connection = mysql_connect( $db['host'], $db['user'], $db['password'] ) or die('Could not Connect to the Host');
// select database
mysql_select_db ( $db['name'], $connection ) or die('No DB to Select');
// generate and execute query
$query = 'SELECT id, title, body, LEFT( body, 30 ) AS post_excerpt FROM posts'; //using LEFT() function as I explained in tutorial
$result = mysql_query($query) or die('error in your query: ' . $query);
// print out all posts data
while( $row = mysql_fetch_assoc( $result ) ) :
$theLastSpace = strrpos( $row['post_excerpt'], ' ' ); //using strrpos to find the last occurrence of the "space"
?>
<h1><a href="post.php?id=<?php echo $row['id']; ?>"><?php echo $row['title']; ?></a></h1>
<p><?php echo substr( $row['post_excerpt'], 0, $theLastSpace ) . '...'; //using substr to stop at last "space" ?> <a href="post.php?id=<?php echo $row['id'] ?>">read more</a></p>
<?php endwhile; ?>
</body>
</html>
Code မွာပါတာ ေတာ္ေတာ္မ်ားမ်ားကိုေတာ့ အားလုံးနားလည္ၾကမယ္လို႔ထင္ပါတယ္။ ကြ်န္ေတာ္ေရးထားတာလည္း အေကာင္းဆုံးပံုစံနဲ႔ မဟုတ္ေပမယ့္ ၊ ရွင္းေတာ့ရွင္းမယ္လို႔ ထင္ပါတယ္။ အကယ္လို႔ အဲဒီ့ Index File ကို Run မယ္ဆုိရင္ေတာ့ ေအာက္ကပံုအတိုင္း ရပါလိမ့္မယ္။
အဲဒီ့မွာ First Post ဆုိတာကို ေထာက္ထားလိုက္ေတာ့ Browser ေအာက္ေၿခမွာ post.php?id=1 ဆုိၿပီးေပၚေနတာေတြ႔ပါလိမ့္မယ္။ Next One ကို ေထာက္လုိက္မယ္ဆုိရင္ id 2 ကိုၿပပါလိမ့္မယ္။ အဲဒီ့ကမွ ဆက္ႏွိပ္လိုက္ရင္ post.php ထဲမွာ Full Post အေနနဲ႔ သက္ဆုိင္ရာ Post ကို Full Post အေနနဲ႔ ၿပမွာပါ။
အဲဒါကို ဆက္မလုပ္ခင္ အရင္ဆုံး index.php မွာ ရွင္းဖို႔ က်န္ေနတာေလးေတြကို ဆက္ရွင္းပါမယ္။
- Code:
$theLastSpace = strrpos( $row['post_excerpt'], ' ' ); //using strrpos to find the last occurrence of the "space"
ရွင္းရမွာကေတာ့ strrpos လို႔ဘဲထင္ပါတယ္။ phpmanual ကို အမွန္အကန္ သံုးတဲ့သူကေတာ့ index.php ကို copy/paste လုပ္တုန္းကတင္ Function List မွာ သြားရွာၿပီးေလာက္ၿပီလုိ႔ ထင္ပါတယ္။ မရွာရေသးတဲ့သူေတြအေနနဲ႔လည္း PHP Manual မွာ ကိုယ္တုိင္ရွာၾကည့္ၾကဖို႔ တုိက္တြန္းပါတယ္။ သူ႔ရဲ႕ Def: ကို phpmanual မွာေတာ့ “Find position of last occurrence of a char in a string” လို႔ ဖြင့္ထားပါတယ္။
အခုအခ်ိန္မွာ သင့္အေနနဲ႔ ဒီ String Function ကို ဘာေၾကာင့္သံုးတာလဲလို႔ ေတြးေကာင္းေတြးေနႏုိင္ပါတယ္။ ဘာေၾကာင့္သံုးလဲဆုိတာကေတာ့ အကယ္လို႔မ်ား ကြ်န္ေတာ္တို႔အေနနဲ႔ Post Excerpt ကို ဆြဲထုတ္လုိက္ရာမွာ “Hello, Greeting from Second Post. Lorem Ipsum is simple dum” အၿဖစ္နဲ႔ ရပ္သြားတယ္ဆုိရင္ ၾကည့္ရတာ အေတာ္ရုပ္ဆုိးပါတယ္။ ၿမန္မာစာလိုမ်ိဳးဆုိပိုေတာင္ ဆုိးပါဦးမယ္။ အဲဒီ့ေတာ့ ေနာက္ဆုံးက ပိုေနတဲ့ dum ေလးကိုၿဖဳတ္ ၊ simple မွာ ရပ္ၿပီး ၾကည့္ေကာင္းရႈေကာင္း စာၿမည္းတစ္ခုဖန္တီးဖို႔ရာအတြက္ သံုးရတာၿဖစ္ပါတယ္။ ေနာက္ဆုံးေတြ႔ရတဲ့ space မွာရပ္မယ္ေပါ့။ အဲဒီ့လို ရပ္ဖို႔အတြက္ ေနာက္ထပ္ String Function ကို သံုးရပါဦးမယ္။ substr လို႔ေခၚပါတယ္။
ေရးပံုေရးနည္းကေတာ့ string substr ( string $string , int $start [, int $length ] ) ၿဖစ္ပါတယ္။
အေပၚက index.php မွာ implement လုပ္ခဲ့တာကေတာ့ ေအာက္ကပံုစံအတိုင္းၿဖစ္ပါတယ္။
- Code:
<p><?php echo substr( $row['post_excerpt'], 0, $theLastSpace ) . '...'; //using substr to stop at last "space" ?> <a href="post.php?id=<?php echo $row['id'] ?>">read more</a></p>
- Code:
substr( $row['post_excerpt'], 0, $theLastSpace )
အဲဒီ့ ကုဒ္ကေတာ့ Post_Excerpt အၿဖစ္ပါလာမယ့္ String ေတြကို ၊ 0 ကေနစ ၊ ခုနက သတ္မွတ္ထားခဲ့တဲ့ ေနာက္ဆုံး space ရိွမယ့္ ေနရာမွာဆုံးေအာင္လုပ္လိုက္တာပါဘဲ။ ၿပီးေတာ့ ... နဲ႔ေပါင္း ၊ read more link ဆက္ထည့္လုပ္လိုက္တယ္ဆုိရင္ဘဲ ၊ ကြ်န္ေတာ္တုိ႔လိုခ်င္တဲ့ excerpt system တစ္ခုရလာတာၿဖစ္ပါတယ္။
substr က အေပၚမွာ ရွင္းၿပခဲ့တဲ့ LEFT နဲ႔ သိပ္မကြာတာလည္း သတိထားမိပါလိမ့္မယ္။ (အခု ေရးေနရင္းနဲ႔ေတာင္ စဥ္းစားမိတာက substr ကို ႏွစ္ခါသံုးလိုက္ရင္ေတာင္မွ LEFT မသံုးဘဲေရးလို႔ရႏုိင္ေသးတယ္ လို႔ စဥ္းစားမိပါတယ္။ သင့္အေနနဲ႔ စမ္းသပ္ၾကည့္ခ်င္ရင္ စမ္းၾကည့္ႏုိင္ပါတယ္။)
အခုဆုိရင္ေတာ့ ေနာက္ဆုံးက်န္တာက Post ကို One Page ထဲမွာ Full Post အေနနဲ႔ ၿပဖို႔ဘဲ က်န္ပါေတာ့တယ္။ အဲဒါက ဘာမွေတာ့ ခက္လွတယ္လည္းမဟုတ္ပါဘူး။ သမားရိုးက် Data အသြင္းအထုတ္လုပ္တာပါဘဲ။ ခုနက index.php File နဲ႔ နည္းနည္းေလးဘဲ ကြာပါတယ္။
- Code:
<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title>All Posts - Index</title>
</head>
<body>
<?php
// create database related data array
$db = array(
'name' => 'excerpt_sys',
'user' => 'guest',
'password' => 'guess',
'host' => 'localhost'
);
// open database connection
$connection = mysql_connect( $db['host'], $db['user'], $db['password'] ) or die('Could not Connect to the Host');
// select database
mysql_select_db ( $db['name'], $connection ) or die('No DB to Select');
// get the post id from index.php
$id = $_GET['id'];
// generate and execute query
$query = "SELECT id, title, body FROM posts WHERE id = $id";
$result = mysql_query($query) or die('error in your query: ' . $query);
// print out our selected post data
while( $row = mysql_fetch_assoc( $result ) ) :
?>
<h1><a href="post.php?id=<?php echo $row['id']; ?>"><?php echo $row['title']; ?></a></h1>
<p><?php echo $row['body']; // we print our actual data, no excerpt ?></p>
<?php endwhile; ?>
</body>
</html>
- Code:
$id = $_GET['id'];
အရင္ဆုံး Post ID ကို URL ကေနယူရပါမယ္။ ဒါမွ ဘယ္ Post ကို Full Post အေနနဲ႔ ၿပတာကိုသိမွာ ၿဖစ္ပါတယ္။ ေနာက္ေတာ့ Query မွာ WHERE နဲ႔ တုိက္စစ္လိုက္ၿပီး Data ကို သမားရိုးက် DB ထဲကထုတ္ၿပီး ၿပလိုက္မယ္ဆုိရင္ ရပါၿပီ။
Browser ဖြင့္ၿပီးေတာ့ Index.php ကိုဖြင့္။ ၿပီးရင္ Read More ကို ႏွိပ္ၾကည့္မယ္ဆုိရင္ ကြ်န္ေတာ္တို႔လိုခ်င္ေနတဲ့ Full Post View ကို single Page အေနနဲ႔ ေအာက္ပါအတုိင္းၿမင္ရပါလိမ့္မယ္။
အခ်ဳပ္အားၿဖင့္ ၿပန္ၾကည့္မယ္ဆုိရင္ ဒီသင္ခန္းစာမွာ သင္တို႔အေနနဲ႔ ေလ့လာခဲ့ရမွာကေတာ့
၁- LEFT Function အသံုးၿပဳၿပီး ၊ လိုခ်င္တဲ့စာကို Field Name တစ္ခုအေနနဲ႔ ဆြဲထုတ္ပံု
၂- strrpos ကို အသံုးၿပဳၿပီး ၊ string တစ္ေၾကာင္းမွာ ကိုယ္လိုခ်င္တဲ့ ေနာက္ဆုံးပိတ္စာလုံးအား ရွာေဖြပံု
၃- substr ကို အသံုးၿပဳၿပီး ၊ string တစ္ေၾကာင္းရဲ႕ လုိအပ္တဲ့စာမ်ားကိုသာ ၿဖတ္ထုတ္ပံု
စသည္တုိ႔ဘဲၿဖစ္ပါတယ္။ သင့္အေနနဲ႔ စိတ္ကူးဥာဏ္ကြန္႔ၿမဴးႏိုင္သေလာက္ အၿခားေနရာမ်ားမွာလည္း ဤ system ထက္ပင္ပိုေကာင္းေသာ ၊ system မ်ားကို ေရးသားႏုိင္ၾကမယ္လို႔ ယံုၾကည္မိပါတယ္။
ကြ်န္ေတာ့္အေနနဲ႔ PHP ကို ေသခ်ာ စလုပ္ၿဖစ္တာ ၁ လေတာင္ မၿပည့္ေသးပါဘူး။ ဒီ Tutorial က Beginner to Beginner Tutorial ၿဖစ္ေနတဲ့အတြက္ ၊ Senior မ်ား ၊ Expert မ်ား နဲ႔ Ninja မ်ား က ကြ်န္ေတာ့္ရဲ႕ လိုအပ္ခ်က္မ်ားကို ၀င္ေရာက္ၿဖည့္စြက္ေပးမယ္ဆုိရင္ေတာ့ အတုိင္းမသိ ၀မ္းသာမိမွာ အမွန္ပါဘဲ။
Ref: NetTuts+ မွ Jeffrey Way ၏ “How to Create Blog Excerpts with PHP” Podcast အားမွီၿငမ္း၍ ေရးသားထားပါသည္။
အိမ္မွာ ဖတ္ၿပီး ေလ့လာခ်င္သူေတြအတြက္ PDF ၿပင္ဆင္ေပးထားပါတယ္။
sHa92
30.11.2010