สอบถามแนวทางการเขียน RSS Feed แบ่งตามหมวดแบบนี้ครับ
เข้าเวปไมมีหน้า Page แล้วครับพี่ชัย ตอนนี้ผมคิดหลักการแรก คือ เซฟชื่อไฟล์ให้มีไอดีตัวแปรต่อท้าย เวลาเจอตัวแปรไอดีนี้ก็ทับไฟล์เดิมไปเลยได้ไหมครับ จะมีข้อบกพร่องอะไรไหมครับ แล้วใช้ชื่อไฟล์ ทำลิ้งส่งไปเป็น RSS พี่ชัย
Code (PHP)
if($type2 == "feed_th"){
$savexml_th = $savepath."/"."xml_feed".$varCat2.".xml";
$realfile = "xml_feed".$varCat2.".xml"; /// เอาตัวแปร VarCat2 ซึ่งก็คือไอดี หมวดหมู่มาต่อท้าย
$objFopen = fopen($savexml_th, 'w');
fwrite($objFopen, $xml);
fclose($objFopen);
}
ประวัติการแก้ไข 2015-01-17 11:55:01 2015-01-17 11:56:16 2015-01-17 11:56:53
Date :
2015-01-17 11:44:14
By :
sarut14
กรรม เมื่อเช้า ยังเข้าได้อยู่เลย 5555
ลองดูอันใหม่ครับ
http://www.make-rss-feeds.com/making-an-rss-feed.htm
ตอบ: ไม่มีปัญหาครับ ก็เป็นการอัพเดทข้อมูลใหม่เท่านั้นนะครับ
แต่ทีนี้ ผมยังไม่เคยใช้ RSS นะครับ รู้แค่ หลักการ ยังไม่เคยทำจริงซักทีครับ
http://www.rss2html.com/ อันนี้มี download
ประวัติการแก้ไข 2015-01-17 11:56:00 2015-01-17 12:06:32 2015-01-17 12:09:05 2015-01-17 12:11:40
Date :
2015-01-17 11:54:54
By :
Chaidhanan
ผมติดปัญหานิดหน่อยครับพี่ชัย คือว่า เวลาจะบันทึกซ้ำอีกรอบ จริงอยู่ว่าไฟล์ชื่อเดิม แต่ไอดีมันรันออโต้ครับ ผมจะเขียนคำสั่ง
อัปเดตดักไงดีครับว่า ถ้ามีการบันทึกซ้ำ ตรงกับ Cat_id นี้ ให้ทับ เรคอร์เดิมอ่ะครับ
Code ผมแบบนี้ครับ RSS
Code (PHP)
function feedXML() {
$type2 = JRequest::getVar('type');
//$title = JRequest::getVar('title');
$varCat2 = JRequest::getInt('id_xml_feed');
$limit2 = JRequest::getInt('limit2');
$orderby2 = JRequest::getInt('orderby');
$byfield2 = JRequest::getInt('byfield');
//echo $varCat2;
//echo "<br>";
//echo $type2;
//exit;
$field = "id,title,title_en,introtext,introtext_en,created";
if($byfield == 0):
$by = "id";
elseif($byfield == 1):
$by = "created";
endif;
if($ordeyby == 0):
$order = "DESC";
else:
$order = "ASC";
endif;
$orderbys = "ORDER BY ".$by.' '.$order."";
$db = JFactory::getDbo();
$sql = "SELECT ".$field." FROM #__k2_items WHERE catid = ".$varCat2." ".$orderbys." LIMIT ".$limit2." ";
$db->setQuery($sql);
//$rs = $db->loadAssocList();
$rs2 = $db->loadObjectList();
//print_r($rs2);
//exit;
$xml = '<?xml version="1.0" encoding="UTF-8"?>'."\n";
$xml.= '<rss version="2.0">'."\n";
$xml.= '<channel>'."\n";
foreach($rs2 as $items):
if($type2 == "feed_th"):
$introtext = strip_tags($items->introtext);
$pathimg = $Domain."media/k2/items/cache/".md5("Image".$items->id)."_S.jpg";
$pathurl = $Domain."index.php?option=com_km&view=km&layout=detail&k2id={$items->id}";
$xml.= '<item>'."\n";
$xml.= '<title>'.$items->title .'</title>'."\n";
$xml.= '<description><![CDATA[<p>'.mb_substr($introtext,0,500,'UTF-8').'</p>]]></description>'."\n";
$xml.= '<link><![CDATA['.$pathurl.']]></link>'."\n";
$xml.= '<pubDate>'.date("D, d M Y H:i:s O").'</pubDate>'."\n";
$xml.= '</item>'."\n";
endif;
endforeach;
$xml.= '</channel>'."\n";
$xml.= '</rss>'."\n";
//echo $xml;
//exit;
$savepath = JPATH_ROOT.DS.'media'.DS.'k2'.DS.'xml_feed';//Save Folder
if($type2 == "feed_th"){
$savexml_th = $savepath."/"."xml_feed".$varCat2.".xml";
$realfile = "xml_feed".$varCat2.".xml";
$objFopen2 = fopen($savexml_th, 'w');
fwrite($objFopen2, $xml);
fclose($objFopen2);
}
$link = "linktest";
if($varCat2 != 0):
$db3 = JFactory::getDbo();
$sql3 = "INSERT INTO #__feed_rss ( `id_cat`, `file_feed`,`link` ) VALUES ( '$varCat2', '$realfile', '$link')";
$db3->setQuery($sql3);
$db3->query();
//print_r ($db3);
//exit;
endif;
}
}
ประวัติการแก้ไข 2015-01-17 12:52:03 2015-01-17 12:54:15
Date :
2015-01-17 12:51:41
By :
sarut14
ในกรณีอ้างอิง id เก่า คงต้องมีการตรวจสอบ ก่อน
และใช้คำสั่ง replace into table set id=Old_ID, ....
คำสั่ง replace into จะทำงาน ตรวจ primary key, unique key
ถ้าพบจะทำการ เข้าแทนที่ ข้อมูลเดิม
Date :
2015-01-17 13:24:15
By :
Chaidhanan
จากโค๊ดข้างต้น ต้องใช้ไงอ่ะครับ ยังงงๆอยู่ครับ กรณีที่จะเช็คว่าจากในภาพ ถ้าหมวดหมู่เดิม ให้ทับไฟล์เดิม ไม่ต้องขึ้นไอดีใหม่
แต่ถ้ามีหมวดหมู่ใหม่เข้ามาก็ ขึ้นไอดีใหม่ ไฟล์ก็มีใหม่ตามครับ รบกวนหน่อยนะครับ
Date :
2015-01-17 13:33:08
By :
sarut14
select id as old_id from table where section='cursection' and division='curdivision';
หา id ของหมวดหมู่เดิม เอามาใช้
replace into table set id = old_id, section='cursection', division='curdivision', data ........
Date :
2015-01-17 13:41:08
By :
Chaidhanan
อันนี้ต้องดักก่อน insert ใช่ไหมครับเช่น คือผมยังงๆตรงที่ว่าคำสั่ง Replace ต้องเขียนวางไว้ยังไงครับ แบบนี้ไหมครับ
Code (PHP)
////คือคำสั่ง replace นี่จะต้องดักก่อนเข้า insert ไหมครับ เช่นสมมุติครับ หรือต้อง IF หรือ select รอบแรกก่อน จะ insert ครับ
$db3 = JFactory::getDbo();
$sql3 = "INSERT INTO #__feed_rss ( `id_cat`, `file_feed`,`link` ) VALUES ( '$varCat2', '$realfile', '$link')";
$db3->setQuery($sql3);
$db3->query();
Date :
2015-01-17 14:12:06
By :
sarut14
$db3 = JFactory::getDbo();
$sql3 = "INSERT INTO #__feed_rss ( `id_cat`, `file_feed`,`link` ) VALUES ( '$varCat2', '$realfile', '$link')";
$db3->setQuery($sql3);
$db3->query();
แก้เป็น
$db3 = JFactory::getDbo();
$sql3 = "REPLACE INTO #__feed_rss ( `id_cat`, `file_feed`,`link` ) VALUES ( '$varCat2', '$realfile', '$link')";
$db3->setQuery($sql3);
$db3->query();
ถ้ายังไงเอา โครงสร้าง #__feed_rss มาดูหน่อยครับ มีแค่ 3 ฟีลด์ เท่านั้นหรือเปล่า
Date :
2015-01-17 14:23:36
By :
Chaidhanan
ใช่ครับ ดาต้าเบสจะเป็นแบบนี้ครับ น่าจะ 4 ฟิวส์ถ้านับ Auto ID อ่ะครับ โครงสร้างสคริปเขียนเต็มๆจากกระทู้แรกอ่ะครับ
พอใส่ Replace ID ยัง AUTO อ่ะครับ นี่หน้าโชว์ครับ
ID Auto
ID_cat คือค่าที่ผมรับมาจากหมวดหมู่คือ $varCat2
File_feed คือชื่อไฟล์ครับที่ับันทึกมาครับ จะลงท้ายเลข เพราะเวลาเลือกหมวดหมู่เดิมจะให้มันลงไฟลืเดิมครับ
Link ทำฟิวส์รองรับไว้ก่อน เหอๆ
ประเด็นคือ เลือกหมวดหมู่เดิม โอเคคครับมันทับไฟล์เดิม แต่ยังไง Auto ID มันจะรันไปเสมอ อ่ะครับ
ตอนแรกผมนึกว่าจะใส่แบบนี้ครับ
Code (PHP)
if($varCat2 == $varCat2){
$sql3 = " REPLACE INTO #__feed_rss ( `id_cat``, `file_feed`, `link` ) VALUES( '$varCat2', '$realfile', '$link' )";
$db3->setQuery($sql3);
//$rs = $db->loadAssocList();
$rs3 = $db3->loadObjectList();
} else {
$sql3 = "INSERT INTO #__feed_rss ( `id_cat`, `file_feed`,`link` ) VALUES ( '$varCat2', '$realfile', '$link')";
$db3->setQuery($sql3);
ประวัติการแก้ไข 2015-01-17 14:32:05 2015-01-17 14:36:21
Date :
2015-01-17 14:28:58
By :
sarut14
Code (PHP)
$search_str = "select id from #__feed_rss where id_cat='$varCat2' and file_feed='$realfile' ";
$db->setQuery($search_str);
$search_result = $db->loadObjectList();
$field_id = $search_row = $search_result[0] ? ' id = ' . $search_row->id . ', ' : '';
$sql3 = " REPLACE INTO #__feed_rss set $field_id id_cat='$varCat2', file_feed='$realfile', link='$link' ";
Date :
2015-01-17 15:04:16
By :
Chaidhanan
รบกวน echo $sql3 ออกมาดูหน่อยครับ
กรณีทับข้อมูลเดิม
Date :
2015-01-17 15:34:54
By :
Chaidhanan
ขอบคุณมากๆครับพี่ชัย ได้แล้วครับ ไม่เคยลองแบบนี้เลยครับ แต่ยังงงๆกับ บรรทัดที่ 4 คืออย่างไรครับ
Date :
2015-01-17 15:47:15
By :
sarut14
$field_id = $search_row = $search_result[0] ? ' id = ' . $search_row->id . ', ' : '';
สีแดง กำหนดค่าให้ครับ $search_row = $search_result[0]
แล้วเอาไปตรวจสอบ ? ถ้ามีค่าทำหลังเครื่องหมายคำถาม : ถ้าไม่มีค่าหรือเป็นเท็จทำหลังโคล่อน
เอาค่าที่ได้ไปใส่ $field_id
Date :
2015-01-17 15:57:07
By :
Chaidhanan
ขอบคุณมากครับ ถามเป็นความรู้เล้กน้อยนะครับ ตัว Replace กับ Update ในลักษณะนี้แตกต่างกันอย่างไรครับ ถ้าแบบโค๊ดข้างต้น
สามารถใช้ Update ได้ไหมครับ หรือ เหมาะกับ Repleac มากกว่า
Date :
2015-01-17 16:18:16
By :
sarut14
ได้ ครับ update ก็ได้ ครับ แค่เพิ่ม where เข้าไป แต่ต้องแยก ระหว่าง insert กับ update ออกจากกัน
แต่ replace มัน ทำ อัตโนมัติ ( แบบถูกเซทมาก่อน 5555)
Date :
2015-01-17 16:22:34
By :
Chaidhanan
ฝากคำถามสองอันหน่อยนะครับ จากโค๊ดที่ผมเขียนอันล่างอ่ะครับ จะตัดเว้นวรรคก่อนบันทึกลง Database ได้อย่างไรดีครับ
โค๊ดนี้ เป็นการเอาคำที่อยู่ในไฟล์ TEXT ลงเบสอ่ะครับ ในไฟล์มันมี เว้นวรรค เค้าบรรทัดด้วยอ่ะครับ
Code (PHP)
$realname = $_FILES['attachment_file']['name'][0];
//$filename2 = $_FILES['attachment_file']['tmp_name'][0];
//echo $filename2;
//exit;
if (($_FILES['attachment_file']['type'][0] == "text/plain")) {
$filetmp_name = $_FILES['attachment_file']['tmp_name'][0];
$fname = iconv("TIS-620","UTF-8",$filetmp_name);
$data = fread($fh = fopen($fname, "r"),3000);
$fline = fgetcsv($fh, "4096" );
fclose($fh); }
อีกข้อนะครับ ถ้าเวลาไฟล์ text เซฟมา มันเซฟโดยการเป็น Ascii อ่ะครับ ถ้าเราเอาไฟล์แนบตัวนี้ไปลงเบส
มันจะไม่บันทึกลง Mysql ให้อ่ะครับ ต้องเซฟก่อนเป็น UTF8 มันถึงจะลงเบสได้ครับ เป็นเพราะอะไรครับ
Date :
2015-01-18 20:54:26
By :
sarut14
file ascii ภาษาไทย จะเป็น tis620 ต้อง convert โดยใช้ iconv ( 'tis620', 'utf8/IGNORE', $textFromFile);
ส่วนการลบ วรรค (blank) ต้องถามว่า ลบทั้งหมด หรือ ลบแค่บางส่วน เหลือไว้ 1 ช่องหรือเปล่าครับ
คิดดูให้ดีก่อนนะครับ ผมไม่รู้วา่รูปแบบข้อความมันเป็นอย่างไร
Date :
2015-01-18 21:07:45
By :
Chaidhanan
ลบบางส่วนครับ เหลือไว้ช่องเดียวอ่ะครับ บางที่แปลงออกมาเจอเว้นวรรคแบบเละมากอ่ะครับ ขอบคุณมากครับพี่ชัย ส่วนการแปลง
ลองเปลี่ยน 'tis620', 'utf8/IGNORE', $filetmp_name ดูแล้วครับ มันไม่บันทึกเลยครับ จากเดิม ภาษาอังกิดมันบันทึกให้ครับ
แม้จะเป็น ascii ตอนนี้ไม่มีเนื้อไฟล์จากไฟล์เข้าเบสเลยงับ ไม่ทราบว่าเพราะอะไรเหอๆ อันนี้เทสไฟล์ปกติบันทึกเป็น ascii ปกติที่
วินโดว์เซฟให้ครับ
Code (PHP)
$realname = $_FILES['attachment_file']['name'][0];
//$filename2 = $_FILES['attachment_file']['tmp_name'][0];
//echo $filename2;
//exit;
if (($_FILES['attachment_file']['type'][0] == "text/plain")) {
$filetmp_name = $_FILES['attachment_file']['tmp_name'][0];
$fname = iconv ( 'tis620', 'utf8/IGNORE', $filetmp_name);// ลองเปลี่ยนตามพี่ว่าครับ มันไม่บันทึกลงเบสอ่ะครับ
$data = fread($fh = fopen($fname, "r"),3000);
$fline = fgetcsv($fh, "4096" );
fclose($fh); }
-จากเบสแถวบน ถ้าแก้ไขโค๊ดแบบพี่ชัย ฟิวส์ keytext จะว่างเปล่าครับ ถ้าโค๊ดแบบเดิมผมจะมีค่าเข้ามาครับ
อันนี้เฉพาะภาษาอังกิดนะครับ T_T ไฟล์ดีฟ้อนเซฟ ascii ปกติครับเดิมๆ
ประวัติการแก้ไข 2015-01-19 10:10:01 2015-01-19 10:14:53
Date :
2015-01-19 09:55:58
By :
sarut14
Code (PHP)
$txt = ' abcd efgh ijklmno zzzz';
$rs = preg_replace ('/\s+/', ' ', $txt);
echo $rs;
Date :
2015-01-19 10:08:47
By :
Chaidhanan
ใช้ดักส่วนนี้ไหมครับ
Code (PHP)
$realname = $_FILES['attachment_file']['name'][0];
//$filename2 = $_FILES['attachment_file']['tmp_name'][0];
//echo $filename2;
//exit;
if (($_FILES['attachment_file']['type'][0] == "text/plain")) {
$filetmp_name = $_FILES['attachment_file']['tmp_name'][0];
$filetmp_name2 = preg_replace ('/\s+/', ' ', $filetmp_name);
$fname = iconv("TIS-620","UTF-8",$filetmp_name2);
//$fname = iconv("TIS-620","UTF-8/IGNORE", $filetmp_name);
$data = fread($fh = fopen($fname, "r"),3000);
$fline = fgetcsv($fh, "4096" );
fclose($fh); }
หรือต้องใช้ในส่วนนี้ก่อนบันทึกลงเบสอ่ะครับ รบกวนพี่อีกรอบนะครับ
Date :
2015-01-19 10:23:31
By :
sarut14
ก่อนบันทึกลง database ครับ
Date :
2015-01-19 10:27:55
By :
Chaidhanan
application/rss+xml
Date :
2015-01-19 11:46:40
By :
pjgunner.com
Load balance : Server 00