<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>المشروع</title>
	
	<link>http://www.almashroo.com</link>
	<description>تطوير المواقع</description>
	<lastBuildDate>Thu, 10 Dec 2009 06:30:16 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Almashroo" /><feedburner:info uri="almashroo" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>Almashroo</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>تسريع تحميل الصفحة باستخدام data URI</title>
		<link>http://feedproxy.google.com/~r/Almashroo/~3/wtsoDgdW7R0/</link>
		<comments>http://www.almashroo.com/2080/%d8%aa%d8%b3%d8%b1%d9%8a%d8%b9-%d8%aa%d8%ad%d9%85%d9%8a%d9%84-%d8%a7%d9%84%d8%b5%d9%81%d8%ad%d8%a9-%d8%a8%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-data-uri/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 06:30:16 +0000</pubDate>
		<dc:creator>عبدالرحمن العتيبة</dc:creator>
				<category><![CDATA[دروس]]></category>
		<category><![CDATA[Base64]]></category>
		<category><![CDATA[data-uri]]></category>
		<category><![CDATA[ترميز]]></category>
		<category><![CDATA[تسريع الصفحات]]></category>
		<category><![CDATA[نقل البيانات]]></category>

		<guid isPermaLink="false">http://www.almashroo.com/?p=2080</guid>
		<description><![CDATA[<p class="post_image_header">
<a href="http://www.almashroo.com/2080/%d8%aa%d8%b3%d8%b1%d9%8a%d8%b9-%d8%aa%d8%ad%d9%85%d9%8a%d9%84-%d8%a7%d9%84%d8%b5%d9%81%d8%ad%d8%a9-%d8%a8%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-data-uri/" title="تسريع تحميل الصفحة باستخدام data URI"><img src="http://www.almashroo.com/uploads/2009/12/data-uri-post-header.png" alt="تسريع تحميل الصفحة باستخدام data URI" height="140" width="550" /></a>
</p>
هناك الكثير من الوسائل التي تتيح لنا التقليل من حجم هذه الطلبات على الخادم، وبالتالي تؤدي إلى سرعة تحميل الصفحات. من بين هذه الوسائل هي<strong> دمج ملفات CSS في ملف واحد</strong>، وبطريقة مشابهة يمكن <strong>دمج ملفات جافاسكربت في ملف واحد</strong>. ويمكننا أيضاً استخدام <strong>الصور الضمنية</strong>، عبر تحويلها إلى نص مرمّز داخل مستندات HTML وCSS، وهو ما سنركز عليه في هذا المقال.]]></description>
			<content:encoded><![CDATA[<p class="post_image_header">
<a href="http://www.almashroo.com/2080/%d8%aa%d8%b3%d8%b1%d9%8a%d8%b9-%d8%aa%d8%ad%d9%85%d9%8a%d9%84-%d8%a7%d9%84%d8%b5%d9%81%d8%ad%d8%a9-%d8%a8%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-data-uri/" title="تسريع تحميل الصفحة باستخدام data URI"><img src="http://www.almashroo.com/uploads/2009/12/data-uri-post-header.png" alt="تسريع تحميل الصفحة باستخدام data URI" height="140" width="550" /></a>
</p>
<p>لعل أحد أهم النصائح لتحسين سرعة تحميل صفحات الويب هي التقليل من معدل طلبات HTTP للخادم، في الواقع، هذه النصيحة هي أول نصائح ياهوو <a href="http://developer.yahoo.com/performance/rules.html">لأفضل الممارسات لتسريع المواقع</a>. كلما قلت الطلبات على خادم الموقع، كلما ساعد في تحسين سرعة الموقع.</p>
<p>تخيل أن كل طلب جديد لأي ملف خارجي، مثلاً صورة، أو ملف CSS، أو ملف جافاسكربت، يؤدي إلى إنشاء مورد اتصال من قبل المتصفح، مما يؤدي إلى زيادة وقت التحميل للصفحة بسبب عملية الاتصال الجديدة مع الخادم لطلب هذا الملف.<br />
<span id="more-2080"></span></p>
<h3>وسائل التغلب على مشكلة تعدد طلبات HTTP</h3>
<p>هناك الكثير من الوسائل التي تتيح لنا التقليل من حجم هذه الطلبات على الخادم، وبالتالي تؤدي إلى سرعة تحميل الصفحات. من بين هذه الوسائل هي<strong> دمج ملفات CSS في ملف واحد</strong>، وبطريقة مشابهة يمكن <strong>دمج ملفات جافاسكربت في ملف واحد</strong>. ويمكننا أيضاً استخدام <strong>الصور الضمنية</strong>، عبر تحويلها إلى نص مرمّز داخل مستندات HTML وCSS، وهو ما سنركز عليه في هذا المقال.</p>
<h3>ماهي data: URI</h3>
<p><a href="http://en.wikipedia.org/wiki/Data_URI_scheme">data URI</a> هي وسيلة لإدراج البيانات ضمنياً في صفحات الموقع بدلاً من استدعائها خارجياً. البيانات تشمل، على سبيل المثال لا الحصر، الصور، ملفات CSS، ملفات جافاسكربت، وهي من تعريف اللجنة الخاصة بنظام الإنترنت IETF في <a href="http://tools.ietf.org/html/rfc2397">RFC 2397</a>.</p>
<p>طريقة التنسيق هي كالتالي:</p>
<pre class="brush: plain;">data:[&lt;mime type&gt;][;charset=&lt;charset&gt;][;base64],&lt;encoded data&gt;</pre>
<p>هذا النسق العام الذي يجب استخدامه لإدراج البيانات ضمنياً على الصفحة، حيث كل جزئية فيه تعني التالي:</p>
<ul>
<li><strong>data</strong>، البروتوكول الذي يجب استخدامه ليفهمه المتصفح، وهنا تم استخدام data للتعريف بأنها عبارة عن بيانات.</li>
<li><strong>mime type</strong>، <a href="http://en.wikipedia.org/wiki/MIME_type">نوع ملف الوسائط</a> الذي سيتم إدراجه، على سبيل المثال لإدراج صورة PNG يتم استخدام <code>image/png</code>. إذا لم يتم استخدام أي قيمة هنا، فإن القيمة الافتراضية هي النص <code>text/plain;charset=US-ASCII</code>.</li>
<li><strong>charset</strong>، نوع الترميز المستخدم للنصوص، واستخدامه يكون خاص فقط للنصوص. يمكن تركه فارغاً للملفات الأخرى.</li>
<li><strong>base64</strong>، نوع ترميز البيانات، على عكس charset المستخدم للنصوص، فإن نوع الترميز هنا يعني الترميز الخاص بالبيانات التي سيتم إدراجها. افتراضياً وعند عدم تحديد أي قيمة هنا، يتم استخدام الترميز الخاص بروابط الإنترنت URL encoding، والذي يكون في العادة حروف آسكي ASCII اللاتينية، وأي حروف أخرى خارج أسكي يتم استبدالها بالحروف <span xml:lang="en" lang="en" dir="ltr" >%xx</span> حيث x يكون عدد ستعشري Hexdecimal. عندما يتم استخدام ترميز Base64، يجب أن تكون البيانات أيضاً مرمّزة بهذا الترميز.</li>
<li><strong>encoded data</strong>، هنا يتم وضع البيانات، ويجب وضع البيانات مرمّزة حسب الترميز المختار في النقطة السابقة.</li>
</ul>
<h3>ترميز Base64</h3>
<p>يساعد ترميز <a href="http://en.wikipedia.org/wiki/Base64">Base64</a> على <a href="http://en.wikipedia.org/wiki/Binary-to-text_encoding">تحويل البيانات الثنائية binary data إلى نصوص</a> بحيث يسهل نقلها عبر الإنترنت. يتم ذلك عبر تحويل البيانات إلى بت bits، ومن ثم جمعها وتحويلها إلى حروف Base64. هذه الحروف تتكون من الأبجدية الإنجليزية الكبيرة والصغيرة A-Z a-z والأرقام 0-9 بالإضافة إلى &#8220;+&#8221; و &#8220;/&#8221;. أيضاً يتم استخدام &#8220;=&#8221; في النهاية لمعرفة وجود حشوة padding.</p>
<h4 class="resourcelink"><a href="data:text/plain;charset=utf-8;base64,2YXYsdit2KjYpw==">مثال نص</a></h4>
<p><strong>الشيفرة</strong><br />
هذا نص كلمة &#8220;مرحبا&#8221; مرمّز بطريقة Base64.</p>
<pre class="brush: plain;">
data:text/plain;charset=utf-8;base64,2YXYsdit2KjYpw==
</pre>
<h4 class="resourcelink"><a href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAI6SURBVDjLpZJbaJJxGMaHgdcFXURdBLtZrGitiFh0uhjRVRTVWI1as7mQakhjyyEkRAcaHSCrj0xrWGuuoVsr25qzfeYObh6yJJdzavoZs3Sy8PhJ8vR9EoHkotXFA/+b3+//vC9vEYCi/8mvh8H7nTM8kyF0LpoacCazLxzxbM/bb1S3OUo8GQtz/iggGfi1O0NaAzS8kQwCURqBORrTX9LQf5jHQ3KWlA1RnAUFeneGsATSoKIZOGdTsAWSMPuTsFNJeL7SEOoF4GtrUKuuShUUvJpKUd4wnYMtDDj5KQGTN4FRTyInOvH8MDonL6BKuRcFBey8fqYyC0/4Ehhn4JGZOBp1AtT1VkOkrYfMKIKgsxq7b+zErssV0TyBxjaf9UVomBh4jPnVyMCG6ThbGfKRVtwebsK1wdO4+JIPce8xbBGXI0+gMkWoqZ/137jjIBlY/zEGnqoO+2R7wGvfj/N9x3FAWonNojKUCUtTeQKlMUT02+fgCqVzs7OwzhnLyd4HU2xlCLsOYlPz+sI7uK8Pcu4O+EnNRAhWfwKOzym8Y2LyxCAf9GGHZDvKm9Zha2NptudcRUnBQ7rZ5+G0aVzEpS4nJelwZMXt9myL3Bpskyq9FmUzQuZu2B63QCXcEH50ak3Jb4KF0i+p5D5r3aYeJeoRNCgwfq8BCv7q8F8L2Dw9u5HbcWateuj6IXi0V0HUrsCiBGweNBRzZbxVasXJYkhrll1ZtIDNnaPLl9w6snRlwSX+a34AgPPwSZzC+6wAAAAASUVORK5CYII=">مثال صورة</a></h4>
<p><strong>الشيفرة</strong><br />
هذه صورة أيقونة &#8220;عدسة مكبرة&#8221; بحجم ١٦ بيكسل.</p>
<pre class="brush: plain;">
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAI6SURBVDjLpZJbaJJxGMaHgdcFXURdBLtZrGitiFh0uhjRVRTVWI1as7mQakhjyyEkRAcaHSCrj0xrWGuuoVsr25qzfeYObh6yJJdzavoZs3Sy8PhJ8vR9EoHkotXFA/+b3+//vC9vEYCi/8mvh8H7nTM8kyF0LpoacCazLxzxbM/bb1S3OUo8GQtz/iggGfi1O0NaAzS8kQwCURqBORrTX9LQf5jHQ3KWlA1RnAUFeneGsATSoKIZOGdTsAWSMPuTsFNJeL7SEOoF4GtrUKuuShUUvJpKUd4wnYMtDDj5KQGTN4FRTyInOvH8MDonL6BKuRcFBey8fqYyC0/4Ehhn4JGZOBp1AtT1VkOkrYfMKIKgsxq7b+zErssV0TyBxjaf9UVomBh4jPnVyMCG6ThbGfKRVtwebsK1wdO4+JIPce8xbBGXI0+gMkWoqZ/137jjIBlY/zEGnqoO+2R7wGvfj/N9x3FAWonNojKUCUtTeQKlMUT02+fgCqVzs7OwzhnLyd4HU2xlCLsOYlPz+sI7uK8Pcu4O+EnNRAhWfwKOzym8Y2LyxCAf9GGHZDvKm9Zha2NptudcRUnBQ7rZ5+G0aVzEpS4nJelwZMXt9myL3Bpskyq9FmUzQuZu2B63QCXcEH50ak3Jb4KF0i+p5D5r3aYeJeoRNCgwfq8BCv7q8F8L2Dw9u5HbcWateuj6IXi0V0HUrsCiBGweNBRzZbxVasXJYkhrll1ZtIDNnaPLl9w6snRlwSX+a34AgPPwSZzC+6wAAAAASUVORK5CYII=
</pre>
<h4 class="resourcelink"><a href="http://www.almashroo.com/examples/abdulrahman/091210-data-uri/base64/">مثال صورة في HTML و CSS</a></h4>
<p><strong>شيفرة صورة خلفية باستخدام CSS</strong></p>
<pre class="brush: css;">
.div-bg
{
	background: transparent url(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAI6SURBVDjLpZJbaJJxGMaHgdcFXURdBLtZrGitiFh0uhjRVRTVWI1as7mQakhjyyEkRAcaHSCrj0xrWGuuoVsr25qzfeYObh6yJJdzavoZs3Sy8PhJ8vR9EoHkotXFA/+b3+//vC9vEYCi/8mvh8H7nTM8kyF0LpoacCazLxzxbM/bb1S3OUo8GQtz/iggGfi1O0NaAzS8kQwCURqBORrTX9LQf5jHQ3KWlA1RnAUFeneGsATSoKIZOGdTsAWSMPuTsFNJeL7SEOoF4GtrUKuuShUUvJpKUd4wnYMtDDj5KQGTN4FRTyInOvH8MDonL6BKuRcFBey8fqYyC0/4Ehhn4JGZOBp1AtT1VkOkrYfMKIKgsxq7b+zErssV0TyBxjaf9UVomBh4jPnVyMCG6ThbGfKRVtwebsK1wdO4+JIPce8xbBGXI0+gMkWoqZ/137jjIBlY/zEGnqoO+2R7wGvfj/N9x3FAWonNojKUCUtTeQKlMUT02+fgCqVzs7OwzhnLyd4HU2xlCLsOYlPz+sI7uK8Pcu4O+EnNRAhWfwKOzym8Y2LyxCAf9GGHZDvKm9Zha2NptudcRUnBQ7rZ5+G0aVzEpS4nJelwZMXt9myL3Bpskyq9FmUzQuZu2B63QCXcEH50ak3Jb4KF0i+p5D5r3aYeJeoRNCgwfq8BCv7q8F8L2Dw9u5HbcWateuj6IXi0V0HUrsCiBGweNBRzZbxVasXJYkhrll1ZtIDNnaPLl9w6snRlwSX+a34AgPPwSZzC+6wAAAAASUVORK5CYII=&quot;) no-repeat;
	width: 16px;
	height: 16px;
}
</pre>
<p><strong>شيفرة صورة في HTML</strong></p>
<pre class="brush: xml;">
&lt;img src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAI6SURBVDjLpZJbaJJxGMaHgdcFXURdBLtZrGitiFh0uhjRVRTVWI1as7mQakhjyyEkRAcaHSCrj0xrWGuuoVsr25qzfeYObh6yJJdzavoZs3Sy8PhJ8vR9EoHkotXFA/+b3+//vC9vEYCi/8mvh8H7nTM8kyF0LpoacCazLxzxbM/bb1S3OUo8GQtz/iggGfi1O0NaAzS8kQwCURqBORrTX9LQf5jHQ3KWlA1RnAUFeneGsATSoKIZOGdTsAWSMPuTsFNJeL7SEOoF4GtrUKuuShUUvJpKUd4wnYMtDDj5KQGTN4FRTyInOvH8MDonL6BKuRcFBey8fqYyC0/4Ehhn4JGZOBp1AtT1VkOkrYfMKIKgsxq7b+zErssV0TyBxjaf9UVomBh4jPnVyMCG6ThbGfKRVtwebsK1wdO4+JIPce8xbBGXI0+gMkWoqZ/137jjIBlY/zEGnqoO+2R7wGvfj/N9x3FAWonNojKUCUtTeQKlMUT02+fgCqVzs7OwzhnLyd4HU2xlCLsOYlPz+sI7uK8Pcu4O+EnNRAhWfwKOzym8Y2LyxCAf9GGHZDvKm9Zha2NptudcRUnBQ7rZ5+G0aVzEpS4nJelwZMXt9myL3Bpskyq9FmUzQuZu2B63QCXcEH50ak3Jb4KF0i+p5D5r3aYeJeoRNCgwfq8BCv7q8F8L2Dw9u5HbcWateuj6IXi0V0HUrsCiBGweNBRzZbxVasXJYkhrll1ZtIDNnaPLl9w6snRlwSX+a34AgPPwSZzC+6wAAAAASUVORK5CYII=&quot; width=&quot;16&quot; height=&quot;16&quot; /&gt;
</pre>
<h3>ترميز URL</h3>
<p>ويسمى أيضاً <a href="http://en.wikipedia.org/wiki/Percent-encoding">بالترميز المئوي</a>، حيث يعتمد الترميز على جدول أسكي ASCII للمحارف، وأي محرف يقع خارج هذا الجدول يتم ترميزه باستخدام UTF-8، ومن ثم تحويله إلى رقمه المئوي.</p>
<p>لا ينصح باستخدام هذا الترميز لنقل البيانات، وخصوصاً الكبيرة منها لحجمه الكبير مقارنة بترميز Base64.</p>
<h4 class="resourcelink"><a href="data:text/plain;charset=utf-8,%D9%85%D8%B1%D8%AD%D8%A8%D8%A7">مثال نص</a></h4>
<p><strong>الشيفرة</strong><br />
هذا نص كلمة &#8220;مرحبا&#8221; مرمّز بطريقة URL encoding.</p>
<pre class="brush: plain;">
data:text/plain;charset=utf-8,%D9%85%D8%B1%D8%AD%D8%A8%D8%A7
</pre>
<h4 class="resourcelink"><a href="data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%10%00%00%00%10%08%06%00%00%00%1F%F3%FFa%00%00%00%04gAMA%00%00%AF%C87%05%8A%E9%00%00%00%19tEXtSoftware%00Adobe%20ImageReadyq%C9e%3C%00%00%02%3AIDAT8%CB%A5%92%5Bh%92q%18%C6%87%81%D7%05%5DD%5D%04%BBY%ACh%AD%88Xt%BA%18%D1U%14%D5X%8DZ%B3%B9%90jHc%CB%21%24D%07%1A%1D%20%AB%8FLkXk%AE%A1%5B%2B%DB%9A%B3%7D%E6%0En%1E%B2%24%97sj%FA%19%B3t%B2%F0%F8I%F2%F4%7D%12%81%E4%A2%D5%C5%03%FF%9B%DF%EF%FF%BC%2Fo%11%80%A2%FF%C9%AF%87%C1%FB%9D3%3C%93%21t.%9A%1Ap%26%B3%2F%1C%F1l%CF%DBoT%B79J%3C%19%0Bs%FE%28%20%19%F8%B5%3BCZ%034%BC%91%0C%02Q%1A%819%1A%D3_%D2%D0%7F%98%C7Cr%96%94%0DQ%9C%05%05zw%86%B0%04%D2%A0%A2%198gS%B0%05%920%FB%93%B0SIx%BE%D2%10%EA%05%E0kkP%AB%AEJ%15%14%BC%9AJQ%DE0%9D%83-%0C8%F9%29%01%937%81QO%22%27%3A%F1%FC0%3A%27%2F%A0J%B9%17%05%05%EC%BC%7E%A62%0BO%F8%12%18g%E0%91%998%1Au%02%D4%F5VC%A4%AD%87%CC%28%82%A0%B3%1A%BBo%EC%C4%AE%CB%15%D1%3C%81%C66%9F%F5Eh%98%18x%8C%F9%D5%C8%C0%86%E98%5B%19%F2%91V%DC%1En%C2%B5%C1%D3%B8%F8%92%0Fq%EF1l%11%97%23O%A02E%A8%A9%9F%F5%DF%B8%E3%20%19X%FF1%06%9E%AA%0E%FBd%7B%C0k%DF%8F%F3%7D%C7q%40Z%89%CD%A22%94%09KSy%02%A51D%F4%DB%E7%E0%0A%A5s%B3%B3%B0%CE%19%CB%C9%DE%07Sle%08%BB%0EbS%F3%FA%C2%3B%B8%AF%0Fr%EE%0E%F8I%CDD%08V%7F%02%8E%CF%29%BCcb%F2%C4%20%1F%F4a%87d%3B%CA%9B%D6akci%B6%E7%5CEI%C1C%BA%D9%E7%E1%B4i%5C%C4%A5.%27%25%E9pd%C5%ED%F6l%8B%DC%1Al%93%2A%BD%16e3B%E6n%D8%1E%B7%40%25%DC%10%7EtjM%C9o%82%85%D2%2F%A9%E4%3Ek%DD%A6%1E%25%EA%114%280%7E%AF%01%0A%FE%EA%F0_%0B%D8%3C%3D%BB%91%DBqf%ADz%E8%FA%21x%B4WA%D4%AE%C0%A2%04l%1E4%14se%BCUj%C5%C9bHk%96%5DY%B4%80%CD%9D%A3%CB%97%DC%3A%B2te%C1%25%FEk%7E%00%80%F3%F0I%9C%C2%FB%AC%00%00%00%00IEND%AEB%60%82">مثال صورة</a></h4>
<p><strong>الشيفرة</strong><br />
هذه صورة أيقونة &#8220;عدسة مكبرة&#8221; بحجم ١٦ بيكسل.</p>
<pre class="brush: plain;">
data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%10%00%00%00%10%08%06%00%00%00%1F%F3%FFa%00%00%00%04gAMA%00%00%AF%C87%05%8A%E9%00%00%00%19tEXtSoftware%00Adobe%20ImageReadyq%C9e%3C%00%00%02%3AIDAT8%CB%A5%92%5Bh%92q%18%C6%87%81%D7%05%5DD%5D%04%BBY%ACh%AD%88Xt%BA%18%D1U%14%D5X%8DZ%B3%B9%90jHc%CB%21%24D%07%1A%1D%20%AB%8FLkXk%AE%A1%5B%2B%DB%9A%B3%7D%E6%0En%1E%B2%24%97sj%FA%19%B3t%B2%F0%F8I%F2%F4%7D%12%81%E4%A2%D5%C5%03%FF%9B%DF%EF%FF%BC%2Fo%11%80%A2%FF%C9%AF%87%C1%FB%9D3%3C%93%21t.%9A%1Ap%26%B3%2F%1C%F1l%CF%DBoT%B79J%3C%19%0Bs%FE%28%20%19%F8%B5%3BCZ%034%BC%91%0C%02Q%1A%819%1A%D3_%D2%D0%7F%98%C7Cr%96%94%0DQ%9C%05%05zw%86%B0%04%D2%A0%A2%198gS%B0%05%920%FB%93%B0SIx%BE%D2%10%EA%05%E0kkP%AB%AEJ%15%14%BC%9AJQ%DE0%9D%83-%0C8%F9%29%01%937%81QO%22%27%3A%F1%FC0%3A%27%2F%A0J%B9%17%05%05%EC%BC%7E%A62%0BO%F8%12%18g%E0%91%998%1Au%02%D4%F5VC%A4%AD%87%CC%28%82%A0%B3%1A%BBo%EC%C4%AE%CB%15%D1%3C%81%C66%9F%F5Eh%98%18x%8C%F9%D5%C8%C0%86%E98%5B%19%F2%91V%DC%1En%C2%B5%C1%D3%B8%F8%92%0Fq%EF1l%11%97%23O%A02E%A8%A9%9F%F5%DF%B8%E3%20%19X%FF1%06%9E%AA%0E%FBd%7B%C0k%DF%8F%F3%7D%C7q%40Z%89%CD%A22%94%09KSy%02%A51D%F4%DB%E7%E0%0A%A5s%B3%B3%B0%CE%19%CB%C9%DE%07Sle%08%BB%0EbS%F3%FA%C2%3B%B8%AF%0Fr%EE%0E%F8I%CDD%08V%7F%02%8E%CF%29%BCcb%F2%C4%20%1F%F4a%87d%3B%CA%9B%D6akci%B6%E7%5CEI%C1C%BA%D9%E7%E1%B4i%5C%C4%A5.%27%25%E9pd%C5%ED%F6l%8B%DC%1Al%93%2A%BD%16e3B%E6n%D8%1E%B7%40%25%DC%10%7EtjM%C9o%82%85%D2%2F%A9%E4%3Ek%DD%A6%1E%25%EA%114%280%7E%AF%01%0A%FE%EA%F0_%0B%D8%3C%3D%BB%91%DBqf%ADz%E8%FA%21x%B4WA%D4%AE%C0%A2%04l%1E4%14se%BCUj%C5%C9bHk%96%5DY%B4%80%CD%9D%A3%CB%97%DC%3A%B2te%C1%25%FEk%7E%00%80%F3%F0I%9C%C2%FB%AC%00%00%00%00IEND%AEB%60%82
</pre>
<h4 class="resourcelink"><a href="http://www.almashroo.com/examples/abdulrahman/091210-data-uri/url-encode/">مثال صورة في HTML و CSS</a></h4>
<p><strong>شيفرة صورة خلفية باستخدام CSS</strong></p>
<pre class="brush: css;">
.div-bg
{
	background: transparent url(&quot;data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%10%00%00%00%10%08%06%00%00%00%1F%F3%FFa%00%00%00%04gAMA%00%00%AF%C87%05%8A%E9%00%00%00%19tEXtSoftware%00Adobe%20ImageReadyq%C9e%3C%00%00%02%3AIDAT8%CB%A5%92%5Bh%92q%18%C6%87%81%D7%05%5DD%5D%04%BBY%ACh%AD%88Xt%BA%18%D1U%14%D5X%8DZ%B3%B9%90jHc%CB%21%24D%07%1A%1D%20%AB%8FLkXk%AE%A1%5B%2B%DB%9A%B3%7D%E6%0En%1E%B2%24%97sj%FA%19%B3t%B2%F0%F8I%F2%F4%7D%12%81%E4%A2%D5%C5%03%FF%9B%DF%EF%FF%BC%2Fo%11%80%A2%FF%C9%AF%87%C1%FB%9D3%3C%93%21t.%9A%1Ap%26%B3%2F%1C%F1l%CF%DBoT%B79J%3C%19%0Bs%FE%28%20%19%F8%B5%3BCZ%034%BC%91%0C%02Q%1A%819%1A%D3_%D2%D0%7F%98%C7Cr%96%94%0DQ%9C%05%05zw%86%B0%04%D2%A0%A2%198gS%B0%05%920%FB%93%B0SIx%BE%D2%10%EA%05%E0kkP%AB%AEJ%15%14%BC%9AJQ%DE0%9D%83-%0C8%F9%29%01%937%81QO%22%27%3A%F1%FC0%3A%27%2F%A0J%B9%17%05%05%EC%BC%7E%A62%0BO%F8%12%18g%E0%91%998%1Au%02%D4%F5VC%A4%AD%87%CC%28%82%A0%B3%1A%BBo%EC%C4%AE%CB%15%D1%3C%81%C66%9F%F5Eh%98%18x%8C%F9%D5%C8%C0%86%E98%5B%19%F2%91V%DC%1En%C2%B5%C1%D3%B8%F8%92%0Fq%EF1l%11%97%23O%A02E%A8%A9%9F%F5%DF%B8%E3%20%19X%FF1%06%9E%AA%0E%FBd%7B%C0k%DF%8F%F3%7D%C7q%40Z%89%CD%A22%94%09KSy%02%A51D%F4%DB%E7%E0%0A%A5s%B3%B3%B0%CE%19%CB%C9%DE%07Sle%08%BB%0EbS%F3%FA%C2%3B%B8%AF%0Fr%EE%0E%F8I%CDD%08V%7F%02%8E%CF%29%BCcb%F2%C4%20%1F%F4a%87d%3B%CA%9B%D6akci%B6%E7%5CEI%C1C%BA%D9%E7%E1%B4i%5C%C4%A5.%27%25%E9pd%C5%ED%F6l%8B%DC%1Al%93%2A%BD%16e3B%E6n%D8%1E%B7%40%25%DC%10%7EtjM%C9o%82%85%D2%2F%A9%E4%3Ek%DD%A6%1E%25%EA%114%280%7E%AF%01%0A%FE%EA%F0_%0B%D8%3C%3D%BB%91%DBqf%ADz%E8%FA%21x%B4WA%D4%AE%C0%A2%04l%1E4%14se%BCUj%C5%C9bHk%96%5DY%B4%80%CD%9D%A3%CB%97%DC%3A%B2te%C1%25%FEk%7E%00%80%F3%F0I%9C%C2%FB%AC%00%00%00%00IEND%AEB%60%82&quot;) no-repeat;
	width: 16px;
	height: 16px;
}
</pre>
<p><strong>شيفرة صورة في HTML</strong></p>
<pre class="brush: xml;">
&lt;img src=&quot;data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%10%00%00%00%10%08%06%00%00%00%1F%F3%FFa%00%00%00%04gAMA%00%00%AF%C87%05%8A%E9%00%00%00%19tEXtSoftware%00Adobe%20ImageReadyq%C9e%3C%00%00%02%3AIDAT8%CB%A5%92%5Bh%92q%18%C6%87%81%D7%05%5DD%5D%04%BBY%ACh%AD%88Xt%BA%18%D1U%14%D5X%8DZ%B3%B9%90jHc%CB%21%24D%07%1A%1D%20%AB%8FLkXk%AE%A1%5B%2B%DB%9A%B3%7D%E6%0En%1E%B2%24%97sj%FA%19%B3t%B2%F0%F8I%F2%F4%7D%12%81%E4%A2%D5%C5%03%FF%9B%DF%EF%FF%BC%2Fo%11%80%A2%FF%C9%AF%87%C1%FB%9D3%3C%93%21t.%9A%1Ap%26%B3%2F%1C%F1l%CF%DBoT%B79J%3C%19%0Bs%FE%28%20%19%F8%B5%3BCZ%034%BC%91%0C%02Q%1A%819%1A%D3_%D2%D0%7F%98%C7Cr%96%94%0DQ%9C%05%05zw%86%B0%04%D2%A0%A2%198gS%B0%05%920%FB%93%B0SIx%BE%D2%10%EA%05%E0kkP%AB%AEJ%15%14%BC%9AJQ%DE0%9D%83-%0C8%F9%29%01%937%81QO%22%27%3A%F1%FC0%3A%27%2F%A0J%B9%17%05%05%EC%BC%7E%A62%0BO%F8%12%18g%E0%91%998%1Au%02%D4%F5VC%A4%AD%87%CC%28%82%A0%B3%1A%BBo%EC%C4%AE%CB%15%D1%3C%81%C66%9F%F5Eh%98%18x%8C%F9%D5%C8%C0%86%E98%5B%19%F2%91V%DC%1En%C2%B5%C1%D3%B8%F8%92%0Fq%EF1l%11%97%23O%A02E%A8%A9%9F%F5%DF%B8%E3%20%19X%FF1%06%9E%AA%0E%FBd%7B%C0k%DF%8F%F3%7D%C7q%40Z%89%CD%A22%94%09KSy%02%A51D%F4%DB%E7%E0%0A%A5s%B3%B3%B0%CE%19%CB%C9%DE%07Sle%08%BB%0EbS%F3%FA%C2%3B%B8%AF%0Fr%EE%0E%F8I%CDD%08V%7F%02%8E%CF%29%BCcb%F2%C4%20%1F%F4a%87d%3B%CA%9B%D6akci%B6%E7%5CEI%C1C%BA%D9%E7%E1%B4i%5C%C4%A5.%27%25%E9pd%C5%ED%F6l%8B%DC%1Al%93%2A%BD%16e3B%E6n%D8%1E%B7%40%25%DC%10%7EtjM%C9o%82%85%D2%2F%A9%E4%3Ek%DD%A6%1E%25%EA%114%280%7E%AF%01%0A%FE%EA%F0_%0B%D8%3C%3D%BB%91%DBqf%ADz%E8%FA%21x%B4WA%D4%AE%C0%A2%04l%1E4%14se%BCUj%C5%C9bHk%96%5DY%B4%80%CD%9D%A3%CB%97%DC%3A%B2te%C1%25%FEk%7E%00%80%F3%F0I%9C%C2%FB%AC%00%00%00%00IEND%AEB%60%82&quot; width=&quot;16&quot; height=&quot;16&quot; /&gt;
</pre>
<h3>أدوات التحويل إلي data: URI</h3>
<p>يوجد الكثير من الأدوات التي يمكنها تحويل الوسائط المتعددة إلى بيانات مرمّزة بترميز Base64.</p>
<ul>
<li><a href="http://www.sveinbjorn.org/dataurlmaker">DataURLMaker</a>، خدمة على الويب تتيح تحويل الصور إلى بيانات URI باستخدام ترميز Base64، ووضعها تلقائياً في وسم <code>&lt;img&gt;</code>.</li>
<li><a href="http://www.dopiaza.org/tools/datauri/">data: URI Generator</a>، خدمة على الويب أيضاً. تقبل جميع أنواع الملفات وليست محددة بالصور.</li>
<li><a href="http://software.hixie.ch/utilities/cgi/data/data">The data: URI kitchen</a>، خدمة أخرى على الويب، ولكن تتيح تحكم أكثر بنوع البيانات، على سبيل المثال، إدخال HTML والتحويل مباشرة.</li>
<li>استخدام شاشة الأوامر بلغة PHP.
<pre class="brush: bash;">$ php -r &quot;echo base64_encode(file_get_contents('example.png'));&quot;</pre>
</li>
<li>استخدام برنامج uuencode على اللينكس والماك (يأتي افتراضياً على أغلب التوزيعات)
<pre class="brush: bash;">$ uuencode -m example.png</pre>
</li>
</ul>
<h3>دعم المتصفحات</h3>
<p>يتم دعم بيانات data: URI من قبل جميع المتصفحات الحديثة:</p>
<ul>
<li>Firefox</li>
<li>Opera</li>
<li>Chrom</li>
<li>Safari</li>
<li>Internet Explorer v8 &#8211; فقط للصور، للنسخ الأقل من النسخة ٨ يمكن استخدام <a href="http://www.phpied.com/mhtml-when-you-need-data-uris-in-ie7-and-under/">MHTML</a>.</li>
</ul>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Almashroo?a=wtsoDgdW7R0:AGFbyY3PNUs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Almashroo?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Almashroo?a=wtsoDgdW7R0:AGFbyY3PNUs:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Almashroo?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Almashroo?a=wtsoDgdW7R0:AGFbyY3PNUs:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Almashroo?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Almashroo?a=wtsoDgdW7R0:AGFbyY3PNUs:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Almashroo?i=wtsoDgdW7R0:AGFbyY3PNUs:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Almashroo/~4/wtsoDgdW7R0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.almashroo.com/2080/%d8%aa%d8%b3%d8%b1%d9%8a%d8%b9-%d8%aa%d8%ad%d9%85%d9%8a%d9%84-%d8%a7%d9%84%d8%b5%d9%81%d8%ad%d8%a9-%d8%a8%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-data-uri/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		<feedburner:origLink>http://www.almashroo.com/2080/%d8%aa%d8%b3%d8%b1%d9%8a%d8%b9-%d8%aa%d8%ad%d9%85%d9%8a%d9%84-%d8%a7%d9%84%d8%b5%d9%81%d8%ad%d8%a9-%d8%a8%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-data-uri/</feedburner:origLink></item>
		<item>
		<title>تعلم برمجة إضافات وردبريس [الجزء الثاني]</title>
		<link>http://feedproxy.google.com/~r/Almashroo/~3/c-90X3_OLjE/</link>
		<comments>http://www.almashroo.com/1961/%d8%aa%d8%b9%d9%84%d9%85-%d8%a8%d8%b1%d9%85%d8%ac%d8%a9-%d8%a5%d8%b6%d8%a7%d9%81%d8%a7%d8%aa-%d9%88%d8%b1%d8%af%d8%a8%d8%b1%d9%8a%d8%b3-2/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 06:30:51 +0000</pubDate>
		<dc:creator>فراس اللو</dc:creator>
				<category><![CDATA[دروس]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[إضافات]]></category>
		<category><![CDATA[تدويل]]></category>
		<category><![CDATA[ترجمة]]></category>

		<guid isPermaLink="false">http://www.almashroo.com/?p=1961</guid>
		<description><![CDATA[<p class="post_image_header">
<a href="http://www.almashroo.com/1961/%d8%aa%d8%b9%d9%84%d9%85-%d8%a8%d8%b1%d9%85%d8%ac%d8%a9-%d8%a5%d8%b6%d8%a7%d9%81%d8%a7%d8%aa-%d9%88%d8%b1%d8%af%d8%a8%d8%b1%d9%8a%d8%b3-2/" title="تعلم برمجة إضافات وردبريس [الجزء الثاني]"><img src="http://www.almashroo.com/uploads/2009/10/wordpress-creating-plugin-post-header.png" alt="تعلم برمجة إضافات وردبريس [الجزء الثاني]" height="140" width="550" /></a>
</p>
بعدما تعلمنا في <a title="تعلم برمجة إضافات وردبريس [الجزء الأول]" href="http://www.almashroo.com/1867/%d8%aa%d8%b9%d9%84%d9%85-%d8%a8%d8%b1%d9%85%d8%ac%d8%a9-%d8%a5%d8%b6%d8%a7%d9%81%d8%a7%d8%aa-%d9%88%d8%b1%d8%af%d8%a8%d8%b1%d9%8a%d8%b3-1/">الجزء الأول</a> كيفية صناعة إضافة بسيطة للوردبريس، سنتعلم اليوم صناعة إضافة أكثر إحترافية، حيث سنتعامل في هذا الدرس مع قواعد البيانات ونستخدم بعض الدوال الجاهزة من وردبريس وكذلك صناعة مُربع جانبي Widget للإضافة، وأيضاً جعلها مُتعددة اللغات.


مقالات ذات صلة:<ol><li><a href='http://www.almashroo.com/1867/%d8%aa%d8%b9%d9%84%d9%85-%d8%a8%d8%b1%d9%85%d8%ac%d8%a9-%d8%a5%d8%b6%d8%a7%d9%81%d8%a7%d8%aa-%d9%88%d8%b1%d8%af%d8%a8%d8%b1%d9%8a%d8%b3-1/' rel='bookmark' title='Permanent Link: تعلم برمجة إضافات وردبريس [الجزء الأول]'>تعلم برمجة إضافات وردبريس [الجزء الأول]</a></li><li><a href='http://www.almashroo.com/1721/10-%d9%88%d8%b5%d9%81%d8%a7%d8%aa-%d8%aa%d8%ba%d9%86%d9%8a%d9%83-%d8%b9%d9%86-%d8%a5%d8%b6%d8%a7%d9%81%d8%a7%d8%aa-wordpress-%d8%a7%d9%84%d8%b4%d8%a8%d9%8a%d9%87%d8%a9/' rel='bookmark' title='Permanent Link: 10 وصفات لملف الدوال تغنيك عن مثيلاتها من إضافات WordPress'>10 وصفات لملف الدوال تغنيك عن مثيلاتها من إضافات WordPress</a></li><li><a href='http://www.almashroo.com/228/%d8%af%d9%88%d8%a7%d9%84-%d9%88%d9%88%d8%b1%d8%af%d8%a8%d8%b1%d9%8a%d8%b3-wordpress-function/' rel='bookmark' title='Permanent Link: بعض من دوال ووردبرس WordPress Function'>بعض من دوال ووردبرس WordPress Function</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p class="post_image_header">
<a href="http://www.almashroo.com/1961/%d8%aa%d8%b9%d9%84%d9%85-%d8%a8%d8%b1%d9%85%d8%ac%d8%a9-%d8%a5%d8%b6%d8%a7%d9%81%d8%a7%d8%aa-%d9%88%d8%b1%d8%af%d8%a8%d8%b1%d9%8a%d8%b3-2/" title="تعلم برمجة إضافات وردبريس [الجزء الثاني]"><img src="http://www.almashroo.com/uploads/2009/10/wordpress-creating-plugin-post-header.png" alt="تعلم برمجة إضافات وردبريس [الجزء الثاني]" height="140" width="550" /></a>
</p>
<p>بعدما تعلمنا في <a title="تعلم برمجة إضافات وردبريس [الجزء الأول]" href="http://www.almashroo.com/1867/%d8%aa%d8%b9%d9%84%d9%85-%d8%a8%d8%b1%d9%85%d8%ac%d8%a9-%d8%a5%d8%b6%d8%a7%d9%81%d8%a7%d8%aa-%d9%88%d8%b1%d8%af%d8%a8%d8%b1%d9%8a%d8%b3-1/">الجزء الأول</a> كيفية صناعة إضافة بسيطة للوردبريس، سنتعلم اليوم صناعة إضافة أكثر إحترافية، حيث سنتعامل في هذا الدرس مع قواعد البيانات ونستخدم بعض الدوال الجاهزة من وردبريس وكذلك صناعة مُربع جانبي Widget للإضافة، وأيضاً جعلها مُتعددة اللغات.</p>
<p><span id="more-1961"></span></p>
<h3>وظيفة الإضافة</h3>
<p>سنتعلم في هذا الدرس صنع إضافة تقوم بعرض مدونات صديقة بشكل عشوائي، أي نقوم نحن من خلال لوحة التحكم من إضافة مدونات صديقة و من ثم يتم عرض واحدة بشكل عشوائي في المدونة.</p>
<h4 class="resourcelink"><a href="http://www.almashroo.com/examples/feras/091122-wp-plugin-2/randfriendb.zip">تحميل</a></h4>
<h3>البداية</h3>
<p>سنُطلق على هذه الإضافة اسم <strong>randfriendb</strong> و هي اختصار <strong>Random Friend&#8217;s Blogs</strong> أي المدونات الصديقة العشوائية. نذهب إلى مُجلد الإضافات wp-content/plugins ونقوم بإنشاء مُجلد باسم randfriendb، ندخل الآن إلى داخل المُجلد ونُنشأ ملف php بنفس اسم المُجلد randfriendb.php، نفتح الملف الآن -كما اتفقنا في الدرس السابق يجب علينا أن نضع الشيفرة التي نُعرّف فيها الإضافة من حيث اسمها و رقم الإصدار والمبرمج و موقع الإضافة &#8230; إلخ- و ستكون شيفرتنا اليوم على الشكل التالي:</p>
<pre class="brush: php;">
/*
Plugin Name:  RandFriendB
Plugin URI: http://www.almashroo.com
Description: إضافة لعرض مدونة عشوائية من المدونات الصديقة في المدونة
Version: 1.0
Author: المشروع
Author URI: http://www.almashroo.com
*/
</pre>
<p>الآن وكما تعلمون أن إضافات وردبريس هي عبارة عن دوال تحتوي بداخلها المهام الذي ستقوم بها الإضافة. في إضافتنا اليوم سنقوم بكتابة دالتين: الأولى للوحة التحكم، والثانية هي التي ستعرض المدونة الصديقة في الصفحة الرئيسية. إضافة إلى ذلك نحتاج إلى جدول في قاعدة البيانات من أجل وضع المعلومات فيه. نبدأ الآن مع الدالة الخاصة بلوحة التحكم ولكن قبل البدء ببرمجتها دعوني أتفق معكم على وضع أي نص نُريد طباعته ضمن إحدى الدالتين التاليتين:</p>
<pre class="brush: php;">
__(&quot;النص هُنا&quot;);

// أو

_e(&quot;النص هُنا&quot;);
</pre>
<p>الفرق بين الدالتين كما يلي: الأولى تحتفظ بالنص في داخلها وتحتاج لأمر echo أو print لكي تقوم بطباعته، أما الثانية فتقوم بالطباعة فوراً. وقُمت بإستخدامهم من أجل موضوع تعدد اللغات، وسأعود لشرحهم بشكل مُفصّل عندما ننتهي من البرمجة.</p>
<h3>دالة لوحة التحكم</h3>
<p>دعونا نُناقش ما الذي يجب أن نكتبه ضمن دالة لوحة التحكم، في البداية يجب أن يكون هُناك قسم من أجل إضافة مدونة جديدة، وقسم آخر من أجل إستعراض المدونات الموجودة -لا ضرورة لأكثر من ذلك- الآن نأتي لتحليل القسم الأول: القسم الأول عبارة عن نموذج (فورم) يحتوي على حقل لإدخال عنوان المدونة، وحقل ثاني لإدخال عنوان المدونة وحقل لكتابة وصف مُختصر عن المدونة. القسم الثاني: يقوم بعرض المدونات الموجودة مع وجود خيار حذف واحدة منهم، الآن نبدأ بالبرمجة:</p>
<p>سأطلق على دالة لوحة التحكم اسم  <strong>randfriendb_admin</strong><em><strong> </strong></em>وستحتوي في بدايتها على شرط للتأكد من وجود الجدول الخاص بالإضافة في قاعدة البيانات، فإذا لم يكن موجوداً فسيقوم بإنشاء جدول، أما إذا كان موجوداً سينتقل ليرى ماهو العمل الذي نُريد أن نقوم به، سنحتاج لدالة لكي نتأكد من وجود الجدول قُمت بكتابة واحدة:</p>
<pre class="brush: php;">
function table_exists ($table, $db) {
        $tables = mysql_list_tables ($db);
        while (list ($temp) = mysql_fetch_array ($tables)) {
                if ($temp == $table) {
                        return TRUE;
                }
        }
        return FALSE;
}
</pre>
<p>الآن نبدأ بتعريف دالة لوحة التحكم وبداخلها دالة التأكد من وجود الجدول وبعدها الشرط الذي تحدثنا عنه:</p>
<pre class="brush: php;">
function randfriendb_admin()
{
	// دالة للتأكد من وجود جدول مُحدد في قاعدة البيانات
		function table_exists ($table, $db=DB_NAME) {
		$tables = mysql_list_tables ($db);
		while (list ($temp) = mysql_fetch_array ($tables)) {
			if ($temp == $table) {
				return TRUE;
			}
		}
		return FALSE;
	}

	if (!table_exists(&quot;wp_randfb&quot;))
	{
		$create = mysql_query(&quot;
			CREATE TABLE `wp_randfb` (
			`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
			`blog_title` VARCHAR(200) NOT NULL,
			`blog_url` VARCHAR(200) NOT NULL,
			`blog_desc` VARCHAR(200) NOT NULL
			)
		&quot;);

		if ($create)
		{
			echo '&lt;div class=&quot;wrap&quot;&gt;&lt;h2&gt;'.__(&quot;تم إنشاء الجدول بنجاح&quot;,&quot;randfriendb&quot;).'&lt;/h2&gt;&lt;/div&gt;&lt;br /&gt;'.__(&quot;يُرجى الإنتظار ...&quot;,&quot;randfriendb&quot;);
			echo '&lt;META HTTP-EQUIV=&quot;refresh&quot; CONTENT=&quot;1; URL=admin.php?page=randfriendb/randfriendb.php&amp;action=add&quot;&gt;';
		}else{
			echo '&lt;div class=&quot;wrap&quot;&gt;&lt;h2&gt;'.__(&quot;خطأ&quot;,&quot;randfriendb&quot;).'&lt;/h2&gt;&lt;/div&gt;';
			echo mysql_error();
		}

	}else{
	// لاتفعل شيء !! :D
	}
}// نهاية دالة لوحة التحكم
</pre>
<p>سأقوم بشرح سريع للشيفرة الموجودة في الأعلى، لاحظوا بعدما قُمنا بتعريف الدالة  وضعنا بعدها مُباشرة دالة للتأكد من وجود الجدول -يُمكنكم وضع هذه الدالة قبل تعريف دالة لوحة التحكم لا مُشكلة في ذلك- ومن ثم تأكدنا من وجود الجدول على إفتراض اسميناه <strong>wp_randfb</strong>، فإذا لم يكن موجوداً قُمنا بإنشاءه، وبعدها تأكدنا من نجاح عملية الإنشاء من عدمها. أما إذا كان موجوداً فقُلت له لاتفعل شي بشكل مؤقت حتى نُتابع شرحنا.</p>
<p>الآن نأتي للعمل الجدّي، سنحذف عبارة لاتفعل شيء و نأتي لتحليل ما الذي يحب كتابته. الآن نحن اتفقنا أن هناك بالقسم الثاني قسم لإضافة مدونة جديدة و قسم لعرض المدونات الموجودة، إذاً سنستخدم مصفوفة GET لنأخذ الفعل الذي سنقوم به، و سنأخذ المؤشر action ضمن مصفوفة GET لنحدد وجهتنا أي:</p>
<pre class="brush: php;">
$_GET['action'];
</pre>
<p>سنكتب في برنامجنا سطور تُعبّر عن مايلي: إذا كانت قيمة المصفوفة عند المؤشر action فارغة فسنعتبر أن الفعل هو إضافة مدونة جديدة، وغير ذلك يذهب البرنامج إلى حسب تعليماته:</p>
<pre class="brush: php;">
if (!isset($_GET['action']) || $_GET['action'] == &quot;add&quot;){
	//الحالة الأولى
}elseif($_GET['action'] == &quot;edit&quot;){
	// الحالة الثانية
}elseif($_GET['action'] == &quot;del&quot;){
	// الحالة الثالثة
}elseif($_GET['action'] == &quot;insert&quot;){
	// الحالة الرابعة
}// نهاية مُعالجة الحالات
</pre>
<p>بعد استبدال كلمة لاتفعل شيء بالشيفرة الموجودة في الأعلى، نجد أن هُناك حالات، الحالة الأولى والثانية &#8230; إلخ، الآن نبدأ بكتابة الحالات، لنبدأ بالحالة الأولى وهي حالة الإضافة،  ما الذي يجب علينا كتباته في هذه الحالة؟ شيفرة HTML تعرض لنا نموذج فيه حقول اتفقنا عليه مُسبقاً استبدل كلمة الحالة الأولى بالشيفرة التالية:</p>
<pre class="brush: php;">
echo '
	&lt;form method=&quot;POST&quot; action=&quot;admin.php?page=randfriendb/randfriendb.php&amp;action=insert&quot;&gt;
		&lt;div class=&quot;wrap&quot;&gt;&lt;h2&gt;'.__(&quot;إضافة مدونة جديدة&quot;,&quot;randfriendb&quot;).'&lt;/h2&gt;&lt;/div&gt;&lt;br /&gt;
			&lt;table class=&quot;form-table&quot;&gt;
				&lt;tr&gt;
					&lt;th&gt;'.__(&quot;عنوان المدونة&quot;,&quot;randfriendb&quot;). '&lt;span class=&quot;description&quot;&gt;&lt;/span&gt;&lt;/th&gt;
					&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;blog_title&quot; class=&quot;regular-text&quot; /&gt;&lt;/td&gt;
				&lt;/tr&gt;
				&lt;tr&gt;
					&lt;th&gt;'.__(&quot;رابط المدونة&quot;,&quot;randfriendb&quot;).'&lt;span class=&quot;description&quot;&gt;&lt;/span&gt;&lt;/th&gt;
					&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;blog_url&quot; class=&quot;regular-text&quot; /&gt;&lt;/td&gt;
				&lt;/tr&gt;
				&lt;tr&gt;
					&lt;th&gt;'.__(&quot;كلمات عن المدونة&quot;,&quot;randfriendb&quot;).' &lt;span class=&quot;description&quot;&gt;&lt;/span&gt;&lt;/th&gt;
					&lt;td&gt;&lt;textarea name=&quot;blog_desc&quot; rows=&quot;5&quot; cols=&quot;30&quot;&gt;&lt;/textarea&gt;&lt;/td&gt;
				&lt;/tr&gt;
			&lt;/table&gt;

			&lt;p class=&quot;submit&quot;&gt;
				&lt;input type=&quot;submit&quot; class=&quot;button-primary&quot; value=&quot;'.__(&quot;إضافة&quot;,&quot;randfriendb&quot;).'&quot; name=&quot;submit&quot; /&gt;
			&lt;/p&gt;
		&lt;/div&gt;
	&lt;/form&gt;
';
</pre>
<p>كما تُلاحظون النموذج يأخذكم إلى الفعل insert وهي الحالة الرابعة ضمن الحالات التي نُعالجها، إذاً انتيهنا من الحالة الأولى وسنذهب مُباشرةً للرابعة من أجل كتابة شيفرة الإضافة. في البداية نتحقق من أن جميع القيم مُعبئة، ومن ثم تقوم بعملية الإضافة و ستكون الشيفرة على الشكل التالي:</p>
<pre class="brush: php;">
if(empty($_POST['blog_title']) || empty($_POST['blog_url']) || empty($_POST['blog_desc']))
{
	echo '&lt;h2&gt;'.__(&quot;يُرجى تعبئة كافة المعلومات&quot;,&quot;randfriendb&quot;).'&lt;/h2&gt;';
}else{
	global $wpdb;
	$insert = $wpdb-&gt;query(&quot;INSERT INTO `wp_randfb` VALUES(NULL,'&quot; . $_POST['blog_title'] . &quot;','&quot; . $_POST['blog_url'] . &quot;','&quot; . $_POST['blog_desc'] . &quot;')&quot;);
	if ($insert)
	{
		echo '&lt;div class=&quot;wrap&quot;&gt;&lt;h2&gt;'.__(&quot;تمت إضافة المدونة بنجاح&quot;,&quot;randfriendb&quot;).'&lt;/h2&gt;&lt;/div&gt;&lt;br /&gt;'.__(&quot;يُرجى الإنتظار ...&quot;,&quot;randfriendb&quot;);
		echo '&lt;META HTTP-EQUIV=&quot;refresh&quot; CONTENT=&quot;1; URL=admin.php?page=randfriendb/randfriendb.php&amp;action=edit&quot;&gt;';
	}else{
		echo '&lt;div class=&quot;wrap&quot;&gt;&lt;h2&gt;'.__(&quot;حدث خطأ&quot;,&quot;randfriendb&quot;).'&lt;/h2&gt;&lt;/div&gt;&lt;br /&gt;';
	}
}
</pre>
<p>لاحظوا أننا استخدمنا الكائن wpdb وهو كائن جاهز يحتوي على دوال في داخله حيث يُفضّل استخدامه من أجل تجنب الثغرات. الآن وبعد أن انتهينا من الحالة الرابعة نأتي للحالة الثانية وهي عرض المدونات الموجودة ضمن قاعدة البيانات، نستبدل كلمة الحالة الثانية بالشيفرة التالية:</p>
<pre class="brush: php;">
global $wpdb;
$blogs = $wpdb-&gt;get_results(&quot;SELECT * FROM `wp_randfb`&quot;,ARRAY_A);
if ($blogs)
{
echo '
	&lt;table class=&quot;widefat post fixed&quot; cellspacing=&quot;0&quot;&gt;
		&lt;thead&gt;
			&lt;tr&gt;
				&lt;th scope=&quot;col&quot; class=&quot;manage-column column-title&quot; style=&quot;&quot;&gt;'.__(&quot;عنوان المدونة&quot;,&quot;randfriendb&quot;).'&lt;/th&gt;
				&lt;th scope=&quot;col&quot; class=&quot;manage-column column-author&quot; style=&quot;&quot;&gt;'.__(&quot;رابط المدونة&quot;,&quot;randfriendb&quot;).'&lt;/th&gt;
				&lt;th scope=&quot;col&quot; class=&quot;manage-column column-categories&quot; style=&quot;&quot;&gt;'.__(&quot;كلمات عن المدونة&quot;,&quot;randfriendb&quot;).'&lt;/th&gt;
				&lt;th scope=&quot;col&quot; class=&quot;manage-column column-tags&quot; style=&quot;&quot;&gt;'.__(&quot;حذف&quot;,&quot;randfriendb&quot;).'&lt;/th&gt;
			&lt;/tr&gt;
		&lt;/thead&gt;
	&lt;tbody&gt;
';
foreach($blogs as $blog){
	echo '&lt;tr id=&quot;post-1&quot; class=&quot;alternate author-self status-publish iedit&quot; valign=&quot;top&quot;&gt;&lt;td&gt;'.$blog['blog_title'].'&lt;/td&gt;';
	echo '&lt;td&gt;'.$blog['blog_url'].'&lt;/td&gt;';
	echo '&lt;td&gt;'.$blog['blog_desc'].'&lt;/td&gt;';
	echo '&lt;td&gt;&lt;a href=&quot;admin.php?page=randfriendb/randfriendb.php&amp;action=del&amp;id='.$blog[id].'&quot;&gt;'.__(&quot;حذف&quot;,&quot;randfriendb&quot;).'&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;';
}
echo '
	&lt;tfoot&gt;
	&lt;tr &gt;
		&lt;th colspan=&quot;4&quot;&gt;&lt;/th&gt;
	&lt;/tr&gt;
	&lt;/tfoot&gt;
	&lt;/table&gt;
';
}else{
	echo '&lt;h3&gt;'.__(&quot;لا يوجد مدونات&quot;,&quot;randfriendb&quot;).'&lt;/h3&gt;';
}
</pre>
<p>كما تُلاحظون استخدمنا الدالة get_results من أجل استخراج البيانات المُخزنة ضمن قاعدة البيانات وهذه الدالة تأخذ مسقطين، الأول هو الاستعلام، والثاني هو نوع البيانات المُخرجة. ونحن اخترناها أن تكون على شكل مصفوفة. الآن نُعالج الحالة الأخيرة وهي حذف مدونة من قاعدة البيانات أي الحالة الثالثة، والشيفرة هي على الشكل التالي:</p>
<pre class="brush: php;">
global $wpdb;
$id = intval($_GET['id']);
$del = $wpdb-&gt;query(&quot;DELETE FROM `wp_randfb` WHERE id='&quot; . $id . &quot;'&quot;);
if ($del)
{
	echo '&lt;div class=&quot;wrap&quot;&gt;&lt;h2&gt;'.__(&quot;تم حذف المدونة بنجاح&quot;,&quot;randfriendb&quot;).'&lt;/h2&gt;&lt;/div&gt;&lt;br /&gt;'.__(&quot;يُرجى الإنتظار ...&quot;,&quot;randfriendb&quot;);
	echo '&lt;META HTTP-EQUIV=&quot;refresh&quot; CONTENT=&quot;1; URL=admin.php?page=randfriendb/randfriendb.php&amp;action=edit&quot;&gt;';
}else{
	echo '&lt;div class=&quot;wrap&quot;&gt;&lt;h2&gt;'.__(&quot;حدث خطأ&quot;,&quot;randfriendb&quot;).'&lt;/h2&gt;&lt;/div&gt;&lt;br /&gt;';
}
</pre>
<p>الآن وبعد أن إنتهينا من برمجة كل شيء يتعلق بلوحة التحكم، سنُضيف إلى قائمة لوحة التحكم خيارات لكي نتحكم بهذه الإضافة، يُقدم لنا برنامج وردبريس دوال جاهزة لإضافة أزرار إلى قائمة لوحة التحكم والدالة هي :</p>
<pre class="brush: php;">
add_menu_page()
</pre>
<p>و يلحق بهذه الدالة دوال أُخرى لكي نُنشىء قائمة فرعية من القائمة الرئيسية:</p>
<pre class="brush: php;">
add_submenu_page
</pre>
<p>إذاً الآن نقوم بكتابة دالة تحتوي على هذه الدوال التي تُنشىء قائمة خاصة بإضافتنا و لكن قبل ذلك دعوني أشرح لكم الدالة كيف تعمل:</p>
<pre class="brush: php;">
add_menu_page(&quot;الأيقونة&quot;,&quot;الدالة&quot;, &quot;الملف&quot;, &quot;المقدرة&quot;,&quot;اسم الصفحة في القائمة&quot;,&quot;عنوان الصفحة&quot;);
add_submenu_page(&quot;الدالة&quot;, &quot;الملف&quot;, &quot;المقدرة&quot;, &quot;اسم الصفحة في القائمة&quot;,&quot;عنوان الصفحة&quot;,&quot;الصفحة الرئيسية&quot;);
add_action('admin_menu','randfriendb_add_admin');
</pre>
<p>طبعاً الآن لم يفهم أي أحد منكم ما الذي حدث صحيح؟ سأشرح لكم، والعملية بسيطة جداً، كما قُلت لكم في الدرس السابق، كل شيء في الوردبريس يتم ضمن دوال، والبرنامج يوفر لك دوال جاهزة لكي تقوم بوظائف مُعينة. نحن قُمنا باستخدام الدالة التي تُنشىئ لنا قائمة خاصة بإضافتنا، لماذا؟ لأنه كيف سنتحكم في الإضافة إذا لم يكن هناك قائمة نتحكم منها؟</p>
<p>الآن تُشاهدون القيم التي قُمت بتمريرها للدالتين،دعوني أشرحها لكم:</p>
<ul>
<li><strong>المسقط الأول: عنوان الصفحة</strong>، وظيفته أخذ هذه القيمة وعرضها في شريط العنوان للمُتصفح عندما تفتح الإضافة.</li>
<li><strong>المسقط الثاني: اسم الصفحة في القائمة</strong>، وظيفته أخذ القيمة وعرضها ضمن القائمة.</li>
<li><strong>المسقط الثالث: المقدرة</strong>، ويُقصد بها هُنا ماهي الصلاحيات التي يجب أن يتمتع بها من يضغط على هذه القائمة، يُمكنكم مُراجعتها <a title="صفحة الصلاحيات" href="http://codex.wordpress.org/Roles_and_Capabilities#Summary_of_Roles">من هُنا</a>.</li>
<li><strong>المسقط الرابع: الملف</strong>، ويُقصد به الملف الذي سيدخل إليه عند الضغط.</li>
<li><strong>المسقط الخامس: الدالة</strong>، وهُنا الدالة التي سيستدعيها من الملف الذي دخلنا إليه.</li>
<li><strong>المسقط الأخير: الأيقونة</strong>، وهُنا يُمكنك تحديد أيقونة للقائمة.</li>
</ul>
<p>دعونا نُضيف هذه الشيفرة إلى ملف الإضافة.</p>
<pre class="brush: php;">
function randfriendb_add_admin() {
	add_menu_page(__(&quot;مدونات صديقة&quot;,&quot;randfriendb&quot;),__(&quot;مدونات صديقة&quot;,&quot;randfriendb&quot;), 8, __FILE__, &quot;randfriendb_admin&quot;);
	add_submenu_page(__FILE__, __(&quot;إضافة مدونة جديدة&quot;,&quot;randfriendb&quot;), __(&quot;إضافة مدونة جديدة&quot;,&quot;randfriendb&quot;), 8,__FILE__ , &quot;randfriendb_admin&quot;);
	add_submenu_page(__FILE__, __(&quot;التحكم بالمدونات&quot;,&quot;randfriendb&quot;), __(&quot;التحكم بالمدونات&quot;,&quot;randfriendb&quot;), 8, __FILE__ .&quot;&amp;action=edit&quot;, &quot;randfriendb_admin&quot;);
}

add_action('admin_menu', 'randfriendb_add_admin');
</pre>
<p>لاحظوا وجود دالة جديدة في نهاية الشيفرة وهي الدالة المسؤولة عن تنفيذ الدالة التي تُضيف لنا القائمة، و النتيجة الأخيرة سوف تكون كما هو موضّح في الصورة التالية:</p>
<p class="post_image"><img class="alignnone size-full wp-image-2064" title="إضافة خصائص التحكم بالإضافة على لوحة التحكم" src="http://www.almashroo.com/uploads/2009/11/menu.jpeg" alt="إضافة خصائص التحكم بالإضافة على لوحة التحكم" width="163" height="469" /></p>
<h3>صناعة مربع جانبي للقائمة Widget</h3>
<p>الآن وكما نُلاحظ في الدوال التي استخدمناها من أجل إنشاء القائمة، في المسقط الأخير هُناك هذه الجملة <strong>randfriendb_admin،</strong><em><strong> </strong></em>وهي عبارة عن دالة لوحة التحكم التي قُمتا ببرمجتها. الآن كل شيء تمام، مارأيكم أن نبدأ بكتابة الدالة التي تعرض لنا المدونات الصديقة في الموقع؟ الدالة بسيطة جداً وهي كالتالي:</p>
<pre class="brush: php;">// دالة عرض المدونات الصديقة
function randfriendb_main($args)
{
	extract($args);
	global $wpdb;
	$get_blogs = $wpdb-&gt;get_results(&quot;SELECT * FROM `wp_randfb` order by rand() limit 0,1&quot;,ARRAY_A);
	foreach($get_blogs as $get_blog){
		echo $before_widget;
		echo $before_title;
		_e(&quot;مدونات صديقة&quot;,&quot;randfriendb&quot;);
		echo $after_title;
		echo '&lt;a href=&quot;'.$get_blog['blog_url'].'&quot;&gt;'.$get_blog['blog_title'].'&lt;/a&gt;&lt;p&gt;'.$get_blog['blog_desc'].'&lt;/p&gt;'.$after_widget;
	}
}
</pre>
<p>لم نفهم شيء صحيح؟ و أنا مثلكم في البداية ولكن دعوني أشرح لكم. في البداية عرّفنا دالة باسم randfriendb_main، ولاحظوا أننا مررنا لها المتغير args. ماهو هذا المتغير؟ هذا المتغير عبارة عن مصفوفة تحمل بداخلها 4 مُتغيرات هي before_widget، before_title، after_title، وafter_widget. طيب ماهي هذه المتغيرات؟</p>
<p>هذه المتغيرات تحمل بداخلها قيم من القالب. كما قلت لكم في بداية الدرس سنتعلم إنشاء مُربع جانبي، وبما أننا نكتب الآن دالة عرض مدونة بشكل عشوائي، فيجب علينا إستخدام هذه المتغيرات لكي يكون متوافقاً مع أي ستايل نستخدمه.</p>
<p>بعد ذلك إستخدمنا الأمر extract لكي ننشر مُحتويات المصفوفة على شكل مُتغيرات نتعامل معها، بعدها قُمنا باستعلام من قاعدة البيانات، يختار لنا مدونة بشكل عشوائي من الجدول الذي أنشأناه، ومن ثم قُمنا بطباعتها من خلال دالة foreach، لأنه عندما نستخدم الدالة get_results في الوردبريس، نستخرج محتويات المصفوفة الناتجة من خلال دالة foreach. لاحظوا داخل دالة foreach بعد أن مررنا لها القيم أننا قُمنا بطباعة المتغيرات before_widget، before_title، وبعدها طبعنا عنوان المُربع الجانبي، ومن ثم طبعنا قيمة المتغير after_title. رُبما لم نفهم كثيراً موضوع المتغيرات الأربعة والصور ستوضّح لكم:</p>
<p><img class="alignnone size-full wp-image-2061" title="الإضافة كمربع قائمة جانبي" src="http://www.almashroo.com/uploads/2009/11/wp-plugin-example.png" alt="الإضافة كمربع قائمة جانبي" width="550" height="312" /></p>
<p>هل لاحظتم أنه يعرض لنا المُربع Widget ولكن بشكل مُتناسق مع الشكل العام للمدونة؟ هذه هي الفائدة من المتغيرات الأربعة. الآن يبقى لنا سطر واحد فقط من أجل أن يتعرف النظام على هذا المُربع ويضعه ضمن المُربعات الجانبية والسطر هو:</p>
<pre class="brush: php;">
register_sidebar_widget(__(&quot;مدونات صديقة&quot;,&quot;randfriendb&quot;),'randfriendb_main');
</pre>
<p>دالة register_sidebar_widget هي دالة تأخذ مسقطين أو ثلاثة، الأول يحتوي على عنوان المُربع، والثاني الدالة التي سينُفذها و هنا استخدمنا دالة randfriendb_main التي وظيفتها طباعة المدونة العشوائية. لو ذهبنا الآن إلى المُربعات الجانبية سنجدها موجودة.</p>
<p class="post_image"><img class="alignnone size-full wp-image-2062" title="مربع القائمة الجانبية من لوحة التحكم" src="http://www.almashroo.com/uploads/2009/11/ex3.png" alt="مربع القائمة الجانبية من لوحة التحكم" width="550" height="303" /></p>
<p>كل ماعليك الآن هو سحبها ووضعها في القائمة الجانبية 1 كما في الصورة، واذهب للرئيسية في موقعك ستجدها موجودة.</p>
<h3>تدويل الإضافة (i18n)</h3>
<p>للأسف انتهينا من البرمجة، ولكن الآن نأتي للخطوة الأهم وهي الترجمة والتدويل، كما لاحظتم أننا خلال البرمجة وضعنا أي مُتغير نصّي ضمن:</p>
<pre class="brush: php;">
__(&quot;النص هنا&quot;)

// أو

_e(&quot;النص هنا&quot;)
</pre>
<p>لماذا وضعناها هكذا؟ يستخدم وردبريس نظام <a title="Gnu Gettext" href="http://www.gnu.org/software/gettext/">GNU gettext</a>، وهذا النظام لتدويل النصوص (i18n) لسهولة ترجمة الإضافة لاحقاً إلى عدة لغات. دعونا قبل أي شيء أن نُضيف هذا السطر في بداية برنامجنا قبل دالة لوحة التحكم. وظيفة هذه الدالة هي إضافة مجال نصّي في البرنامج لكي يستخرج منه ترجمة النصوص.</p>
<pre class="brush: php;">load_plugin_textdomain('randfriendb', &quot;/wp-content/plugins/randfriendb/&quot;);</pre>
<p>نحن وضعنا النصوص باللغة العربية ولكن يُفضّل وضعها باللغة الإنجليزية في حال أردنا نشر الإضافة، لكي تكون أسهل على الناس الراغبة بترجمتها إلى اللغات الثانية، ولكن الآن ما الذي يجب فعله لنجعلها مُتعددة اللغات؟ خطوات سهلة جداً، و لكن في البداية يجب أن يكون لدينا برنامج <a href="http://www.poedit.net/download.php#win32">Poedit</a>.</p>
<p><strong>مُلاحظة لمستخدمي نظام الويندوز</strong>: يُرجى تثبيت البرنامج على محرك القرص الصلب C مُباشرةً و ليس داخل مُجلد Programm files في حال كان السيرفر الشخصي لديك مُثبت على C. أما إذا كان على المحرك D فنفس الشيء يجب أن يكون على D مُباشرةً، لماذا؟ لأنه لن يتمكن من إيجاد ملف الإضافة في هذه الحالة. وحقيقة هذه مُشكلة عانيت منها لمدة 7 أيام وهذا سبب تأخر طرح الدرس.</p>
<p>بعد تثبيت البرنامج،نفتح البرنامج ونختار من قائمة file خيار New Catalog.</p>
<p class="post_image"><img class="alignnone size-full wp-image-2063" title="تعريب إضافات وردبريس 1" src="http://www.almashroo.com/uploads/2009/11/step1.jpg" alt="تعريب إضافات وردبريس 1" width="550" height="470" /></p>
<p>تظهر لنا الآن نافذة نفوم بتعبئة معلومات عن الإضافة مثل: اسم الإضافة و المُبرمج و البريد الإلكتروني واللغة والترميز كماهو موضّح في الصورة.</p>
<p class="post_image"><img class="alignnone size-full wp-image-2028" title="تعريب إضافات وردبريس 2" src="http://www.almashroo.com/uploads/2009/11/step21.jpg" alt="تعريب إضافات وردبريس 2" width="393" height="344" /></p>
<p>ومن ثم ننتقل إلى اللسان (Tab) الثاني وهو المسؤول عن ربط ملف الإضافة كما في الصورة:</p>
<p class="post_image"><img class="alignnone size-full wp-image-2021" title="تعريب إضافات وردبريس 3" src="http://www.almashroo.com/uploads/2009/11/step3.jpg" alt="تعريب إضافات وردبريس 3" width="394" height="346" /></p>
<p>طبعاً AppServ هو السيرفر الشخصي الذي أعمل عليه، والباقي أعتقد أنه واضح. الآن ننتقل للسان الأخير وهو عبارة عن الدوال التي يجب على البرنامج أن يأخذ منها العبارات النصية و نحن هنا استخدمنا الدوال <span dir="ltr" lang="en" xml:lang="en">__()</span> و <span dir="ltr" lang="en" xml:lang="en">_e()</span>.</p>
<p class="post_image"><img class="alignnone size-full wp-image-2022" title="تعريب إضافات وردبريس 4" src="http://www.almashroo.com/uploads/2009/11/step4.jpg" alt="تعريب إضافات وردبريس 4" width="390" height="341" /></p>
<p>الآن وبعد الضغط على OK سيطلب منك البرنامج تسمية الملف، قُم بتسميته باسم &#8220;الإضافة-اللغة&#8221;، أي في مثالنا هذا <strong>randfriendb-en.po.</strong></p>
<p class="post_image"><img class="alignnone size-full wp-image-2065" title="تعريب إضافات وردبريس 5" src="http://www.almashroo.com/uploads/2009/11/step5.jpg" alt="تعريب إضافات وردبريس 5" width="550" height="415" /></p>
<p>ومن ثم سيعرض لك النصوص الموجودة ضمن الدالتين لكي تقوم بترجمتهم.</p>
<p class="post_image"><img class="alignnone size-full wp-image-2024" title="تعريب إضافات وردبريس 5" src="http://www.almashroo.com/uploads/2009/11/step6.jpg" alt="تعريب إضافات وردبريس 5" width="384" height="386" /></p>
<p>الآن بعد حفظ الملف نبدأ بالترجمة وعندما ننتهي يُمكننا تجربة نجاح العملية من خلال التعديل على ملف wp-config الموجود في المجلد الرئيسي للوردبريس، نبحث عن:</p>
<pre class="brush: php;">define ('WPLANG', 'ar');</pre>
<p>و نستبدلها بــ</p>
<pre class="brush: php;">define ('WPLANG', 'en');</pre>
<p>جرّب الآن بنفسك و ستجد اللغة قد تغيرت.</p>
<p>هذا كل شيء، أتمنى أن تكونوا قد فهمتم كل شيء وأي استفسار أنا جاهز.</p>


<p>مقالات ذات صلة:<ol><li><a href='http://www.almashroo.com/1867/%d8%aa%d8%b9%d9%84%d9%85-%d8%a8%d8%b1%d9%85%d8%ac%d8%a9-%d8%a5%d8%b6%d8%a7%d9%81%d8%a7%d8%aa-%d9%88%d8%b1%d8%af%d8%a8%d8%b1%d9%8a%d8%b3-1/' rel='bookmark' title='Permanent Link: تعلم برمجة إضافات وردبريس [الجزء الأول]'>تعلم برمجة إضافات وردبريس [الجزء الأول]</a></li><li><a href='http://www.almashroo.com/1721/10-%d9%88%d8%b5%d9%81%d8%a7%d8%aa-%d8%aa%d8%ba%d9%86%d9%8a%d9%83-%d8%b9%d9%86-%d8%a5%d8%b6%d8%a7%d9%81%d8%a7%d8%aa-wordpress-%d8%a7%d9%84%d8%b4%d8%a8%d9%8a%d9%87%d8%a9/' rel='bookmark' title='Permanent Link: 10 وصفات لملف الدوال تغنيك عن مثيلاتها من إضافات WordPress'>10 وصفات لملف الدوال تغنيك عن مثيلاتها من إضافات WordPress</a></li><li><a href='http://www.almashroo.com/228/%d8%af%d9%88%d8%a7%d9%84-%d9%88%d9%88%d8%b1%d8%af%d8%a8%d8%b1%d9%8a%d8%b3-wordpress-function/' rel='bookmark' title='Permanent Link: بعض من دوال ووردبرس WordPress Function'>بعض من دوال ووردبرس WordPress Function</a></li></ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Almashroo?a=c-90X3_OLjE:Yw6TnLoILlI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Almashroo?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Almashroo?a=c-90X3_OLjE:Yw6TnLoILlI:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Almashroo?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Almashroo?a=c-90X3_OLjE:Yw6TnLoILlI:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Almashroo?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Almashroo?a=c-90X3_OLjE:Yw6TnLoILlI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Almashroo?i=c-90X3_OLjE:Yw6TnLoILlI:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Almashroo/~4/c-90X3_OLjE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.almashroo.com/1961/%d8%aa%d8%b9%d9%84%d9%85-%d8%a8%d8%b1%d9%85%d8%ac%d8%a9-%d8%a5%d8%b6%d8%a7%d9%81%d8%a7%d8%aa-%d9%88%d8%b1%d8%af%d8%a8%d8%b1%d9%8a%d8%b3-2/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://www.almashroo.com/1961/%d8%aa%d8%b9%d9%84%d9%85-%d8%a8%d8%b1%d9%85%d8%ac%d8%a9-%d8%a5%d8%b6%d8%a7%d9%81%d8%a7%d8%aa-%d9%88%d8%b1%d8%af%d8%a8%d8%b1%d9%8a%d8%b3-2/</feedburner:origLink></item>
		<item>
		<title>7 وسائل للتغلب على مشكلة شفافية PNG على IE6</title>
		<link>http://feedproxy.google.com/~r/Almashroo/~3/oDtVt6Xlvtw/</link>
		<comments>http://www.almashroo.com/2036/7-%d9%88%d8%b3%d8%a7%d8%a6%d9%84-%d9%84%d9%84%d8%aa%d8%ba%d9%84%d8%a8-%d8%b9%d9%84%d9%89-%d9%85%d8%b4%d9%83%d9%84%d8%a9-%d8%b4%d9%81%d8%a7%d9%81%d9%8a%d8%a9-png-%d8%b9%d9%84%d9%89-ie6/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 13:29:51 +0000</pubDate>
		<dc:creator>عبدالرحمن العتيبة</dc:creator>
				<category><![CDATA[أدوات]]></category>
		<category><![CDATA[IE6]]></category>
		<category><![CDATA[PNG]]></category>
		<category><![CDATA[شفافية الصور]]></category>
		<category><![CDATA[مشاكل المتصفحات]]></category>
		<category><![CDATA[مقارنة]]></category>

		<guid isPermaLink="false">http://www.almashroo.com/?p=2036</guid>
		<description><![CDATA[<p class="post_image_header">
<a href="http://www.almashroo.com/2036/7-%d9%88%d8%b3%d8%a7%d8%a6%d9%84-%d9%84%d9%84%d8%aa%d8%ba%d9%84%d8%a8-%d8%b9%d9%84%d9%89-%d9%85%d8%b4%d9%83%d9%84%d8%a9-%d8%b4%d9%81%d8%a7%d9%81%d9%8a%d8%a9-png-%d8%b9%d9%84%d9%89-ie6/" title="7 وسائل للتغلب على مشكلة شفافية PNG على IE6"><img src="http://www.almashroo.com/uploads/2009/11/fix-ie6-png-post-header.png" alt="7 وسائل للتغلب على مشكلة شفافية PNG على IE6" height="140" width="550" /></a>
</p>
سنتعلم في هذا المقال 7 وسائل للتغلب على مشكلة <strong>شفافية الصور بصيغة PNG</strong> على متصفح الإنترنت إكسبلورر 6. حيث سنرى بتفصيل إيجابيات وسلبيات كل وسيلة بعد وضعها في الاختبار، ونترك لك حرية اختيار التقنية المناسبة.]]></description>
			<content:encoded><![CDATA[<p class="post_image_header">
<a href="http://www.almashroo.com/2036/7-%d9%88%d8%b3%d8%a7%d8%a6%d9%84-%d9%84%d9%84%d8%aa%d8%ba%d9%84%d8%a8-%d8%b9%d9%84%d9%89-%d9%85%d8%b4%d9%83%d9%84%d8%a9-%d8%b4%d9%81%d8%a7%d9%81%d9%8a%d8%a9-png-%d8%b9%d9%84%d9%89-ie6/" title="7 وسائل للتغلب على مشكلة شفافية PNG على IE6"><img src="http://www.almashroo.com/uploads/2009/11/fix-ie6-png-post-header.png" alt="7 وسائل للتغلب على مشكلة شفافية PNG على IE6" height="140" width="550" /></a>
</p>
<p>عندما قرأت رسالة أخي <a href="http://www.almashroo.com/author/abdelaziz_alzarouni/">عبدالعزيز الزرعوني</a> بعنوان ”فلنهجر متصفح Internet Explorer 6“، والتي وزرعها عبر البريد الإلكتروني، و<a href="http://www.mubde3.net/blog/archives/should-immigrate-internet-explorer-6-browser">كتبها الأخ أحمد الكثيري</a>. انتابني مزيج من الشعور بخيبة الأمل، وعدم الاستغراب. فلازالت نسبة ليست بالمستهانة من المتصفحين العرب يستخدمون الإنترنت اكسبلورر ٦. وقد يكون لأسباب كثيرة لا أود التطرق إليها في هذا المقال. وعدم الاستغراب لأن نسبة كبيرة من مستخدمي الإنترنت بشكل عام <a href="http://googleblog.blogspot.com/2009/10/what-is-browser.html">لايفرقون بين المتصفح ومحرك البحث</a>.</p>
<p>ربما يعلم بعضكم أن المشروع <a href="http://www.almashroo.com/1529/%D8%A7%D9%84%D9%85%D8%B4%D8%B1%D9%88%D8%B9-%D8%A8%D8%B4%D9%83%D9%84-%D8%AC%D8%AF%D9%8A%D8%AF/">توقف عن دعم الإنترنت اكسبلورر ٦</a> مع طرحنا للشكل الجديد، ولكن لا زالت إحصاءاتنا تشير إلى أن نسبة مهولة من زوارنا يستخدمونه. وهذا دفعني إلى طرح هذا المقال.</p>
<p>سنتعلم في هذا المقال ٧ وسائل للتغلب على مشكلة <strong>شفافية الصور بصيغة PNG</strong> على متصفح الإنترنت إكسبلورر ٦. حيث سنرى بتفصيل إيجابيات وسلبيات كل وسيلة بعد وضعها في الاختبار، ونترك لك حرية اختيار التقنية المناسبة.</p>
<p><span id="more-2036"></span></p>
<h3>اختبار الشفافية</h3>
<h4 class="resourcelink"><a href="http://www.almashroo.com/examples/abdulrahman/ie6_fix_png/no-png-fix/">عرض</a></h4>
<p class="post_image"><a href="http://www.almashroo.com/examples/abdulrahman/ie6_fix_png/no-png-fix/"><img class="alignnone size-full wp-image-2039" title="ie6-png-test" src="http://www.almashroo.com/uploads/2009/11/ie6-png-test.PNG" alt="ie6-png-test" width="550" height="430" /></a></p>
<p>كما العادة، عندما أريد تجربة التقنيات الجديدة والمثيرة في عالم تطوير الويب، أحب أن أضعها في اختبار يقيس مدى كفاءة أدائها. في هذا الاختبار، صممت صورة PNG ذات خلفية شفافة، ووضعتها في مستند HTML بأنماط مختلفة، بحيث أستطيع رؤية تأثير هذه الوسائل عليها. مما يساعد في معرفة إن كانت فعلاً تستحق الاستخدام.</p>
<p>للأسف <strong>لم تنجح أي وسيلة</strong> بنسبة ١٠٠% في هذا الاختبار، ولكن تفاوتت نسبة النجاح بين هذه الوسائل. كما سنرى لاحقاً.</p>
<h3>١. <a href="http://www.twinhelix.com/css/iepngfix/">IE PNG Fix</a></h3>
<p class="post_image"><a href="http://www.twinhelix.com/css/iepngfix/"><img class="alignnone size-full wp-image-2041" title="ie-png-fix" src="http://www.almashroo.com/uploads/2009/11/ie-png-fix.png" alt="ie-png-fix" width="500" height="256" /></a></p>
<p>تكاد تكون <strong>أفضل وسائل تطبيق الشفافية</strong> التي قمت باختبارها، فلم تفشل إلا في اختبار واحد فقط. وهو عند تطبيق نمط على الصورة وإدراج حشوة padding، عندها تتمدد الصورة بمقدار هذه الحشوة.</p>
<h4>ايجابيات</h4>
<ul>
<li><strong>سهولة التطبيق</strong>، بحيث يمكننا إدراج عدد قليل من السطور في مستند HTML، ومن ثم يتم التحديد عبر CSS.</li>
<li><strong>نجاح في ٧ من أصل ٨ اختبارات</strong>، وهذه أعلى نسبة نجاح لتقنية قمت بتجربة الاختبار عليها.</li>
<li><strong>حفاظ على تطبيق تكرار وتموضع صور الخلفية</strong>، باستخدام ملف جافاسكربت iepngfix_tilebg.js لدعم هذه الخاصية.</li>
</ul>
<h4>سلبيات</h4>
<ul>
<li><strong>تمدد الصورة عند إدراج حشوة</strong>، حيث ستحدث مشكلة عند تطبيق هذه التقنية عند استخدام نمط على الصورة بحشوة.</li>
</ul>
<h4>طريقة التطبيق</h4>
<h4 class="resourcelink"><a href="http://www.almashroo.com/examples/abdulrahman/ie6_fix_png/ie-png-fix/">عرض</a></h4>
<h4 class="resourcelink"><a href="http://www.almashroo.com/examples/abdulrahman/ie6_fix_png/ie-png-fix/ie-png-fix.zip">تحميل</a></h4>
<p>تعتمد هذه التقنية على إدراج ملف <a href="http://msdn.microsoft.com/en-us/library/ms531018(VS.85).aspx">HTC</a>، وهو ملف غير قياسي يقوم بالتحكم بسلوك العناصر عبر لغة جافاسكربت أو في بي سكربت. بحيث يتم تطبيق مرشح مايكروسوفت الاحتكاري <a href="http://msdn.microsoft.com/en-us/library/ms532969%28VS.85%29.aspx">AlphaImageLoader Filter</a>، حتى يصبح بالإمكان تطبيق الشفافية على صور PNG الشفافة عبر الجافاسكربت.</p>
<p>بعد تحميل الملف المضغوط من الموقع، تقوم بفك ضغطه. ستحتاج إلى ملفات <strong>blank.gif</strong>، و<strong>iepngfix.htc</strong>، وأخيراً إن كنت تحتاج إلى التحكم بتكرار وتموضع صور الخلفية ستحتاج إلى ملف <strong>iepngfix_tilebg.js</strong>. تحتاج إلى تعديل ملف iepngfix.htc إذا كان مسار الصورة blank.gif ليس في نفس المجلد مع الملف.</p>
<pre class="brush: jscript; highlight: [4];">
// * An absolute path like:  '/images/blank.gif'
// * A path relative to this HTC file like:  thisFolder + 'blank.gif'
var thisFolder = document.URL.replace(/(\\|\/)[^\\\/]*$/, '/');
IEPNGFix.blankImg = thisFolder + 'blank.gif';
</pre>
<p>الآن تضع شيفرة الإدراج في مستند HTML التي تود عرض الصور فيه، ويجب الانتباه هنا إلى أننا نود <strong>استهداف متصفح IE6 وأقل</strong>، لذا سنضع شيفرة الإدراج بين <strong><a href="http://msdn.microsoft.com/en-us/library/ms537512(VS.85).aspx">الجملة الشرطية</a></strong> لهذا المتصفح، مما يساعدنا أيضاً على <strong>تخطي محقق W3C بنجاح</strong>. يتم بعدها استهداف الصور عبر <strong>محددات CSS Selectors</strong>، ومن ثم إدراج ملف جافاسكربت الاختياري لدعم عرض تكرار وتموضع صور الخلفية بالشكل التالي.</p>
<pre class="brush: xml;">
&lt;!--[if lte IE 6]&gt;
	&lt;style type=&quot;text/css&quot;&gt;
		img, div, input, a  { behavior: url(&quot;iepngfix.htc&quot;) }
	&lt;/style&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;iepngfix_tilebg.js&quot;&gt;&lt;/script&gt;
&lt;![endif]--&gt;
</pre>
<p>بالمناسبة، يمكننا إدراج ملف HTC بهذه الطريقة، أو عبر إدراجه في ملف CSS منفصل على سبيل المثال.</p>
<h3>٢. <a href="http://www.dillerdesign.com/experiment/DD_belatedPNG/">DD_belatedPNG</a></h3>
<p class="post_image"><a href="http://www.dillerdesign.com/experiment/DD_belatedPNG/"><img class="alignnone size-full wp-image-2037" title="DD_belatedPNG" src="http://www.almashroo.com/uploads/2009/11/DD_belatedPNG.png" alt="DD_belatedPNG" width="500" height="256" /></a></p>
<p>على عكس أغلب الوسائل التي تعتمد على مرشح مايكروسوفت الاحتكاري AlphaImageLoader Filter، تعتمد DD_belatedPNG على تطبيق مايكروسوفت <strong>للغة توصيف الرسوميات المتجهية <a href="http://en.wikipedia.org/wiki/Vector_Markup_Language">VML</a></strong>.</p>
<h4>ايجابيات</h4>
<ul>
<li><strong>سهولة التطبيق</strong>، بحيث يمكننا إدراج عدد قليل من السطور في مستند HTML، ومن ثم يتم التحديد عبر CSS.</li>
<li><strong>نجاح في ٦ من أصل ٨ اختبارات</strong>، وهذه تعتبر نسبة جيدة.</li>
<li><strong>عدم الحاجة إلى إدراج صورة فارغة</strong>، وهذا قد يسهل طريقة تطبيقها أكثر على المواقع.</li>
</ul>
<h4>سلبيات</h4>
<ul>
<li><strong>لا يمكن تطبيق الشفافية على صورة في عنصر الإدخال</strong>، فعند استخدمنا للصورة على شكل زر لإرسال النموذج <span xml:lang="en" lang="en" dir="ltr" >&lt;input type=&#8221;image&#8221;&gt;</span>. يتم تجاهل تطبيق الشفافية.</li>
<li><strong>لا يمكن تطبيق تمدد الصورة عبر HTML</strong>، وهذه ربما ليست بالمشكلة الكبيرة، حيث لا ينصح بتمدد الصورة الأصلية بهذه الطريقة. ولكن بعض المواقع تستخدمها مثلاً لتكبير أو تصغير الصورة.</li>
<li><strong>ظهور شريط تمرير أفقي على صفحات RTL</strong>، ويمكن إخفائه بسهولة عبر تطبيق شيفرة CSS لإخفائه.
<pre class="brush: css;">
html {overflow-x:hidden;}
</pre>
</li>
</ul>
<h4>طريقة التطبيق</h4>
<h4 class="resourcelink"><a href="http://www.almashroo.com/examples/abdulrahman/ie6_fix_png/dd_belatedpng/">عرض</a></h4>
<h4 class="resourcelink"><a href="http://www.almashroo.com/examples/abdulrahman/ie6_fix_png/dd_belatedpng/dd_belatedpng.zip">تحميل</a></h4>
<p>تحتاج إلى <strong>ملف واحد فقط</strong>، ويمكنك اختيار ما إذا كنت تريده مضغوطاً أو بنسخته المصدرية. يمكن إدراجه بسهولة عبر الشيفرة التالية.</p>
<pre class="brush: xml;">
&lt;!--[if lte IE 6]&gt;
	&lt;script src='DD_belatedPNG.js' type='text/javascript'&gt;&lt;/script&gt;
	&lt;script type='text/javascript'&gt;
		DD_belatedPNG.fix('.png_bg, input');
	&lt;/script&gt;
&lt;![endif]--&gt;
</pre>
<p>يجب التنويه إلى أنه يجب عليك <strong>إدراج فئة Class</strong> على عناصر الصور التي تريد تطبيق الشفافية عليها، ومن ثم تحديدها كما فعلنا في الشيفرة السابقة عبر محددات CSS.</p>
<h3>٣. <a href="http://jquery.andreaseberhard.de/pngFix/">jquery.pngFix.js</a></h3>
<p class="post_image"><a href="http://jquery.andreaseberhard.de/pngFix/"><img class="alignnone size-full wp-image-2042" title="jquery-pngFix-js" src="http://www.almashroo.com/uploads/2009/11/jquery-pngFix-js.png" alt="jquery-pngFix-js" width="500" height="256" /></a></p>
<p>تعتمد هذه الوسيلة على <strong>مكتبة jQuery</strong> للجافاسكربت، وتعمل كإضافة لها، بحيث يمكننا تطبيق الشفافية على الصور بسهولة تامة. تستخدم، كما في أغلب الوسائل، مرشح مايكروسوفت الاحتكاري AlphaImageLoader Filter لتطبيق الشفافية.</p>
<h4>ايجابيات</h4>
<ul>
<li><strong>سهولة التطبيق</strong>، بحيث يمكن إدراج مكتبة jQuery أولاً عبر خوادم قوقل، ومن ثم استدعاء الإضافة بتحديد العناصر عبر محددات CSS.</li>
<li><strong>تعتمد على مكتبة jQuery</strong>، ولشعبية هذه المكتبة، سيسهل عملية تطبيقها على أغلب المواقع.</li>
</ul>
<h4>سلبيات</h4>
<ul>
<li><strong>نجاح في ٥ من أصل ٨ اختبارات</strong>، وهذه تعتبر نسبة ليست بالجيدة.</li>
<li><strong>سلوك غير متوقع للصور عند عدم تحديد الأبعاد</strong>، فعندما يتم تخزين الصورة في الملفات المؤقتة cache للمتصفح، يتم إظهار الصورة بشكل صحيح. ولكن عند عمل تحديث للصفحة لا يمكنها معرفة الأبعاد، وبالتالي تظهر بشكل سيء.</li>
<li><strong>تمدد صورة الخلفية المتكررة</strong>، فعند إدراج الصورة كخلفية متكررة خلف تقسيمة، تتمدد الصورة بحسب أبعاد التقسيمة.</li>
<li><strong>تمدد صورة الخلفية المتموضعة</strong>، فعند إدراج الصورة كخلفية متموضعة، تتمدد أيضاً الصورة حسب أبعاد التقسيمة. مما يؤدي إلى عدم جدواها عند استخدام صورة PNG للموقع بتقنية <a href="http://css-tricks.com/css-sprites/">CSS Sprites</a>.</li>
</ul>
<h4>طريقة التطبيق</h4>
<h4 class="resourcelink"><a href="http://www.almashroo.com/examples/abdulrahman/ie6_fix_png/jquery-pngFix/">عرض</a></h4>
<h4 class="resourcelink"><a href="http://www.almashroo.com/examples/abdulrahman/ie6_fix_png/jquery-pngFix/jquery-pngFix.zip">تحميل</a></h4>
<p>بعد تحميل الملف المضغوط من الموقع، وفك ضغطه، ستحتاج إلى ملفين هما <strong>jquery.pngFix.js</strong> أو إذا كنت تريد النسخة المضغوطة منه jquery.pngFix.pack.js، والصورة <strong>blank.gif</strong>.</p>
<p>يتم إدراج مكتبة jQuery في البداية <strong>عبر خوادم قوقل</strong>، ومن ثم إدراج ملف الإضافة. بعدها بكل بساطة يتم استدعاء دالة الإضافة عندما يكون مستند HTML جاهزاً بالطريقة التالية. طبعاً كل هذا يتم داخل الجملة الشرطية لاستهداف متصفح الإنترنت إكسبلورر.</p>
<pre class="brush: xml;">
&lt;!--[if lte IE 6]&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&quot;&gt;&lt;/script&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;jquery.pngFix.js&quot;&gt;&lt;/script&gt;
	&lt;script type=&quot;text/javascript&quot;&gt;
		$(document).ready(function(){
			$(document).pngFix();
		});
	&lt;/script&gt;
&lt;![endif]--&gt;
</pre>
<p>ويمكن أيضاً تحديد العناصر التي تحتوي على صور PNG شفافة باستخدام محددات CSS بالطريقة التالية.</p>
<pre class="brush: jscript;">
$(function(){
	$('div.examples').pngFix();
});
</pre>
<p>ربما تحتاج إلى تعديل الخصائص إذا كان مسار الصورة الفارغة <strong>blank.gif</strong> ليس في نفس المجلد مع الملف.</p>
<pre class="brush: jscript;">
$(function(){
	$('div.examples').pngFix( { blankgif:'ext.gif' } );
});
</pre>
<h3>٤. <a href="http://code.google.com/p/ie7-js/">IE7.js</a></h3>
<p class="post_image"><a href="http://code.google.com/p/ie7-js/"><img class="alignnone size-full wp-image-2040" title="ie7-js" src="http://www.almashroo.com/uploads/2009/11/ie7-js.png" alt="ie7-js" width="500" height="256" /></a></p>
<p>تقوم مكتبة IE7 للجافاسكربت <strong>بتغير سلوك الإنترنت إكسبلورر ٦</strong> ليصبح موافقاً للمعايير القياسية. تصلح الكثير من مشاكل HTML وCSS، بالإضافة إلى إصلاح مشكلة الشفافية لصور PNG على IE6 وIE5.</p>
<h4>ايجابيات</h4>
<ul>
<li><strong>ترقية متصفح IE6 ليصبح موافقاً للمعايير القياسية</strong>، حيث لا تتغلب على مشكلة الشفافية في صور PNG فحسب، بل تصلح مشاكل كثيرة على المتصفح.</li>
</ul>
<h4>سلبيات</h4>
<ul>
<li><strong>نجاح في ٤ من أصل ٨ اختبارات</strong>، وهذه تعتبر نسبة ليست بالجيدة.</li>
<li><strong>صعوبة التطبيق</strong>، يجب إعادة تسمية كل صورة PNG شفافة بحيث ينتهي الاسم بعبارة &#8220;-trans&#8221;. مثل &#8220;png-trans.png&#8221;.</li>
<li><strong>سلوك غير متوقع للصور عند عدم تحديد الأبعاد</strong>، حيث عندما يتم تخزين الصورة في الملفات المؤقتة cache للمتصفح، يتم إظهار الصورة بشكل صحيح. ولكن عند عمل تحديث للصفحة لا يمكن معرفة الأبعاد، وبالتالي تظهر بشكل سيء.</li>
<li><strong>تمدد الصورة عند إدراج حشوة</strong>، حيث ستحدث مشكلة عند تطبيق هذه التقنية عند استخدام نمط على الصورة بحشوة.</li>
<li><strong>عدم تطبيق الشفافية على صورة الخلفية المتكررة</strong>، فعند إدراج الصورة كخلفية متكررة خلف تقسيمة، لا يتم تطبيق الشفافية عليها.</li>
<li><strong>عدم تطبيق الشفافية على صورة الخلفية المتموضعة</strong>، فعند إدراج الصورة كخلفية متموضعة، لا يتم تطبيق الشفافية عليها.</li>
</ul>
<h4>طريقة التطبيق</h4>
<h4 class="resourcelink"><a href="http://www.almashroo.com/examples/abdulrahman/ie6_fix_png/ie7-js/">عرض</a></h4>
<h4 class="resourcelink"><a href="http://www.almashroo.com/examples/abdulrahman/ie6_fix_png/ie7-js/ie7-js.zip">تحميل</a></h4>
<p>تحتاج إلى <strong>إعادة تسمية كل صورة PNG شفافة</strong> تود تطبيق تأثير الشفافية عليها، بحيث ينتهي الاسم بعبارة &#8220;-trans&#8221;. وهذا ربما شيء متعب لو كان لديك الكثير من الصور. بعد إعادة التسمية عليك بإدراج المكتبة، ويمكنك إدراجها مباشرة عبر خوادم شركة قوقل. ولا حاجة لتحميل الملفات على الخادم الشخصي.</p>
<pre class="brush: xml;">
&lt;!--[if lte IE 6]&gt;
	&lt;script src=&quot;http://ie7-js.googlecode.com/svn/version/2.0(beta3)/IE7.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;![endif]--&gt;
</pre>
<h3>٥. <a href="http://labs.unitinteractive.com/unitpngfix.php">Unit PNG Fix</a></h3>
<p class="post_image"><a href="http://labs.unitinteractive.com/unitpngfix.php"><img class="alignnone size-full wp-image-2043" title="unit-png-fix" src="http://www.almashroo.com/uploads/2009/11/unit-png-fix.png" alt="unit-png-fix" width="500" height="256" /></a></p>
<p>تقنية أخرى تعتمد على مرشح مايكروسوفت AlphaImageLoader Filter عبر الجافاسكربت. ولكني رأيتها من <strong>أسوء الوسائل لتطبيق شفافية PNG</strong>، فقد فشلت في ٥ اختبارات من ٨ لتطبيق الشفافية. وهناك سبب، هو أن مطوري المكتبة عمدوا <strong>عدم  دعم بعض أنماط معينة</strong> عند تطبيق الشفافية.</p>
<h4>ايجابيات</h4>
<ul>
<li><strong>سهولة التطبيق</strong>، بحيث يمكننا إدراج سطر واحد لتطبيق الشفافية.</li>
</ul>
<h4>سلبيات</h4>
<ul>
<li><strong>نجاح في ٥ من أصل ٨ اختبارات</strong>، وهذه تعتبر نسبة ضعيفة جداً.</li>
<li><strong>سلوك غير متوقع للصور عند عدم تحديد الأبعاد</strong>، حيث عندما يتم تخزين الصورة في الملفات المؤقتة cache للمتصفح، يتم إظهار الصورة بشكل صحيح. ولكن عند عمل تحديث للصفحة لا يمكن معرفة الأبعاد، وبالتالي تظهر بشكل سيء.</li>
<li><strong>لا يمكن تطبيق تمدد الصورة عبر HTML</strong>، وهذه ربما ليست بالمشكلة الكبيرة، حيث لا ينصح بتمدد الصورة الأصلية بهذه الطريقة. ولكن بعض المواقع تستخدمها مثلاً لتكبير أو تصغير الصورة.</li>
<li><strong>تموضع في غير محله عند إدراج حشوة للصورة</strong>، حيث ستحدث مشكلة عند تطبيق هذه التقنية عند استخدام نمط على الصورة بحشوة.</li>
<li><strong>تمدد صورة الخلفية المتكررة</strong>، فعند إدراج الصورة كخلفية متكررة خلف تقسيمة، تتمدد الصورة بحسب أبعاد التقسيمة.</li>
<li><strong>تموضع في غير محله عند التحديد الواضح لتموضع صورة الخلفية</strong>، فعند إدراج الصورة كخلفية متموضعة، يتيغير مكانها لتصبح دائماً في أعلى يسار التقسيمة.</li>
</ul>
<h4>طريقة التطبيق</h4>
<h4 class="resourcelink"><a href="http://www.almashroo.com/examples/abdulrahman/ie6_fix_png/unit-png-fix/">عرض</a></h4>
<h4 class="resourcelink"><a href="http://www.almashroo.com/examples/abdulrahman/ie6_fix_png/unit-png-fix/unit-png-fix.zip">تحميل</a></h4>
<p>تحتاج بعد تحميل وفك ضغط الملف من الموقع، إلى استخراج ملفان، هما <strong>unitpngfix.js</strong>، والصورة الفارغة <strong>clear.gif</strong>. يجب تحديد مسار الصورة الفارغة في ملف unitpngfix.js إذا كان مساراً مختلفاً عن مسار ملف الجافاسكربت.</p>
<pre class="brush: jscript;">
var clear=&quot;clear.gif&quot;; //path to clear.gif
</pre>
<p>الآن وبكل سهولة، يمكنك إدراج ملف الجافاسكربت على مستند HTML، في جملة الإنترنت إكسبلورر الشرطية كالتالي.</p>
<pre class="brush: xml;">
&lt;!--[if lte IE 6]&gt;
		&lt;script type=&quot;text/javascript&quot; src=&quot;unitpngfix.js&quot;&gt;&lt;/script&gt;
&lt;![endif]--&gt;
</pre>
<h3>وسائل أخرى تستحق الذكر</h3>
<ul>
<li><strong><a href="http://code.google.com/p/png-hack/">PNGHack</a></strong>، تعتمد على الجافاسكربت، وسهلة نسبياً في تطبيقها.</li>
<li><strong><a href="http://allinthehead.com/retro/338/supersleight-jquery-plugin">Supersleight jQuery</a></strong>، إضافة أخرى لمكتبة jQuery لتطبيق الشفافية باستخدام تقنية <a href="http://24ways.org/2007/supersleight-transparent-png-in-ie6">SuperSleight</a>.</li>
</ul>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Almashroo?a=oDtVt6Xlvtw:NvM1VIRh4ao:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Almashroo?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Almashroo?a=oDtVt6Xlvtw:NvM1VIRh4ao:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Almashroo?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Almashroo?a=oDtVt6Xlvtw:NvM1VIRh4ao:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Almashroo?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Almashroo?a=oDtVt6Xlvtw:NvM1VIRh4ao:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Almashroo?i=oDtVt6Xlvtw:NvM1VIRh4ao:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Almashroo/~4/oDtVt6Xlvtw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.almashroo.com/2036/7-%d9%88%d8%b3%d8%a7%d8%a6%d9%84-%d9%84%d9%84%d8%aa%d8%ba%d9%84%d8%a8-%d8%b9%d9%84%d9%89-%d9%85%d8%b4%d9%83%d9%84%d8%a9-%d8%b4%d9%81%d8%a7%d9%81%d9%8a%d8%a9-png-%d8%b9%d9%84%d9%89-ie6/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://www.almashroo.com/2036/7-%d9%88%d8%b3%d8%a7%d8%a6%d9%84-%d9%84%d9%84%d8%aa%d8%ba%d9%84%d8%a8-%d8%b9%d9%84%d9%89-%d9%85%d8%b4%d9%83%d9%84%d8%a9-%d8%b4%d9%81%d8%a7%d9%81%d9%8a%d8%a9-png-%d8%b9%d9%84%d9%89-ie6/</feedburner:origLink></item>
		<item>
		<title>كيفية استخدام reCAPTCHA في التطبيقات لمحاربة السخام</title>
		<link>http://feedproxy.google.com/~r/Almashroo/~3/xxAgyYEPBes/</link>
		<comments>http://www.almashroo.com/1987/%d9%83%d9%8a%d9%81%d9%8a%d8%a9-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-recaptcha-%d9%81%d9%8a-%d9%85%d8%ad%d8%a7%d8%b1%d8%a8%d8%a9-%d8%a7%d9%84%d8%b3%d8%ae%d8%a7%d9%85/#comments</comments>
		<pubDate>Sun, 15 Nov 2009 06:30:26 +0000</pubDate>
		<dc:creator>عبدالرحمن العتيبة</dc:creator>
				<category><![CDATA[دروس]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[reCAPTCHA]]></category>
		<category><![CDATA[سخام]]></category>
		<category><![CDATA[كابتشا]]></category>

		<guid isPermaLink="false">http://www.almashroo.com/?p=1987</guid>
		<description><![CDATA[<p class="post_image_header">
<a href="http://www.almashroo.com/1987/%d9%83%d9%8a%d9%81%d9%8a%d8%a9-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-recaptcha-%d9%81%d9%8a-%d9%85%d8%ad%d8%a7%d8%b1%d8%a8%d8%a9-%d8%a7%d9%84%d8%b3%d8%ae%d8%a7%d9%85/" title="كيفية استخدام reCAPTCHA في التطبيقات لمحاربة السخام"><img src="http://www.almashroo.com/uploads/2009/11/how-to-use-recaptcha-post-header.png" alt="كيفية استخدام reCAPTCHA في التطبيقات لمحاربة السخام" height="140" width="550" /></a>
</p>
رﻱكابتشا أتت بمفهوم جديد، ونقلت الكابتشا نقلة نوعية. فمع حفاظها على السبب الرئيسي وهو التفريق بين البشر والآلة، ومن ثم الحماية من <a href="http://ar.wikipedia.org/wiki/%D8%B3%D8%AE%D8%A7%D9%85">السخام</a>. فهي تقوم بعرض كلمات إنجليزية مفهومة، وليس بعض الأحرف والأرقام العشوائية. والسبب وراء ذلك هو محاولة الشركة رقمنة الكتب التي كتبت قبل اختراع الحاسوب. وتحوليها إلى كتب إلكترونية يسهل أرشفتها والبحث فيها، عبر المدخلات التي يتكبها المستخدمون بصورة كابتشا.


مقالات ذات صلة:<ol><li><a href='http://www.almashroo.com/319/%d8%af%d9%84%d9%8a%d9%84%d9%83-%d8%a7%d9%84%d8%b3%d9%87%d9%84-%d9%81%d9%8a-%d8%aa%d8%b9%d9%84%d9%85-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-%d9%85%d9%83%d8%aa%d8%a8%d8%a9-jquery-%d8%a7%d9%84%d8%af/' rel='bookmark' title='Permanent Link: دليلك السهل في تعلم استخدام مكتبة jQuery [الدرس الأخير]: AJAX'>دليلك السهل في تعلم استخدام مكتبة jQuery [الدرس الأخير]: AJAX</a></li><li><a href='http://www.almashroo.com/314/%d8%af%d9%84%d9%8a%d9%84%d9%83-%d8%a7%d9%84%d8%b3%d9%87%d9%84-%d9%81%d9%8a-%d8%aa%d8%b9%d9%84%d9%85-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-%d9%85%d9%83%d8%aa%d8%a8%d8%a9-jquery/' rel='bookmark' title='Permanent Link: دليلك السهل في تعلم استخدام مكتبة jQuery [ الدرس الأول]'>دليلك السهل في تعلم استخدام مكتبة jQuery [ الدرس الأول]</a></li><li><a href='http://www.almashroo.com/7/7/' rel='bookmark' title='Permanent Link: [سجن البرمجة] &#8211; كيفية الدخول فيه'>[سجن البرمجة] &#8211; كيفية الدخول فيه</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p class="post_image_header">
<a href="http://www.almashroo.com/1987/%d9%83%d9%8a%d9%81%d9%8a%d8%a9-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-recaptcha-%d9%81%d9%8a-%d9%85%d8%ad%d8%a7%d8%b1%d8%a8%d8%a9-%d8%a7%d9%84%d8%b3%d8%ae%d8%a7%d9%85/" title="كيفية استخدام reCAPTCHA في التطبيقات لمحاربة السخام"><img src="http://www.almashroo.com/uploads/2009/11/how-to-use-recaptcha-post-header.png" alt="كيفية استخدام reCAPTCHA في التطبيقات لمحاربة السخام" height="140" width="550" /></a>
</p>
<p>كلنا قد مر علينا أسلوب أو أكثر من أساليب <a href="http://ar.wikipedia.org/wiki/%D9%83%D8%A7%D8%A8%D8%AA%D8%B4%D8%A7">الكابتشا</a> CAPTCHA عند إبحارنا على الشبكة. فعند التسجيل في المواقع أو طرح التعليقات، تأتينا بعض صور الكلمات أو الأحرف المقطعة والملونة. وبعض الأحيان، يتم استخدام أساليب أخرى، كعرض بعض الصور واختيار أنسب صورة للسؤال المطروح. كل هذا يتم للتحقق ما إذا كان المستخدم بشراً وليس آلةً.</p>
<p>رﻱكابتشا أتت بمفهوم جديد، ونقلت الكابتشا نقلة نوعية. فمع حفاظها على السبب الرئيس وهو التفريق بين البشر والآلة، ومن ثم الحماية من <a href="http://ar.wikipedia.org/wiki/%D8%B3%D8%AE%D8%A7%D9%85">السخام</a>. فهي تقوم بعرض كلمات إنجليزية مفهومة، وليس بعض الأحرف والأرقام العشوائية. والسبب وراء ذلك هو محاولة الشركة رقمنة الكتب التي كتبت قبل اختراع الحاسوب. وتحوليها إلى كتب إلكترونية يسهل أرشفتها والبحث فيها، عبر المدخلات التي يكتبها المستخدمون بصورة كابتشا.</p>
<p>سأقوم في هذا المقال بشرح طريقة تطبيق رﻱكابتشا باستخدام 3 طرق مختلفة. أولاً باستخدام PHP، وبعدها بتطبيق شكل مخصص ليتلائم أكثر مع شكل الموقع المراد إدراج الخدمة فيه، وأخيراً باستخدام تقنية أجاكس AJAX.<br />
<span id="more-1987"></span></p>
<h3>كيف تساعد رﻱكابتشا على تحويل الكتب القديمة إلى كتب رقمية؟</h3>
<p class="post_image"><img class="alignnone size-full wp-image-1992" title="رﻱكابتشا" src="http://www.almashroo.com/uploads/2009/11/recaptcha.png" alt="رﻱكابتشا" width="312" height="123" /></p>
<p>كلما تم حل رﻱكابتشا من المستخدم، فإنه يساعد على تحويل الكتب القديمة إلى كتب إلكترونية. وطريقة عملها سهلة. فهي تظهر صورة لكلمتين، الكلمة الأولى هي كلمة يكون قد عجز أو تضارب في تحليلها أكثر من برنامج مختلف لتحويل <a href="http://ar.wikipedia.org/wiki/%D8%AA%D8%B9%D8%B1%D9%81_%D8%B6%D9%88%D8%A6%D9%8A_%D8%B9%D9%84%D9%89_%D8%A7%D9%84%D9%85%D8%AD%D8%A7%D8%B1%D9%81">صور النصوص المكتوبة إلى نص رقمي</a> OCR. والكلمة الثانية هي كلمة تكون معروفة لدى النظام تسمى كلمة التحكم أو Control Word.</p>
<p>عندما يتم تقديم الكلمتين على حسب ترتيب عشوائي، يُسأل المستخدم لحلها. فإذا تم مطابقة كلمة التحكم المعروفة بشكل صحيح، يفترض النظام أن الكلمة الأخرى أيضاً صحيحة ويتم تسجيلها في قاعدة البيانات والاستفادة منها مستقبلاً لتحويل المزيد من الكتب على شكل رقمي.</p>
<h3>كيفية استخدام رﻱكابتشا</h3>
<p>توفر مكتبة رﻱكابتشا <a href="http://recaptcha.net/resources.html">العديد من التطبيقات والإضافات الملحقة</a> لمعظم لغات البرمجة وتطبيقات الويب. وفي هذا المقال، سنرى بعض أمثلة استخداماتها.</p>
<p>قبل الشروع في تطبيق الدروس، عليك أولاً القيام <a href="https://admin.recaptcha.net/accounts/signup/">بالتسجيل في الخدمة</a>. وبعد التسجيل يجب اختيار ما إذا كنت ترغب في استخدام هذه الخدمة على نطاق واحد، أو عدة نطاقات إذا كنت مديراً لمواقع كثيرة. سيتم تزويدك بمفتاحين، المفتاح العلني Public Key ويمكن إدراجه علناً على الصفحة لطلب ملفات واجهة برمجة التطبيقات API، والمفتاح الخاص، والذي يجب عليك الاحتفاظ به سراً للتواصل مع الخادم بإحدى لغات البرمجة على الويب.</p>
<p>عند الانتهاء، <a href="http://code.google.com/p/recaptcha/downloads/list?q=label:phplib-Latest">حمّل ملف المكتبة</a> الجاهز على PHP. وفك ضغطه، سترى ملفاً باسم recaptchalib.php وهو ما سيتم استخدامه وإدراجه في الأمثلة اللاحقة. فضلاً تأكد أن يكون في مكان سهل ليتم إدراجه بدون عناء. شخصياً، أحب إدراجه في مجلد خاص بالمكتبات أسميه includes. ولك الحرية في اختيار الأنسب.</p>
<h3>استخدام رﻱكابتشا مع PHP</h3>
<h4 class="resourcelink"><a href="http://www.almashroo.com/examples/abdulrahman/091115-reCAPTCHA/PHP/">عرض</a></h4>
<h4 class="resourcelink"><a href="http://www.almashroo.com/examples/abdulrahman/091115-reCAPTCHA/PHP/download.zip">تحميل</a></h4>
<p class="post_image"><a href="http://www.almashroo.com/examples/abdulrahman/091115-reCAPTCHA/PHP/"><img class="alignnone size-full wp-image-1991" title="استخدام رﻱكابتشا مع PHP" src="http://www.almashroo.com/uploads/2009/11/php-recaptcha.png" alt="استخدام رﻱكابتشا مع PHP" width="550" height="372" /></a></p>
<p>هذا تطبيق لاستخدام رﻱكابتشا على لغة PHP. عملية إنشاءه سهلة جداً. سأبدء من منتصف الملف ومن ثم سألقي الضوء على أهم الأشياء لاحقاً.</p>
<h4>الخطوة 1: إدراج المكتبة والمفاتيح</h4>
<pre class="brush: php;">
require_once('recaptchalib.php');

//استبدل XXXX مع المفاتيح التي موجودة على http://recaptcha.net/api/getkey
$publickey = &quot;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&quot;;
$privatekey = &quot;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&quot;;
</pre>
<p>نقوم بإدراج المكتبة بشكل عادي بواسطة require_once قبل نموذج الإدخال في HTML، ومن ثم نقوم بتسجيل المفاتيح العلنية والخاصة في متغيرات لسهولة طلبها لاحقاً من قبل البرنامج.</p>
<h4>الخطوة 2: تعريب رسائل الخطأ في مصفوفة</h4>
<pre class="brush: php;">
$error_ar = array(
	'invalid-site-public-key' =&gt; 'المفتاح العلني للموقع غير صحيح.',
	'invalid-site-private-key' =&gt; 'المفتاح الخاص للموقع غير صحيح.',
	'invalid-request-cookie' =&gt; 'عامل التحدي للتحقق غير صحيح.',
	'incorrect-captcha-sol' =&gt; 'حل كابتشا غير صحيح.',
	'verify-params-incorrect' =&gt; 'عوامل التحقق كانت غير صحيحة.',
	'invalid-referrer' =&gt; 'المحيل غير صحيح.',
	'recaptcha-not-reachable' =&gt; 'خطأ من الخادم.'
);
</pre>
<p>قمت بتعريب بعض رسائل الأخطاء التي تظهر عند عدم التحقق من رﻱكابتشا، ووضعها في مصفوفة لاستدعائها لاحقاً.</p>
<h4>الخطوة 3: التحقق من مدخلات رﻱكابتشا ومطابقتها</h4>
<pre class="brush: php;">
$resp = null;

if ($_POST[&quot;submit&quot;])
{
	if (empty($_POST[&quot;name&quot;]) || empty($_POST[&quot;recaptcha_response_field&quot;]))
	{
		echo &quot;بعض الحقول تركت فارغة!&quot;;
	}
	else
	{
		$resp = recaptcha_check_answer ($privatekey,
						$_SERVER[&quot;REMOTE_ADDR&quot;],
						$_POST[&quot;recaptcha_challenge_field&quot;],
						$_POST[&quot;recaptcha_response_field&quot;]);

		if ($resp-&gt;is_valid)
		{
			echo &quot;مبروك يا &quot; . $_POST[&quot;name&quot;] . &quot;، لقد أجبت إجابة صحيحة!&quot;;
		}
		else
		{
			echo $error_ar[$resp-&gt;error];
		}
	}
	echo ' &lt;a href=&quot;&quot;&gt;إعادة المحاولة&lt;/a&gt;.';
}
</pre>
<p>في البداية نتأكد أولاً إذا كان النموذج قد تم إرساله واستقباله في PHP عبر المتغير <span dir="ltr" lang="en" xml:lang="en">$_POST["submit"]</span>. حيث هذا المتغير سيكون مسجلاً إذا تم الإرسال عبر الضغظ على زر “موافق” لأنه يحمل الخاصية name تساوي submit.</p>
<p>إذا تم ترك أحد الحقول فارغة، سواء الاسم عبر متغير <span dir="ltr" lang="en" xml:lang="en">$_POST["name"]</span> أو حقل جواب رﻱكابتشا <span dir="ltr" lang="en" xml:lang="en">$_POST["recaptcha_response_field"]</span>. سيتم إظهار رسالة توضيحية “بعض الحقول تركت فارغة!”. وإذا كانت الحقول معبئة، سيتم متابعة التحقق.</p>
<p>الآن، سيتم إنشاء كائن باسم <span dir="ltr" lang="en" xml:lang="en">$resp</span> عبر استخدام دالة الإنشاء recaptcha_check_answer والتي تم إدراجها عبر ملف recaptchalib.php. تهتم هذه الدالة بالاتصال بخادم رﻱكابتشا والتحقق منها. تقبل عدد من المتغيرات. الأول هو المفتاح الخاص، الثاني هو عنوان IP الخاص بالمستخدم، الثالث هو حقل معرفة نوع التحدي لرﻱكابتشا، والأخير هو الجواب لتحدي رﻱكابتشا من قبل المستخدم.</p>
<p>بعدها نقوم بالتحقق من جواب الخادم، فإذا كان جواباً صحيحاً، سيحمل متغير is_valid في كائن <span dir="ltr" lang="en" xml:lang="en">$resp</span> قيمة صحيحة true. أما إذا كان غير ذلك، فسيتم إرجاع خطأ للمستخدم وتعريبه حسب نوعه باستخدام مصفوفة التعريب التي سبق إنشاءها.</p>
<p>أخيراً، نقوم بعرض رابط لإعادة المحاولة، وهو عبارة عن رابط فارغ فقط لإعادة تحميل الصفحة.</p>
<h4>الخطوة 4: عرض أو عدم عرض النموذج</h4>
<pre class="brush: php; html-script: true;">
&lt;?php if (!isset($_POST[&quot;submit&quot;])): ?&gt;

&lt;form action=&quot;&quot; method=&quot;post&quot;&gt;
	&lt;div&gt;
		&lt;label for=&quot;name&quot;&gt;* ما هو اسمك؟&lt;/label&gt;
		&lt;input type=&quot;text&quot; id=&quot;name&quot; name=&quot;name&quot; size=&quot;30&quot; /&gt;
	&lt;/div&gt;

	&lt;div dir=&quot;ltr&quot; style=&quot;float:right;&quot;&gt;
		&lt;label for=&quot;recaptcha_response_field&quot; dir=&quot;rtl&quot;&gt;* هل أنت انسان؟&lt;/label&gt;
		&lt;?php echo recaptcha_get_html($publickey, $error); ?&gt;
	&lt;/div&gt;

	&lt;div style=&quot;clear:right;&quot;&gt;* كل الحقول مطلوبة!&lt;/div&gt;

	&lt;div&gt;&lt;input type=&quot;submit&quot; name=&quot;submit&quot; class=&quot;button&quot; value=&quot;موافق&quot; /&gt;&lt;/div&gt;
&lt;/form&gt;

&lt;?php endif; ?&gt;
</pre>
<p>ستلاحظ في البداية السؤال عن متغير <span dir="ltr" lang="en" xml:lang="en">$_POST["submit"]</span> عن ما إذا كان يحمل قيمة. فإذا لم يكن يحمل أي قيمة، فمعناه أن المستخدم يعرض النموذج لأول مرة ولم يتم إرساله من قبل. وإذا كان لا يحمل قيمة، فمعناه أن النموذج تم إرساله، لذلك سيتم إخفاءه. ما يساعدنا على معرفة ذلك هو خاصية action في عنصر النموذج form الفارغة. وهي حيلة بسيطة لإعادة تحميل نفس الصفحة عند إرسال النموذج، وبعدها يتم تسجيل المتغيرات المطلوبة والتي تم شرحها في الخطوات السابقة.</p>
<p>يتم إدراج رﻱكابتشا بطريقة ديناميكية عبر دالة المساعدة recaptcha_get_html والتي تعرض الشيفرة المطلوبة لعرض رﻱكابتشا وكافة ملحقاتها.</p>
<h4>الخطوة 5: تعريب رﻱكابتشا</h4>
<p class="post_image"><img class="alignnone size-full wp-image-1993" title="تعريب رﻱكابتشا" src="http://www.almashroo.com/uploads/2009/11/recaptcha-arabic.png" alt="تعريب رﻱكابتشا" width="550" height="99" /></p>
<pre class="brush: jscript;">
var RecaptchaOptions = {
	lang: 'ar',
	custom_translations : {
				visual_challenge : &quot;احصل على تحدي مرئي&quot;,
				audio_challenge : &quot;احصل على تحدي مسموع&quot;,
				refresh_btn : &quot;احصل على تحدي جديد&quot;,
				instructions_visual : &quot;اكتب الكلمتين:&quot;,
				instructions_audio : &quot;اكتب ما تسمعه:&quot;,
				help_btn : &quot;مساعدة&quot;,
				play_again : &quot;إعادة تشغيل الصوت مرة أخرى&quot;,
				cant_hear_this : &quot;تحميل الصوت بصيغة MP3&quot;,
				incorrect_try_again : &quot;خطأ. أعد المحاولة.&quot;
				}
};
</pre>
<p>سنضيف بعض الشيفرات الخاصة بتعريب محتوى رﻱكابتشا عن طريق الجافاسكربت في أعلى الصفحة.</p>
<pre class="brush: css;">
.recaptchatable label.recaptcha_input_area_text
{
	text-align:right !important;
	direction:rtl !important;
}
</pre>
<p>ومن ثم نضيف الشيفرات المتعلقة بالمظهر الجمالي بواسطة CSS أيضاً في الأعلى.</p>
<h3>استخدام رﻱكابتشا بشكل مخصص</h3>
<h4 class="resourcelink"><a href="http://www.almashroo.com/examples/abdulrahman/091115-reCAPTCHA/custom-theme/">عرض</a></h4>
<h4 class="resourcelink"><a href="http://www.almashroo.com/examples/abdulrahman/091115-reCAPTCHA/custom-theme/download.zip">تحميل</a></h4>
<p class="post_image"><a href="http://www.almashroo.com/examples/abdulrahman/091115-reCAPTCHA/custom-theme/"><img class="alignnone size-full wp-image-1989" title="استخدام رﻱكابتشا بشكل مخصص" src="http://www.almashroo.com/uploads/2009/11/custom-recaptcha.png" alt="استخدام رﻱكابتشا بشكل مخصص" width="550" height="372" /></a></p>
<p>سنرى الآن كيف يمكننا تخصيص شكل رﻱكابتشا بشكل يتلائم أكثر مع الموقع المراد إدراجه فيه. ولأنها نفس طريقة الاستخدام مع PHP، فلن يتم إعادة شرح عمل الإرسال والتحقق.</p>
<h4>الخطوة 1: تعديل خيارات رﻱكابتشا</h4>
<pre class="brush: jscript;">
var RecaptchaOptions = {
	theme: 'custom',
	lang: 'ar',
	custom_theme_widget: 'recaptcha_widget',
	custom_translations : {
				visual_challenge : &quot;احصل على تحدي مرئي&quot;,
				audio_challenge : &quot;احصل على تحدي مسموع&quot;,
				refresh_btn : &quot;احصل على تحدي جديد&quot;,
				instructions_visual : &quot;اكتب الكلمتين:&quot;,
				instructions_audio : &quot;اكتب ما تسمعه:&quot;,
				help_btn : &quot;مساعدة&quot;,
				play_again : &quot;إعادة تشغيل الصوت مرة أخرى&quot;,
				cant_hear_this : &quot;تحميل الصوت بصيغة MP3&quot;,
				incorrect_try_again : &quot;خطأ. أعد المحاولة.&quot;
				}
};
</pre>
<p>لا شيء جديد هنا، سوى خيارين، الخيار الأول theme يجب أن يحتوي على custom ومعناها التخصيص. والخيار الآخر custom_theme_widget يجب أن يحتوي على اسم المعرّف للتقسيمة التي ستحتوي على رﻱكابتشا.</p>
<h4>الخطوة 2: عناصر التخصيص لكل جزئية</h4>
<pre class="brush: xml;">
&lt;form action=&quot;&quot; method=&quot;post&quot;&gt;
	&lt;div&gt;
		&lt;label for=&quot;name&quot;&gt;* ما هو اسمك؟&lt;/label&gt;
		&lt;input type=&quot;text&quot; id=&quot;name&quot; name=&quot;name&quot; size=&quot;30&quot; /&gt;
	&lt;/div&gt;
	&lt;div&gt;
		&lt;label for=&quot;recaptcha_response_field&quot; dir=&quot;rtl&quot;&gt;* هل أنت انسان؟&lt;/label&gt;
		&lt;div id=&quot;recaptcha_widget&quot; style=&quot;display:none&quot;&gt;
			&lt;div id=&quot;recaptcha_image&quot; style=&quot;float:right;&quot;&gt;&lt;/div&gt;
			&lt;div style=&quot;clear:right;&quot;&gt;
				&lt;div class=&quot;recaptcha_only_if_incorrect_sol&quot; style=&quot;color:red&quot;&gt;خطأ الرجاء المحاولة مرة أخرى&lt;/div&gt;
				&lt;label for=&quot;recaptcha_response_field&quot; class=&quot;recaptcha_only_if_image&quot;&gt;أدخل الكلمات الموجودة في المربع:&lt;/label&gt;
				&lt;label for=&quot;recaptcha_response_field&quot; class=&quot;recaptcha_only_if_audio&quot;&gt;أدخل الأرقام التي تسمعها:&lt;/label&gt;
				&lt;input type=&quot;text&quot; id=&quot;recaptcha_response_field&quot; name=&quot;recaptcha_response_field&quot; dir=&quot;ltr&quot; /&gt;
				&lt;div&gt;&lt;a href=&quot;javascript:Recaptcha.reload()&quot;&gt;احصل على كابتشا آخر&lt;/a&gt;&lt;/div&gt;
				&lt;div class=&quot;recaptcha_only_if_image&quot;&gt;&lt;a href=&quot;javascript:Recaptcha.switch_type('audio')&quot;&gt;احصل على كابتشا مسموعة&lt;/a&gt;&lt;/div&gt;
				&lt;div class=&quot;recaptcha_only_if_audio&quot;&gt;&lt;a href=&quot;javascript:Recaptcha.switch_type('image')&quot;&gt;احصل على كابتشا مرئية&lt;/a&gt;&lt;/div&gt;
				&lt;div&gt;&lt;a href=&quot;javascript:Recaptcha.showhelp()&quot;&gt;مساعدة&lt;/a&gt;&lt;/div&gt;
			&lt;/div&gt;
			&lt;!-- استبدل XXXX مع المفاتيح التي موجودة على http://recaptcha.net/api/getkey --&gt;
			&lt;script type=&quot;text/javascript&quot; src=&quot;http://api.recaptcha.net/challenge?k=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&quot;&gt;&lt;/script&gt;
		&lt;/div&gt;
		&lt;noscript&gt;
			&lt;!-- استبدل XXXX مع المفاتيح التي موجودة على http://recaptcha.net/api/getkey --&gt;
			&lt;iframe src=&quot;http://api.recaptcha.net/noscript?k=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&quot; height=&quot;300&quot; width=&quot;500&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;
			&lt;textarea name=&quot;recaptcha_challenge_field&quot; rows=&quot;3&quot; cols=&quot;40&quot; dir=&quot;ltr&quot;&gt;&lt;/textarea&gt;
			&lt;input type='hidden' name='recaptcha_response_field' value='manual_challenge' /&gt;
		&lt;/noscript&gt;
	&lt;div style=&quot;clear:right;&quot;&gt;* كل الحقول مطلوبة!&lt;/div&gt;
	&lt;div&gt;&lt;input type=&quot;submit&quot; name=&quot;submit&quot; class=&quot;button&quot; value=&quot;موافق&quot; /&gt;&lt;/div&gt;
&lt;/form&gt;
</pre>
<p>ستلاحظ إدراج العديد من التقاسيم والعناصر، وذلك لتخصيص الشكل تماماً بما يناسب الموقع الذي تريد إدراج رﻱكابتشا فيه.</p>
<p>التقسيمة التي ستحتوي على رﻱكابتشا والتي لها معرّف id باسم recaptcha_widget  ستكون مخفية مبدأياً. وسيتم إظهارها باستخدام الجافاسكربت.</p>
<p>لن أتطرق إلى الشرح التفصيلي لكل عنصر منها، ولكن مجملاً، بعض هذه العناصر تظهر وتختفي بحسب طريقة رﻱكابتشا المستخدمة. فمثلاً عند التحويل إلى رﻱكابتشا مسموعة، فستختفي كلمة “احصل على كابتشا مسموعة” ويتم استبدالها بكلمة “احصل على كابتشا مرئية”.</p>
<p>عنصرا noscript وiframe يمكنانا من الرجوع بأمان إلى رﻱكابتشا بطريقة iframe عند عدم تفعيل الجافاسكربت لدى المستخدم.</p>
<h3>استخدام رﻱكابتشا مع الأجاكس AJAX</h3>
<h4 class="resourcelink"><a href="http://www.almashroo.com/examples/abdulrahman/091115-reCAPTCHA/AJAX/">عرض</a></h4>
<h4 class="resourcelink"><a href="http://www.almashroo.com/examples/abdulrahman/091115-reCAPTCHA/AJAX/download.zip">تحميل</a></h4>
<p class="post_image"><a href="http://www.almashroo.com/examples/abdulrahman/091115-reCAPTCHA/AJAX/"><img class="alignnone size-full wp-image-1988" title="استخدام رﻱكابتشا مع الأجاكس AJAX" src="http://www.almashroo.com/uploads/2009/11/ajax-recaptcha.png" alt="استخدام رﻱكابتشا مع الأجاكس AJAX" width="550" height="372" /></a></p>
<h4>الخطوة 1: إنشاء ملف الوكيل لطلب معلومات رﻱكابتشا من الخادم</h4>
<pre class="brush: php;">
&lt;?php
require_once('recaptchalib.php');
//استبدل XXXX مع المفاتيح التي موجودة على http://recaptcha.net/api/getkey
$privatekey = &quot;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&quot;;

//ُError Codes translated to arabic
$error_ar = array(
	'invalid-site-public-key' =&gt; 'المفتاح العلني للموقع غير صحيح.',
	'invalid-site-private-key' =&gt; 'المفتاح الخاص للموقع غير صحيح.',
	'invalid-request-cookie' =&gt; 'عامل التحدي للتحقق غير صحيح.',
	'incorrect-captcha-sol' =&gt; 'حل كابتشا غير صحيح.',
	'verify-params-incorrect' =&gt; 'عوامل التحقق كانت غير صحيحة.',
	'invalid-referrer' =&gt; 'المحيل غير صحيح.',
	'recaptcha-not-reachable' =&gt; 'خطأ من الخادم.'
);

# the response from reCAPTCHA
$resp = null;

# was there a reCAPTCHA response?
if (empty($_POST[&quot;recaptcha_response_field&quot;]))
{
	echo &quot;حقل الكابتشا مطلوب!&quot;;
}
else
{
	$resp = recaptcha_check_answer ($privatekey,
					$_SERVER[&quot;REMOTE_ADDR&quot;],
					$_POST[&quot;recaptcha_challenge_field&quot;],
					$_POST[&quot;recaptcha_response_field&quot;]);

	if ($resp-&gt;is_valid)
	{
		echo &quot;مبروك، لقد أجبت إجابة صحيحة!&quot;;
	}
	else
	{
		echo $error_ar[$resp-&gt;error];
	}
}
echo ' &lt;a onclick=&quot;showRecaptcha(\'dynamic_recaptcha\', \'submit\', \'red\');&quot; href=&quot;javascript:return false;&quot;&gt;إعادة المحاولة&lt;/a&gt;.';
?&gt;
</pre>
<p>سيتم إنشاء ملف مساعد للأجاكس نسميه ajax.recaptcha.php يهتم بطلب المعلومة من خادم رﻱكابتشا وتقديم المعلومة. والسبب في إنشاء ملف كهذا يعمل بمثابة الوكيل Proxy بين الأجاكس في موقعنا وخوادم رﻱكابتشا، هو أنه لأسباب أمنية في المتصفحات، يتم منع طلب المعلومات مباشرة بطريقة الأجاكس بين نطاقات مختلفة Cross domain.</p>
<p>ستلاحظ أنه لا اختلاف جذري بين هذا الملف، وملف رﻱكابتشا باستخدام PHP. سوى أنه تم الاستغناء عن عناصر HTML، وذلك لأننا نريد فقط أن نأخذ معلومة بسيطة.</p>
<h4>الخطوة 2: إنشاء دوال المساعدة في طلب واستقبال الأجاكس</h4>
<pre class="brush: jscript;">
function createRequestObject()
{
	var req;
	if(window.XMLHttpRequest)
	{
		req = new XMLHttpRequest();
	}
	else if(window.ActiveXObject)
	{
		req = new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);
	}
	else
	{
		alert('حصل خطأ في طلب الصفحة...الرجاء المحاولة مرة أخرى وإذا لم تنفع جرب أن تنزل نسخة جديدة من المتصفح');
	}
	return req;
}

var http = createRequestObject();

function sendRequestPost(recaptcha_challenge_field, recaptcha_response_field)
{
	http.open('post', 'ajax.recaptcha.php');
	http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	http.onreadystatechange = handleResponse;
	http.send('recaptcha_challenge_field='+recaptcha_challenge_field+'&amp;recaptcha_response_field='+recaptcha_response_field);
}

function handleResponse()
{
	document.getElementById(&quot;ajaxResp&quot;).style.display = 'block';
	document.getElementById(&quot;dynamic_recaptcha&quot;).style.display = 'none';
	document.getElementById(&quot;submitDiv&quot;).style.display = 'none';
	var ajaxTest = document.getElementById(&quot;ajaxResp&quot;);
	ajaxTest.innerHTML = 'جاري التحقق...';
	if(http.readyState == 4 &amp;&amp; http.status == 200)
	{
		var response = http.responseText;
		if(response)
		{
			ajaxTest.innerHTML = response;
		}
	}
}

function getAnswer()
{
	sendRequestPost(Recaptcha.get_challenge(), Recaptcha.get_response());
}
</pre>
<p>لن أتطرق إلى تفاصيل الطلب والاستقبال بالأجاكس كثيراً، فقد تم تغطيته في <a href="http://www.almashroo.com/14/xmlhttprequest-ajax/">مقال سابق</a>. وهنا سنقوم فقط بطلب معلومة ما إذا كان تم التحقق من صحة رﻱكابتشا باستخدام ملف ajax.recaptcha.php، عبر تقديم عدد من المتغيرات، وهي قيمة حقل معرفة نوع التحدي لرﻱكابتشا. وحقل الجواب لتحدي رﻱكابتشا من قبل المستخدم.</p>
<h4>الخطوة 3: إعادة إنشاء رﻱكابتشا بتقنية الأجاكس</h4>
<pre class="brush: jscript;">
function showRecaptcha(element)
{
	//استبدل XXXX مع المفاتيح التي موجودة على http://recaptcha.net/api/getkey
	Recaptcha.create(&quot;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&quot;, element, {
		theme: 'blackglass',
		lang: 'ar',
		custom_translations : {
					visual_challenge : &quot;احصل على تحدي مرئي&quot;,
					audio_challenge : &quot;احصل على تحدي مسموع&quot;,
					refresh_btn : &quot;احصل على تحدي جديد&quot;,
					instructions_visual : &quot;اكتب الكلمتين:&quot;,
					instructions_audio : &quot;اكتب ما تسمعه:&quot;,
					help_btn : &quot;مساعدة&quot;,
					play_again : &quot;إعادة تشغيل الصوت مرة أخرى&quot;,
					cant_hear_this : &quot;تحميل الصوت بصيغة MP3&quot;,
					incorrect_try_again : &quot;خطأ. أعد المحاولة.&quot;
					},
		callback: Recaptcha.focus_response_field
	});
	document.getElementById(&quot;dynamic_recaptcha&quot;).style.display = 'block';
	document.getElementById(&quot;ajaxResp&quot;).style.display = 'none';
	document.getElementById(&quot;submitDiv&quot;).style.display = 'block';
}
</pre>
<p>يتم إنشاء رﻱكابتشا بالأجاكس عبر استدعاء كائن Recaptcha.create. حيث يستقبل الكائن عدد من المتغيرات، أولاً المفتاح العلني، ثانياً اسم المعرّف Id للعنصر المراد إدراج رﻱكابتشا فيه، وأخيراً الخيارات.</p>
<p><a href="http://recaptcha.net/apidocs/captcha/client.html#look-n-feel">الخيارات</a> تكون مشابهة تماماً للخيارات التي سبق شرحها باستخدام PHP. ولكن هناك خيار جديد وهو callback. ويتيح هذا الخيار استدعاء دالة بعد الإنتهاء من تحميل رﻱكابتشا.</p>
<p>في نهاية الدالة نقوم بإخفاء بعض العناصر وإظهار البعض الآخر لتحسين قابلية الاستخدام.</p>
<h4>الخطوة 4: عرض النموذج في HTML</h4>
<pre class="brush: xml;">
&lt;form action=&quot;&quot; method=&quot;post&quot; onsubmit=&quot;getAnswer();return false;&quot;&gt;
	&lt;p&gt;&lt;a onclick=&quot;showRecaptcha('dynamic_recaptcha');&quot; href=&quot;javascript:return false;&quot;&gt;أظهر الكابتشا!&lt;/a&gt;&lt;/p&gt;
	&lt;div dir=&quot;ltr&quot; style=&quot;float:right;&quot; id=&quot;dynamic_recaptcha&quot;&gt;&lt;/div&gt;
	&lt;div style=&quot;clear:right;&quot; id=&quot;ajaxResp&quot;&gt;&lt;/div&gt;
	&lt;div style=&quot;clear:right;&quot; id=&quot;submitDiv&quot;&gt;&lt;input type=&quot;submit&quot; name=&quot;submit&quot; id=&quot;submit&quot; class=&quot;button&quot; value=&quot;موافق&quot; /&gt;&lt;/div&gt;
&lt;/form&gt;
</pre>
<p>في عنصر النموذج form، تم استخدام حدث عند الإرسال onsubmit نستدعي دالة <span dir="ltr" lang="en" xml:lang="en">getAnswer()</span> والتي تهتم بطلب المعلومة من الخادم وعرضها. من المهم إلحاق استدعاء الدالة بإرجاع خطأ return false، والسبب هو أننا لا نريد أن يتم إرسال النموذج بطريقة HTML، إنما بطريقة الأجاكس. وإرجاع الخطأ يوقف الإرسال عن طريق HTML.</p>
<p>في عنصر الرابط، سنرى إدراج الحدث عند النقر onclick، نستدعي الدالة showRecaptcha وذلك لإظهار رﻱكابتشا في تقسيمة div التي لها معرّف dynamic_recaptcha.</p>
<h3>الخلاصة</h3>
<p>رأينا كيف باستخدامنا لرﻱكابتشا نضمن حماية المواقع من السخام، وفي نفس الوقت مساعدة تحويل الكتب القديمة إلى كتب إلكترونية. ورأينا أيضاً كيف يمكننا تطبيق رﻱكابتشا باستخدام 3 طرق مختلفة، باستخدام PHP فقط، من ثم بتخصيص شكل رﻱكابتشا، وبعدها باستخدام تقنية الأجاكس.</p>
<p><em>إذا طبقتم الدرس في مواقع تديرونها، الرجاء منكم مشاركتنا إياها في التعليقات.</em></p>


<p>مقالات ذات صلة:<ol><li><a href='http://www.almashroo.com/319/%d8%af%d9%84%d9%8a%d9%84%d9%83-%d8%a7%d9%84%d8%b3%d9%87%d9%84-%d9%81%d9%8a-%d8%aa%d8%b9%d9%84%d9%85-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-%d9%85%d9%83%d8%aa%d8%a8%d8%a9-jquery-%d8%a7%d9%84%d8%af/' rel='bookmark' title='Permanent Link: دليلك السهل في تعلم استخدام مكتبة jQuery [الدرس الأخير]: AJAX'>دليلك السهل في تعلم استخدام مكتبة jQuery [الدرس الأخير]: AJAX</a></li><li><a href='http://www.almashroo.com/314/%d8%af%d9%84%d9%8a%d9%84%d9%83-%d8%a7%d9%84%d8%b3%d9%87%d9%84-%d9%81%d9%8a-%d8%aa%d8%b9%d9%84%d9%85-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-%d9%85%d9%83%d8%aa%d8%a8%d8%a9-jquery/' rel='bookmark' title='Permanent Link: دليلك السهل في تعلم استخدام مكتبة jQuery [ الدرس الأول]'>دليلك السهل في تعلم استخدام مكتبة jQuery [ الدرس الأول]</a></li><li><a href='http://www.almashroo.com/7/7/' rel='bookmark' title='Permanent Link: [سجن البرمجة] &#8211; كيفية الدخول فيه'>[سجن البرمجة] &#8211; كيفية الدخول فيه</a></li></ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Almashroo?a=xxAgyYEPBes:cjBYpZ8dcQo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Almashroo?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Almashroo?a=xxAgyYEPBes:cjBYpZ8dcQo:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Almashroo?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Almashroo?a=xxAgyYEPBes:cjBYpZ8dcQo:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Almashroo?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Almashroo?a=xxAgyYEPBes:cjBYpZ8dcQo:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Almashroo?i=xxAgyYEPBes:cjBYpZ8dcQo:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Almashroo/~4/xxAgyYEPBes" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.almashroo.com/1987/%d9%83%d9%8a%d9%81%d9%8a%d8%a9-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-recaptcha-%d9%81%d9%8a-%d9%85%d8%ad%d8%a7%d8%b1%d8%a8%d8%a9-%d8%a7%d9%84%d8%b3%d8%ae%d8%a7%d9%85/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://www.almashroo.com/1987/%d9%83%d9%8a%d9%81%d9%8a%d8%a9-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-recaptcha-%d9%81%d9%8a-%d9%85%d8%ad%d8%a7%d8%b1%d8%a8%d8%a9-%d8%a7%d9%84%d8%b3%d8%ae%d8%a7%d9%85/</feedburner:origLink></item>
		<item>
		<title>أفضل 10 خدمات لتلوين ومشاركة الشيفرات على الويب</title>
		<link>http://feedproxy.google.com/~r/Almashroo/~3/2w0PyoyMM08/</link>
		<comments>http://www.almashroo.com/1963/%d8%a3%d9%81%d8%b6%d9%84-10-%d8%ae%d8%af%d9%85%d8%a7%d8%aa-%d9%84%d8%aa%d9%84%d9%88%d9%8a%d9%86-%d9%88%d9%85%d8%b4%d8%a7%d8%b1%d9%83%d8%a9-%d8%a7%d9%84%d8%b4%d9%8a%d9%81%d8%b1%d8%a7%d8%aa/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 09:01:24 +0000</pubDate>
		<dc:creator>عبدالرحمن العتيبة</dc:creator>
				<category><![CDATA[أدوات]]></category>
		<category><![CDATA[تطبيقات ويب]]></category>
		<category><![CDATA[تلوين الشيفرات]]></category>
		<category><![CDATA[خدمات]]></category>
		<category><![CDATA[مشاركة]]></category>

		<guid isPermaLink="false">http://www.almashroo.com/?p=1963</guid>
		<description><![CDATA[<p class="post_image_header">
<a href="http://www.almashroo.com/1963/%d8%a3%d9%81%d8%b6%d9%84-10-%d8%ae%d8%af%d9%85%d8%a7%d8%aa-%d9%84%d8%aa%d9%84%d9%88%d9%8a%d9%86-%d9%88%d9%85%d8%b4%d8%a7%d8%b1%d9%83%d8%a9-%d8%a7%d9%84%d8%b4%d9%8a%d9%81%d8%b1%d8%a7%d8%aa/" title="أفضل 10 خدمات لتلوين ومشاركة الشيفرات على الويب"><img src="http://www.almashroo.com/uploads/2009/11/symtax-highlighters-post-header.png" alt="أفضل 10 خدمات لتلوين ومشاركة الشيفرات على الويب" height="140" width="550" /></a>
</p>
هل أردت مشاركة شيفرة أو جزء منها مع أشخاص آخرين؟ أو ربما واجهتك مشكلة في جزئية معينة في الشيفرة وأردت طلب المساعدة من الغير، ولكن لم تعرف كيف تعرضها عليهم؟]]></description>
			<content:encoded><![CDATA[<p class="post_image_header">
<a href="http://www.almashroo.com/1963/%d8%a3%d9%81%d8%b6%d9%84-10-%d8%ae%d8%af%d9%85%d8%a7%d8%aa-%d9%84%d8%aa%d9%84%d9%88%d9%8a%d9%86-%d9%88%d9%85%d8%b4%d8%a7%d8%b1%d9%83%d8%a9-%d8%a7%d9%84%d8%b4%d9%8a%d9%81%d8%b1%d8%a7%d8%aa/" title="أفضل 10 خدمات لتلوين ومشاركة الشيفرات على الويب"><img src="http://www.almashroo.com/uploads/2009/11/symtax-highlighters-post-header.png" alt="أفضل 10 خدمات لتلوين ومشاركة الشيفرات على الويب" height="140" width="550" /></a>
</p>
<p>هل أردت مشاركة شيفرة أو جزء منها مع أشخاص آخرين؟ أو ربما واجهتك مشكلة في جزئية معينة في الشيفرة وأردت طلب المساعدة من الغير، ولكن لم تعرف كيف تعرضها عليهم؟</p>
<p>في هذه المقالة، جمعنا لكم أفضل الخدمات الموجودة على الشبكة لتلوين، ومشاركة الشيفرات مع الغير.</p>
<p><span id="more-1963"></span></p>
<h3><a href="http://codepad.org/">Codepad</a></h3>
<p class="post_image"><a href="http://codepad.org/"><img class="alignnone size-full wp-image-1965" title="codepad" src="http://www.almashroo.com/uploads/2009/11/codepad.png" alt="codepad" width="550" height="362" /></a></p>
<p>بالإضافة إلى إتاحة تلوين الشيفرات، وحفظها، وإمكانية مشاركتها برابط قصير. تتميز خدمة Codepad عن غيرها بإمكانية <a href="http://codepad.org/FnYksAGl">تشغيل الشيفرة</a>، و<a href="http://codepad.org/FnYksAGl#output">عرض المخرجات</a>، حيث تدعم العديد من اللغات التي يمكن تشغيلها وعرض مخرجاتها وليس فقط اللغات المختصة بالويب. وبالإمكان أيضاً  إضافة تعليقات من مطورين آخرين، أو إضافة تعديل على هذه الشيفرة.</p>
<h3><a href="http://pastie.org/">Pastie</a></h3>
<p class="post_image"><a href="http://pastie.org/"><img class="alignnone size-full wp-image-1971" title="pastie" src="http://www.almashroo.com/uploads/2009/11/pastie.png" alt="pastie" width="550" height="362" /></a></p>
<p>خدمة Pastie تمكن من تلوين وحفظ الشيفرات، ولكن لعل أهم ما يميزها هو أتاحة اختيار الألوان بطرق مختلفة باستخدام المواضيع Themes لكل شكل. وأيضاً التكامل مع Ruby on Rails، لأن هذه الأداة مبنية عليها. وتتيح إمكانية لصق الشيفرة ضمنياً بين المحتوى على الموقع أو المدونة embedded code. لذا إن كان لديك مدونة مجانية على سبيل المثال، وأردت إدراج الشيفرات الملونة لشرح الأمثلة، فهذه الخدمة ستسهل عليك الكثير.</p>
<h3><a href="http://gist.github.com/">gist.github</a></h3>
<p class="post_image"><a href="http://gist.github.com/"><img class="alignnone size-full wp-image-1966" title="gist-github" src="http://www.almashroo.com/uploads/2009/11/gist-github.png" alt="gist-github" width="550" height="362" /></a></p>
<p>أداة gist من مطوري مستودعات <a href="http://github.com/">github</a> <a href="http://ar.wikipedia.org/wiki/%D9%86%D8%B8%D8%A7%D9%85_%D8%AA%D8%AD%D9%83%D9%85_%D8%A8%D8%A7%D9%84%D8%A5%D8%B5%D8%AF%D8%A7%D8%B1%D8%A7%D8%AA">للتحكم بالمراجعات</a> revision control، وبما أنها جاءت من مطورين لهم باع طويل في إدارة الشيفرات المصدرية، فهل حزرتم أهم ميزة في هذه الأداة؟ نعم، هي فكرة المستودع لكل شيفرة. فبمجرد لصق شيفرة معينة وحفظها يتم إنشاء مستودع لها، مما يمكن المطورين من التعديل عليها في وقت لاحق، ومشاهدة الإختلافات بين المراجعات المختلفة باستخدام diff لعمل الترقيعات patches.</p>
<h3><a href="http://snipt.org/">snipt.org</a></h3>
<p class="post_image"><a href="http://snipt.org/"><img class="alignnone size-full wp-image-1973" title="snipt-org" src="http://www.almashroo.com/uploads/2009/11/snipt-org.png" alt="snipt-org" width="550" height="362" /></a></p>
<p>snipt.org توفر واجهة لبرمجة التطبيقات API، والتي بالتالي تمكن من استخدام خدمة التلوين ومشاركة الشيفرات عبر البرامج والتطبيقات الأخرى. لدى المطورين <a href="http://snipt.org/extend">تطبيق على Adobe Air</a> لرؤية عمل الواجهة، ولديهم أيضاً إضافة لوردبريس. وكخدمة Pastie السابق ذكرها، تمكنك هذه الخدمة أيضاً من تضمين الشيفرات على الموقع، واختيار الألوان التي تراها مناسبة.</p>
<h3><a href="http://slexy.org/">slexy</a></h3>
<p class="post_image"><a href="http://slexy.org/"><img class="alignnone size-full wp-image-1972" title="slexy" src="http://www.almashroo.com/uploads/2009/11/slexy.png" alt="slexy" width="550" height="362" /></a></p>
<p>تتيح خدمة slexy لصق الشيفرات عبر الويب كالخدمات الأخرى، ولكن تتميز بإمكانية استخدام شاشة الأوامر CLI باستخدام برنامج <a href="http://stgraber.org/2008/06/10/pastebinit-now-debian">Patebinlt</a>. وبالإمكان أرشفة الشيفرات، وحفظها بخصوصية، والمشاركة، والرد على الشفرات بشفرات أخرى لتوضيح الفروقات.</p>
<h3><a href="http://pastehtml.com/">PasteHTML</a></h3>
<p class="post_image"><a href="http://pastehtml.com/"><img class="alignnone size-full wp-image-1970" title="pastehtml" src="http://www.almashroo.com/uploads/2009/11/pastehtml.png" alt="pastehtml" width="550" height="362" /></a></p>
<p>ليست بالخدمة التي تتيح لصق الشيفرات بعدة لغات وتلوينها كالخدمات السابق ذكرها، ولكنها مميزة. تمكنك PasteHTML من كتابة شيفرات HTML ومن ثم حفظها وإمكانية عرضها كمستند HTML ومشاركته مع الآخرين. أحد الاستخدامات ممكن أن تكون مشاركة المطورين الآخرين بشيفرة JavaScript أو CSS لا تعمل بالشكل المطلوب، وأردت حلاً لها. فيمكنك بالتالي لصقها هناك. توفر <a href="http://pastehtml.com/help/api">واجهة لبرمجة التطبيقات</a>، وأيضاً <a href="http://pastehtml.com/help/bookmarklet">bookmarklet</a> للحفظ السهل عبر المتصفح لمستندات HTML.</p>
<h3><a href="http://mathbin.net/">MathBin.net</a></h3>
<p class="post_image"><a href="http://mathbin.net/"><img class="alignnone size-full wp-image-1968" title="mathbin-net" src="http://www.almashroo.com/uploads/2009/11/mathbin-net.png" alt="mathbin-net" width="550" height="362" /></a></p>
<p>هل أردت كتابة المعادلات الرياضية أو الفيزيائية المعقدة على الويب؟ إذاً فهذه الخدمة هي ما تحتاج. باستخدام لغة <a href="http://ar.wikipedia.org/wiki/%D9%84%D8%A7%D8%AA%D8%AE">لاتخ</a> LaTeX، تمكتك خدمة MathBin.net من الكتابة بلغة لاتخ وعرض المخرجات على شكل صور إما أن تكون ضمن النص، أو في سطر لوحدها. هذه الخدمة فعلاً مميزة، ولكني تمنيت لو كانت تدعم <a href="http://ar.wikipedia.org/wiki/%D8%B9%D8%B1%D8%A8%E2%80%8C%D8%AA%D8%AE">عرب‌تخ</a> للطباعة العربية.</p>
<h3><a href="http://paste.pocoo.org/">LodgeIt</a></h3>
<p class="post_image"><a href="http://paste.pocoo.org/"><img class="alignnone size-full wp-image-1967" title="lodgeit" src="http://www.almashroo.com/uploads/2009/11/lodgeit.png" alt="lodgeit" width="550" height="362" /></a></p>
<p>لدى خدمة LodgeIt واجهة جميلة ومرتبة. بالإضافة إلى هذا الترتيب الجميل لواجهة الاستخدام، لدى الخدمة العديد من المزايا، منها المميزات المعروفة من تلوين، ومشاركة الشيفرات، والمميزات الأخرى، كالاستعلام عن بعد باستخدام XML-RPC أو JSON لجلب كل المعلومات بالنسبة للشيفرة، والمقارنة بين المراجعات باستخدام diff.</p>
<h3><a href="http://pastebin.ca/">pastebin.ca</a></h3>
<p class="post_image"><a href="http://pastebin.ca/"><img class="alignnone size-full wp-image-1969" title="pastebin-ca" src="http://www.almashroo.com/uploads/2009/11/pastebin-ca.png" alt="pastebin-ca" width="550" height="362" /></a></p>
<p>ليست بأكثر الواجهات جذابةً، ولكنها تؤدي الغرض. حيث توفر خدمة pastebin.ca <a href="http://pastebin.ca/features.php">التكامل مع IRC عبر بوت خاص</a> للصق الشيفرات، وتوفر واجهة لبرمجة التطبيقات. وهناك <a href="http://pastebin.ca/tools.php">بعض التطبيقات</a> التي تستخدم هذه الواجهة.</p>
<h3><a href="https://bespin.mozilla.com/">Bespin</a></h3>
<p class="post_image"><a href="https://bespin.mozilla.com/"><img class="alignnone size-full wp-image-1964" title="bespin" src="http://www.almashroo.com/uploads/2009/11/bespin.png" alt="bespin" width="550" height="224" /></a></p>
<p>يطلق على هذه الخدمة الشيفرة في السحاب Code in the cloud، ومعنى السحاب هنا أي مجموعة الخوادم التي يتم تخزين الشيفرات عليها، وتقديمها لمن يطلبها. هي خدمة من <a href="http://www.mozilla.org/">موزيلا</a>، عبارة عن محرر شيفرات على الويب للمطورين باستخدام التقنيات الحديثة في HTML 5 كعنصر canvas. المثير في هذه الأداة هو إمكانية التشارك المباشر مع المطورين الآخرين، وتحرير الشيفرات وتلوينها، ومن ثم حفظ الملفات على الخوادم، كل هذا باستخدام لا شيء سوى المتصفح. ولكنها لوقت كتابة هذا المقال، للأسف لا تدعم اللغة العربية.</p>
<p><em>أي من الخدمات أعجبتكم أكثر من غيرها؟ الرجاء مشاركتنا رأيكم في التعليقات.</em></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Almashroo?a=2w0PyoyMM08:aNgQYgHRmv0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Almashroo?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Almashroo?a=2w0PyoyMM08:aNgQYgHRmv0:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Almashroo?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Almashroo?a=2w0PyoyMM08:aNgQYgHRmv0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Almashroo?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Almashroo?a=2w0PyoyMM08:aNgQYgHRmv0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Almashroo?i=2w0PyoyMM08:aNgQYgHRmv0:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Almashroo/~4/2w0PyoyMM08" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.almashroo.com/1963/%d8%a3%d9%81%d8%b6%d9%84-10-%d8%ae%d8%af%d9%85%d8%a7%d8%aa-%d9%84%d8%aa%d9%84%d9%88%d9%8a%d9%86-%d9%88%d9%85%d8%b4%d8%a7%d8%b1%d9%83%d8%a9-%d8%a7%d9%84%d8%b4%d9%8a%d9%81%d8%b1%d8%a7%d8%aa/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://www.almashroo.com/1963/%d8%a3%d9%81%d8%b6%d9%84-10-%d8%ae%d8%af%d9%85%d8%a7%d8%aa-%d9%84%d8%aa%d9%84%d9%88%d9%8a%d9%86-%d9%88%d9%85%d8%b4%d8%a7%d8%b1%d9%83%d8%a9-%d8%a7%d9%84%d8%b4%d9%8a%d9%81%d8%b1%d8%a7%d8%aa/</feedburner:origLink></item>
		<item>
		<title>مفضلتنا الدورية #2 من ‎@almashroo</title>
		<link>http://feedproxy.google.com/~r/Almashroo/~3/doOYB3IRCJc/</link>
		<comments>http://www.almashroo.com/1933/%d9%85%d9%81%d8%b6%d9%84%d8%aa%d9%86%d8%a7-%d8%a7%d9%84%d8%af%d9%88%d8%b1%d9%8a%d8%a9-2-%d9%85%d9%86-almashroo/#comments</comments>
		<pubDate>Fri, 06 Nov 2009 13:00:02 +0000</pubDate>
		<dc:creator>عبدالرحمن العتيبة</dc:creator>
				<category><![CDATA[مقالات]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[أفضل المقالات]]></category>
		<category><![CDATA[المشروع]]></category>
		<category><![CDATA[دوري]]></category>
		<category><![CDATA[مفضلة twitter]]></category>

		<guid isPermaLink="false">http://www.almashroo.com/?p=1933</guid>
		<description><![CDATA[<p class="post_image_header">
<a href="http://www.almashroo.com/1933/%d9%85%d9%81%d8%b6%d9%84%d8%aa%d9%86%d8%a7-%d8%a7%d9%84%d8%af%d9%88%d8%b1%d9%8a%d8%a9-2-%d9%85%d9%86-almashroo/" title="مفضلتنا الدورية #2 من &#x200E;@almashroo"><img src="http://www.almashroo.com/uploads/2009/10/best_of_tweets.png" alt="مفضلتنا الدورية #2 من &#x200E;@almashroo" height="140" width="550" /></a>
</p>
في هذه السلسة من المقالات الدورية، سنقوم بعرض أفضل ما نقوم بتدوينه ومشاركته على <a href="http://twitter.com/almashroo">حساب المشروع</a> على تويتر twitter.


مقالات ذات صلة:<ol><li><a href='http://www.almashroo.com/1684/%d9%85%d9%81%d8%b6%d9%84%d8%aa%d9%86%d8%a7-%d8%a7%d9%84%d8%af%d9%88%d8%b1%d9%8a%d8%a9-1-%d9%85%d9%86-almashroo/' rel='bookmark' title='Permanent Link: مفضلتنا الدورية #1 من &#x200E;@almashroo'>مفضلتنا الدورية #1 من &#x200E;@almashroo</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p class="post_image_header">
<a href="http://www.almashroo.com/1933/%d9%85%d9%81%d8%b6%d9%84%d8%aa%d9%86%d8%a7-%d8%a7%d9%84%d8%af%d9%88%d8%b1%d9%8a%d8%a9-2-%d9%85%d9%86-almashroo/" title="مفضلتنا الدورية #2 من &#x200E;@almashroo"><img src="http://www.almashroo.com/uploads/2009/10/best_of_tweets.png" alt="مفضلتنا الدورية #2 من &#x200E;@almashroo" height="140" width="550" /></a>
</p>
<p>في هذه السلسة من المقالات الدورية، سنقوم بعرض أفضل ما نقوم بتدوينه ومشاركته على <a href="http://twitter.com/almashroo">حساب المشروع</a> على تويتر twitter.</p>
<p>كما يعلم الجميع، فإن تويتر هي إداة للتدوين المصغر، ولا نستخدم الحساب فقط لعرض جديدنا وأخبارنا فحسب، وإنما نقوم أيضاً بتزويد ومشاركة من يتابعونا عليه ببعض الروابط والموارد التي نراها مثيرة وتهم مطوري ومصممي الويب بشكل يومي.</p>
<p>أفضل طريقة للحفاظ على متابعة هذه الموارد، هي متابعتنا عن طريق حسابنا على تويتر، وإن كان قد فاتكم شيء، ففي هذا المقال سنقوم بعرض أفضل ما عرضناه في الفترة القليلة السابقة.</p>
<p>لكي لا يفوتكم شيء مما نعرضه في المستقبل، ببساطة تابعونا على <a href="http://twitter.com/almashroo"><span dir="ltr" lang="en" xml:lang="en">@almashroo</span></a>.<br />
<span id="more-1933"></span></p>
<h3><a href="http://designrfix.com/icons/50-high-quality-icon-design-tutorials-part-1"> أكثر من 50 درس تصميم أيقونات عالية الجودة</a></h3>
<p class="post_image"><a href="http://designrfix.com/icons/50-high-quality-icon-design-tutorials-part-1"><img class="alignnone size-full wp-image-1945" title="أكثر من 50 درس تصميم أيقونات عالية الجودة" src="http://www.almashroo.com/uploads/2009/11/50-high-quality-icon-design-tutorials-part-1.png" alt="أكثر من 50 درس تصميم أيقونات عالية الجودة" width="550" height="355" /></a></p>
<h3><a href="http://designbeep.com/2009/10/22/meaningful-and-smart-logo-designs/">45 تصميم لشعارات ذكية وذات معنى</a></h3>
<p class="post_image"><a href="http://designbeep.com/2009/10/22/meaningful-and-smart-logo-designs/"><img class="alignnone size-full wp-image-1944" title="45 تصميم لشعارات ذكية وذات معنى" src="http://www.almashroo.com/uploads/2009/11/45-meaningful-and-smart-logo-designs.png" alt="45 تصميم لشعارات ذكية وذات معنى" width="550" height="355" /></a></p>
<h3><a href="http://tutsvalley.com/tutorials/10-amazing-jquery-plugins-to-improve-your-forms/">10 إضافات رائعة لمكتبة JQuery لتحسين النماذج‬</a></h3>
<p class="post_image"><a href="http://tutsvalley.com/tutorials/10-amazing-jquery-plugins-to-improve-your-forms/"><img class="alignnone size-full wp-image-1935" title="10 إضافات رائعة لمكتبة JQuery لتحسين النماذج‬" src="http://www.almashroo.com/uploads/2009/11/10-amazing-jquery-plugins-to-improve-your-forms.png" alt="10 إضافات رائعة لمكتبة JQuery لتحسين النماذج‬" width="550" height="355" /></a></p>
<h3><a href="http://naldzgraphics.net/inspirations/44-examples-of-nature-inspired-website-designs/">44 مثال لمواقع استوحت من الطبيعة في تصميمها</a></h3>
<p class="post_image"><a href="http://naldzgraphics.net/inspirations/44-examples-of-nature-inspired-website-designs/"><img class="alignnone size-full wp-image-1943" title="44 مثال لمواقع استوحت من الطبيعة في تصميمها‬" src="http://www.almashroo.com/uploads/2009/11/44-examples-of-nature-inspired-website-designs.png" alt="44 مثال لمواقع استوحت من الطبيعة في تصميمها‬" width="550" height="355" /></a></p>
<h3><a href="http://www.littleboxofideas.com/blog/design-resources/20-fun-illustrator-tutorials-to-create-cute-and-crazy-cartoons">20‬ درس إليستراتور ‫illustrator‬ لعمل شخصيات كرتونية مرحة</a></h3>
<p class="post_image"><a href="http://www.littleboxofideas.com/blog/design-resources/20-fun-illustrator-tutorials-to-create-cute-and-crazy-cartoons"><img class="alignnone size-full wp-image-1937" title="20‬ درس إليستراتور ‫illustrator‬ لعمل شخصيات كرتونية مرحة" src="http://www.almashroo.com/uploads/2009/11/20-fun-illustrator-tutorials-to-create-cute-and-crazy-cartoons.png" alt="20‬ درس إليستراتور ‫illustrator‬ لعمل شخصيات كرتونية مرحة" width="550" height="355" /></a></p>
<h3><a href="http://designrfix.com/freebies/70-apple-inspired-desktop-wallpapers">أكثر من 70 خلفية مستوحاة من أبل ‫Apple</a></h3>
<p class="post_image"><a href="http://designrfix.com/freebies/70-apple-inspired-desktop-wallpapers"><img class="alignnone size-full wp-image-1946" title="أكثر من 70 خلفية مستوحاة من أبل ‫Apple" src="http://www.almashroo.com/uploads/2009/11/70-apple-inspired-desktop-wallpapers.png" alt="أكثر من 70 خلفية مستوحاة من أبل ‫Apple" width="550" height="355" /></a></p>
<h3><a href="http://www.fez-soft.net/archives/187">الخطوط العربية : قواعد ، أفكار و حيل</a></h3>
<p class="post_image"><a href="http://www.fez-soft.net/archives/187"><img class="alignnone size-full wp-image-1948" title="الخطوط العربية : قواعد ، أفكار و حيل" src="http://www.almashroo.com/uploads/2009/11/arabic-fonts-rules-ideas-tricks.png" alt="الخطوط العربية : قواعد ، أفكار و حيل" width="550" height="355" /></a></p>
<h3><a href="http://www.webdesigndev.com/inspiration/30-extremely-colourful-website-designs">30 تصميم لمواقع تستخدم الألوان بدرجة مفرطة‬</a></h3>
<p class="post_image"><a href="http://www.webdesigndev.com/inspiration/30-extremely-colourful-website-designs"><img class="alignnone size-full wp-image-1941" title="30 تصميم لمواقع تستخدم الألوان بدرجة مفرطة‬" src="http://www.almashroo.com/uploads/2009/11/30-extremely-colourful-website-designs.png" alt="30 تصميم لمواقع تستخدم الألوان بدرجة مفرطة‬" width="550" height="355" /></a></p>
<h3><a href="http://qatardr.net/general/freelancer-productivity-tool/">قائمة أدواتي كمصممة حرة .. فعالية أكبر ووقت أقل</a></h3>
<p class="post_image"><a href="http://qatardr.net/general/freelancer-productivity-tool/"><img class="alignnone size-full wp-image-1952" title="قائمة أدواتي كمصممة حرة .. فعالية أكبر ووقت أقل" src="http://www.almashroo.com/uploads/2009/11/freelancer-productivity-tool.png" alt="قائمة أدواتي كمصممة حرة .. فعالية أكبر ووقت أقل" width="550" height="355" /></a></p>
<h3><a href="http://inspiredology.com/30-black-and-white-websites/">‫30 موقع بالأبيض والأسود للإستلهام</a></h3>
<p class="post_image">‬<a href="http://inspiredology.com/30-black-and-white-websites/"><img class="alignnone size-full wp-image-1939" title="30 موقع بالأبيض والأسود للإستلهام" src="http://www.almashroo.com/uploads/2009/11/30-black-and-white-websites.png" alt="30 موقع بالأبيض والأسود للإستلهام" width="550" height="355" /></a></p>
<h3><a href="http://www.tutorial9.net/photoshop/create-a-clean-and-colorful-web-layout-in-photoshop/">تخطيط وتصميم موقع أنيق ومليء بالألوان باستخدام Photoshop‬</a></h3>
<p class="post_image"><a href="http://www.tutorial9.net/photoshop/create-a-clean-and-colorful-web-layout-in-photoshop/"><img class="alignnone size-full wp-image-1950" title="تخطيط وتصميم موقع أنيق ومليء بالألوان باستخدام Photoshop‬" src="http://www.almashroo.com/uploads/2009/11/create-a-clean-and-colorful-web-layout-in-photoshop.png" alt="تخطيط وتصميم موقع أنيق ومليء بالألوان باستخدام Photoshop‬" width="550" height="355" /></a></p>
<h3><a href="http://www.bestdesigntuts.com/25-free-online-tools-for-web-designers-developers-freelancers-and-individuals/">25 أداة مجانية لمصممي ومطوري الويب</a></h3>
<p class="post_image"><a href="http://www.bestdesigntuts.com/25-free-online-tools-for-web-designers-developers-freelancers-and-individuals/"><img class="alignnone size-full wp-image-1938" title="25 أداة مجانية لمصممي ومطوري الويب" src="http://www.almashroo.com/uploads/2009/11/25-free-online-tools-for-web-designers-developers-freelancers-and-individuals.png" alt="25 أداة مجانية لمصممي ومطوري الويب" width="550" height="355" /></a></p>
<h3><a href="http://www.onextrapixel.com/2009/10/15/contact-us-page-best-practices-with-22-fabulous-showcases/">أفضل ممارسات صفحة &#8220;اتصل بنا&#8221; مع دراسة 22 حالة‬</a></h3>
<p class="post_image"><a href="http://www.onextrapixel.com/2009/10/15/contact-us-page-best-practices-with-22-fabulous-showcases/"><img class="alignnone size-full wp-image-1949" title="أفضل ممارسات صفحة &quot;اتصل بنا&quot; مع دراسة 22 حالة‬" src="http://www.almashroo.com/uploads/2009/11/contact-us-page-best-practices-with-22-fabulous-showcases.png" alt="أفضل ممارسات صفحة &quot;اتصل بنا&quot; مع دراسة 22 حالة‬" width="550" height="355" /></a></p>
<h3><a href="http://w3mag.com/blogger/personal-blog-templates/">40 قالب جميل لمستخدمي مدونات Blogger</a></h3>
<p class="post_image"><a href="http://w3mag.com/blogger/personal-blog-templates/"><img class="alignnone size-full wp-image-1955" title="40 قالب جميل لمستخدمي مدونات Blogger" src="http://www.almashroo.com/uploads/2009/11/40-amazing-blogger-templates.png" alt="40 قالب جميل لمستخدمي مدونات Blogger" width="550" height="355" /></a></p>
<h3><a href="http://sixrevisions.com/tutorials/photoshop-tutorials/how-to-create-remarkable-3d-text-in-photoshop/">كيف تخلق نصاً ثلاثي الأبعاد يلفت الأنظار باستخدام Photoshop‬</a></h3>
<p class="post_image"><a href="http://sixrevisions.com/tutorials/photoshop-tutorials/how-to-create-remarkable-3d-text-in-photoshop/"><img class="alignnone size-full wp-image-1953" title="كيف تخلق نصاً ثلاثي الأبعاد يلفت الأنظار باستخدام Photoshop‬" src="http://www.almashroo.com/uploads/2009/11/how-to-create-remarkable-3d-text-in-photoshop.png" alt="كيف تخلق نصاً ثلاثي الأبعاد يلفت الأنظار باستخدام Photoshop‬" width="550" height="355" /></a></p>
<h3><a href="http://www.creativecloseup.com/30-great-free-paper-backgrounds-and-textures">30 خلفية وخامة ورقية مجانية</a></h3>
<p class="post_image"><a href="http://www.creativecloseup.com/30-great-free-paper-backgrounds-and-textures"><img class="alignnone size-full wp-image-1942" title="30 خلفية وخامة ورقية مجانية" src="http://www.almashroo.com/uploads/2009/11/30-great-free-paper-backgrounds-and-textures.png" alt="30 خلفية وخامة ورقية مجانية" width="550" height="355" /></a></p>
<h3><a href="http://alwank.com/2009/10/5-ways-to-improve-css-using-jquery/">طرق لتحسين أداء CSS بواسطة jQuery – جزء 1</a></h3>
<p class="post_image"><a href="http://alwank.com/2009/10/5-ways-to-improve-css-using-jquery/"><img class="alignnone size-full wp-image-1934" title="طرق لتحسين أداء CSS بواسطة jQuery – جزء 1" src="http://www.almashroo.com/uploads/2009/11/5-ways-to-improve-css-using-jquery.png" alt="طرق لتحسين أداء CSS بواسطة jQuery – جزء 1" width="550" height="355" /></a></p>
<h3><a href="http://webexpedition18.com/articles/design-slick-print-ready-business-card-using-photoshop/">تصميم بطاقة عمل جاهزة للطبع باستخدام الفوتوشوب</a></h3>
<p class="post_image"><a href="http://webexpedition18.com/articles/design-slick-print-ready-business-card-using-photoshop/"><img class="alignnone size-full wp-image-1951" title="تصميم بطاقة عمل جاهزة للطبع باستخدام الفوتوشوب" src="http://www.almashroo.com/uploads/2009/11/design-slick-print-ready-business-card-using-photoshop.png" alt="تصميم بطاقة عمل جاهزة للطبع باستخدام الفوتوشوب" width="550" height="355" /></a></p>
<h3><a href="http://www.webdesignerdepot.com/2009/10/200-free-exclusive-rss-icons-supra/">أكثر من 200 أيقونة مجانية لخدمة RSS‬</a></h3>
<p class="post_image"><a href="http://www.webdesignerdepot.com/2009/10/200-free-exclusive-rss-icons-supra/"><img class="alignnone size-full wp-image-1947" title="أكثر من 200 أيقونة مجانية لخدمة RSS‬" src="http://www.almashroo.com/uploads/2009/11/200-free-exclusive-rss-icons-supra.png" alt="أكثر من 200 أيقونة مجانية لخدمة RSS‬" width="550" height="355" /></a></p>
<h3><a href="http://www.smashingapps.com/2009/10/27/11-most-popular-open-source-softwares-of-all-time.html">‫11 من أكثر البرامج المفتوحة المصدر شعبية في كل الأوقات</a></h3>
<p class="post_image"><a href="http://www.smashingapps.com/2009/10/27/11-most-popular-open-source-softwares-of-all-time.html"><img class="alignnone size-full wp-image-1936" title="11 من أكثر البرامج المفتوحة المصدر شعبية في كل الأوقات" src="http://www.almashroo.com/uploads/2009/11/11-most-popular-open-source-softwares-of-all-time.png" alt="11 من أكثر البرامج المفتوحة المصدر شعبية في كل الأوقات" width="550" height="355" /></a></p>
<h3><a href="http://www.mubde3.net/blog/archives/more-details-about-html-forms">تفاصيل أكثر عن نماذج HTML</a></h3>
<p class="post_image"><a href="http://www.mubde3.net/blog/archives/more-details-about-html-forms"><img class="alignnone size-full wp-image-1954" title="تفاصيل أكثر عن نماذج HTML" src="http://www.almashroo.com/uploads/2009/11/more-details-about-html-forms.png" alt="تفاصيل أكثر عن نماذج HTML" width="550" height="355" /></a></p>
<h3><a href="http://webdesignfan.com/30-creative-adidas-ads/">‫30 إعلان مبدع لشركة أديداس</a></h3>
<p class="post_image"><a href="http://webdesignfan.com/30-creative-adidas-ads/"><img class="alignnone size-full wp-image-1940" title="30 إعلان مبدع لشركة أديداس" src="http://www.almashroo.com/uploads/2009/11/30-creative-adidas-ads.png" alt="30 إعلان مبدع لشركة أديداس" width="550" height="355" /></a></p>


<p>مقالات ذات صلة:<ol><li><a href='http://www.almashroo.com/1684/%d9%85%d9%81%d8%b6%d9%84%d8%aa%d9%86%d8%a7-%d8%a7%d9%84%d8%af%d9%88%d8%b1%d9%8a%d8%a9-1-%d9%85%d9%86-almashroo/' rel='bookmark' title='Permanent Link: مفضلتنا الدورية #1 من &#x200E;@almashroo'>مفضلتنا الدورية #1 من &#x200E;@almashroo</a></li></ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Almashroo?a=doOYB3IRCJc:90bJtcm-OBQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Almashroo?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Almashroo?a=doOYB3IRCJc:90bJtcm-OBQ:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Almashroo?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Almashroo?a=doOYB3IRCJc:90bJtcm-OBQ:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Almashroo?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Almashroo?a=doOYB3IRCJc:90bJtcm-OBQ:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Almashroo?i=doOYB3IRCJc:90bJtcm-OBQ:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Almashroo/~4/doOYB3IRCJc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.almashroo.com/1933/%d9%85%d9%81%d8%b6%d9%84%d8%aa%d9%86%d8%a7-%d8%a7%d9%84%d8%af%d9%88%d8%b1%d9%8a%d8%a9-2-%d9%85%d9%86-almashroo/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://www.almashroo.com/1933/%d9%85%d9%81%d8%b6%d9%84%d8%aa%d9%86%d8%a7-%d8%a7%d9%84%d8%af%d9%88%d8%b1%d9%8a%d8%a9-2-%d9%85%d9%86-almashroo/</feedburner:origLink></item>
		<item>
		<title>التحميل الكسول في جافاسكربت</title>
		<link>http://feedproxy.google.com/~r/Almashroo/~3/CRwMetXH1N8/</link>
		<comments>http://www.almashroo.com/1902/%d8%a7%d9%84%d8%aa%d8%ad%d9%85%d9%8a%d9%84-%d8%a7%d9%84%d9%83%d8%b3%d9%88%d9%84-%d9%81%d9%8a-%d8%ac%d8%a7%d9%81%d8%a7%d8%b3%d9%83%d8%b1%d8%a8%d8%aa/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 07:00:34 +0000</pubDate>
		<dc:creator>عبدالرحمن العتيبة</dc:creator>
				<category><![CDATA[دروس]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[LazyLoad]]></category>
		<category><![CDATA[التحميل الكسول]]></category>
		<category><![CDATA[مقارنة]]></category>

		<guid isPermaLink="false">http://www.almashroo.com/?p=1902</guid>
		<description><![CDATA[<p class="post_image_header">
<a href="http://www.almashroo.com/1902/%d8%a7%d9%84%d8%aa%d8%ad%d9%85%d9%8a%d9%84-%d8%a7%d9%84%d9%83%d8%b3%d9%88%d9%84-%d9%81%d9%8a-%d8%ac%d8%a7%d9%81%d8%a7%d8%b3%d9%83%d8%b1%d8%a8%d8%aa/" title="التحميل الكسول في جافاسكربت"><img src="http://www.almashroo.com/uploads/2009/11/javascript-lazy-load-post-header.png" alt="التحميل الكسول في جافاسكربت" height="140" width="550" /></a>
</p>
تعبير التحميل الكسول أو Lazy Loading في العادة يستعمل في لغات البرمجة، ويطلق عند تأخير تحميل كائن أو عنصر ما لحين حاجته. أي معناه، أننا لا نحمل أي كائنات أو عناصر حتى ولو كان يستخدمها البرنامج في وقت لاحق، إلى حين حاجتنا أو استدعائنا لها في ذلك الوقت، وعندها يتم تسخير كل الموارد المطلوبة للتحميل والاستدعاء.


مقالات ذات صلة:<ol><li><a href='http://www.almashroo.com/314/%d8%af%d9%84%d9%8a%d9%84%d9%83-%d8%a7%d9%84%d8%b3%d9%87%d9%84-%d9%81%d9%8a-%d8%aa%d8%b9%d9%84%d9%85-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-%d9%85%d9%83%d8%aa%d8%a8%d8%a9-jquery/' rel='bookmark' title='Permanent Link: دليلك السهل في تعلم استخدام مكتبة jQuery [ الدرس الأول]'>دليلك السهل في تعلم استخدام مكتبة jQuery [ الدرس الأول]</a></li><li><a href='http://www.almashroo.com/319/%d8%af%d9%84%d9%8a%d9%84%d9%83-%d8%a7%d9%84%d8%b3%d9%87%d9%84-%d9%81%d9%8a-%d8%aa%d8%b9%d9%84%d9%85-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-%d9%85%d9%83%d8%aa%d8%a8%d8%a9-jquery-%d8%a7%d9%84%d8%af/' rel='bookmark' title='Permanent Link: دليلك السهل في تعلم استخدام مكتبة jQuery [الدرس الأخير]: AJAX'>دليلك السهل في تعلم استخدام مكتبة jQuery [الدرس الأخير]: AJAX</a></li><li><a href='http://www.almashroo.com/315/%d8%af%d9%84%d9%8a%d9%84%d9%83-%d8%a7%d9%84%d8%b3%d9%87%d9%84-%d9%81%d9%8a-%d8%aa%d8%b9%d9%84%d9%85-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-%d9%85%d9%83%d8%aa%d8%a8%d8%a9-jquery-%d8%a7%d9%84%d8%a3/' rel='bookmark' title='Permanent Link: دليلك السهل في تعلم استخدام مكتبة jQuery  [الدرس الثاني]: الأحداث والتأثيرات'>دليلك السهل في تعلم استخدام مكتبة jQuery  [الدرس الثاني]: الأحداث والتأثيرات</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p class="post_image_header">
<a href="http://www.almashroo.com/1902/%d8%a7%d9%84%d8%aa%d8%ad%d9%85%d9%8a%d9%84-%d8%a7%d9%84%d9%83%d8%b3%d9%88%d9%84-%d9%81%d9%8a-%d8%ac%d8%a7%d9%81%d8%a7%d8%b3%d9%83%d8%b1%d8%a8%d8%aa/" title="التحميل الكسول في جافاسكربت"><img src="http://www.almashroo.com/uploads/2009/11/javascript-lazy-load-post-header.png" alt="التحميل الكسول في جافاسكربت" height="140" width="550" /></a>
</p>
<p>تعبير التحميل الكسول أو <a href="http://en.wikipedia.org/wiki/Lazy_loading">Lazy Loading</a> في العادة يستعمل في لغات البرمجة، ويطلق عند تأخير تحميل كائن أو عنصر ما لحين حاجته. أي معناه، أننا لا نحمل أي كائنات أو عناصر حتى ولو كان يستخدمها البرنامج في وقت لاحق، إلى حين حاجتنا أو استدعائنا لها في ذلك الوقت، وعندها يتم تسخير كل الموارد المطلوبة للتحميل والاستدعاء.</p>
<p>التحميل الكسول يستخدم في عدة لغات، ولكن في هذا المقال، سنرى كيف يمكننا استخدامه في لغة جافاسكربت على عدد من المكتبات المشهورة <span dir="ltr" lang="en" xml:lang="en">YUI</span> ،<span dir="ltr" lang="en" xml:lang="en">jQuery</span> ،<span dir="ltr" lang="en" xml:lang="en">MooTools</span>، وكيف يمكنه أن يفيدنا.<br />
<span id="more-1902"></span><br />
من أهم استخدامات تقنية التحميل الكسول في لغة جافاسكربت، هي تأخير استدعاء الملفات الخارجية External Scripts، أو الصور، في مستند HTML إلى وقت حاجة المستخدم لها. على سبيل المثال، في الصفحات التي تحتوي صوراً كثيرة، يمكن استخدام هذه التقنية لتأخير تحميل الصور التي تكون في الأسفل والغير مرئية حالياً من قبل المستخدم لعدم كونها في مساحة الرؤية visible area للمتصفح إلى حين نزول المستخدم إليها لرؤيتها.</p>
<h3>لماذا التحميل الكسول في جافاسكربت؟</h3>
<p>هناك 3 أسباب حقيقة تفيد عند استخدام تقنية التحميل الكسول:</p>
<ol>
<li>تحسين سرعة تحميل الصفحة</li>
<li>تخفيف حمل الصفحة</li>
<li>تقليل استهلاك معدل نقل البيانات Bandwidth</li>
</ol>
<p>عند طلب أي ملف سواء كان نصاً أو صورة، فهذا يعني أنه يتم عمل اتصال جديد مع الخادم، وعند الاتصال مع الخادم فإنه يتم استهلاك موارد للإتصال ومعدل نقل البيانات، مما يزيد من حجم ووقت تحميل الصفحة.</p>
<h3>بعض الأمثلة التطبيقية لتحميل الصور تحميلاً كسولاً</h3>
<p>في هذه الأمثلة التطبيقية، سأقوم بشرح طريقة تطبيق التحميل الكسول على الصور في مستندات HTML. وكما ذكرت سابقاً، التقنية ليست محدودة بالصور، ولكن لتوضيح المفهوم بطريقة جيدة اخترت أن أبين طريقة عملها بالصور.</p>
<h3>المثال بدون استخدام التقنية</h3>
<h4 class="resourcelink"><a href="http://www.almashroo.com/examples/abdulrahman/091103-javascript-lazylaod/none/index.html">عرض</a></h4>
<h4 class="resourcelink"><a href="http://www.almashroo.com/examples/abdulrahman/091103-javascript-lazylaod/none/none.zip">تحميل</a></h4>
<p class="post_image"><a href="http://www.almashroo.com/examples/abdulrahman/091103-javascript-lazylaod/none/index.html"><img class="alignnone size-full wp-image-1910" title="normal-load" src="http://www.almashroo.com/uploads/2009/11/normal-load.png" alt="normal-load" width="550" height="392" /></a></p>
<p>هذا مثال يتم عرض عدد من الصور المأخوذة من فليكر بترخيص Creative Commons بدون استخدام أي تقنية للتحميل الكسول. وسيتم استخدام نفس المثال لاحقاً ولكن باستخدام التحميل الكسول لمعرفة الفرق بينهم في السرعة وحمل الصفحة.</p>
<h3>مثال باستخدام مكتبة YUI</h3>
<h4 class="resourcelink"><a href="http://www.almashroo.com/examples/abdulrahman/091103-javascript-lazylaod/yui/index.html">عرض</a></h4>
<h4 class="resourcelink"><a href="http://www.almashroo.com/examples/abdulrahman/091103-javascript-lazylaod/yui/yui.zip">تحميل</a></h4>
<p class="post_image"><a href="http://www.almashroo.com/examples/abdulrahman/091103-javascript-lazylaod/yui/index.html"><img class="alignnone size-full wp-image-1911" title="yui-3-imageloader" src="http://www.almashroo.com/uploads/2009/11/yui-3-imageloader.png" alt="yui-3-imageloader" width="550" height="392" /></a></p>
<p>تستخدم مكتبة ياهوو <a href="http://developer.yahoo.com/yui/3/">YUI 3</a> التحميل المتأخر للصور عن طريق أداة <a href="http://developer.yahoo.com/yui/3/imageloader/">ImageLoader</a>. وسنستخدم مثال تأخير تحميل الصور <a href="http://developer.yahoo.com/yui/3/examples/imageloader/imageloader-fold.html">تحت الطيّة Below the fold</a>.</p>
<p><strong>إدراج المكتبة الأساسية</strong></p>
<p>يجب علينا في البداية إدراج المكتبة الأساسية YUI، وعن طريقها يتم تحميل أداة ImageLoader، وسوف نقوم بإدراجها مباشرة من خوادم شركة ياهوو.</p>
<pre class="brush: xml;">
&lt;script src=&quot;http://yui.yahooapis.com/3.0.0/build/yui/yui-min.js&quot;&gt;&lt;/script&gt;
</pre>
<p><strong>تسجيل الصور</strong></p>
<pre class="brush: jscript;">
var foldGroup = new Y.ImgLoadGroup({ name: 'fold group', foldDistance: 25 });
foldGroup.registerImage({ domId: 'img1', srcUrl: 'http://developer.yahoo.com/yui/docs/assets/examples/exampleimages/small/museum.jpg' });
foldGroup.registerImage({ domId: 'img2', srcUrl: 'http://developer.yahoo.com/yui/docs/assets/examples/exampleimages/small/uluru.jpg' });
foldGroup.registerImage({ domId: 'img3', srcUrl: 'http://developer.yahoo.com/yui/docs/assets/examples/exampleimages/small/katatjuta.jpg' });
foldGroup.registerImage({ domId: 'img4', srcUrl: 'http://developer.yahoo.com/yui/docs/assets/examples/exampleimages/small/morraine.jpg' });
foldGroup.registerImage({ domId: 'img5', srcUrl: 'http://developer.yahoo.com/yui/docs/assets/examples/exampleimages/small/japan.jpg' });
</pre>
<p>نقوم بتسجيل الصور في مجموعة باسم fold group، ونقوم بتسجيل كل صورة على حسب المعرف domId في HTML ومصدر الصورة srcUrl. أما بالنسبة لشفرة HTML فستكون كالتالي:</p>
<pre class="brush: xml;">
&lt;img src=&quot;&quot; id=&quot;img1&quot; width=&quot;500&quot; height=&quot;333&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;&quot; id=&quot;img2&quot; width=&quot;500&quot; height=&quot;333&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;&quot; id=&quot;img3&quot; width=&quot;500&quot; height=&quot;333&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;&quot; id=&quot;img4&quot; width=&quot;500&quot; height=&quot;333&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;&quot; id=&quot;img5&quot; width=&quot;500&quot; height=&quot;333&quot; alt=&quot;&quot; /&gt;
</pre>
<p>هناك <a href="http://developer.yahoo.com/yui/3/api/module_imageloader.html">العديد من الخيارات</a> التي يمكنكم التحكم بها، على سبيل المثال، متغير foldDistance يهتم بمقدار المسافة قبل الطيّة لبدء تحميل الصور، وقد حددناه بمقدار 25 بيكسل.</p>
<p>لدى هذه المكتبة في نظري قصور من ناحية قابلية الاستخدام، فهي تقوم بتسجيل وتحميل الصور باستخدام الجافاسكربت، ولكن ماذا لو كان المستخدم لديه الجافاسكربت معطلة؟</p>
<p>الجواب، لن يتم تحميلها! وهذا في الحقيقة قد يسبب بعض المشاكل، وسنرى كيف أن بعض المكتبات الأخرى قد تفوقت في هذا الجانب.</p>
<h3>مثال باستخدام مكتبة jQuery</h3>
<h4 class="resourcelink"><a href="http://www.almashroo.com/examples/abdulrahman/091103-javascript-lazylaod/jquery/index.html">عرض</a></h4>
<h4 class="resourcelink"><a href="http://www.almashroo.com/examples/abdulrahman/091103-javascript-lazylaod/jquery/jquery.zip">تحميل</a></h4>
<p class="post_image"><a href="http://www.almashroo.com/examples/abdulrahman/091103-javascript-lazylaod/jquery/index.html"><img class="alignnone size-full wp-image-1908" title="jquery-lazy-load" src="http://www.almashroo.com/uploads/2009/11/jquery-lazy-load.png" alt="jquery-lazy-load" width="550" height="392" /></a></p>
<p>استوحت من مكتبة ياهوو YUI للتحميل المتأخر، إضافة <a href="http://www.appelsiini.net/projects/lazyload">Lazy Load</a> لمكتبة <a href="http://jquery.com/">jQuery</a> تقوم بعمل رائع للتحميل الكسول للصور، حيث أن طريقة استخدامها سهلة وبسيطة.</p>
<p><strong>إدراج المكتبة الأساسية</strong></p>
<p>سنقوم بإدراج المكتبة الأساسية jQuery مباشرة من خوادم شركة قوقل، وبعدها نقوم بإدراج إضافة Lazy Load.</p>
<pre class="brush: xml;">
&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;jquery.lazyload.js&quot;&gt;&lt;/script&gt;
</pre>
<p>بعد هذا نقوم بأخذ كل الصور الموجودة في مستند HTML، وتسجيلها في كائن <span dir="ltr" lang="en" xml:lang="en">lazyload()</span>.</p>
<pre class="brush: jscript;">
$(function() {
	$(&quot;img&quot;).lazyload();
});
</pre>
<p>الآن أصبحت كل الصور الغير مرئية (تحت الطيّة) في مستند HTML ستُحمّل لاحقاً عند نزول المستخدم إليها. وعند تعطيل الجافاسكربت، فلا يهم! لأن الصور ستحمل بالطريقة العادية.</p>
<p>لدى الإضافة العديد من الخيارات، فمثلاً يمكننا إضافة بعض التأثيرات قبل ظهور الصور كتأثير التلاشي FadeIn.</p>
<pre class="brush: jscript;">
$(function() {
	$(&quot;img&quot;).lazyload({
		placeholder : &quot;grey.gif&quot;,
		effect : &quot;fadeIn&quot;
	});
});
</pre>
<h3>مثال باستخدام مكتبة MooTools</h3>
<h4 class="resourcelink"><a href="http://www.almashroo.com/examples/abdulrahman/091103-javascript-lazylaod/mootools/index.html">عرض</a></h4>
<h4 class="resourcelink"><a href="http://www.almashroo.com/examples/abdulrahman/091103-javascript-lazylaod/mootools/mootools.zip">تحميل</a></h4>
<p class="post_image"><a href="http://www.almashroo.com/examples/abdulrahman/091103-javascript-lazylaod/mootools/index.html"><img class="alignnone size-full wp-image-1909" title="motools-lazy-load" src="http://www.almashroo.com/uploads/2009/11/motools-lazy-load.png" alt="motools-lazy-load" width="550" height="392" /></a></p>
<p>لدى مكتبة <a href="http://mootools.net/">MooTools</a> للجافاسكربت أيضاً إضافة <a href=" http://davidwalsh.name/lazyload">Lazy Load</a> من تطوير David Walsh أحد مطوري لب MooTools.</p>
<p><strong>إدراج المكتبة الأساسية</strong></p>
<p>نقوم بإدراج المكتبة الأساسية MooTools أيضاً من خوادم شركة قوقل، وبعدها ندرج ملف إضافة Lazy Load السابق ذكرها.</p>
<pre class="brush: xml;">
&lt;script src=&quot;http://ajax.googleapis.com/ajax/libs/mootools/1.2.3/mootools-yui-compressed.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;lazyload.js&quot;&gt;&lt;/script&gt;
</pre>
<p>بعدها وبكل بساطة، عندما يكون مستند HTML جاهزاً، نقوم باستدعاء كائن <span dir="ltr" lang="en" xml:lang="en">LazyLoad()</span>.</p>
<pre class="brush: jscript;">
window.addEvent('domready',function() {
	var lazyloader = new LazyLoad();
});
</pre>
<h3>مشكلة محرك ويبكيت WebKit</h3>
<p>أمثلة مكتبات jQuery وMooTools يعانون من مشكلة في المتصفحات التي تعتمد على محرك WebKit كمتصفحات سفاري، وكروم، لأنها لا تدعم تقنية التحميل الكسول للصور. وهذا في تصميمها كما أوضح <a href="http://ar.wikipedia.org/wiki/%D8%AF%D9%8A%D9%81_%D9%87%D8%A7%D9%8A%D8%AA">ديف هايت</a> في مشكلة: <a href="https://bugs.webkit.org/show_bug.cgi?id=6656"><span dir="ltr" lang="en" xml:lang="en">#6656</span></a>.</p>
<h3>مقاييس كفاءة الأداء Benchmark</h3>
<p>أردت أن أختبر ما إذا كانت هذه التقنية فعلاً تؤدي بنتيجة واضحة في تسريع حمل الصفحة أم لا، لذلك وضعت <a href="http://s2.diffuse.it/blog/show/14387-Benchmark_the_load_time_of_a_page_with_Javascript">توقيتاً لكل اختبار</a> لمكتبة جافاسكربت في مستند HTML، حيث كانت الطريقة بسيطة عبر إضافة الدالة التالية في بداية الصفحة:</p>
<pre class="brush: jscript;">
var from_time = new Date();
from_time = from_time.getTime();

function benchmark_loading_time()
{
	var to_time = new Date();
	to_time = to_time.getTime();
	var msecs = (to_time - from_time);

	alert('تم تحميل الصفحة في ' + msecs + ' جزء من الثانية');
}
</pre>
<p>ومن ثم مناداتها عند الإنتهاء من تحميل مستند HTML في عنصر body باستخدام حدث عند التحميل “onload”، كالتالي:</p>
<pre class="brush: xml;">
&lt;body onload=&quot;benchmark_loading_time()&quot;&gt;
</pre>
<h4>النتائج</h4>
<p>لأكون عادلاً استخدمت آخر النسخ (عند تاريخ كتابة المقال) لمتصفحات فايرفوكس، انترنت اكسبلورر، وأوبرا، واستثنيت المتصفحات التي تعتمد على WebKit. وجربت فتح صفحة التجارب لكل مكتبة 10 مرات، ومن ثم أخذت المتوسط. وكانت بعض النتائج على غير المتوقع.</p>
<h4 class="resourcelink"><a href="http://www.almashroo.com/examples/abdulrahman/091103-javascript-lazylaod/none/index-profile.html">الطريقة العادية</a></h4>
<h4 class="resourcelink"><a href="http://www.almashroo.com/examples/abdulrahman/091103-javascript-lazylaod/yui/index-profile.html">YUI 3</a></h4>
<h4 class="resourcelink"><a href="http://www.almashroo.com/examples/abdulrahman/091103-javascript-lazylaod/mootools/index-profile.html">MooTools</a></h4>
<h4 class="resourcelink"><a href="http://www.almashroo.com/examples/abdulrahman/091103-javascript-lazylaod/jquery/index-profile.html">jQuery</a></h4>
<h4>تحميل الصور بطريقة عادية</h4>
<p class="post_image"><img class="alignnone" title="نتائج تحميل الصور بطريقة عادية" src="http://chart.apis.google.com/chart?chs=500x300&amp;chbh=a&amp;chco=0000FF&amp;cht=bvs&amp;chd=e:kx2Mjf&amp;chxt=x,y&amp;chxr=1,0,4000&amp;chg=0,12.5&amp;&amp;chxl=0:|Firefox+3.5.4|Opera+10.01|IE+8|&amp;chtt=Browsers+page+load+test+with+no+lazy+load|Average+time+in+10+tries+%28ms%29+-+Less+is+better" alt="" width="500" height="300" /></p>
<p>نستطيع أن نرى أن متصفح أوبرا كان أبطىء المتصفحات في التحميل بالطريقة العادية بمتوسط 3468 جزء من الثانية، بينما نجد متصفح انترنت اكسبلورر يأتي أولاً بمتوسط سرعة 2271 جزء من الثانية. ومتوسط سرعة فايرفوكس كان 2353 جزء من الثانية.</p>
<h4>تحميل الصور باستخدام ImageLoader مع مكتبة YUI 3</h4>
<p class="post_image"><img class="alignnone" title="نتائج تحميل الصور باستخدام ImageLoader مع مكتبة YUI 3" src="http://chart.apis.google.com/chart?chs=500x300&amp;chbh=a&amp;chco=0000FF&amp;cht=bvs&amp;chd=e:a4zZjx&amp;chxt=x,y&amp;chxr=1,0,4000&amp;chg=0,12.5&amp;&amp;chxl=0:|Firefox+3.5.4|Opera+10.01|IE+8|&amp;chtt=Browsers+page+load+test+using+YUI+3+ImageLoader|Average+time+in+10+tries+%28ms%29+-+Less+is+better" alt="" width="500" height="300" /></p>
<p>نلاحظ هنا تحسناً قليلاً باستخدام التحميل المتأخر لياهوو، حيث جاء متصفح فايرفوكس أولاً بمتوسط 1720 جزء من الثانية، بينما انترنت اكسبلورر جاء ثانياً بمتوسط 2289 حزء من الثانية. وأخيراً أوبرا بمتوسط 3289 جزء من الثانية.</p>
<h4>تحميل الصور باستخدام Lazy Load مع مكتبة MooTools</h4>
<p class="post_image"><img class="alignnone" title="نتائج تحميل الصور باستخدام Lazy Load مع مكتبة MooTools" src="http://chart.apis.google.com/chart?chs=500x300&amp;chbh=a&amp;chco=0000FF&amp;cht=bvs&amp;chd=e:OirjPP&amp;chxt=x,y&amp;chxr=1,0,4000&amp;chg=0,12.5&amp;&amp;chxl=0:|Firefox+3.5.4|Opera+10.01|IE+8|&amp;chtt=Browsers+page+load+test+using+MooTools+lazy+load|Average+time+in+10+tries+%28ms%29+-+Less+is+better" alt="" width="500" height="300" /></p>
<p>هنا كان الفرق واضحاً، فباستخدام التحميل الكسول لمكتبة MooTools نرى فرقاً شاسعاً في وقت التحميل يصل إلى -60% في متصفح فايرفوكس، حيث نزل المتوسط إلى 930 جزءاً من الثانية، أما عن انترنت اكسبلورر وأوبرا فقد شهدا أيضا وقت أقصر في التحميل بمعدل -57% و –20% على التوالي.</p>
<h4>تحميل الصور باستخدام Lazy Load مع مكتبة jQuery</h4>
<p class="post_image"><img class="alignnone" title="نتائج تحميل الصور باستخدام Lazy Load مع مكتبة jQuery" src="http://chart.apis.google.com/chart?chs=500x300&amp;chbh=a&amp;chco=0000FF&amp;cht=bvs&amp;chd=e:of.Ho.&amp;chxt=x,y&amp;chxr=1,0,4000&amp;chg=0,12.5&amp;&amp;chxl=0:|Firefox+3.5.4|Opera+10.01|IE+8|&amp;chtt=Browsers+page+load+test+using+jQuery+lazy+load|Average+time+in+10+tries+%28ms%29+-+Less+is+better" alt="" width="500" height="300" /></p>
<p>كان التحميل الكسول لمكتبة jQuery الأبطىء في تحميل الصفحة، حيث كان هدفنا هو تقليل وقت تحميل الصفحة، فارتدت النتيجة بعكس ما كنت أتصور. زاد وقت تحميل الصفحة عن ماكانت عليه باستخدام الطريقة العادية لتحميل الصور بمقدار +14% في متصفح أوبرا، وأيضاً في انترنت اكسبلورر +13%، وفايرفوكس +9%.</p>
<h3>الخلاصة</h3>
<p>كما رأينا كيف يمكننا التقليل من استهلاك معدل نقل البيانات Bandwidth، وتخفيف حمل الصفحة وتسريعها باستخدام أدوات بسيطة لجعل الصور تُحمّل لاحقاً. ولكن هناك بعض السلبيات أيضاً، فكما ذكرت مشكلة محرك WebKit مع مكتبات jQuery وMooTools، ولكن تبقى في نظري أفضل من مشكلة تسجيل الصور باستخدام الجافاسكربت التي تستخدمها مكتبة YUI.</p>
<p>أيضاً أثبتت مكتبة MooTools تفوقها في السرعة والأداء عند استخدام تقنية التحميل الكسول على نظرائها. مع العلم أنها أكبر المكتباب من ناحية المساحة <span dir="ltr" lang="en" xml:lang="en">65 KB</span>، بينما مكتبة jQuery وYUI 3 مساحتهم <span dir="ltr" lang="en" xml:lang="en">55.9 KB</span> و<span dir="ltr" lang="en" xml:lang="en">14.9 KB</span> على التوالي. وأيضاً دهشت بنتائج متصفح أوبرا البطيئة في تحميل الصور بالطريقة الكسولة.</p>


<p>مقالات ذات صلة:<ol><li><a href='http://www.almashroo.com/314/%d8%af%d9%84%d9%8a%d9%84%d9%83-%d8%a7%d9%84%d8%b3%d9%87%d9%84-%d9%81%d9%8a-%d8%aa%d8%b9%d9%84%d9%85-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-%d9%85%d9%83%d8%aa%d8%a8%d8%a9-jquery/' rel='bookmark' title='Permanent Link: دليلك السهل في تعلم استخدام مكتبة jQuery [ الدرس الأول]'>دليلك السهل في تعلم استخدام مكتبة jQuery [ الدرس الأول]</a></li><li><a href='http://www.almashroo.com/319/%d8%af%d9%84%d9%8a%d9%84%d9%83-%d8%a7%d9%84%d8%b3%d9%87%d9%84-%d9%81%d9%8a-%d8%aa%d8%b9%d9%84%d9%85-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-%d9%85%d9%83%d8%aa%d8%a8%d8%a9-jquery-%d8%a7%d9%84%d8%af/' rel='bookmark' title='Permanent Link: دليلك السهل في تعلم استخدام مكتبة jQuery [الدرس الأخير]: AJAX'>دليلك السهل في تعلم استخدام مكتبة jQuery [الدرس الأخير]: AJAX</a></li><li><a href='http://www.almashroo.com/315/%d8%af%d9%84%d9%8a%d9%84%d9%83-%d8%a7%d9%84%d8%b3%d9%87%d9%84-%d9%81%d9%8a-%d8%aa%d8%b9%d9%84%d9%85-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-%d9%85%d9%83%d8%aa%d8%a8%d8%a9-jquery-%d8%a7%d9%84%d8%a3/' rel='bookmark' title='Permanent Link: دليلك السهل في تعلم استخدام مكتبة jQuery  [الدرس الثاني]: الأحداث والتأثيرات'>دليلك السهل في تعلم استخدام مكتبة jQuery  [الدرس الثاني]: الأحداث والتأثيرات</a></li></ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Almashroo?a=CRwMetXH1N8:ls5Wmf6k19s:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Almashroo?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Almashroo?a=CRwMetXH1N8:ls5Wmf6k19s:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Almashroo?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Almashroo?a=CRwMetXH1N8:ls5Wmf6k19s:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Almashroo?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Almashroo?a=CRwMetXH1N8:ls5Wmf6k19s:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Almashroo?i=CRwMetXH1N8:ls5Wmf6k19s:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Almashroo/~4/CRwMetXH1N8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.almashroo.com/1902/%d8%a7%d9%84%d8%aa%d8%ad%d9%85%d9%8a%d9%84-%d8%a7%d9%84%d9%83%d8%b3%d9%88%d9%84-%d9%81%d9%8a-%d8%ac%d8%a7%d9%81%d8%a7%d8%b3%d9%83%d8%b1%d8%a8%d8%aa/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://www.almashroo.com/1902/%d8%a7%d9%84%d8%aa%d8%ad%d9%85%d9%8a%d9%84-%d8%a7%d9%84%d9%83%d8%b3%d9%88%d9%84-%d9%81%d9%8a-%d8%ac%d8%a7%d9%81%d8%a7%d8%b3%d9%83%d8%b1%d8%a8%d8%aa/</feedburner:origLink></item>
		<item>
		<title>تعلم برمجة إضافات وردبريس [الجزء الأول]</title>
		<link>http://feedproxy.google.com/~r/Almashroo/~3/TcnYPBaR930/</link>
		<comments>http://www.almashroo.com/1867/%d8%aa%d8%b9%d9%84%d9%85-%d8%a8%d8%b1%d9%85%d8%ac%d8%a9-%d8%a5%d8%b6%d8%a7%d9%81%d8%a7%d8%aa-%d9%88%d8%b1%d8%af%d8%a8%d8%b1%d9%8a%d8%b3-1/#comments</comments>
		<pubDate>Sat, 31 Oct 2009 16:12:53 +0000</pubDate>
		<dc:creator>فراس اللو</dc:creator>
				<category><![CDATA[دروس]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[إضافات]]></category>
		<category><![CDATA[دوال]]></category>

		<guid isPermaLink="false">http://www.almashroo.com/?p=1867</guid>
		<description><![CDATA[<p class="post_image_header">
<a href="http://www.almashroo.com/1867/%d8%aa%d8%b9%d9%84%d9%85-%d8%a8%d8%b1%d9%85%d8%ac%d8%a9-%d8%a5%d8%b6%d8%a7%d9%81%d8%a7%d8%aa-%d9%88%d8%b1%d8%af%d8%a8%d8%b1%d9%8a%d8%b3-1/" title="تعلم برمجة إضافات وردبريس [الجزء الأول]"><img src="http://www.almashroo.com/uploads/2009/10/wordpress-creating-plugin-post-header.png" alt="تعلم برمجة إضافات وردبريس [الجزء الأول]" height="140" width="550" /></a>
</p>
في الفترة الأخيرة لاحظنا ظهور برنامج التدوين الأول وردبريس بسرعة كبيرة، وهو لم يصل لهذه الشهرة لولا الخدمات التي يُقدمها و سهولة التحكم فيه. وأنا من عُشاق هذا البرنامج على صعيد الاستخدام، و لكن لو تكلمت على الصعيد البرمجي، فالبرنامج أيضاً يتميز بسهولة التعامل معه برمجياً. لذا سنتعلّم معاً بإذن الله كيفية برمجة إضافات للوردبريس.


مقالات ذات صلة:<ol><li><a href='http://www.almashroo.com/1961/%d8%aa%d8%b9%d9%84%d9%85-%d8%a8%d8%b1%d9%85%d8%ac%d8%a9-%d8%a5%d8%b6%d8%a7%d9%81%d8%a7%d8%aa-%d9%88%d8%b1%d8%af%d8%a8%d8%b1%d9%8a%d8%b3-2/' rel='bookmark' title='Permanent Link: تعلم برمجة إضافات وردبريس [الجزء الثاني]'>تعلم برمجة إضافات وردبريس [الجزء الثاني]</a></li><li><a href='http://www.almashroo.com/1721/10-%d9%88%d8%b5%d9%81%d8%a7%d8%aa-%d8%aa%d8%ba%d9%86%d9%8a%d9%83-%d8%b9%d9%86-%d8%a5%d8%b6%d8%a7%d9%81%d8%a7%d8%aa-wordpress-%d8%a7%d9%84%d8%b4%d8%a8%d9%8a%d9%87%d8%a9/' rel='bookmark' title='Permanent Link: 10 وصفات لملف الدوال تغنيك عن مثيلاتها من إضافات WordPress'>10 وصفات لملف الدوال تغنيك عن مثيلاتها من إضافات WordPress</a></li><li><a href='http://www.almashroo.com/251/%d8%a8%d8%b1%d9%85%d8%ac%d8%a9-%d8%a7%d9%84%d9%85%d8%aa%d9%88%d8%a7%d8%ac%d8%af%d9%88%d9%86-%d8%a7%d9%84%d8%a2%d9%86/' rel='bookmark' title='Permanent Link: برمجة المتواجدون الآن خطوة خطوة'>برمجة المتواجدون الآن خطوة خطوة</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p class="post_image_header">
<a href="http://www.almashroo.com/1867/%d8%aa%d8%b9%d9%84%d9%85-%d8%a8%d8%b1%d9%85%d8%ac%d8%a9-%d8%a5%d8%b6%d8%a7%d9%81%d8%a7%d8%aa-%d9%88%d8%b1%d8%af%d8%a8%d8%b1%d9%8a%d8%b3-1/" title="تعلم برمجة إضافات وردبريس [الجزء الأول]"><img src="http://www.almashroo.com/uploads/2009/10/wordpress-creating-plugin-post-header.png" alt="تعلم برمجة إضافات وردبريس [الجزء الأول]" height="140" width="550" /></a>
</p>
<p>في الفترة الأخيرة لاحظنا ظهور برنامج التدوين الأول <a href="http://wordpress.org/">وردبريس</a> بسرعة كبيرة، وهو لم يصل لهذه الشهرة لولا الخدمات التي يُقدمها و سهولة التحكم فيه. وأنا من عُشاق هذا البرنامج على صعيد الاستخدام، ولكن لو تكلمت على الصعيد البرمجي، فالبرنامج أيضاً يتميز بسهولة التعامل معه برمجياً. لذا سنتعلّم معاً بإذن الله كيفية برمجة إضافات للوردبريس.</p>
<p>ستلاحظون وجود كلمة الجزء في عنوان الدرس، نعم قُمت بتقسيم الدرس إلى قسمين مبدئياً قد يصلوا إلى ثلاثة و لكن هذا لا يعني أنك لن تتعلم برمجة إضافة كاملة في هذا الدرس، ما يختلف من درس لدرس هو درجة إحترافية الإضافة و ستزداد تعقيداً في كل مرة.</p>
<p>قبل البدء بكيفية البرمجة، أنصحكم باستخدام برنامج <a href="http://notepad-plus.sourceforge.net/"><span dir="ltr" lang="en" xml:lang="en">Notepad++</span></a> من أجل التخلص من مشاكل التراميز كما أنه يُسّهل عملية البرمجة من خلال تلوين الشفرات.</p>
<p><span id="more-1867"></span></p>
<p class="post_image"><img class="alignnone size-full wp-image-1892" title="plugin-output" src="http://www.almashroo.com/uploads/2009/10/plugin-output.png" alt="plugin-output" width="550" height="175" /></p>
<h3>ما ستقوم بعمله هذه الإضافة</h3>
<p>سنتعلم في هذا الدرس برمجة إضافة تقوم بعرض كلمة مُحددة تقومون بكتابتها، ويعرضها لكم في أي مكان ترغبونه. يمكنكم تحميل النسخة النهائية من الإضافة وتجربتها.</p>
<h4 class="resourcelink"><a href="http://www.almashroo.com/examples/feras/091031-wp-plugin-1/almashroo.zip">تحميل</a></h4>
<h3>إنشاء ملف الإضافة</h3>
<p>طبعاً بعد تنصيب الوردبريس لديك، ندخل إلى مُجلد wp-content ومن ثم مُجلد plugins. نقوم الآن بإنشاء مُجلد باسم الإضافة و ليكن مثلاً almashroo و داخل هذا المُجلد نُنشىء ملف php باسم almashroo.php مثلاً و نفتح هذا الملف، مُلاحظة صغيرة بعد فتح الملف، إذا كُنتم تستخدمون برنامج <span dir="ltr" lang="en" xml:lang="en">Notepad++</span>، من قائمة Format نختار Encoding in UTF-8 without BOM من أجل تجنب <a href="http://www.almashroo.com/265/byte-order-mark-bom/">مشاكل الترميز باللغة العربية</a>. الآن سنبدأ بأول شفرة في الإضافة‪.‬</p>
<pre class="brush: php;">
&lt;?php
/*
Plugin Name: Name Of The Plugin // هنا نكتب اسم الإضافة و هذا السطر ضروري
Plugin URI: http://Plugin URI // هنا نكتب رابط موقع الإضافة إن وجد
Description:description of the Plugin. // هنا نكتب وصف لكي يظهر في صفحة الإضافات
Version: The Plugin's Version Number،  e.g.: 1.0 // هنا نكتب رقم الإصدار
Author: Name Of The Plugin Author // هنا نكتب اسم مُبرمج الإضافة
Author URI: http://URI_Of_The_Plugin_Author //هُنا نكتب موقع مُبرمج الإضافة
*/
?&gt;
</pre>
<p>كما تُلاحظون هذه الشفرة هي عبارة عن تعليق فقط لأنه موجود ضمن محارف التعليق التالية:</p>
<pre class="brush: php; highlight: [1,3];">
/*

*/
</pre>
<p>السطر الأول فقط من الضروري أن يتواجد و البقية غير ضروري تواجدهم، ولكن يُفضّل أن يحتوي على الأقل على اسم الإضافة والوصف، وكذلك رقم الإصدار وموقع الإضافة، هذه الأسطر تتواجد في كل إضافة، جرب بنفسك افتح أي إضافة موجودة عندك ستجد هذه الأسطر في بدايتها وإن أحببتم قوموا بلصق الأسطر التالية لكي تكون النتيجة واحدة عند الجميع.</p>
<pre class="brush: php;">
&lt;?PHP
/*
Plugin Name:  المشروع
Plugin URI: http://www.almashroo.com
Description: إضافة تجريبية للورد بريس
Version: 1.0
Author: المشروع
Author URI: http://www.almashroo.com
*/
?&gt;
</pre>
<p>الآن لو قُمنا بحفظ الملف فقط بوجود هذه السطور و ذهبنا إلى إدارة الإضافات في لوحة تحكم البرنامج سنجد أن الإضافة موجودة! إذا كما تُلاحظون أن هذه الأسطر ضرورية جداً من اجل تعريف البرنامج بوجود الإضافة و كذلك وصف عنها.</p>
<p class="post_image"><img class="alignnone size-full wp-image-1891" title="plugin-information" src="http://www.almashroo.com/uploads/2009/10/plugin-information.png" alt="plugin-information" width="550" height="298" /></p>
<h3>تعريف دالة طباعة النص وربطها بالأحداث</h3>
<p>الآن نأتي للمرحلة الأهم و هي كتابة الشفرة التي تعرض لنا أي جملة نُريدها، و لكن قبل ذلك أُريد أن أُخبركم، أن الإضافة في الوردبريس هي عبارة عن دوال functions. فمثلاً في حالتنا هُنا، إذا أردنا طباعة جملة فقط مايلزمنا هو دالة بسيطة! ولتكن كالتالي:</p>
<pre class="brush: php;">
function print_stat()
{
	return &quot;هذه أول إضافة لي في الوردبريس&quot;;
}
</pre>
<p>الآن بعدما قُمنا بكتابة الدالة، يجب علينا أن نقوم بتعريفها داخل النظام، حتى إذا مرّ عليها مُعالج البرنامج لايحسبها غير موجودة ويظهر لنا خطأ. وتعريفها بسيط جداً فقط بإضافة هذا السطر:</p>
<pre class="brush: php;">
add_action('wp_head', print_stat);
</pre>
<p>كما تُلاحظون استخدمنا دالة add_action وهي دالة جاهزة من دوال الوردبريس، نقوم من خلالها من إضافة حدث إلى النظام. كما تُلاحظون هُناك مُدخلين في هذه الدالة، الأول wp_head وهو مكان الحدث، هُناك مجموعة من الأحداث يقوم بها المعالج أثناء تشغيل برنامج الوردبريس فأنت تختار في أي مرحلة تُريد أن يُعرّف النظام الدالة التي برمجتها، <a title="صفحة بالأحداث التي يقوم بها وردبريس" href="http://codex.wordpress.org/Plugin_API/Action_Reference#Actions_run_during_a_typical_request">وهذه صفحة</a> بالأحداث التي يقوم بها البرنامج.</p>
<p>الآن بعدما قُمنا بهذا التعريف انتهت الإضافة، نعم بهذه البساطة المهم الآن فهم المبدأ ومن ثم نطور الفكرة، ستصبح الشفرة الكاملة كالتالي:</p>
<pre class="brush: php;">
&lt;?PHP
/*
Plugin Name:  المشروع
Plugin URI: http://www.almashroo.com
Description: إضافة تجريبية للورد بريس
Version: 1.0
Author: المشروع
Author URI: http://www.almashroo.com
*/

function print_stat()
{
	return &quot;هذه أول إضافة لي في الورد بريس&quot;;
}
add_action('wp_head', print_stat);
?&gt;
</pre>
<h3>استدعاء دالة طباعة النص في الصفحات</h3>
<p>جميل جداً، الآن إنتهينا من كل شيء و قُمنا بتعريف الإضافة في النظام، ولكن الآن كيف سنستدعي الإضافة؟ أو كيف سنستفيد منها في الوقت الراهن؟</p>
<p>الإجابة بسيطة جداً، أول شيء نقوم به هو تفعيل الإضافة، ومن ثم كُل ماعليك القيام به هو الذهاب إلى المظهر في لوحة التحكم ومن ثم نختار المُحرر، على اليسار تظهر لنا قائمة تحتوي على أسماء القوالب، نختار منها مثلاً  index.php لتظهر الجملة في الصفحة الرئيسة، ونضع الشفرة التالية:</p>
<pre class="brush: php;">
&lt;?php echo print_stat(); ?&gt;
</pre>
<p class="post_image"><img class="alignnone size-full wp-image-1893" title="print-statement" src="http://www.almashroo.com/uploads/2009/10/print-statement.png" alt="print-statement" width="550" height="392" /></p>
<p>لا أعتقد أنه يحتاج إلى شرح! فقط إستدعينا الدالة التي قُمنا بتعريفها ضمن ملف الإضافة و قُمنا بطباعتها. الآن ظهرت لنا ضرورة السطر الأخير في ملف الإضافة وهو add_action. الآن احفظ الملف ومن ثم إذهب إلى الصفحة الرئيسية في المدونة لديك وستجد الجملة ظاهرة بإذن الله.</p>
<h3>مُلاحظة</h3>
<p>يجب أن يكون اسم الإضافة مُميز و يعبّر عن محتوى الإضافة، لأن هناك الآلاف من الإضافات، فتخيل لو كانت كل إضافة حسبما يُريد مٌبرمجها! لذا يُفضّل أن يكون اسم الإضافة مُعبراً عن وظيفتها و بالتالي اسم المجلد الذي ستضع الإضافة فيه سيحمل نفس اسم الإضافة و هذا ما سيميزه عن غيره.</p>
<p>في مثالنا اسمينا المجلد باسم المشروع وكذلك ملف PHP بداخله أيضاً بنفس الاسم. ولكن لنفرض أننا نُريد تغيير اسمه لاسم يُعبر عن وظيفة الإضافة، فمثلاً اسم print_statment هو اسم الإضافة، فنُسمي المجلد عوضاً عن almashroo باسم print_statment والملف الذي بداخل المُجلد و هو عبارة عن ملف الإضافة باسم مُختصر وليكن printstat.php.</p>
<p><em>أتمنى أن أكون قد وفقت في هذا الشرح وأي سؤال أنا في الخدمة و نلتقي إن شاء الله بالجزء الثاني.</em></p>


<p>مقالات ذات صلة:<ol><li><a href='http://www.almashroo.com/1961/%d8%aa%d8%b9%d9%84%d9%85-%d8%a8%d8%b1%d9%85%d8%ac%d8%a9-%d8%a5%d8%b6%d8%a7%d9%81%d8%a7%d8%aa-%d9%88%d8%b1%d8%af%d8%a8%d8%b1%d9%8a%d8%b3-2/' rel='bookmark' title='Permanent Link: تعلم برمجة إضافات وردبريس [الجزء الثاني]'>تعلم برمجة إضافات وردبريس [الجزء الثاني]</a></li><li><a href='http://www.almashroo.com/1721/10-%d9%88%d8%b5%d9%81%d8%a7%d8%aa-%d8%aa%d8%ba%d9%86%d9%8a%d9%83-%d8%b9%d9%86-%d8%a5%d8%b6%d8%a7%d9%81%d8%a7%d8%aa-wordpress-%d8%a7%d9%84%d8%b4%d8%a8%d9%8a%d9%87%d8%a9/' rel='bookmark' title='Permanent Link: 10 وصفات لملف الدوال تغنيك عن مثيلاتها من إضافات WordPress'>10 وصفات لملف الدوال تغنيك عن مثيلاتها من إضافات WordPress</a></li><li><a href='http://www.almashroo.com/251/%d8%a8%d8%b1%d9%85%d8%ac%d8%a9-%d8%a7%d9%84%d9%85%d8%aa%d9%88%d8%a7%d8%ac%d8%af%d9%88%d9%86-%d8%a7%d9%84%d8%a2%d9%86/' rel='bookmark' title='Permanent Link: برمجة المتواجدون الآن خطوة خطوة'>برمجة المتواجدون الآن خطوة خطوة</a></li></ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Almashroo?a=TcnYPBaR930:ulCbPpcn29w:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Almashroo?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Almashroo?a=TcnYPBaR930:ulCbPpcn29w:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Almashroo?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Almashroo?a=TcnYPBaR930:ulCbPpcn29w:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Almashroo?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Almashroo?a=TcnYPBaR930:ulCbPpcn29w:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Almashroo?i=TcnYPBaR930:ulCbPpcn29w:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Almashroo/~4/TcnYPBaR930" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.almashroo.com/1867/%d8%aa%d8%b9%d9%84%d9%85-%d8%a8%d8%b1%d9%85%d8%ac%d8%a9-%d8%a5%d8%b6%d8%a7%d9%81%d8%a7%d8%aa-%d9%88%d8%b1%d8%af%d8%a8%d8%b1%d9%8a%d8%b3-1/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		<feedburner:origLink>http://www.almashroo.com/1867/%d8%aa%d8%b9%d9%84%d9%85-%d8%a8%d8%b1%d9%85%d8%ac%d8%a9-%d8%a5%d8%b6%d8%a7%d9%81%d8%a7%d8%aa-%d9%88%d8%b1%d8%af%d8%a8%d8%b1%d9%8a%d8%b3-1/</feedburner:origLink></item>
		<item>
		<title>علماء ومفكرين أسهموا في تطوير الإنترنت العربي</title>
		<link>http://feedproxy.google.com/~r/Almashroo/~3/QZ1vTNsrNHQ/</link>
		<comments>http://www.almashroo.com/1824/%d8%b9%d9%84%d9%85%d8%a7%d8%a1-%d8%a3%d8%b3%d9%87%d9%85%d9%88%d8%a7-%d9%81%d9%8a-%d8%aa%d8%b7%d9%88%d9%8a%d8%b1-%d8%a7%d9%84%d8%a7%d9%86%d8%aa%d8%b1%d9%86%d8%aa-%d8%a7%d9%84%d8%b9%d8%b1%d8%a8%d9%8a/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 07:00:28 +0000</pubDate>
		<dc:creator>عبدالرحمن العتيبة</dc:creator>
				<category><![CDATA[مقالات]]></category>
		<category><![CDATA[الإنترنت]]></category>
		<category><![CDATA[علماء]]></category>
		<category><![CDATA[مفكرين]]></category>

		<guid isPermaLink="false">http://www.almashroo.com/?p=1824</guid>
		<description><![CDATA[<p class="post_image_header">
<a href="http://www.almashroo.com/1824/%d8%b9%d9%84%d9%85%d8%a7%d8%a1-%d8%a3%d8%b3%d9%87%d9%85%d9%88%d8%a7-%d9%81%d9%8a-%d8%aa%d8%b7%d9%88%d9%8a%d8%b1-%d8%a7%d9%84%d8%a7%d9%86%d8%aa%d8%b1%d9%86%d8%aa-%d8%a7%d9%84%d8%b9%d8%b1%d8%a8%d9%8a/" title="علماء ومفكرين أسهموا في تطوير الإنترنت العربي"><img src="http://www.almashroo.com/uploads/2009/10/arabic-internet-pioneers-post-header.png" alt="علماء ومفكرين أسهموا في تطوير الإنترنت العربي" height="140" width="550" /></a>
</p>
لم يكن للإنترنت العربي أن يصل لما وصل إليه الآن من تطور وإبداع، لولا جهود بعض من هؤلاء العلماء والمفكرين. حيث أن إسهاماتهم في مجالات الإنترنت الكثيرة، وتطويع هذه الشبكة لخدمة المستخدمين العرب، والحفاظ على لغة الضاد، قد أنتجت ثمارها، وأصبح بمقدورنا الاستفادة من إيصال واستقبال المعلومات العربية على هذه الشبكة العالمية.]]></description>
			<content:encoded><![CDATA[<p class="post_image_header">
<a href="http://www.almashroo.com/1824/%d8%b9%d9%84%d9%85%d8%a7%d8%a1-%d8%a3%d8%b3%d9%87%d9%85%d9%88%d8%a7-%d9%81%d9%8a-%d8%aa%d8%b7%d9%88%d9%8a%d8%b1-%d8%a7%d9%84%d8%a7%d9%86%d8%aa%d8%b1%d9%86%d8%aa-%d8%a7%d9%84%d8%b9%d8%b1%d8%a8%d9%8a/" title="علماء ومفكرين أسهموا في تطوير الإنترنت العربي"><img src="http://www.almashroo.com/uploads/2009/10/arabic-internet-pioneers-post-header.png" alt="علماء ومفكرين أسهموا في تطوير الإنترنت العربي" height="140" width="550" /></a>
</p>
<p>لم يكن للإنترنت العربي أن يصل لما وصل إليه الآن من تطور وإبداع، لولا جهود بعض من هؤلاء العلماء والمفكرين. حيث أن إسهاماتهم في مجالات الإنترنت الكثيرة، وتطويع هذه الشبكة لخدمة المستخدمين العرب، والحفاظ على لغة الضاد، قد أنتجت ثمارها، وأصبح بمقدورنا الاستفادة من إيصال واستقبال المعلومات العربية على هذه الشبكة العالمية.</p>
<p>وتقديراً منّا لجهودهم وإبداعاتهم في هذا المجال، قررنا عرض بعض منهم لكم، لتتعرفوا عليهم، وعلى إسهاماتهم في مجال الإنترنت العربي.</p>
<p><span id="more-1824"></span></p>
<h3 id="Najib_Tounsi">نجيب التونسي</h3>
<p><img class="size-full wp-image-1846 alignright" title="najib-tounsi" src="http://www.almashroo.com/uploads/2009/10/najib-tounsi.jpg" alt="najib-tounsi" width="150" height="150" />مدير ومؤسس <a href="http://www.w3c.org.ma/">مكتب إئتلاف الشبكة المعلوماتية العالمية W3C بالمغرب</a>. ومحاضر في <a href="http://www.emi.ac.ma/">المدرسة المحمدية للمهندسين</a> بجامعة محمد الخامس أگدال.</p>
<p><strong>إسهاماته</strong></p>
<p>بالإضافة إلى كونه المدير والممثل العربي لمكتب إئتلاف W3C الوحيد في المنطقة العربية. فإن للسيد التونسي العديد من الإسهامات في مجال تسويق المعايير القياسية للويب في المغرب والوطن العربي.</p>
<p>يُلقي العديد من المحاضرات والندوات في مختلف المحافل العربية والدولية، ويساهم بشكل فعّال في توصيل وإرساخ معلومات ونشاطات إئتلاف W3C العالمية وما تهدف إليه إلى الشعب العربي.</p>
<p>يقوم أيضاً بكتابة وترجمة المقالات التي تهم مطوري الويب على موقع المكتب على الشبكة.</p>
<h3 id="Talal_Abu-Ghazaleh">طلال أبو غزالة</h3>
<p><img class="size-full wp-image-1847 alignright" title="talal-abu-ghazaleh" src="http://www.almashroo.com/uploads/2009/10/talal-abu-ghazaleh.jpg" alt="talal-abu-ghazaleh" width="150" height="150" />لدى السيد أبو غزالة العديد من المناصب القيادية والشرفية في كثير من المجالات، أما بالنسبة لما هو متعلق بالتكنولوجيا والإنترنت. فهو <a href="http://www.tagorg.com/">المؤسس والرئيس التنفيذي لمجموعة طلال أبو غزالة الدولية</a>، والتي لها عدد من الخدمات المتعلقة بتقنية المعلومات، و<a href="http://www.aw2i.org/">رئيس معهد العالم العربي للإنترنت</a>، وهو أول رئيس لمجلس إدارة فريق خبراء أسماء النطاقات العربية. وعُيّن مؤخراً كرئيس <a href="http://www.un-gaid.org/">للتحالف الدولي لتكنولوجيا الاتصالات والمعلومات UN GAID</a> خلفاً لرئيس شركة &#8220;انتل&#8221; كريج باريت.</p>
<p><strong>إسهاماته</strong></p>
<p>بحكم منصب الأستاذ أبو غزالة كأول رئيس لإئتلاف أسماء النطاقات العربية AINC، فقد ساهم في صياغة الاتفاقية المبرمة بين الإئتلاف العربي والإئتلاف العالمي للنطاقات المتعددة اللغات MINC.</p>
<p>تقوم مجموعة أبوغزالة أيضاً <a href="http://www.tagidomains.com/tagi/services.jsp">بحجز النطاقات العربية والنطاقات العليا للدول ccTLD</a> عبر خدماتها.</p>
<h3 id="Mike_Ksar">ميشيل قصّار</h3>
<p><img class="size-full wp-image-1844 alignright" title="mike-ksar" src="http://www.almashroo.com/uploads/2009/10/mike-ksar.jpg" alt="mike-ksar" width="150" height="150" />المدير التقني لدى إئتلاف الشفرة الموحدة يونيكود Unicode. عمل سابقاً كرئيس أول لبرنامج البنية التحتية للعولمة وتقنية الخطوط لدى شركة مايكروسوف Microsoft، وقبلها عمل لدى شركة HP لمدة 24 سنة وكان آخر مناصبه هو مدير العولمة للشركة.</p>
<p><strong>إسهاماته</strong></p>
<p>لعب السيد قصّار دوراً واضحاً وكبيراً في مجتمع إئتلاف يونيكود، فقد أسهم في إدارة ووضع الخوارزمية ثنائية الاتجاه ليونيكود Unicode Bidirectional Algorithm لدعم اللغات التي تكتب من اليمين كالعربية.</p>
<p>وساهم أيضاً في تأليف كتب <a href="http://www.amazon.com/Unicode-Standard-Version-3-0/dp/0201616335/ref=sr_1_5?ie=UTF8&amp;s=books&amp;qid=1256479180&amp;sr=1-5">معايير يونيكود النسخة 3</a> و<a href="http://www.amazon.com/Unicode-Standard-Version-4-0/dp/0321185781/ref=sr_1_4?ie=UTF8&amp;s=books&amp;qid=1256479180&amp;sr=1-4">النسخة 4</a>.</p>
<h3 id="Abdulaziz_Al-Zoman">د. عبدالعزيز الزومان</h3>
<p><img class="size-full wp-image-1838 alignright" title="abdulaziz-alzoman" src="http://www.almashroo.com/uploads/2009/10/abdulaziz-alzoman.jpg" alt="abdulaziz-alzoman" width="150" height="150" />أستاذ باحث مشارك في <a href="http://www.kacst.edu.sa/ar/Pages/default.aspx">مدينة الملك عبدالعزيز للعلوم التقنية</a>، ومدير المركز السعودي لمعلومات الشبكة <a href="http://www.isu.net.sa/">بوحدة خدمات الإنترنت</a> في مدينة الملك عبدالعزيز للعلوم التقنية.</p>
<p><strong>إسهاماته</strong></p>
<p>يعتبر الدكتور الزومان أحد روّاد تعريب أسماء النطاقات <span dir="ltr" lang="en" xml:lang="en">Domain names</span> العربية، حيث أسهم في إنشاء <a href="http://www.arabic-domains.org/ar/main-ar.php">المشروع التجريبي لأسماء النطاقات العربية</a> بتوصية من جامعة الدول العربية، وهو الآن يرأس اللجنة التوجيهية لهذا المشروع.</p>
<h3 id="Khaled_Fattal">خالد فتّال</h3>
<p><img class="size-full wp-image-1842 alignright" title="khaled-fattal" src="http://www.almashroo.com/uploads/2009/10/khaled-fattal.png" alt="khaled-fattal" width="150" height="150" />الرئيس والمدير التنفيذي <a href="http://www.minc.org/">للإئتلاف الدولي لأسماء النطاقات متعددة اللغات MINC</a>. وعضو مؤسس ومدير تنفيذي لإئتلاف النطاقات العربية <span dir="ltr" lang="en" xml:lang="en">AINC</span>. وعضو <a href="http://www.icann.org/en/committees/idnpac/">اللجنة الإستشارية لرئاسة الآيكان ICANN لأسماء النطاقات الدولية</a>.</p>
<p><strong>إسهاماته</strong></p>
<p>للسيد خالد فتّال إسهامات كثيرة في مجال الإنترنت، وخصوصاً في مجال تدويل أسماء النطاقات <span dir="ltr" lang="en" xml:lang="en">Internationalized Domain Names</span>. حيث من خلال عمله لدى إئتلاف الآيكان منذ إنطلاقته الأولى، حرص على هذه النقطة، وضرورة تدويل النطاقات بحيث يمكن لأي مستخدم للإنترنت أن يستخدم لغته الأم عند كتابة اسم النطاق.</p>
<p>في عام 2004، قامت منظمة <span dir="ltr" lang="en" xml:lang="en">NASK</span> البولندية، وهي المنظمة المسؤولة عن حجز أسماء النطاقات البولندية <span dir="ltr" lang="en" xml:lang="en">.pl</span>، بنشر جدول المحارف العربية وإرسالها إلى منظمات الآيكان <a href="http://www.icann.org/">ICA</a><a href="http://www.icann.org/"></a><a href="http://www.icann.org/">NN</a> والأيانا <a href="http://www.iana.org/">IANA</a>، مما أثار حفيظة العرب على الإنترنت، واحتجاجاً واسعاً لنشر المحارف العربية من قبل جهة أجنبية. وكان من بين أهم ردود الأفعال، هي رسالة وجهها فتّال إلى هذه المنظمة والمنظمات العالمية موضحاً فيها خطورة مثل هذا العمل، لما فيه من سلب لحقوق العرب في الحفاظ والسيطرة على لغتهم، وقد أثمرت عن اعتذار هذه المنظمة لهذا التصرف، وسحب الجدول ليتم إرساله بشكل رسمي عبر منظمة عربية.</p>
<h3 id="Yousef_Nusseir">د. يوسف نصير</h3>
<p><img class="size-full wp-image-1849 alignright" title="yousef-nusseir" src="http://www.almashroo.com/uploads/2009/10/yousef-nusseir.jpg" alt="yousef-nusseir" width="150" height="150" />رئيس شعبة تقنية المعلومات والاتصال في <a href="http://www.escwa.un.org/">لجنة الأمم المتحدة الإقتصادية والإجتماعية لغربي آسيا UN-ESCWA</a>.</p>
<p><strong>إسهاماته</strong></p>
<p>قبل توليه رئاسة شعبة تقنية المعلومات والاتصال في UN-ESCWA. قام الدكتور نصير بإنشاء المركز الوطني الأردني لتفنية المعلومات في عام 1993 وقام برئاسته إلى عام 2006. قام أيصاً بقيادة الجهود للحكومة الأردنية لإنشاء مجتمع المعلومات للدولة. دائماً ما يسوّق لمشاركة التقنيين العرب في المحافل الدولية ويلقي المحاضرات والندوات حول هذا الجانب.</p>
<h3 id="Adil_Allawi">عادل علاوي</h3>
<p><img class="size-full wp-image-1839 alignright" title="adil-allawi" src="http://www.almashroo.com/uploads/2009/10/adil-allawi.jpg" alt="adil-allawi" width="150" height="150" />المالك والمدير العام لشركة <a href="http://www.diwan.com/">ديوان للبرمجيات المحدودة Diwan Software Limited</a>.</p>
<p><strong>إسهاماته</strong></p>
<p>يشارك السيد عادل بنشاط في <a href="http://www.unicodeconference.org/">مؤتمرات IUC</a> للتدويل Internationalization والشفرة الموحدة يونيكود Unicode، وله إسهامات كثيرة في مجالات عديدة، منها، خوارزمية ثنائية الاتجاه BiDi، الشفرة الموحدة Unicode، الخطوط العربية على الحاسوب ومنها خط Geeza Pro الشهير على الماك، برمجة وتعريب التطبيقات.</p>
<p>يدعم وبشكل كبير تطوير برمجيات المصادر الحرة، ويشارك في القوائم البريدية التطويرية لهذه البرمجيات، ويساعدها في تدويلها وتعريبها، من هذه البرمجيات، <a href="http://code.google.com/webtoolkit/"><span dir="ltr" lang="en" xml:lang="en">Google Web Toolkit (GWT)</span></a>، تطبيقات شركة <a href="http://www.mozilla.org/">موزيلا Mozilla</a>، تطبيقات <a href="http://www.openoffice.org/">المكتب المفتوح OpenOffice</a>.</p>
<p>لشركة ديوان وصاحبها السيد عادل، الفضل الكبير في تطوير اللغة العربية على نظام الماك Mac بالتعاون مع شركة أبل Apple.</p>
<h3 id="Nabil_Layaida">د. نبيل العيايده</h3>
<p><img class="size-full wp-image-1845 alignright" title="nabil-layaida" src="http://www.almashroo.com/uploads/2009/10/nabil-layaida.jpg" alt="nabil-layaida" width="150" height="150" />باحث في <a href="http://www.inria.fr/index.en.html">منظمة INRIA</a>، وعضو خبير في <a href="http://www.w3.org/">إئتلاف W3</a>.</p>
<p><strong>إسهاماته</strong></p>
<p>ينسب للدكتور العيايده اختراع <a href="http://www.w3.org/AudioVideo/">تقنية SMIL</a> والتي نرى تطبيقها الواضح اليوم فيما يعرف <a href="http://en.wikipedia.org/wiki/Multimedia_Messaging_Service">برسائل الوسائط المتعددة MMS</a> على الهواتف المحمولة. حيث وضعت رسالته لنيل شهادة الدكتوارة &#8220;The Design of Structured Language for Multimedia Documents for the Web&#8221; وتعني بالعربية &#8220;التصميم للغة هيكلية لمستندات الوسائط المتعددة للويب&#8221; أساس تقنية SMIL.</p>
<p>وتم أول تطبيق لتقنية SMIL على برنامج كتبه الدكتور العيايده لبرهان نظريته، اسماه <a href="http://taha.inrialpes.fr/Madeus.html">Madeus</a>.</p>
<p>يشارك في العديد من المحافل العربية والدولية في مجال التكنولوجيا والإنترنت، وقد كان لي شخصياً شرف مقابلته، <a href="http://www.almashroo.com/257/%D9%84%D9%82%D8%A7%D8%A1-%D9%85%D8%B9-%D8%A7%D9%84%D8%B9%D8%B6%D9%88-%D8%A7%D9%84%D8%AE%D8%A8%D9%8A%D8%B1-%D9%81%D9%8A-%D9%85%D9%86%D8%B8%D9%85%D8%A9-w3c-%D9%88%D8%A3%D8%AD%D8%AF-%D9%85%D8%AE%D8%AA/">وإجراء مقابلة معه</a> قد تم نشرها سابقاً على المشروع، على هامش &#8220;<a href="http://www.qf-qfirst.info/">مؤتمر الدوحة للعلماء المغتربين</a>&#8220;.</p>
<h3 id="Khaled_Koubaa">خالد قوبعة</h3>
<p><img class="size-full wp-image-1843 alignright" title="khaled-koubaa" src="http://www.almashroo.com/uploads/2009/10/khaled-koubaa.jpg" alt="khaled-koubaa" width="150" height="150" />رئيس <a href="http://www.aw2i.org/">معهد العالم العربي للإنترنت AW2I</a>، وعضو الاتحاد العربي لجمعيات الانترنت، وعضو <a href="http://www.pir.org/">مكتب تسجيل المصلحة العامة</a>، والذي يهتم بتسجيل نطاقات <span dir="ltr" lang="en" xml:lang="en">.org</span>، وأيضاً عضو سابق في الآيكان <span dir="ltr" lang="en" xml:lang="en">ICANN</span>.</p>
<p><strong>إسهاماته</strong></p>
<p>ساهم السيد قوبعة في تأسيس معهد العالم العربي <span dir="ltr" lang="en" xml:lang="en">AW2I</span>، أول معهد للبحوث والنشر مخصص للإنترنت في المنطقة العربية. وبحكم عمله كمستشار لتقنية المعلومات والاتصالات، فقد قام بالعمل مع المنظمات الغير ربحية في تونس والمنطقة العربية وأفريقيا.</p>
<h3 id="Kamal_Mansour">كمال منصور</h3>
<p><img class="size-full wp-image-1841 alignright" title="kamal-mansour" src="http://www.almashroo.com/uploads/2009/10/kamal-mansour.jpg" alt="kamal-mansour" width="150" height="150" />مدير المنتجات الغير-لاتينية لدى شركة <span dir="ltr" lang="en" xml:lang="en">Monotype Imaging Inc.</span>، وكان سابقاً محاضراً في جامعة ستانفورد في علم اللغات.</p>
<p><strong>إسهاماته</strong></p>
<p>لعب السيد منصور دوراً محورياً في مشاريع كبيرة عديدة ذات الصلة بخطوط يونيكود، وأيضاً عمل على العديد من البرمجيات المتعلقة بتعدد لغات الإدخال في لوحة المفاتيح، وتطوير المترجمات <span dir="ltr" lang="en" xml:lang="en">Compiler development</span>. كما أنه يشارك ويلقي المحاضرات في <a href="http://www.unicodeconference.org/">مؤتمرات IUC لليونيكود والتدويل</a>.</p>
<p>ينسب إليه أيضاً مشاركته في تصميم خط <a href="http://en.wikipedia.org/wiki/Arial_Unicode_MS">Arial Unicode MS</a> والمستخدم في أنظمة تشغيل مايكروسوفت ويندوز، وفي آخر نسخ نظام تشغيل أبل ماك، حيث أصبح الخط يأتي افتراضياً مع نظام التشغيل.</p>
<h3 id="Thomas_Milo">Thomas Milo (توماس ميلو)</h3>
<p><img class="size-full wp-image-1848 alignright" title="thomas-milo" src="http://www.almashroo.com/uploads/2009/10/thomas-milo.jpg" alt="thomas-milo" width="150" height="150" />رئيس <a href="http://www.decotype.com/">DecoType</a>، يعمل أيضاً كمستشار لدى جامعة كامبريدج، ماساشوسيتس. وحاصل على <a href="http://www.unicode.org/unicode/conference/bulldog.html">جائزة Bulldog</a> التي يقدمها إئتلاف يونيكود لإسهاماته العظيمة.</p>
<p><strong>إسهاماته</strong></p>
<p>يعمل السيد توماس منذ عام 1982 في مجال الكتابة والخطوط العربية. وقامت شركة ديكوتايب بتطوير أول <a href="http://diwww.epfl.ch/w3lsp/conferences/ridt98/decotype.html">حلول الكتابة العربية</a> معتمداً على الأبحاث العميقة في الخط الإسلامي التقليدي.</p>
<p>عمل منذ عام 1988 مع يونيكود، وحين كان مستشاراً لأدوبي سيستمز Adobe Systems، قام بوضع خارطة لكل <a href="http://ar.wikipedia.org/wiki/%D8%A3%D8%A8%D8%AC%D8%AF%D9%8A%D8%A9_%D8%B3%D8%B1%D9%8A%D9%84%D9%8A%D8%A9">الأبجدية السريلية</a> الإقليمية والتاريخية، وساعد أيضاً في حل بعض المشاكل المتعلقة بالسريلية والعربية في يونيكود. وأدت إسهاماته المستمرة في وضع خوارزمية ثنائية الاتجاه BiDi في يونيكود.</p>
<p>عمل مع شركة WinSoft في تطوير برنامج <a href="http://www.winsoft-international.com/en/store/tasmeem.html">Tasmeem</a> والذي أحدث ثورة في النشر المكتبي، وذلك بدقة وجمال الخطوط العربية المستخدمة فيه.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Almashroo?a=QZ1vTNsrNHQ:0N5RN4Of3UQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Almashroo?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Almashroo?a=QZ1vTNsrNHQ:0N5RN4Of3UQ:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Almashroo?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Almashroo?a=QZ1vTNsrNHQ:0N5RN4Of3UQ:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Almashroo?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Almashroo?a=QZ1vTNsrNHQ:0N5RN4Of3UQ:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Almashroo?i=QZ1vTNsrNHQ:0N5RN4Of3UQ:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Almashroo/~4/QZ1vTNsrNHQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.almashroo.com/1824/%d8%b9%d9%84%d9%85%d8%a7%d8%a1-%d8%a3%d8%b3%d9%87%d9%85%d9%88%d8%a7-%d9%81%d9%8a-%d8%aa%d8%b7%d9%88%d9%8a%d8%b1-%d8%a7%d9%84%d8%a7%d9%86%d8%aa%d8%b1%d9%86%d8%aa-%d8%a7%d9%84%d8%b9%d8%b1%d8%a8%d9%8a/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		<feedburner:origLink>http://www.almashroo.com/1824/%d8%b9%d9%84%d9%85%d8%a7%d8%a1-%d8%a3%d8%b3%d9%87%d9%85%d9%88%d8%a7-%d9%81%d9%8a-%d8%aa%d8%b7%d9%88%d9%8a%d8%b1-%d8%a7%d9%84%d8%a7%d9%86%d8%aa%d8%b1%d9%86%d8%aa-%d8%a7%d9%84%d8%b9%d8%b1%d8%a8%d9%8a/</feedburner:origLink></item>
		<item>
		<title>تحويل اتجاه النص تلقائياً حسب اللغة في النماذج</title>
		<link>http://feedproxy.google.com/~r/Almashroo/~3/82GDth0tcT0/</link>
		<comments>http://www.almashroo.com/1810/%d8%aa%d8%ad%d9%88%d9%8a%d9%84-%d8%a7%d8%aa%d8%ac%d8%a7%d9%87-%d8%a7%d9%84%d9%86%d8%b5-%d8%aa%d9%84%d9%82%d8%a7%d8%a6%d9%8a%d8%a7-%d8%ad%d8%b3%d8%a8-%d8%a7%d9%84%d9%84%d8%ba%d8%a9/#comments</comments>
		<pubDate>Sat, 24 Oct 2009 08:01:31 +0000</pubDate>
		<dc:creator>عبدالرحمن العتيبة</dc:creator>
				<category><![CDATA[دروس]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[ترميز]]></category>
		<category><![CDATA[دوال]]></category>
		<category><![CDATA[كائنات]]></category>

		<guid isPermaLink="false">http://www.almashroo.com/?p=1810</guid>
		<description><![CDATA[<p class="post_image_header">
<a href="http://www.almashroo.com/1810/%d8%aa%d8%ad%d9%88%d9%8a%d9%84-%d8%a7%d8%aa%d8%ac%d8%a7%d9%87-%d8%a7%d9%84%d9%86%d8%b5-%d8%aa%d9%84%d9%82%d8%a7%d8%a6%d9%8a%d8%a7-%d8%ad%d8%b3%d8%a8-%d8%a7%d9%84%d9%84%d8%ba%d8%a9/" title="تحويل اتجاه النص تلقائياً حسب اللغة في النماذج"><img src="http://www.almashroo.com/uploads/2009/10/auto-lang-detection-post-header.png" alt="تحويل اتجاه النص تلقائياً حسب اللغة في النماذج" height="140" width="550" /></a>
</p>
ربما رأيتم هذا التأثير مستخدم في مواقع شركة قوقل Google خصوصاً في خدمة الترجمة Google Translate، وموقع يوتيوب YouTube. عند تحويل اللغة في مدخلات النماذج Forms Input إلى اللغة العربية والبدء في كتابة الأحرف، يتم وبشكل تلقائي تحويل اتجاه النص إلى اليمين ليتماشى مع اللغة. وعند تحويل لغة النص إلى الإنجليزية، يتم تغيير الاتجاه إلى اليسار.

في هذا الدرس، سأقوم بشرح طريقة محاكاة نفس هذا التأثير في النماذج. طبعاً، وكما هي عادتنا في المشروع، الشفرة البرمجية في هذا المقال مطروحة بشكل مجاني وحر (مفتوحة المصدر) للاستخدام الشخصي أو التجاري بترخيص غنو GNU GPL v2.


مقالات ذات صلة:<ol><li><a href='http://www.almashroo.com/303/%d8%aa%d8%b4%d9%81%d9%8a%d8%b1-%d8%a7%d9%84%d8%b1%d9%88%d8%a7%d8%a8%d8%b7-%d9%88%d8%a7%d9%84%d9%86%d8%b5%d9%88%d8%b5-%d8%a8%d9%88%d8%a7%d8%b3%d8%b7%d8%a9-%d8%a7%d9%84%d8%aa%d8%b1%d9%85%d9%8a%d8%b2-utf/' rel='bookmark' title='Permanent Link: تشفير الروابط والنصوص بواسطة الترميز UTF-8'>تشفير الروابط والنصوص بواسطة الترميز UTF-8</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p class="post_image_header">
<a href="http://www.almashroo.com/1810/%d8%aa%d8%ad%d9%88%d9%8a%d9%84-%d8%a7%d8%aa%d8%ac%d8%a7%d9%87-%d8%a7%d9%84%d9%86%d8%b5-%d8%aa%d9%84%d9%82%d8%a7%d8%a6%d9%8a%d8%a7-%d8%ad%d8%b3%d8%a8-%d8%a7%d9%84%d9%84%d8%ba%d8%a9/" title="تحويل اتجاه النص تلقائياً حسب اللغة في النماذج"><img src="http://www.almashroo.com/uploads/2009/10/auto-lang-detection-post-header.png" alt="تحويل اتجاه النص تلقائياً حسب اللغة في النماذج" height="140" width="550" /></a>
</p>
<p>‎ربما رأيتم هذا التأثير مستخدم في مواقع شركة قوقل Google خصوصاً في خدمة الترجمة <a href="http://translate.google.com/translate_t">Google Translate</a>، وموقع يوتيوب <a href="http://www.youtube.com/">YouTube</a>. عند تحويل اللغة في مدخلات النماذج Forms Input إلى اللغة العربية والبدء في كتابة الأحرف، يتم وبشكل تلقائي تحويل اتجاه النص إلى اليمين ليتماشى مع اللغة. وعند تحويل لغة النص إلى الإنجليزية، يتم تغيير الاتجاه إلى اليسار.</p>
<p>‎في هذا الدرس، سأقوم بشرح طريقة محاكاة نفس هذا التأثير في النماذج. طبعاً، وكما هي عادتنا في المشروع، الشفرة البرمجية في هذا المقال مطروحة بشكل مجاني وحر (مفتوحة المصدر) للاستخدام الشخصي أو التجاري بترخيص <a href="http://www.linuxfuture.org/download/Arabic_GPL_2.0.htm">غنو GNU GPL v2</a>.</p>
<p><span id="more-1810"></span></p>
<h4 class="resourcelink"><a href="http://www.almashroo.com/examples/abdulrahman/091024-auto-rtl/">مثال</a></h4>
<p class="post_image"><a href="http://www.almashroo.com/examples/abdulrahman/091024-auto-rtl/"><img class="alignnone size-full wp-image-1811" title="auto-detect-lang-direction" src="http://www.almashroo.com/uploads/2009/10/auto-detect-lang-direction.png" alt="auto-detect-lang-direction" width="550" height="347" /></a></p>
<p>‎مثل هذا التأثير يتم باستخدام لغة الجافاسكربت JavaScript لمعرفة المحارف المدخلة في النماذج، وبالتالي تحويل الاتجاه بشكل آلي إلى اليمين أو اليسار حسب اللغة المدخلة.</p>
<h3>الشفرة البرمجية كاملة</h3>
<pre class="brush: jscript;">
‎//العربية - المدى
//0600–06FF
var rtlChars	 = '\u0600-\u06FF';
‎//العربية الملحقة - المدى
//0750–077F
rtlChars		+= '\u0750-\u077F';
‎//نماذج التقديم العربية - أ - المدى
//FB50–FDFF
rtlChars		+= '\uFB50-\uFDFF';
‎//نماذج التقديم العربية - ب - المدى
//FE70–FEFF
rtlChars		+= '\uFE70-\uFEFF';

‎//علامات ترقيم وتحكم آسكي - المدى ASCII
//0000-0020
var controlChars = '\u0000-\u0020';
‎//علامات ترقيم وتحكم عامة - المدى
//2000-200D
controlChars 	+= '\u2000-\u200D';

‎//ابدأ سحر التعبير القياسي Regular Expression
var reRTL     = new RegExp('^[' + controlChars + ']*[' + rtlChars + ']');
var reControl = new RegExp('^[' + controlChars + ']*$');

function detectDirection(input)
{
‎	//تسجيل القيمة الموجودة في المدخل النصي في متغير
	var value = input.value;
‎	//يتم تحويل اتجاه المدخل النصي إذا كان أحد المحارف يتبع اللغة العربية
	if ( value.match(reRTL) )
	{
		input.dir = 'rtl';
	}
‎	//لا يتم عمل شيء إذا كانت قيمة المدخل تتبع علامات الترقيم أو التحكم
	else if( value.match(reControl) )
	{
		return false;
	}
‎	//يتم تحويل اتجاه المدخل النصي لأي محرف آخر غير العربية وعلامات الترقيم والتحكم
	else
	{
		input.dir = 'ltr';
	}
}
</pre>
<p>‎يجب أن يكون مستند HTML مرمّز بترميز الشفرة الموحدة أو ما يطلق عليها يونيكود Unicode.</p>
<h3>الخطوة ١: تعريف محارف يونيكود الخاصة باللغة العربية في متغير باستخدام التعبير القياسي Regular Expression</h3>
<pre class="brush: jscript;">
var rtlChars	 = '\u0600-\u06FF';
rtlChars		+= '\u0750-\u077F';
rtlChars		+= '\uFB50-\uFDFF';
rtlChars		+= '\uFE70-\uFEFF';
</pre>
<p>‎في البداية، نقوم بتعريف جميع محارف يونيكود الخاصة باللغة العربية في متغير سنسميه rtlChars، لنتمكن من التحقق من مدخلات المستخدم لاحقاً ومقارنتها بما هو موجود لدينا. وقد أخذت هذه المحارف من <a href="http://unicode.org/charts/">موقع يونيكود</a>.</p>
<p>‎طريقة التعريف تتم باستخدام نظام <a href="http://en.wikipedia.org/wiki/Regular_expression">التعبير القياسي</a>، حيث نقوم بتعريف المدى لهذه المحارف، فعلى سبيل المثال، المدى المحجوز لمحارف اللغة العربية الأساسية هي من U+0600 إلى U+06FF. ومن ثم نضيف المحارف الأخرى الخاصة والمحجوزة للغة العربية.</p>
<h3>الخطوة ٢: تعريف محارف يونيكود الخاصة بعلامات الترقيم والتحكم باستخدام التعبير القياسي Regular Expression</h3>
<pre class="brush: jscript;">
var controlChars = '\u0000-\u0020';
controlChars 	+= '\u2000-\u200D';
</pre>
<p>‎بطريقة مشابهة للخطوة ١، نقوم بتعريف المحارف الخاصة بعلامات الترقيم والتحكم الخاصة بنظام ترميز أسكي ASCII في متغير سنسميه controlChars. علامات الترقيم والتحكم التي سندرجها هنا هي على سبيل المثال، مسافات spaces، هروب esc، تحكم ctrl.</p>
<p>‎سيُعيننا تعريفها هنا لاحقاً في التفريق بين هذه المحارف، والمحارف الخاصة باللغة العربية. مرة أخرى، أخذت هذه المحارف من <a href="http://unicode.org/charts/">موقع يونيكود</a>.</p>
<h3>الخطوة ٣: تسجيل التعبير القياسي Regular Expression</h3>
<pre class="brush: jscript;">
var reRTL     = new RegExp('^[' + controlChars + ']*[' + rtlChars + ']');
var reControl = new RegExp('^[' + controlChars + ']*$');
</pre>
<p>‎بعد تعريفنا لهذه المحارف في المتغيرات السابقة، سنقوم بتسجيلها في كائن التعبير القياسي الخاص بلغة الجافاسكربت RegExp كل على حدى.</p>
<pre class="brush: jscript; highlight: [1];">
var reRTL     = new RegExp('^[' + controlChars + ']*[' + rtlChars + ']');
var reControl = new RegExp('^[' + controlChars + ']*$');
</pre>
<p>‎المتغير reRTL سيحمل كائن التعبير القياسي الخاص بمحارف اللغة العربية المراد فحصها والتحقق منها. وستلاحظون أنني أسبقت المحارف العربية بمحارف علامات الترقيم والتحكم، وذلك لسبب أن المستخدم من الممكن أن يدرج على سبيل المثال بعض من المسافات أو علامات ترقيم وتحكم أخرى قبل ادخال أحرف عربية، وبالتالي يمكننا التحقق منها وتحويل الاتجاه حتى مع علامات الترقيم المضافة قبل الأحرف العربية.</p>
<p>‎أما المتغير reControl فسيحمل كائن التعبير القياسي الخاص بمحارف علامات الترقيم والتحكم المراد فحصها.</p>
<h3>الخطوة ٤: إنشاء دالة التحقق من المدخلات</h3>
<pre class="brush: jscript;">
function detectDirection(input)
{
	var value = input.value;

	if ( value.match(reRTL) )
	{
		input.dir = 'rtl';
	}
	else if( value.match(reControl) )
	{
		return false;
	}
	else
	{
		input.dir = 'ltr';
	}
}
</pre>
<p>‎الآن سيبدأ السحر الحقيقي للجافاسكربت. سنقوم بإنشاء دالة التحقق من محارف اللغة المدخلة، ومن ثم تحويل اتجاه النص تلقائياً في عناصر الادخال الخاصة بالنماذج. سنسمي الدالة detectDirection وستأخذ متغير نسميه input حيث سيكون عنصر الادخال Form Input.</p>
<p>‎في بداية الدالة، سنقوم بتسجيل القيمة الموجودة داخل عنصر الادخال في متغير، وسنسميه value.</p>
<p>‎الآن ستبدآ عملية التحقق والتحويل، حيث في جملة if الشرطية الأولى، سنقوم بالتحقق ما إذا كانت القيمة المدخلة تساوي أحد المحارف العربية، فإذا تحقق الشرط، سنقوم بتحويل العنصر إلى اليمين باستخدام خاصية dir.</p>
<p>‎إذا لم تتحقق الجملة الشرطية الأولى، وإذا كانت القيمة المدخلة من أحد محارف علامات الترقيم والتحكم، فلا نفعل شيئاً.</p>
<p>‎إذا لم يتم تحقيق أي من الشروط السابق ذكرها، سنقوم بافتراض أن المحرف المدخل كان أحد المحارف الغير عربية والتي تكتب من اليسار إلى اليمين، لذلك سيتم تغيير اتجاه العنصر على حسب هذا الافتراض.</p>
<h3>الخطوة ٥ والأخيرة: إدراج حدث &#8220;عند رفع المفتاح&#8221; أو OnKeyUp لمدخلات النماذج وربطه بالدالة</h3>
<pre class="brush: xml;">
&lt;input type=&quot;text&quot; size=&quot;70&quot; id=&quot;rtl-txt-input&quot; onkeyup=&quot;detectDirection(this);&quot; /&gt;
</pre>
<p>‎تبقى لدينا ربط التحقق مع عناصر المدخلات الخاصة بالنماذج. طريقة ربط دالة التحقق تتم بواسطة الأحداث Events. حيث سيكون حدث &#8220;عند رفع المفتاح&#8221; أو OnKeyUp لدى عناصر الادخال هو المسؤول عن مناداة الدالة الخاصة بالتحقق من المحارف المدخلة. وبالتالي تغيير اتجاه العنصر على حسب اللغة المدخلة.</p>
<h3>افتراضات الشفرة</h3>
<p>‎في هذه الشفرة افترضت أن اللغة العربية هي اللغة الوحيدة التي تكتب من اليمين إلى اليسار، ولكن هذا غير صحيح، حيث أن بعض اللغات الأخرى تكتب من اليمين إلى اليسار كالعبرية. ولكن لم يتم دعم هذه اللغات في هذه النسخة.</p>
<h3>دعم المتصفحات</h3>
<p>‎تم تجربة هذه الشفرة على المتصفحات القياسية التالية، وتعمل عليها بالشكل الصحيح.</p>
<ul>
<li>كروم Chrome النسخة 3</li>
<li>فايرفوكس Firefox النسخة 3.5.3</li>
<li>انترنت اكسبلورر Internet Explorer النسخة 7</li>
<li>سفاري Safari النسخة 4</li>
<li>أوبرا Opera النسخة 10</li>
</ul>
<p>وبهذا يكون لدينا شفرة برمجية للتحقق من اللغة المدخلة في النماذج باستخدام الجافاسكربت، وبالتالي تحويل الاتجاه على حسب اللغة سواء إلى اليمين، أو اليسار بطريقة محاكية لطريقة قوقل.</p>


<p>مقالات ذات صلة:<ol><li><a href='http://www.almashroo.com/303/%d8%aa%d8%b4%d9%81%d9%8a%d8%b1-%d8%a7%d9%84%d8%b1%d9%88%d8%a7%d8%a8%d8%b7-%d9%88%d8%a7%d9%84%d9%86%d8%b5%d9%88%d8%b5-%d8%a8%d9%88%d8%a7%d8%b3%d8%b7%d8%a9-%d8%a7%d9%84%d8%aa%d8%b1%d9%85%d9%8a%d8%b2-utf/' rel='bookmark' title='Permanent Link: تشفير الروابط والنصوص بواسطة الترميز UTF-8'>تشفير الروابط والنصوص بواسطة الترميز UTF-8</a></li></ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Almashroo?a=82GDth0tcT0:gViUQo7UEKE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Almashroo?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Almashroo?a=82GDth0tcT0:gViUQo7UEKE:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Almashroo?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Almashroo?a=82GDth0tcT0:gViUQo7UEKE:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Almashroo?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Almashroo?a=82GDth0tcT0:gViUQo7UEKE:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Almashroo?i=82GDth0tcT0:gViUQo7UEKE:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Almashroo/~4/82GDth0tcT0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.almashroo.com/1810/%d8%aa%d8%ad%d9%88%d9%8a%d9%84-%d8%a7%d8%aa%d8%ac%d8%a7%d9%87-%d8%a7%d9%84%d9%86%d8%b5-%d8%aa%d9%84%d9%82%d8%a7%d8%a6%d9%8a%d8%a7-%d8%ad%d8%b3%d8%a8-%d8%a7%d9%84%d9%84%d8%ba%d8%a9/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://www.almashroo.com/1810/%d8%aa%d8%ad%d9%88%d9%8a%d9%84-%d8%a7%d8%aa%d8%ac%d8%a7%d9%87-%d8%a7%d9%84%d9%86%d8%b5-%d8%aa%d9%84%d9%82%d8%a7%d8%a6%d9%8a%d8%a7-%d8%ad%d8%b3%d8%a8-%d8%a7%d9%84%d9%84%d8%ba%d8%a9/</feedburner:origLink></item>
	</channel>
</rss>
