ถามเกี่ยวกับ Widget RSS หน้าหลักบอร์ดถามเกี่ยวกับ Widget RSS Popup Art ถ้าจะดึง Widget RSS มาแสดง เกิน 2cols, 2row เหมือน rss tab จะได้ไหมครับ กรกฎ วิริยะ ได้ครับ ผมเขียนเพิ่มเติมให้แล้ว ดูที่บทความครับ Popup Art ขอบคุณมากครับ แจ่มมากๆ แล้ว module board ตรงไอค่อนถ้าเราจะให้มันเปลี่ยนตามจำนวนคนเข้าชม ประมาณว่า New, Hot, Cool หรืออาจจะเลือกตอนตั้งกระทู้ว่า ฉ18+, แนะนำ, ทุกวัย อะไรประมาณนี้ จะแก้ได้ตรงไหนบ้างครับ Popup Art แต่ดู version วันนี้แล้ว 4.3.0 คริๆๆ กรกฎ วิริยะ คงต้องแก้เยอะละครับ จริงๆแล้วโค้ดบร์ดของ GCMS ก็ไม่ได้ทต่างอะไรกันกับโค้ดบอร์ดทั่วๆไปเลยครับ ถ้าเข้าใจแนวคิดที่ต้องการ ก็สามารถออกแบบเพิ่มเติมได้ ถ้าทำความเข้าใจได้สักโมดูลหนึ่ง การออกแบบโมดูลเพื่อใช้งานเองก็จะง่ายดายครับ อย่างแรกเลย การ แสดงข้อมูลใดๆเพิ่มเติม ต้องดูว่า เราจะเอาข้อมูลส่วนไหนมาแสดง เช่น การจัด rate เหมือนดังคำถาม ถ้าข้อมูลที่ต้องการไม่มีก็ต้องเพิ่มข้อมูลส่วนนี้เข้ามาก่อน ซึ่งก็ต้องเพิ่มฟิลด์ข้อมูลนี้ อย่างที่สอง จะจัดการข้อมูลส่วนนี้ที่ไหน และ ทำอย่างไร อย่างที่สาม ข้อมูลนี้จะแสดงที่ไหน อย่างไร โค้ดทั้งหมดก็เป็นแค่การเขียน PHP ธรรมดาเท่านั้นครับ ถ้าเคยเขียนก็คงน่าจะพอเขียนได้ แล้วจะแก้ไขที่ไหน ? จริงๆแล้วโครงสร้างของโมดูลโดยทั่วๆไปจะเหมือนกันทุกโมดูล การสัังเกตุว่าแต่ละไฟล์ทำอะไร ให้สังเกตชื่อไฟล์ view.php list.php มันน่าจะทำอะไรหนอ admin_xxx.php น่าจะทำอะไรหนอ หากจะตรวจสอบว่าหน้าไหนถูกเรียกใช้ที่ไหน ก็ทำได้ง่ายๆครับ ด้วยการ echo __FILE__ ที่หน้านั้นๆ เวลาเรียกหน้าใด ก็จะแสดงชื่อไฟล์นั้นๆออกมา ให้เรารู้ได้ว่าไฟล์ใดถูกเรียก และทุกโมดูลจะมีลักษณะเหมือนกันหมด การแสดงผล...ผมว่าถ้ามาถึงตรงนี้ได้ อะไรๆ มันก็น่าจะไม่ยากแล้ว เกี่ยวกับ template และ แนวคิดของมัน อ่านบนเว็บหลักได้เลยครับ วิธีการ ไม่ได้มีอะไรซับซ้อน อาจเลือกใช้วิธีปฏิบัติ ตามที่ผมใช้อยู่ โดยศึกษาเอาจากโค้ด หรือ จะดัดแปลงในแบบของตัวเอง ก็ไม่ได้ผิดกติกาแต่ย่างใด เช่น งง เรื่อง template แล้วจะไปเขียนมันทำไม ถ้าทำเองใช้เอง แก้เอง เขียน HTML ใส่มันลงในโค้ดเลยก็ได้ ถ้ามันทำงานได้ตามที่ต้องการ มันก็ไม่แปลกอะไร... ลองดูนะครับ... ต้องขอเวลาสักพักสำหรับการเขียนบทความ เนื่องจากยังไม่มีเวลาจริงๆ (GCMS ก็ยังไม่ได้ไปอยู่ในจุดที่ผมพอใจซะทีเดียว) ถ้า GCMS อญุ่ตัวเมื่อไรคงได้เริ่มเขียนบทความครับ Popup Art ครับ ขอบคุญมากน่ะครับ ขอให้ GCMS4 อยู่ตัว เร็วๆ น่ะครับ เผื่อจะได้เริ่มเขียน อะไรๆ เพิ่มเติม ก็อยากลองเขียน module, widget เพิ่มเองมั้งเหมือนกัน คริๆ แต่แกะโค้ดไปก็งงไป ก็เลยหันไปทำอย่างอื่นก่อน คริๆ ขอบคุณน่ะครับ สู้ๆ เป้าหมายมีไว้พุ้งชน กรกฎ วิริยะ อ้างอิงจาก ความคิดเห็น #5 ครับ ขอบคุญมากน่ะครับ ขอให้ GCMS4 อยู่ตัว เร็วๆ น่ะครับ เผื่อจะได้เริ่มเขียน อะไรๆ เพิ่มเติม ก็อยากลองเขียน module, widget เพิ่มเองมั้งเหมือนกัน คริๆ แต่แกะโค้ดไปก็งงไป ก็เลยหันไปทำอย่างอื่นก่อน คริๆ ขอบคุณน่ะครับ สู้ๆ เป้าหมายมีไว้พุ้งชน โมดูล หรือ Widget สามารถลองทำไปได้เลยครับ เนื่องจากตั้งแต่ต้นมันถูกอัปเดทน้อยมาก (นอกจากแก้ไข bug) การอัปเดทส่วนใหญ่ในตอนนี้จะไปอยู่ที่ระบบครับ Popup Art แล้วถ้าจะให้ rss feed แสดงรายการเกิน 10 รายการ ต้องทำยังไงครับ ตอนนี้มัน list ออกมาแค่ 10 รายการ เช่นใน http://gcms.goragod.com/howto.rss ก็แสดงแค่ 10 รายการ กรกฎ วิริยะ ถ้ากำหนดค่าแล้วไม่ได้ อาจเป็นไปได้ว่า ต้นฉบับ ส่งมาให้เท่านั้นครับ Popup Art คือในไฟล์ modules\document\feed.php ครับ บรรทัดที่ 4 //$sql .= "ORDER BY `last_update` DESC LIMIT $count"; อยากทราบว่า $count คือค่าเดียวกันที่ได้มาจาก news_count=15 (ที่อยู่ใน table _module, field config) หรือป่าวครับ เพราะถ้าเปลี่ยนจาก $count เป็น ตัวเลขเลย มันจะแสดง rss ตามจำนวนตัวเลขที่ใส่ ถ้าเป็น $count จะแสดงแค่ 10 กรกฎ วิริยะ อัปเดท feed.php ครับ <?php include ("bin/inint.php"); include ('bin/config.php'); include ('bin/class.gcms.php'); include ('bin/class.mysql.php'); $db = new sql($config['db_server'], $config['db_username'], $config['db_password'], $config['db_name']); $module = $_GET['module']; if (isset($_GET['count'])) { $count = (int)$_GET['count']; } else { $count = (int)$_GET['rows'] * (int)$_GET['cols']; } $count = $count <= 0 ? 10 : $count; $cdate = date("D, d M Y H:i:s +0700", $mmktime); $sql = "SELECT M.`id`,M.`module`,M.`owner`,I.`topic`,I.`description`,M.`config` FROM `".DB_INDEX."` AS I,`".DB_MODULES."` AS M WHERE M.`module`='$module' AND I.`module_id`=M.`id` AND I.`menu_text`<>'' AND I.`language` IN ('".LANGUAGE."','') LIMIT 1"; $modules = $db->customQuery($sql); if (count($modules) == 1) { $modules = $modules[0]; echo '<?xml version="1.0" encoding="UTF-8"?>'; echo '<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">'; echo '<channel>'; echo '<atom:link href="'.WEB_URL.'/'.$module.'.rss" rel="self" type="application/rss+xml" />'; echo "<title>".$modules['topic']."</title>"; echo '<link>'.gcms::getURL($modules['module']).'</link>'; echo '<description>'.$modules['description'].'</description>'; echo "<pubDate>$cdate</pubDate>"; echo "<lastBuildDate>$cdate</lastBuildDate>"; if (is_file("modules/$modules[owner]/feed.php")) { require ("modules/$modules[owner]/feed.php"); } echo '</channel>'; echo '</rss>'; } $db->close(); Popup Art มายาวกว่าเดิม ขอบคุณครับ แต่ดูท่าทางผมคงต้องอัพเดทจาก 4.2 เป็น 4.3 ก่อนหล่ะครับ กรกฎ วิริยะ อัปเดทที่ดาวน์โหลดไปแล้ว Popup Art ไปแทรกในไฟล์นี้ modules\document\feed.php หรอครับใส่เข้าไปแล้วหายเกลี้ยงไม่มีอะไรขึ้นเลย เด๋วต้องรอโหลดตัวอัพเดทใหม่ดีกว่า ความคิดเห็น รายละเอียด ไฟล์อัปโหลด ชนิด jpg, jpeg, png, webp ขนาดไฟล์ไม่เกิน 2M ส่งความคิดเห็น
แล้ว module board ตรงไอค่อนถ้าเราจะให้มันเปลี่ยนตามจำนวนคนเข้าชม ประมาณว่า New, Hot, Cool หรืออาจจะเลือกตอนตั้งกระทู้ว่า ฉ18+, แนะนำ, ทุกวัย อะไรประมาณนี้ จะแก้ได้ตรงไหนบ้างครับ
จริงๆแล้วโค้ดบร์ดของ GCMS ก็ไม่ได้ทต่างอะไรกันกับโค้ดบอร์ดทั่วๆไปเลยครับ ถ้าเข้าใจแนวคิดที่ต้องการ ก็สามารถออกแบบเพิ่มเติมได้
ถ้าทำความเข้าใจได้สักโมดูลหนึ่ง การออกแบบโมดูลเพื่อใช้งานเองก็จะง่ายดายครับ
อย่างแรกเลย การ แสดงข้อมูลใดๆเพิ่มเติม ต้องดูว่า เราจะเอาข้อมูลส่วนไหนมาแสดง เช่น การจัด rate เหมือนดังคำถาม ถ้าข้อมูลที่ต้องการไม่มีก็ต้องเพิ่มข้อมูลส่วนนี้เข้ามาก่อน ซึ่งก็ต้องเพิ่มฟิลด์ข้อมูลนี้
อย่างที่สอง จะจัดการข้อมูลส่วนนี้ที่ไหน และ ทำอย่างไร
อย่างที่สาม ข้อมูลนี้จะแสดงที่ไหน อย่างไร
โค้ดทั้งหมดก็เป็นแค่การเขียน PHP ธรรมดาเท่านั้นครับ ถ้าเคยเขียนก็คงน่าจะพอเขียนได้
แล้วจะแก้ไขที่ไหน ? จริงๆแล้วโครงสร้างของโมดูลโดยทั่วๆไปจะเหมือนกันทุกโมดูล การสัังเกตุว่าแต่ละไฟล์ทำอะไร ให้สังเกตชื่อไฟล์
view.php list.php มันน่าจะทำอะไรหนอ
admin_xxx.php น่าจะทำอะไรหนอ
หากจะตรวจสอบว่าหน้าไหนถูกเรียกใช้ที่ไหน ก็ทำได้ง่ายๆครับ ด้วยการ echo __FILE__ ที่หน้านั้นๆ เวลาเรียกหน้าใด ก็จะแสดงชื่อไฟล์นั้นๆออกมา ให้เรารู้ได้ว่าไฟล์ใดถูกเรียก
และทุกโมดูลจะมีลักษณะเหมือนกันหมด
การแสดงผล...ผมว่าถ้ามาถึงตรงนี้ได้ อะไรๆ มันก็น่าจะไม่ยากแล้ว เกี่ยวกับ template และ แนวคิดของมัน อ่านบนเว็บหลักได้เลยครับ
วิธีการ ไม่ได้มีอะไรซับซ้อน อาจเลือกใช้วิธีปฏิบัติ ตามที่ผมใช้อยู่ โดยศึกษาเอาจากโค้ด หรือ จะดัดแปลงในแบบของตัวเอง ก็ไม่ได้ผิดกติกาแต่ย่างใด เช่น งง เรื่อง template แล้วจะไปเขียนมันทำไม ถ้าทำเองใช้เอง แก้เอง เขียน HTML ใส่มันลงในโค้ดเลยก็ได้ ถ้ามันทำงานได้ตามที่ต้องการ มันก็ไม่แปลกอะไร...
ลองดูนะครับ...
ต้องขอเวลาสักพักสำหรับการเขียนบทความ เนื่องจากยังไม่มีเวลาจริงๆ (GCMS ก็ยังไม่ได้ไปอยู่ในจุดที่ผมพอใจซะทีเดียว) ถ้า GCMS อญุ่ตัวเมื่อไรคงได้เริ่มเขียนบทความครับ
โมดูล หรือ Widget สามารถลองทำไปได้เลยครับ เนื่องจากตั้งแต่ต้นมันถูกอัปเดทน้อยมาก (นอกจากแก้ไข bug) การอัปเดทส่วนใหญ่ในตอนนี้จะไปอยู่ที่ระบบครับ
เช่นใน http://gcms.goragod.com/howto.rss ก็แสดงแค่ 10 รายการ
บรรทัดที่ 4 //$sql .= "ORDER BY `last_update` DESC LIMIT $count";
อยากทราบว่า $count คือค่าเดียวกันที่ได้มาจาก news_count=15 (ที่อยู่ใน table _module, field config) หรือป่าวครับ
เพราะถ้าเปลี่ยนจาก $count เป็น ตัวเลขเลย มันจะแสดง rss ตามจำนวนตัวเลขที่ใส่ ถ้าเป็น $count จะแสดงแค่ 10
<?php
include ("bin/inint.php");
include ('bin/config.php');
include ('bin/class.gcms.php');
include ('bin/class.mysql.php');
$db = new sql($config['db_server'], $config['db_username'], $config['db_password'], $config['db_name']);
$module = $_GET['module'];
if (isset($_GET['count'])) {
$count = (int)$_GET['count'];
} else {
$count = (int)$_GET['rows'] * (int)$_GET['cols'];
}
$count = $count <= 0 ? 10 : $count;
$cdate = date("D, d M Y H:i:s +0700", $mmktime);
$sql = "SELECT M.`id`,M.`module`,M.`owner`,I.`topic`,I.`description`,M.`config`
FROM `".DB_INDEX."` AS I,`".DB_MODULES."` AS M
WHERE M.`module`='$module' AND
I.`module_id`=M.`id` AND
I.`menu_text`<>'' AND
I.`language` IN ('".LANGUAGE."','')
LIMIT 1";
$modules = $db->customQuery($sql);
if (count($modules) == 1) {
$modules = $modules[0];
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">';
echo '<channel>';
echo '<atom:link href="'.WEB_URL.'/'.$module.'.rss" rel="self" type="application/rss+xml" />';
echo "<title>".$modules['topic']."</title>";
echo '<link>'.gcms::getURL($modules['module']).'</link>';
echo '<description>'.$modules['description'].'</description>';
echo "<pubDate>$cdate</pubDate>";
echo "<lastBuildDate>$cdate</lastBuildDate>";
if (is_file("modules/$modules[owner]/feed.php")) {
require ("modules/$modules[owner]/feed.php");
}
echo '</channel>';
echo '</rss>';
}
$db->close();