<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Professional Novice &#187; Programming</title>
	<atom:link href="http://champjss.in.th/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://champjss.in.th</link>
	<description>Another blog of champjss</description>
	<lastBuildDate>Fri, 27 Aug 2010 15:37:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Profiles system in Drupal</title>
		<link>http://champjss.in.th/2010/02/profiles-system-in-drupal/</link>
		<comments>http://champjss.in.th/2010/02/profiles-system-in-drupal/#comments</comments>
		<pubDate>Sun, 28 Feb 2010 13:53:54 +0000</pubDate>
		<dc:creator>champjss</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://champjss.in.th/?p=103</guid>
		<description><![CDATA[ช่วงนี้จะเรียนจบแล้ว เพื่อนๆ ก็จะทำหนังสือรุ่นกัน ส่วนสำคัญของหนังสือรุ่นก็คือข้อมูลของเพื่อนร่วมรุ่น ซึ่งปกติที่เราเห็นกันก็คือเอาข้อมูลทั่วไปมาใส่ แล้วก็ใส่คำบรรยายลงไปหน่อย จะมากจะน้อยก็แล้วแต่ว่าคนทำหนังสือรู้จักคนนั้นแค่ไหน เพื่อให้หนังสือรุ่นเราเป็นหนังสือรุ่นที่ 2.0 มากขึ้นหน่อย ก็เลยต้องมีระบบมาเก็บข้อมูลที่แยกเป็นสองส่วน ข้อมูลทั่วไป เช่นพวกอีเมล เบอร์โทรศัพท์ อันนี้ให้เจ้าของแก้เอง เพื่อนๆ คนอื่นเขียนไม่ได้ ข้อมูลเกรียนๆ มีแท็ก คำนิยาม คำทำนายอนาคต อันนี้กลับกัน คือเพื่อนๆ ทุกคนช่วยกันเขียนได้หมด ยกเว้นเจ้าของได้แต่นั่งมองตาปริบๆ และแล้วก็ต้องทำไอ้ระบบนี่ให้เสร็จในหนึ่งวัน, ก็คิดถึง Drupal ก่อนทันที เพราะมีระบบสมาชิก จัดการสิทธิ์ จัดการข้อมูลเสร็จสรรพ (เก็บเป็น revision ได้ด้วย) เอามาประยุกต์ใช้ได้เลยโดยสร้าง content type สองอันสำหรับข้อมูลทั่วไป กับข้อมูลเกรียนแยกกัน แล้วกำหนดสิทธิ์ให้โดยถือว่าเจ้าของข้อมูลคือคนสร้าง node เท่านี้ก็เรียบร้อย แต่ถึกหน่อยตอนสร้าง node ให้เพื่อนๆ ทุกคน ปัญหาก็มีอยู่แค่ ระบบ permission ที่พิลึกพิลั่นนี่เอง (คงไม่มีเว็บปกติที่ไหนห้ามแก้เนื้อหาที่ตัวเองสร้างขึ้น แต่แก้ของคนอื่นได้) ซึ่งการกำหนดสิทธิ์ให้แก้ไขเนื้อหาใน Drupal &#8230; <a href="http://champjss.in.th/2010/02/profiles-system-in-drupal/" class="more-link">Continue reading</a>]]></description>
			<content:encoded><![CDATA[<p>ช่วงนี้จะเรียนจบแล้ว เพื่อนๆ ก็จะทำหนังสือรุ่นกัน ส่วนสำคัญของหนังสือรุ่นก็คือข้อมูลของเพื่อนร่วมรุ่น ซึ่งปกติที่เราเห็นกันก็คือเอาข้อมูลทั่วไปมาใส่ แล้วก็ใส่คำบรรยายลงไปหน่อย จะมากจะน้อยก็แล้วแต่ว่าคนทำหนังสือรู้จักคนนั้นแค่ไหน</p>
<p><span id="more-103"></span>เพื่อให้หนังสือรุ่นเราเป็นหนังสือรุ่นที่ 2.0 มากขึ้นหน่อย ก็เลยต้องมีระบบมาเก็บข้อมูลที่แยกเป็นสองส่วน</p>
<ul>
<li>ข้อมูลทั่วไป เช่นพวกอีเมล เบอร์โทรศัพท์ อันนี้ให้เจ้าของแก้เอง เพื่อนๆ คนอื่นเขียนไม่ได้</li>
<li>ข้อมูลเกรียนๆ มีแท็ก คำนิยาม คำทำนายอนาคต อันนี้กลับกัน คือเพื่อนๆ ทุกคนช่วยกันเขียนได้หมด ยกเว้นเจ้าของได้แต่นั่งมองตาปริบๆ</li>
</ul>
<p>และแล้วก็ต้องทำไอ้ระบบนี่ให้เสร็จในหนึ่งวัน, ก็คิดถึง Drupal ก่อนทันที เพราะมีระบบสมาชิก จัดการสิทธิ์ จัดการข้อมูลเสร็จสรรพ (เก็บเป็น revision ได้ด้วย) เอามาประยุกต์ใช้ได้เลยโดยสร้าง content type สองอันสำหรับข้อมูลทั่วไป กับข้อมูลเกรียนแยกกัน แล้วกำหนดสิทธิ์ให้โดยถือว่าเจ้าของข้อมูลคือคนสร้าง node เท่านี้ก็เรียบร้อย แต่ถึกหน่อยตอนสร้าง node ให้เพื่อนๆ ทุกคน</p>
<p>ปัญหาก็มีอยู่แค่ ระบบ permission ที่พิลึกพิลั่นนี่เอง (คงไม่มีเว็บปกติที่ไหนห้ามแก้เนื้อหาที่ตัวเองสร้างขึ้น แต่แก้ของคนอื่นได้) ซึ่งการกำหนดสิทธิ์ให้แก้ไขเนื้อหาใน Drupal สามารถกำหนดได้ว่า</p>
<ul>
<li>แก้ของตัวเอง ได้หรือไม่</li>
<li>แก้ของใครก็ได้ ได้หรือไม่</li>
</ul>
<p>ดูเหมือนมันจะเตรียมพร้อมไว้แล้ว แต่พอลองใช้แล้วไม่เป็นอย่างที่คิด คือถ้ากำหนดสิทธิ์ให้ &#8220;แก้ของใครก็ได้&#8221; แล้ว ก็จะแก้ของตัวเองได้เลยไม่ว่าจะเลือกตัวเลือกแรกไว้ยังไง</p>
<p>หลังจากพยายามหาโมดูลซักพักแล้วไม่เจอ ก็ต้องแก้เอาเอง มั่วจนได้ที่อยู่พักใหญ่ๆ ก็เจอส่วนที่ตัดสินใจเรื่องนี้ อยู่ใน</p>
<ul>
<li>โมดูล node
<ul>
<li>ไฟล์ node.module
<ul>
<li>ฟังก์ชัน node_content_access</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>แล้วก็แก้ (คนที่คิดว่าจะต้องแก้โค้ดคงแก้ได้อยู่แล้ว ขอไม่ลงโค้ดในเอนทรีนะครับ ^^)</p>
<p>ตั้งท่าว่าจะเขียนเป็นโมดูล แต่สุดท้ายก็แก้โค้ดสดๆ เลย เสร็จ! ใช้งานได้แล้วที่ <a href="http://cpsk.champjss.in.th/profiles/">http://cpsk.champjss.in.th/profiles/</a> (แต่ไม่อาจเปิดให้สาธารณะชนเห็นได้ :P)</p>
<p>ปล. ข้อเสียของท่าแบบนี้คือสุดท้ายแล้วผมกับ <a href="http://twitter.com/risingp">@risingp</a> ต้องมานั่งสร้าง user แล้วก็สร้าง node ของแต่ละคนให้เอง ยังดีที่มีแค่ 70 คน ถึกซักสองชั่วโมงก็เสร็จ</p>
]]></content:encoded>
			<wfw:commentRss>http://champjss.in.th/2010/02/profiles-system-in-drupal/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
