<?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://codeart.co.il</link>
	<description>‫קוד-ארט • בניית אתרים, שירותי וורדפרס‬</description>	<lastBuildDate>Mon, 16 Jan 2012 07:33:59 +0000</lastBuildDate>
	<language>he</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/codeart-dev" /><feedburner:info uri="codeart-dev" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>codeart-dev</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>‫שימוש ב ajax לטעינת תוכן‬</title>		<link>http://feedproxy.google.com/~r/codeart-dev/~3/R2zPaDrEKEY/</link>
		<comments>http://codeart.co.il/2011/12/%d7%a9%d7%99%d7%9e%d7%95%d7%a9-%d7%91-ajax-%d7%9c%d7%98%d7%a2%d7%99%d7%a0%d7%aa-%d7%aa%d7%95%d7%9b%d7%9f/#comments</comments>
		<pubDate>Mon, 26 Dec 2011 10:30:09 +0000</pubDate>
		<dc:creator>‫אשרה‬</dc:creator>				<category><![CDATA[הדרכה]]></category>

		<guid isPermaLink="false">http://codeart.co.il/?p=795</guid>
		<description><![CDATA[&#8235;באתר קודארט היו לנו פוסטים מותאמים אישית (עבודות בתיק עבודות), בשלב מסוים החלטנו לחלק אותם <a href="http://codeart.co.il/2011/12/%d7%a9%d7%99%d7%9e%d7%95%d7%a9-%d7%91-ajax-%d7%9c%d7%98%d7%a2%d7%99%d7%a0%d7%aa-%d7%aa%d7%95%d7%9b%d7%9f/" class="read-more">קריאה...</a>&#8236;]]></description>			<content:encoded><![CDATA[<div dir="rtl"><p>באתר קודארט היו לנו פוסטים מותאמים אישית (עבודות בתיק עבודות), בשלב מסוים החלטנו לחלק אותם לשלושה סוגים ולשם כך השתמשנו בטקסונומי.</p>
<p>מבחינה גרפית האתר מחולק לחלק ימני ושמאלי כאשר בחלק השמאלי מוצג הפוסט עצמו (בתצוגת סליידר תמונות) ובחלק הימני (סרגל צידי) מוצגת רשימת פוסטים.</p>
<p>נוצר מצב שלכל פוסט היו שלוש סוגי תצוגה: תצוגת פוסט בהקשר של כל הפוסטים המותאמים אישית (כל העבודות), תצוגת פוסט בהקשר של הפוסטים מאותו טקסונומי (כל העבודות מאותו סוג) ותצוגת פוסט יחיד.</p>
<p>כאשר הפוסט מוצג בהקשר של כל העבודות יופיעו בצד הימני רשימת כל העבודות. הקובץ שאחראי תצוגת העבודות הוא portfolio.php והוא למעשה מציג את העבודה הראשונה מבין כל העבודות. על הצד הימני אחראי הקובץ sidebar-portfolio והוא מציג את רשימת כל העבודות.</p>
<p>כאשר הפוסט מוצג בהקשר של טקסונומי יופיעו בצד הימני כל הפוסטים מאותו טקסונומי. הקובץ שאחראי תצוגת העבודות הוא taxonomy-work_type.php והוא למעשה מציג את העבודה הראשונה מבין העבודות עם אותו טקסונומי. על הצד הימני אחראי הקובץ sidebar-portfolio והוא מציג את רשימת העבודות עם אותו טקסונומי.</p>
<p>על תצוגת פוסט יחיד אחראי הקובץ single-portfolio והוא כמובן מציג פוסט יחיד. במקרה כזה היה עלינו להחליט מה יוצג ברשימה שבצד ימין. החלטנו שיוצגו כל העבודות שהרי לא הגענו לתצוגה זו דרך טקסונומי מסוים. אבל אז נתקלנו בבעיה. כאשר היינו בתצוגת פוסטים מטקסונומי מסוים ולחצנו על עבודה מסוימת כדי לעבור אליה, עברנו לתצוגת פוסט יחיד של העבודה שבחרנו והסרגל הצידי כבר לא הציג את הפוסטים מאותו טקסונומי אלא את כל הפוסטים וזה נראה היה בעייתי בעינינו.</p>
<p>על מנת לטפל בכך החלטנו שאנחנו לא רוצות לעבור מתצוגת טקסונומי לתצוגת פוסט יחיד אלא רק להחליף את הפוסט המוצג כרגע בצד שמאל.</p>
<p>למעשה מה שאנחנו רוצות הוא לטעון בעזרת ajax את תוכן הפסט הנכון לפי הקישור שנלחץ בסרגל הימני וכן לשנות את החיווי בסרגל עצמו כך שיצביע על הפוסט המוצג כעת.</p>
<p>קוד ה-HTML עליו עבדנו, נראה בצורה סכמטית כך:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div id=&quot;content&quot; class=&quot;portfolio&quot;	&gt;
	&lt;div class=&quot;alignleft rel&quot; id='item-wrapper'&gt;
		&lt;div id='item-data'&gt;
			תוכן הפוסט
		&lt;/div&gt;
	&lt;/div&gt;

	&lt;div class=&quot;alignright&quot;&gt;
		&lt;ul id=&quot;postlist&quot;&gt;
			&lt;li &gt;&lt;a href=&quot;http://example.com/post1 &quot; &gt;פוסט 1&lt;/a&gt;&lt;/li&gt;
			&lt;li &gt;&lt;a href=&quot;http://example.com/post2 &quot; &gt;פוסט 2&lt;/a&gt;&lt;/li&gt;
			&lt;li &gt;&lt;a href=&quot;http://example.com/post3 &quot; &gt;פוסט 3&lt;/a&gt;&lt;/li&gt;
			&lt;li &gt;&lt;a href=&quot;http://example.com/post4 &quot; &gt;פוסט 4&lt;/a&gt;&lt;/li&gt;
		&lt;/ul&gt;
	&lt;/div&gt;
	&lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
</pre>
<p>להלן קוד ה-JS שמבצע את הטעינה הדינאמית:<br />
 </p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script&gt;
	jQuery(document).ready(function($){
		$('#postlist a').live('click', function(e){
			e.preventDefault();
			var link = $(this).attr('href');
			$(&quot;#item-wrapper&quot;).html('טוען...');
			$('#postlist li').removeClass('current');
			$(this).parent().addClass('current');
			$(&quot;#item-wrapper&quot;).load(link+' #item-data', function() { $(&quot;#pikame&quot;).PikaChoose({carousel:true, rtl:true});});
		});
	});
	&lt;/script&gt;
</pre>
<p></p>
<p>הקוד הזה נמצא בקובץ taxonomy-work_type.php והוא אחראי לכך שבמקרה שלחצו על קישור לעבודה בסרגל הצדדי לא תתבצע הטעינה של פוסט יחיד אלא ייטען תוכן לאזור מסוים.</p>
<p>נעבור שורה שורה ונבין:</p>
<pre class="brush: jscript; title: ; notranslate">
	jQuery(document).ready(function($){
</pre>
<p>סקריפט זה נרשם להפעלה כאשר הדף סיים להטען, זוהי קריאת jquery סטנדרטית לחלוטין.</p>
<pre class="brush: jscript; title: ; notranslate">
	$('#postlist a').live('click', function(e){
</pre>
<p>זוהי הרשמה על event קליק של קישורים בסרגל הניווט הצדדי שלנו. בכל קליק שכזה תופעל הפונקציה שרשמנו על ה event. ראו (<a href="http://api.jquery.com/live/">jquery live</a>)</p>
<pre class="brush: jscript; title: ; notranslate">
	e.preventDefault();
</pre>
<p>הדבר הראשון שאנחנו עושות בפונקציה הוא למנוע את הפעילות הרגילה של קליק על קישור.</p>
<pre class="brush: jscript; title: ; notranslate">
	var link = $(this).attr('href');
</pre>
<p>אנחנו שומרות במשתנה את הכתובת אליה מצביע הקישור שעליו לחץ הגולש</p>
<pre class="brush: jscript; title: ; notranslate">
	$(&quot;#item-wrapper&quot;).html('טוען...');
</pre>
<p>אנחנו מחליפות את תוכן ה div עם ה id בשם item-wrapperבמחרוזת "טוען..."</p>
<pre class="brush: jscript; title: ; notranslate">
		$('#postlist li').removeClass('current');
</pre>
<p>עלינו לשנות את האייטם המסומן ברשימת הפוסטים בצד ימין, הפוסט הנוכחי מסומן נבדל בעזרת class='current' על מנת להוריד את הסימון שלו נוריד את הclass בשם current מכל ה li  שבdiv  עם ה id בשם postlist</p>
<pre class="brush: jscript; title: ; notranslate">
		$(this).parent().addClass('current');
</pre>
<p>נוסיף את הclass בשם current לאבא של ה a שעליו לחצו כלומר ל li של הפוסט אותו נציג בקרוב</p>
<pre class="brush: jscript; title: ; notranslate">
			$(&quot;#item-wrapper&quot;).load(link+' #item-data', function()
</pre>
<p>כאן אנחנו מבצעות את הטעינה. זו פקודת JS מסוג ajax. אנחנו טוענות מתוך הדף שאמור היה להטען (הדף שהקישור שלנו הוא אליו), רק את ה div עם ה id בשם item-data (זהו הdiv  שמכיל את תוכן הפוסט החדש בדף הנטען) ואנחנו מבצעות את הטעינה הזו לתוך הdiv בדף הנוכחי   שיש לו id  בשם item-wrapper.</p>
<p>בנוסף כאשר תסתיים פעילות זו תקרא פונקציית    callback שמטרתה לבצע פעילויות שנדרשות בסיום הטעינה, במקרה שלנו יש בקוד הנטען גלריית jquery  שיש להפעיל את קוד ה-JS שמייצר אותה (רק לאחר טעינת ה-HTML   כמובן) </p>
<pre class="brush: jscript; title: ; notranslate">
				{ $(&quot;#pikame&quot;).PikaChoose({carousel:true, rtl:true});});
</pre>
<p>כיוון שבמקרה שלנו התוכן המוצג בתוך הdiv מצריך טעינת ג'אוה סקריט מסויים (הצגת גלריה) עלינו לטעון את הסקריפט פה. במצב רגיל אנחנו טוענות סקריפט זה בפוטר ב document ready אבל כאן ה document ready היה מזמן ואנחנו גם לא מגיעות לפוטר לכן עלינו לטעון מכאן את הסקריפט שאחראי לתצוגת הגלריה  שלנו. </p>
</div><img src="http://feeds.feedburner.com/~r/codeart-dev/~4/R2zPaDrEKEY" height="1" width="1"/>]]></content:encoded>			<wfw:commentRss>http://codeart.co.il/2011/12/%d7%a9%d7%99%d7%9e%d7%95%d7%a9-%d7%91-ajax-%d7%9c%d7%98%d7%a2%d7%99%d7%a0%d7%aa-%d7%aa%d7%95%d7%9b%d7%9f/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://codeart.co.il/2011/12/%d7%a9%d7%99%d7%9e%d7%95%d7%a9-%d7%91-ajax-%d7%9c%d7%98%d7%a2%d7%99%d7%a0%d7%aa-%d7%aa%d7%95%d7%9b%d7%9f/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25d7%25a9%25d7%2599%25d7%259e%25d7%2595%25d7%25a9-%25d7%2591-ajax-%25d7%259c%25d7%2598%25d7%25a2%25d7%2599%25d7%25a0%25d7%25aa-%25d7%25aa%25d7%2595%25d7%259b%25d7%259f</feedburner:origLink></item>
		<item>
		<title>‫עבודה עם Framework ו ShortCode לפיתוח תבניות – מתוך וורדקמפ 2011‬</title>		<link>http://feedproxy.google.com/~r/codeart-dev/~3/7OIeuA9Ou6c/</link>
		<comments>http://codeart.co.il/2011/09/%d7%a2%d7%91%d7%95%d7%93%d7%94-%d7%a2%d7%9d-framework-%d7%95-shortcode-%d7%9c%d7%a4%d7%99%d7%aa%d7%95%d7%97-%d7%aa%d7%91%d7%a0%d7%99%d7%95%d7%aa-%d7%9e%d7%aa%d7%95%d7%9a-%d7%95%d7%95%d7%a8%d7%93/#comments</comments>
		<pubDate>Sun, 18 Sep 2011 11:31:05 +0000</pubDate>
		<dc:creator>‫אשרה‬</dc:creator>				<category><![CDATA[הדרכה]]></category>

		<guid isPermaLink="false">http://codeart.co.il/?p=567</guid>
		<description><![CDATA[&#8235;פוסט זה מסכם את ההרצאה שנתתי בכנס וורדפרס 2011 בירושלים. הפוסט מבוסס על המצגת שליוותה <a href="http://codeart.co.il/2011/09/%d7%a2%d7%91%d7%95%d7%93%d7%94-%d7%a2%d7%9d-framework-%d7%95-shortcode-%d7%9c%d7%a4%d7%99%d7%aa%d7%95%d7%97-%d7%aa%d7%91%d7%a0%d7%99%d7%95%d7%aa-%d7%9e%d7%aa%d7%95%d7%9a-%d7%95%d7%95%d7%a8%d7%93/" class="read-more">קריאה...</a>&#8236;]]></description>			<content:encoded><![CDATA[<div dir="rtl"><h2>פוסט זה מסכם את ההרצאה שנתתי בכנס וורדפרס 2011 בירושלים.</h2>
<h2>הפוסט מבוסס על המצגת שליוותה את ההרצאה. הבאתי אותו כפוסט ולא כמצגת על מנת שיהיה קל יותר להעתיק ממנו קטעי קוד. תהנו.</h2>
<p>המטרה - פיתוח ערכת עיצוב מ PSD במינימום זמןתוך מתן מקסימום שליטה לבעל האתר.</p>
<p>מילת מפתח - Reuse.</p>
<h2>מהי ערכת עיצוב?</h2>
<p>ערכת עיצוב היא סט של קבצים שמשתלב בתוך מערכת וורדפרס<br /> ערכת עיצוב אחראית להצגת תוכן מתוך בסיס הנתונים באמצעות פונקציות של המערכת<br /> ערכת עיצוב היא בעלת עיצוב מסוים (מבנה HTML + CSS)<br /> בתהליך פיתוח ערכת עיצוב אנחנו צריכים להתייחס לשלושת האלמנטים האלו: סט קבצים, תוכן דינאמי, עיצוב.</p>
<h2>סט הקבצים המרכיבים ערכת עיצוב -</h2>
<h3>סט בסיסי – 2 קבצים בלבד</h3>
<p>Style.css</p>
<p>Index.php</p>
<h3>סט עשיר יותר:</h3>
<ul>
<li>Style.css</li>
<li>Index.php</li>
<li>Page.php</li>
<li>Category.php</li>
<li>Single.php</li>
<li>Search.php</li>
<li>404.php</li>
<li>Sidebar.php</li>
<li>Header.php</li>
<li>Footer.php</li>
<li>Function.php</li>
<li>Front-page.php</li>
</ul>
<p>בגדול כל קובץ נקרא על ידי מערכת וורדפרס להציג מידע מסוים</p>
<p>Page - מציג עמודים סטטיים (עמודים שהוקמו במערכת הניהול)</p>
<p>Single – מציג פוסט יחיד</p>
<p>Search – מציג תוצאות חיפוש</p>
<p>על מנת ללמוד עוד על הררכית הקבצים בוורדפרס כדאי לבקר <a href="http://codex.wordpress.org/Template_Hierarchy">כאן</a></p>
<h2>קבצי header.php ו footer.php</h2>
<p>במרבית האתרים ישנו חלק עליון וחלק תחתון של כל דף שהוא קבוע ומשותף</p>
<p>את החלק הזה אנחנו מוציאים מתוך הקבצים שסקרתי ושמים ב Header ו  Footer וכוללים אותם בקבצים שלנו באמצעות הפקודות הבאות:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php get_header(); ?&gt;
&lt;?php get_footer(); ?&gt;
</pre>
<h2>קובץ function</h2>
<p>קובץ זה אינו אחראי להצגת תוכן מסוים אלא להקמת תשתיות שישמשו לכל אורך האתר. בין השאר נמצא שם רגיסטרציה של תפריטים, רגיסטרציה של sidebars, קביעת גדלים שונים לצלמיות ועוד</p>
<p>קובץ זה הוא הלב של סביבת העבודה שלנו. הוא יאפשר לנו שימוש חוזר בקוד שנכתב.</p>
<p>לכאן אנחנו נוסיף את הפונקציות של ה shortcodes ושאר פונקציונאליות.</p>
<h2>מילת המפתח - Reuse</h2>
<p>יתרונות עבור המפתח -</p>
<div>•הפרדת פונקציונאליות מקבצי ה HTML של ערכת העיצוב הופך את הקוד של ערכת העיצוב לקצר, ברור ונקי יותר</div>
<div>•חסכון בזמן פיתוח</div>
<div>•חסכון בבאגים</div>
<div>•עבודת תחזוקה נוחה יותר</div>
<div>•תוספת יכולות וגמישות במינימום זמן פיתוח</div>
<p>יתרונות עבור המשתמש –</p>
<div>•יכולות וגמישות</div>
<p>יתרון לעומת שימוש בתוספים – אין הכבדה על המערכת ואין חשש להתנגשויות</p>
<h2>איך עושים reuse</h2>
<div>
<ul>
<li>Shortcodes</li>
</ul>
</div>
<p>אחד הכלים להפוך את ערכת העיצוב שלנו לFrameWork  פיתוחי</p>
<p>מוכר לנו בתחילה משימוש בתוספים כמו Contact form7, nextgen gallery ועוד</p>
<ul>
<li> פונקציות נוספות בקובץ function</li>
</ul>
<h2>
shortcode לחלוקה לשתי עמודות<br />
</h2>
<pre class="brush: php; title: ; notranslate">
/*
 * EXAMPLE USAGE:
 * [lefttag] my left content [/lefttag]
 */

function lefttag_func( $atts, $content ) {
		return  '&lt;div class=&quot;en&quot;&gt;' .$content .'&lt;/div&gt;';
}

add_shortcode( 'lefttag', 'lefttag_func' );

/*
 * EXAMPLE USAGE:
 * [righttag] my right content [/righttag]
 */

function righttag_func( $atts, $content ) {
		return  '&lt;div class=&quot;heb&quot;&gt;' .$content .'&lt;/div&gt;';
}
add_shortcode( 'righttag', 'righttag_func' );
</pre>
<h2>
שילוב CSS רלוונטי<br />
</h2>
<pre class="brush: css; title: ; notranslate">

/*-------- shortcodes ---------*/

.en {float: left; width: 220px;  direction:ltr; text-align:left; padding: 0 10px 0 20px; min-height:300px;}
.heb {float: right; width: 220px; direction:rtl; text-align:right; padding: 0 0px 0 10px; min-height:300px;}

.en , .heb{font-size: 18px; font-family: arial;}
</pre>
<h2>
שימוש ב short code על ידי המשתמש<br />
</h2>
<pre class="brush: php; title: ; notranslate">
[lefttag] my left content [/lefttag] [righttag] my right content [/righttag]
</pre>
<h2>
ודוגמא נוספת ( מילים של ביאליק, תרגום של מורפיקס)<br />
</h2>
<pre class="brush: php; title: ; notranslate">

[lefttag] Long and winding road, and her nest, three eggs. And every egg - Hess, Penn Wake! - Old a chick, chick tiny [/lefttag] [righttag] קן לציפור
בין העצים,
ובקן לה,
שלוש ביצים.
ובכל ביצה -
הס, פן תעיר! -
ישן לו
אפרוח, אפרוח זעיר.
  [/righttag]
</pre>
<h2>
shortcode לכפתורי רשתות חברתיות - פייסבוק<br />
</h2>
<pre class="brush: php; title: ; notranslate">
/*
 * EXAMPLE USAGE:
 * [fb-like]
 * [fb-like lang='he_IL' send='true' width='100' faces='false' ]
 */
function like( $atts ) {
	global $post;

	extract( shortcode_atts( array(
		'lang' =&gt; 'he_IL', // button language
		'send' =&gt; 'false', //without send
		'width' =&gt; '100', // default width
		'faces' =&gt; 'false', // do show faces
		'layout' =&gt; 'button_count', // options: box_count, button_count, standard
	), $atts ) );

	$data = '&lt;div id=&quot;fb-root&quot;&gt;&lt;/div&gt;&lt;script src=&quot;http://connect.facebook.net/'.$lang.'/all.js#appId=157072397705485&amp;amp;xfbml=1&quot;&gt;&lt;/script&gt;&lt;fb:like href=&quot;'.get_permalink().'&quot; send=&quot;'.$send.'&quot; layout='.$layout.' width=&quot;'.$width.'&quot; show_faces=&quot;'.$faces.'&quot; action=&quot;like&quot; font=&quot;&quot;&gt;&lt;/fb:like&gt;';
	return $data;
}
add_shortcode( 'fb-like', 'like' );
</pre>
<h2>
טוויטר<br />
</h2>
<pre class="brush: php; title: ; notranslate">
/*
 * EXAMPLE USAGE:
 * [tweet-that datacount='none' ]
 * [tweet-that datacount='horizontal' ]
 * [tweet-that datacount='vertical' ]
 */
function tweet( $atts ) {
	global $post;

	extract( shortcode_atts( array(
		'datacount' =&gt; 'none', // options: none, horizontal, vertical
	), $atts ) );

	$data= '&lt;a href=&quot;http://twitter.com/share&quot; class=&quot;twitter-share-button&quot; data-count='.$datacount.'&gt;Tweet&lt;/a&gt;&lt;script type=&quot;text/javascript&quot; src=&quot;http://platform.twitter.com/widgets.js&quot;&gt;&lt;/script&gt;';
	return $data;
}
add_shortcode( 'tweet-that', 'tweet' );
</pre>
<h2>
הוספת כפתורי רשתות חברתיות בקובץ תבנית<br />
</h2>
<pre class="brush: php; title: ; notranslate">
	&lt;div class=&quot;interactive_fb&quot;&gt;&lt;?php echo do_shortcode('[fb-like]');?&gt;&lt;/div&gt;

						    &lt;div class=&quot;interactive_twitt&quot;&gt;&lt;?php echo do_shortcode(&quot;[tweet-that datacount=horizontal]&quot;);?&gt;&lt;/div&gt;
							</pre>
<h2>
הוספת כפתורי רשתות חברתיות בעורך התוכן<br />
</h2>
<pre class="brush: php; title: ; notranslate">
  [tweet-that datacount='none' ]
  [tweet-that datacount='horizontal' ]
  [tweet-that datacount='vertical' ]
</pre>
<h2>
 shortcode להצגת פוסטים קשורים (על פי תגיות)<br />
</h2>
<pre class="brush: php; title: ; notranslate">
function related_posts_shortcode( $atts ) {
	extract(shortcode_atts(array(
	    'limit' =&gt; '5',
	), $atts));

	global $wpdb, $post, $table_prefix;

	if ($post-&gt;ID) {
		$retval = '&lt;ul&gt;';
 		// Get tags
		$tags = wp_get_post_tags($post-&gt;ID);
		$tagsarray = array();
		foreach ($tags as $tag) {
			$tagsarray[] = $tag-&gt;term_id;
		}
		$tagslist = implode(',', $tagsarray);

		// Do the query
		$q = &quot;SELECT p.*, count(tr.object_id) as count
			FROM $wpdb-&gt;term_taxonomy AS tt, $wpdb-&gt;term_relationships AS tr, $wpdb-&gt;posts AS p WHERE tt.taxonomy ='post_tag' AND tt.term_taxonomy_id = tr.term_taxonomy_id AND tr.object_id  = p.ID AND tt.term_id IN ($tagslist) AND p.ID != $post-&gt;ID
				AND p.post_status = 'publish'
				AND p.post_date_gmt &lt; NOW()
 			GROUP BY tr.object_id
			ORDER BY count DESC, p.post_date_gmt DESC
			LIMIT $limit;&quot;;

		$related = $wpdb-&gt;get_results($q);
 		if ( $related ) {
			foreach($related as $r) {
				$retval .= '
	&lt;li&gt;&lt;a title=&quot;'.wptexturize($r-&gt;post_title).'&quot; href=&quot;'.get_permalink($r-&gt;ID).'&quot;&gt;'.wptexturize($r-&gt;post_title).'&lt;/a&gt;&lt;/li&gt;
';
			}
		} else {
			$retval .= '
	&lt;li&gt;No related posts found&lt;/li&gt;
';
		}
		$retval .= '&lt;/ul&gt;
';
		return $retval;
	}
	return;
}
add_shortcode('related_posts', 'related_posts_shortcode');
</pre>
<h2>
shortcode ליצירת קישור להצגת תוכן נוסף<br />
</h2>
<pre class="brush: php; title: ; notranslate">
/*
 * EXAMPLE USAGE:
 *
[open extra_id='aaa']הכותרת שתהווה קישור [/open]
[extra extra_id='aaa']זהו הטקסט המורחב שיופיע כאשר לוחצים על הכותרת.[/extra]
*/

	function link_shortcode( $atts, $content = null ) {
		extract( shortcode_atts( array(
		'extra_id' =&gt;''
	), $atts ) );
		return '&lt;a href=&quot;&quot; class=&quot;trigger&quot; id=&quot;'.$extra_id.'&quot;&gt;'.$content.'&lt;/a&gt;';
	}
	add_shortcode( 'open', 'link_shortcode' ); 

	function extra_shortcode( $atts, $content = null ) {
		extract( shortcode_atts( array(
		'extra_id'=&gt;''
	), $atts ) );
		return '&lt;div class=&quot;'.$extra_id.' extra&quot;&gt;'.$content.'&lt;/div&gt;';
	}
	add_shortcode( 'extra', 'extra_shortcode' );
</pre>
<h2>
סקריפט שאחראי לעשות את העבודה:<br />
</h2>
<p>לשים ב  footer לפני &lt;?php wp_footer(); ?&gt;</p>
<pre class="brush: php; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot;&gt;
	jQuery(document).ready(function($){
		jQuery('.extra').hide();
		jQuery('.trigger').click(function()
		{
			myid = jQuery(this).attr('id');
			jQuery('.'+myid).toggle();
			return false;
		});
	});
&lt;/script&gt;
</pre>
<h2>
דוגמא לפונקציה נוספת שתעשיר את סביבת העבודה שלנו:<br />
</h2>
<pre class="brush: php; title: ; notranslate">
function Single_template_func() {
if (in_category('players'))
return TEMPLATEPATH . '/single-players.php';
else if (in_category('staff'))
return TEMPLATEPATH . '/single-staff.php';
else
return TEMPLATEPATH.&quot;/single.php&quot;;
}

add_filter('single_template', Single_template_func);
</pre>
<h2>
סיכום<br />
</h2>
<p>עבודה עם סביבת עבודה (ובפרט כאשר קובץ  ה function   שלנו מכיל פונקציונאליות רבה ו shortcodes רבים) חוסכת לנו זמן פיתוח ומעניקה לבעל האתר שליטה מירבית בתצוגה באתר.</p>
<div style="width:425px" id="__ss_9305337"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/codeart2011/wordcamp-2011new1" title="Wordcamp   2011-new1">Wordcamp   2011-new1</a></strong><object id="__sse9305337" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=wordcamp-2011-new1-110918055735-phpapp02&#038;stripped_title=wordcamp-2011new1&#038;userName=codeart2011" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse9305337" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=wordcamp-2011-new1-110918055735-phpapp02&#038;stripped_title=wordcamp-2011new1&#038;userName=codeart2011" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/codeart2011">codeart2011</a>.</div>
</div>
</div><img src="http://feeds.feedburner.com/~r/codeart-dev/~4/7OIeuA9Ou6c" height="1" width="1"/>]]></content:encoded>			<wfw:commentRss>http://codeart.co.il/2011/09/%d7%a2%d7%91%d7%95%d7%93%d7%94-%d7%a2%d7%9d-framework-%d7%95-shortcode-%d7%9c%d7%a4%d7%99%d7%aa%d7%95%d7%97-%d7%aa%d7%91%d7%a0%d7%99%d7%95%d7%aa-%d7%9e%d7%aa%d7%95%d7%9a-%d7%95%d7%95%d7%a8%d7%93/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://codeart.co.il/2011/09/%d7%a2%d7%91%d7%95%d7%93%d7%94-%d7%a2%d7%9d-framework-%d7%95-shortcode-%d7%9c%d7%a4%d7%99%d7%aa%d7%95%d7%97-%d7%aa%d7%91%d7%a0%d7%99%d7%95%d7%aa-%d7%9e%d7%aa%d7%95%d7%9a-%d7%95%d7%95%d7%a8%d7%93/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25d7%25a2%25d7%2591%25d7%2595%25d7%2593%25d7%2594-%25d7%25a2%25d7%259d-framework-%25d7%2595-shortcode-%25d7%259c%25d7%25a4%25d7%2599%25d7%25aa%25d7%2595%25d7%2597-%25d7%25aa%25d7%2591%25d7%25a0%25d7%2599%25d7%2595%25d7%25aa-%25d7%259e%25d7%25aa%25d7%2595%25d7%259a-%25d7%2595%25d7%2595%25d7%25a8%25d7%2593</feedburner:origLink></item>
		<item>
		<title>‫איך מעבירים אתר וורדפרס אחסון בלי להכוות‬</title>		<link>http://feedproxy.google.com/~r/codeart-dev/~3/mehjsy5flB0/</link>
		<comments>http://codeart.co.il/2011/07/%d7%90%d7%99%d7%9a-%d7%9e%d7%a2%d7%91%d7%99%d7%a8%d7%99%d7%9d-%d7%90%d7%aa%d7%a8-%d7%95%d7%95%d7%a8%d7%93%d7%a4%d7%a8%d7%a1-%d7%90%d7%97%d7%a1%d7%95%d7%9f-%d7%91%d7%9c%d7%99-%d7%9c%d7%94%d7%9b%d7%95/#comments</comments>
		<pubDate>Mon, 25 Jul 2011 19:36:14 +0000</pubDate>
		<dc:creator>‫חנית‬</dc:creator>				<category><![CDATA[הדרכה]]></category>
		<category><![CDATA[וורדפרס]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[אחסון]]></category>

		<guid isPermaLink="false">http://codeart.co.il/?p=551</guid>
		<description><![CDATA[&#8235;אחסון זו לא חתונה קתולית. למעשה ברוב המקרים המאחסן הראשון שלך הוא ממש לא זה <a href="http://codeart.co.il/2011/07/%d7%90%d7%99%d7%9a-%d7%9e%d7%a2%d7%91%d7%99%d7%a8%d7%99%d7%9d-%d7%90%d7%aa%d7%a8-%d7%95%d7%95%d7%a8%d7%93%d7%a4%d7%a8%d7%a1-%d7%90%d7%97%d7%a1%d7%95%d7%9f-%d7%91%d7%9c%d7%99-%d7%9c%d7%94%d7%9b%d7%95/" class="read-more">קריאה...</a>&#8236;]]></description>			<content:encoded><![CDATA[<div dir="rtl"><p>אחסון זו לא חתונה קתולית. למעשה ברוב המקרים המאחסן הראשון שלך הוא ממש לא זה שאתה רוצה להמשיך איתו.<br />
מאידך - לעבור אחסון זה פחד אלוהים...<br />
<strong> אז זהו שלא !</strong></p>
<p>זה לא ממש מסובך אם רק עובדים מסודר.</p>
<p>המידע שאתם צריכים כדי לעבור:</p>
<ol>
<li>גישה ל-ftp של השרת הנוכחי (פרטי שרת, שם משתמש וסיסמה)</li>
<li>גישה לניהול מסד הנתונים של השרת הנוכחי (פרטי שרת, שם משתמש וסיסמה)</li>
<li>גישה ל-ftp של השרת החדש (פרטי שרת, שם משתמש וסיסמה)</li>
<li>גישה לניהול מסד הנתונים של השרת החדש (פרטי שרת, שם משתמש וסיסמה)</li>
<li>גישה לניהול הדומיין שלכם</li>
<li>פרטי שרתי ה-DNS של האחסון החדש</li>
</ol>
<p>אז בואו נראה איך מעבירים אתר אחסון.<br />
יש מספר דרכים לעבור אחסון והכל תלוי בהתקנת הוורדפרס וההגדרות שלכם, לכולן יש צעד אחד משותף - לגבות<br />
אז קודם כל ולפני שעשיתם משהו - גבו את כל המידע שלכם.</p>
<p><strong>גיבוי:</strong></p>
<ul>
<li>הכנסו לאחסון שלכם בעזרת ftp והורידו את כל תוכן ספריית wp-content למחשב המקומי שלכם</li>
<li>הכנסו ללמשק הניהול של מסד הנתונים וייצאו אותו בעזרת Export</li>
</ul>
<p><strong>ההעברה:</strong></p>
<ul>
<li>התקינו וורדפרס על האחסון החדש</li>
<li>העתיקו על ספריית wp-content של הוורדפרס החדש את הספריה שגיביתם</li>
<li>הכנסו לממשק הניהול של מסד הנתונים</li>
<li>מחקו את כל הטבלאות שיצר הוורדפרס החדש</li>
<li>ייבאו את קובץ הגיבוי של מסד הנתונים הישן</li>
<li>העבירו את הדומיין שלכם כך שיצביע לאחסון החדש (שנו את שרתי ה-DNS כך שיצביעו לאחסון החדש)</li>
</ul>
<p>חכו עד 48 שעות לעדכון  DNS וזהו, עברתם.</p>
<p>ניתן גם להעביר בעזרת קובץ הייצוא של וורדפרס - אבל זה עשוי לגרום לבעיות שונות של כתובות פוסטים משתנות (תלוי מה בסיס הקישורים שלכם)</p>
<p><strong>לא הבנתם? יש שאלות ? אנחנו כאן <img src='http://codeart.co.il/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </strong></p>
</div><img src="http://feeds.feedburner.com/~r/codeart-dev/~4/mehjsy5flB0" height="1" width="1"/>]]></content:encoded>			<wfw:commentRss>http://codeart.co.il/2011/07/%d7%90%d7%99%d7%9a-%d7%9e%d7%a2%d7%91%d7%99%d7%a8%d7%99%d7%9d-%d7%90%d7%aa%d7%a8-%d7%95%d7%95%d7%a8%d7%93%d7%a4%d7%a8%d7%a1-%d7%90%d7%97%d7%a1%d7%95%d7%9f-%d7%91%d7%9c%d7%99-%d7%9c%d7%94%d7%9b%d7%95/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://codeart.co.il/2011/07/%d7%90%d7%99%d7%9a-%d7%9e%d7%a2%d7%91%d7%99%d7%a8%d7%99%d7%9d-%d7%90%d7%aa%d7%a8-%d7%95%d7%95%d7%a8%d7%93%d7%a4%d7%a8%d7%a1-%d7%90%d7%97%d7%a1%d7%95%d7%9f-%d7%91%d7%9c%d7%99-%d7%9c%d7%94%d7%9b%d7%95/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25d7%2590%25d7%2599%25d7%259a-%25d7%259e%25d7%25a2%25d7%2591%25d7%2599%25d7%25a8%25d7%2599%25d7%259d-%25d7%2590%25d7%25aa%25d7%25a8-%25d7%2595%25d7%2595%25d7%25a8%25d7%2593%25d7%25a4%25d7%25a8%25d7%25a1-%25d7%2590%25d7%2597%25d7%25a1%25d7%2595%25d7%259f-%25d7%2591%25d7%259c%25d7%2599-%25d7%259c%25d7%2594%25d7%259b%25d7%2595</feedburner:origLink></item>
		<item>
		<title>‫יצירת פילטר תוכן לגולשים רשומים‬</title>		<link>http://feedproxy.google.com/~r/codeart-dev/~3/tZlUl4STrUU/</link>
		<comments>http://codeart.co.il/2011/04/%d7%99%d7%a6%d7%99%d7%a8%d7%aa-%d7%a4%d7%99%d7%9c%d7%98%d7%a8-%d7%aa%d7%95%d7%9b%d7%9f-%d7%9c%d7%92%d7%95%d7%9c%d7%a9%d7%99%d7%9d-%d7%a8%d7%a9%d7%95%d7%9e%d7%99%d7%9d/#comments</comments>
		<pubDate>Sun, 24 Apr 2011 19:40:55 +0000</pubDate>
		<dc:creator>‫חנית‬</dc:creator>				<category><![CDATA[וורדפרס]]></category>
		<category><![CDATA[מדריכים]]></category>
		<category><![CDATA[מתקדמים]]></category>

		<guid isPermaLink="false">http://codeart.co.il/?p=527</guid>
		<description><![CDATA[&#8235;לאחרונה נדרשנו להקים אחת שמיועד בתכניו לגולשים מחוברים בלבד, בנוסף לכך - חלק מהאתר הוגדר <a href="http://codeart.co.il/2011/04/%d7%99%d7%a6%d7%99%d7%a8%d7%aa-%d7%a4%d7%99%d7%9c%d7%98%d7%a8-%d7%aa%d7%95%d7%9b%d7%9f-%d7%9c%d7%92%d7%95%d7%9c%d7%a9%d7%99%d7%9d-%d7%a8%d7%a9%d7%95%d7%9e%d7%99%d7%9d/" class="read-more">קריאה...</a>&#8236;]]></description>			<content:encoded><![CDATA[<div dir="rtl"><p>לאחרונה נדרשנו להקים אחת שמיועד בתכניו לגולשים מחוברים בלבד, בנוסף לכך - חלק מהאתר הוגדר כבעל תוכן משתנה פר גולש.<br />
כלומר - מי שלא רשום לאתר, רואה תמיד טופס התחברות (Login), מי שכן רואה את תכני האתר.<br />
חלק מתכני האתר זהים לכל הגולשים, וחלקם מוגדרים אישית לכל גולש (מידע אישי המיועד לגולש בלבד).</p>
<h3>תוכן לגולשים מחוברים בלבד</h3>
<p>ראשית נראה כיצד התמודדנו עם נושא התוכן המיועד לגולשים מחוברים בלבד. לשם כך  יצרנו תבנית דף כניסה (Login) . דף זה אינו דף הבית. הוספנו בדיקה בהאדר האם הגולש מחובר ובמקרה הצורך ביצוע הפניית redirect.</p>
<p>ההאדר נראה כך:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php if ( !is_page('login') &amp;&amp; !is_user_logged_in() ) {
    header(&quot;Location: &quot;.get_bloginfo('url').&quot;/login&quot;);
}  else if (is_page('login') &amp;&amp; is_user_logged_in()) {
	header(&quot;Location: &quot;.get_bloginfo('url'));
}?&gt;
&lt;!DOCTYPE html&gt;
&lt;html &lt;?php language_attributes(); ?&gt;&gt;
&lt;head&gt;
 ....
</pre>
<p>למעשה יש לנו 4 מצבים: </p>
<ol>
<li>הגולש אינו מחובר והדף שנטען עכשיו (שאנחנו בהאדר שלו) הוא דף ה login – מצב זה אינו מצריך התערבות.</li>
<li>הגולש אינו מחובר והדף שנטען עכשיו הוא דף פנימי כלשהו (נניח שהגולש כותב את כתובת הדף הפנימי בשורת הכתובת) – במקרה כזה נעביר אותו לדף ה login.</li>
<li>הגולש מחובר והדף שנטען עכשיו הוא דף ה login – במקרה כזה נעביר אותו לדף הראשי של האתר בו הוא יוכל לראות כבר תכנים פנימיים.</li>
<li>הגולש מחובר והדף שנטען עכשיו הוא דף כלשהו באתר – מצב זה אינו מצריך התערבות מאיתנו</li>
</ol>
<p>בקוד שלעיל ניתן לראות את הטיפול במצבים 2 ו- 3.</p>
<p>הנה דף הלוגין - קל ופשוט.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
/*
 * Template name: login
 */
?&gt;
&lt;?php get_header(); ?&gt;
&lt;form action=&quot;&lt;?php bloginfo('url') ?&gt;/wp-login.php&quot; method=&quot;post&quot;&gt;
		&lt;p&gt;&lt;label for=&quot;log&quot;&gt; שם: &lt;/label&gt;&lt;input type=&quot;text&quot; name=&quot;log&quot; id=&quot;log&quot; value=&quot;&lt;?php echo wp_specialchars(stripslashes($user_login), 1) ?&gt;&quot; size=&quot;22&quot; /&gt;&lt;/p&gt;
		&lt;p&gt;&lt;label for=&quot;pwd&quot;&gt;סיסמה: &lt;/label&gt; &lt;input type=&quot;password&quot; name=&quot;pwd&quot; id=&quot;pwd&quot; size=&quot;22&quot; /&gt;&lt;/p&gt;
		&lt;p&gt;&lt;input type=&quot;submit&quot; name=&quot;submit&quot; id='wp-submit' value=&quot;שליחה&quot; class=&quot;button&quot; /&gt;&lt;/p&gt;
		&lt;p&gt;&lt;label for=&quot;rememberme&quot;&gt;&lt;input name=&quot;rememberme&quot; id=&quot;rememberme&quot; type=&quot;checkbox&quot; checked=&quot;checked&quot; value=&quot;forever&quot; /&gt; זכור אותי&lt;/label&gt;&lt;/p&gt;
		&lt;input type=&quot;hidden&quot; name=&quot;redirect_to&quot; value=&quot;&lt;?php bloginfo('url');?&gt;&quot;/&gt;
&lt;/form&gt;
&lt;?php get_footer();?&gt;
</pre>
<h3>תוכן אישי לכל גולש מחובר</h3>
<p>על מנת להציג תוכן אישי לכל גולש יצרנו היררכיית עמודים כזו:<br />
עמוד פרטי משתמש (עמוד אב כללי)<br />
    - עמוד משתמש 1<br />
    - עמוד משתמש 2<br />
וכו'<br />
כאשר שם עמוד המשתמש הוא כשם המשתמש עצמו (username).</p>
<p>במקביל ייצרנו שתי תבניות תצוגה, אחת לעמוד האב והשניה לעמודי הבנים.<br />
התבנית של עמוד האב נראית כך:</p>
<pre class="brush: php; title: ; notranslate">&lt;?php
/*
 * Template name:user account
 */ ?&gt;
&lt;?php get_header();?&gt;
&lt;div id='title'&gt;
    &lt;img src=&quot;&lt;?php bloginfo('template_url');?&gt;/images/account-title-icon.png&quot; /&gt;
    &lt;p&gt;פרטי החשבון&lt;/p&gt;
&lt;/div&gt;

&lt;?php
if (have_posts()):
    the_post();
    global $current_user;
    get_currentuserinfo();
    $pname = $current_user-&gt;user_login;

    $page = get_page_by_title($pname);
	if ($page) {
		$content = apply_filters('the_content', $page-&gt;post_content);
		echo $content;
	} else {
		echo &quot;תוכן זה לא קיים עבורך !&quot;;
	}
endif;
get_footer();
?&gt;
</pre>
<p>למעשה אנחנו שולפים את שם המשתמש המחובר (בקריאה לפונקציה <a href="http://codex.wordpress.org/Function_Reference/get_currentuserinfo">get_currentuserinfo</a> ) ומציגים עבורו את תוכן הדף שנקרא על שמו (אם קיים כזה) כחלק מתצוגת עמוד האב. אם לא קיים דף כזה מציגים הודעה.</p>
<p>על מנת למנוע הצגת תוכן של עמודי הבנים באופן ישיר (הגנה על תכנים) וכדי למנוע קוד כפול ובדיקות מיותרות, מנענו גישה ישירה לעמודים אלו באופן גורף על ידי תבנית תצוגה המיוחסת להם שעושה רידיירקט לעמוד האב.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
/*
 * Template name: user account inner
 */

if (have_posts()) {
    the_post();
    header('Location: '.get_permalink($post-&gt;post_parent));
}
?&gt;
</pre>
<p>ניתן היה כמובן ליישם מנגנון כזה  גם בעזרת <a href="http://codex.wordpress.org/Shortcode_API">shortcode </a>המאפשר לעטוף את התוכן לכל משתמש וכו, אבל לנו אישית זה נראה הרבה פחות נח  להזנת תכנים (בהנתן יותר מ-20 משתמשים רשומים באתר).</p>
<p>נשמח לשמוע שאלות, תהיות, השגות או סתם רעיונות נוספים <img src='http://codeart.co.il/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
</div><img src="http://feeds.feedburner.com/~r/codeart-dev/~4/tZlUl4STrUU" height="1" width="1"/>]]></content:encoded>			<wfw:commentRss>http://codeart.co.il/2011/04/%d7%99%d7%a6%d7%99%d7%a8%d7%aa-%d7%a4%d7%99%d7%9c%d7%98%d7%a8-%d7%aa%d7%95%d7%9b%d7%9f-%d7%9c%d7%92%d7%95%d7%9c%d7%a9%d7%99%d7%9d-%d7%a8%d7%a9%d7%95%d7%9e%d7%99%d7%9d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://codeart.co.il/2011/04/%d7%99%d7%a6%d7%99%d7%a8%d7%aa-%d7%a4%d7%99%d7%9c%d7%98%d7%a8-%d7%aa%d7%95%d7%9b%d7%9f-%d7%9c%d7%92%d7%95%d7%9c%d7%a9%d7%99%d7%9d-%d7%a8%d7%a9%d7%95%d7%9e%d7%99%d7%9d/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25d7%2599%25d7%25a6%25d7%2599%25d7%25a8%25d7%25aa-%25d7%25a4%25d7%2599%25d7%259c%25d7%2598%25d7%25a8-%25d7%25aa%25d7%2595%25d7%259b%25d7%259f-%25d7%259c%25d7%2592%25d7%2595%25d7%259c%25d7%25a9%25d7%2599%25d7%259d-%25d7%25a8%25d7%25a9%25d7%2595%25d7%259e%25d7%2599%25d7%259d</feedburner:origLink></item>
		<item>
		<title>‫עבודה עם Css Sprite‬</title>		<link>http://feedproxy.google.com/~r/codeart-dev/~3/mUvCrx2lPFc/</link>
		<comments>http://codeart.co.il/2011/04/%d7%a2%d7%91%d7%95%d7%93%d7%94-%d7%a2%d7%9d-css-sprite/#comments</comments>
		<pubDate>Tue, 05 Apr 2011 11:51:34 +0000</pubDate>
		<dc:creator>‫אשרה‬</dc:creator>				<category><![CDATA[css]]></category>
		<category><![CDATA[הדרכה]]></category>
		<category><![CDATA[כללי]]></category>
		<category><![CDATA[מדריכים]]></category>

		<guid isPermaLink="false">http://codeart.co.il/?p=496</guid>
		<description><![CDATA[&#8235;לעיתים כאשר אנו גולשים לאתרים מסויימים אנו רואים כיצד קבצי התמונה המרכיבים את האתר תופסים <a href="http://codeart.co.il/2011/04/%d7%a2%d7%91%d7%95%d7%93%d7%94-%d7%a2%d7%9d-css-sprite/" class="read-more">קריאה...</a>&#8236;]]></description>			<content:encoded><![CDATA[<div dir="rtl"><p>לעיתים כאשר אנו גולשים לאתרים מסויימים אנו רואים כיצד קבצי התמונה המרכיבים את האתר תופסים את מקומם אחד אחרי השני. מובן שהדבר מצביע על עבודה איטית של הדפדפן. הדבר נובע מריבוי קבצי תמונה (אולי כבדים) שמועברים לדפדפן אחד אחד מהשרת. על מנת להמנע ממצב זה ניתן לארוז מספר קבצי תמונות בקובץ אחד ובכך לגרום לירידה בכמות הבקשות של הדפדפן לשרת ולטעינה בו זמנית של כל התמונות המרכיבות את האתר ולא בזו אחר זו.<br />
שיטה זו נקראת <a href="http://www.internet-israel.com/internet/%D7%A4%D7%99%D7%AA%D7%95%D7%97-%D7%90%D7%99%D7%A0%D7%98%D7%A8%D7%A0%D7%98/%D7%91%D7%A0%D7%99%D7%99%D7%AA-%D7%90%D7%AA%D7%A8%D7%99-%D7%90%D7%99%D7%A0%D7%98%D7%A8%D7%A0%D7%98-%D7%9C%D7%9E%D7%A4%D7%AA%D7%97%D7%99%D7%9D/css-sprite/">Css Sprite</a>.</p>
<p>אריזת מספר קבצי תמונה בקובץ אחד יכולה להעשות באופן עצמאי בתוכנת גרפיקה כלשהי או על ידי Css Sprite Generator. קיימים מספר מחוללים (generators) ובהם גם כאלו שניתן לעבוד בהם Online ללא צורך בהורדת תוכנה. אנו בחרנו להשתמש בתוכנת  tonttu (ניתן להוריד את התוכנה <a href="http://www.soft82.com/download/windows/tonttu/">כאן</a>).</p>
<p>כל שעלינו לעשות הוא לגרור את האימגים הרצויים לתוך שטח העבודה של התוכנה. נשתדל לארוז בקובץ את כל האימגים המרכיבים את התפריט (אם הוא בנוי מאימגים), יתכן שניצור מספר אריזות לקבצים לפי ההקשר שלהם באתר, מכל מקום נמנע מהכנסת קבצי תמונה גדולים מאוד (כמו תמונות רקע) לתוך הקובץ שאנחנו אורזים.</p>
<p>לאחר שסיימנו לגרור את הקבצים שברצוננו לארוז, נבצע פעולת ייצוא (תחת התפריט "קובץ"). בכך נאמר למעשה לתוכנה לייצר לנו 3 קבצים:<br />
1.	קובץ בסיומת png שמכיל את כל האימגים שגררנו<br />
2.	קובץ css שמגדיר כיצד יש לחלץ מתוך קובץ התמונה הכללי כל פעם אימג' אחד. מובן שכל הdivs  מקבלים את אותה תמונת רקע (המכילה את כל האימגים) והחילוץ של אימג מסויים נעשה על ידי הגדרת גודל ל div ומיקום ל background.<br />
3.	קובץ html  שעושה שימוש ב css וב png  ומציג למעשה את כל האימגים. בקובץ זה אין לנו שימוש מיוחד.</p>
<p>כעת אנו יכולים להשתמש בקובץ ה css שנוצר ולהעתיק את ההגדרות ממנו אל קובץ ה css  המשמש אותנו באתר.</p>
<h2>הבנת ערכי המאפיין background position </h2>
<p>נניח שקובץ ה  sprite.png שלנו כולל 3 תמונות כמו בדוגמא הבאה:</p>
<p><a href="http://codeart.co.il/wp-content/uploads/2011/04/tonttu1.jpg"><img class="size-medium wp-image-497 aligncenter" title="tonttu1" src="http://codeart.co.il/wp-content/uploads/2011/04/tonttu1-255x300.jpg" alt="" width="255" height="300" /></a></p>
<p>נוכל לראות שב CSS  שמיוצר לנו, על מנת לראות אלמנט שנמצא במיקום 0,30 (תמונת הרקע של הcheck-box כאשר הוא מסומן) הפרמטר    background-position  בערך שמייצג את המיקום על ציר ה Y מקבל דווקא 30- . זאת למרות שבתמונת הרקע הוא נמצא במיקום 0,30. למעשה זה לא למרות זאת אלא דווקא משום כך.</p>
<pre class="brush: css; title: ; notranslate">
/*--- filename : check_footer_uncheck.png ---*/
#id0 {
	width : 16px ;
	height : 16px ;
	background-position : left top ;
	background-repeat : no-repeat ;
}

/*--- filename : check_footer_check.png ---*/
#id1 {
	width : 16px ;
	height : 16px ;
	background-position : left -30px ;
	background-repeat : no-repeat ;
}
</pre>
<p>על מנת להבין את זה נסתכל אל הdiv שלנו שאנחנו רוצים שיקבל את הimg כתמונת רקע כאילו הוא חלון שמאחוריו יש לשים את תמונת הרקע. במקרה שלנו תמונת הרקע היא די גדולה ויש בה כל מיני תמונות כדי לראות את האלמנט המסויים שרצינו יש למקם את תמונת הרקע הגדולה מאחורי החלון 30 פיקסלים למעלה כלומר להזיז מלמעלה 30-.</p>
<h2>חשיבות מיקום האימגים על משטח העבודה </h2>
<p>בדוגמא שלעיל יש לנו div  (חלון) גדול ואנחנו רוצים לתת לו תמונת רקע קטנה שתראה רק בחלקו של החלון (נאמר בצד ימין).  עלינו למקם את התמונה בקצה השמאלי של קובץ התמונות כדי שנוכל להזיז את הרקע מאחורי החלון הרבה ימינה ולא תכנס שם בטעות איזשהי תמונה נוספת.<br />
להלן דוגמא למיקום התמונות בקובץ sprite.png שתיצור בעיה:</p>
<p><a href="http://codeart.co.il/wp-content/uploads/2011/04/tonttu2.jpg"><img class="size-medium wp-image-498 aligncenter" title="tonttu2" src="http://codeart.co.il/wp-content/uploads/2011/04/tonttu2-262x300.jpg" alt="" width="262" height="300" /></a></p>
<p>כך זה יראה באתר:</p>
<p><a href="http://codeart.co.il/wp-content/uploads/2011/04/pic.jpg"><img class="size-medium wp-image-499 aligncenter" title="pic" src="http://codeart.co.il/wp-content/uploads/2011/04/pic-300x84.jpg" alt="" width="300" height="84" /></a></p>
<p>כנ"ל לגבי מיקום קבצי רקע שאמורים לקבל repeat, גם במצב זה יש לנו חלון גדול ואנחנו רוצים להשתמש בתמונת רקע קטנה. כיוון שהחלון גדול (לעיתים גודלו אינו מוגדר מראש) נדאג שתמונת הרקע שלנו תהיה בקצה קובץ התמונות על מנת שלא תשתרבב לנו לחלון תמונה שלא רצינו.</p>
<p>לסיכום: שימוש ב css sprite נעשה יותר ויותר נפוץ ככלי לאופטימציה של אתרים והוא מומלץ על ידי גוגל.</p>
</div><img src="http://feeds.feedburner.com/~r/codeart-dev/~4/mUvCrx2lPFc" height="1" width="1"/>]]></content:encoded>			<wfw:commentRss>http://codeart.co.il/2011/04/%d7%a2%d7%91%d7%95%d7%93%d7%94-%d7%a2%d7%9d-css-sprite/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://codeart.co.il/2011/04/%d7%a2%d7%91%d7%95%d7%93%d7%94-%d7%a2%d7%9d-css-sprite/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25d7%25a2%25d7%2591%25d7%2595%25d7%2593%25d7%2594-%25d7%25a2%25d7%259d-css-sprite</feedburner:origLink></item>
		<item>
		<title>‫CSS  – עימוד מסגרת מוצללת בגודל דינאמי כאשר בתוכה יש גרדיאנט.‬</title>		<link>http://feedproxy.google.com/~r/codeart-dev/~3/jSyP3L_-bsQ/</link>
		<comments>http://codeart.co.il/2011/03/css-%d7%a2%d7%99%d7%9e%d7%95%d7%93-%d7%9e%d7%a1%d7%92%d7%a8%d7%aa-%d7%9e%d7%95%d7%a6%d7%9c%d7%9c%d7%aa-%d7%91%d7%92%d7%95%d7%93%d7%9c-%d7%93%d7%99%d7%a0%d7%90%d7%9e%d7%99-%d7%9b%d7%90%d7%a9%d7%a8/#comments</comments>
		<pubDate>Mon, 07 Mar 2011 13:20:34 +0000</pubDate>
		<dc:creator>‫אשרה‬</dc:creator>				<category><![CDATA[css]]></category>

		<guid isPermaLink="false">http://codeart.co.il/?p=474</guid>
		<description><![CDATA[&#8235;בעיצוב שהתקבל היתה תמונה עם מסגרת מוצללת. גודל המסגרת צריך להשתנות לפי כמות הטקסט. ברור <a href="http://codeart.co.il/2011/03/css-%d7%a2%d7%99%d7%9e%d7%95%d7%93-%d7%9e%d7%a1%d7%92%d7%a8%d7%aa-%d7%9e%d7%95%d7%a6%d7%9c%d7%9c%d7%aa-%d7%91%d7%92%d7%95%d7%93%d7%9c-%d7%93%d7%99%d7%a0%d7%90%d7%9e%d7%99-%d7%9b%d7%90%d7%a9%d7%a8/" class="read-more">קריאה...</a>&#8236;]]></description>			<content:encoded><![CDATA[<div dir="rtl"><p>בעיצוב שהתקבל היתה תמונה עם מסגרת מוצללת. גודל המסגרת צריך להשתנות לפי כמות הטקסט. ברור שישי לחתוך גבול עליון, פס רוחב מהאמצע  (שיחזור על עצמו על ציר ה Y  בהתאם לכמות התוכן) וגבול תחתון. הבעיה מסתבכת כשרקע המסגרת אינו אחיד אלא גרדיאנט כפי שנראה בתמונה:<br />
<a href="http://codeart.co.il/wp-content/uploads/2011/03/תמונה-לפוסט.jpg"><img src="http://codeart.co.il/wp-content/uploads/2011/03/תמונה-לפוסט-133x300.jpg" alt="" title="תמונה לפוסט" width="133" height="300" class="alignnone size-medium wp-image-475" /></a></p>
<p>כבר לא ניתן להסתפק בפס רוחב מהאמצע אלא יש לפרק את זה לגבול ימני, גבול שמאלי והתוכן בפנים יהיה פס אורך שיחזור על עצמו על ציר ה X (כאשר מתחתיו יש צבע רקע אפור שהוא הצבע שמתקבל בסוף הגרדיאנט).</p>
<p>על מנת שהגבול הימני והגבול השמאלי שניהם יקבלו את גובהם מכמות התוכן יש לבצע קינון של ה  DIV's באופן הבא:</p>
<pre class="brush: php; title: ; notranslate">

&lt;div class=&quot;right_box&quot;&gt;
	&lt;div class=&quot;rb_top&quot;&gt;&lt;/div&gt;

	&lt;div class=&quot;rb_mid&quot;&gt;
		&lt;div class=&quot;rb_mid_r&quot;&gt;
			&lt;div class=&quot;rb_mid_l&quot;&gt;
				&lt;div class=&quot;rb_mid_m&quot;&gt;
					&lt;?php the_content(); ?&gt;
				&lt;/div&gt;
			&lt;/div&gt;
		&lt;/div&gt;
	&lt;/div&gt;

	&lt;div class=&quot;rb_bottom&quot;&gt;&lt;/div&gt;
&lt;/div&gt; 
</pre>
<p>נתמקד ב Div האמצעי (rb_mid). התרשים המצורף מתאר את ה Divs שבתוכו. הDiv הראשון באדום, השני בירוק והשלישי בכחול. </p>
<p><a href="http://codeart.co.il/wp-content/uploads/2011/03/CSS.jpg"><img src="http://codeart.co.il/wp-content/uploads/2011/03/CSS-276x300.jpg" alt="" title="CSS" width="276" height="300" class="alignnone size-medium wp-image-478" /></a></p>
<p>ה Div  הראשון (אדום) קיבל padding  מימין על מנת שהוא יציג את תמונת התיחום הימנית. ה Div השני (ירוק) למעשה  תופס את אותו שטח כמו זה שבתוכו הוא נמצא פחות ה padding. לו יש padding משמאל על מנת שהוא יציג את תמונת התיחום השמאלית וה Div  השלישי (כחול) יכיל את התוכן כך שכאשר התוכן יהיה רב, שלושת ה Div יגדלו בהתאם.</p>
<p>קוד CSS:</p>
<pre class="brush: css; title: ; notranslate">

.rb_mid {}
.rb_mid_r {background: url(images/index-page/rb_mid_rlimit.png) repeat-y top right;   padding-right: 10px;} 

.rb_mid_l {background: url(images/index-page/rb_mid_llimit.png) repeat-y left top ; padding-left: 10px;  }	

.rb_mid_m {background: #eeeeee url(images/index-page/rb_mid_mid.jpg) repeat-x top right;  width: 590px;  }
</pre>
</div><img src="http://feeds.feedburner.com/~r/codeart-dev/~4/jSyP3L_-bsQ" height="1" width="1"/>]]></content:encoded>			<wfw:commentRss>http://codeart.co.il/2011/03/css-%d7%a2%d7%99%d7%9e%d7%95%d7%93-%d7%9e%d7%a1%d7%92%d7%a8%d7%aa-%d7%9e%d7%95%d7%a6%d7%9c%d7%9c%d7%aa-%d7%91%d7%92%d7%95%d7%93%d7%9c-%d7%93%d7%99%d7%a0%d7%90%d7%9e%d7%99-%d7%9b%d7%90%d7%a9%d7%a8/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://codeart.co.il/2011/03/css-%d7%a2%d7%99%d7%9e%d7%95%d7%93-%d7%9e%d7%a1%d7%92%d7%a8%d7%aa-%d7%9e%d7%95%d7%a6%d7%9c%d7%9c%d7%aa-%d7%91%d7%92%d7%95%d7%93%d7%9c-%d7%93%d7%99%d7%a0%d7%90%d7%9e%d7%99-%d7%9b%d7%90%d7%a9%d7%a8/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=css-%25d7%25a2%25d7%2599%25d7%259e%25d7%2595%25d7%2593-%25d7%259e%25d7%25a1%25d7%2592%25d7%25a8%25d7%25aa-%25d7%259e%25d7%2595%25d7%25a6%25d7%259c%25d7%259c%25d7%25aa-%25d7%2591%25d7%2592%25d7%2595%25d7%2593%25d7%259c-%25d7%2593%25d7%2599%25d7%25a0%25d7%2590%25d7%259e%25d7%2599-%25d7%259b%25d7%2590%25d7%25a9%25d7%25a8</feedburner:origLink></item>
		<item>
		<title>‫פילטרים לפונקציות (או איך גורמים לכך שהפונקציה the_content תחזיר גם מידע לגבי המחבר)‬</title>		<link>http://feedproxy.google.com/~r/codeart-dev/~3/--hZqwdRtik/</link>
		<comments>http://codeart.co.il/2011/01/%d7%a4%d7%99%d7%9c%d7%98%d7%a8%d7%99%d7%9d-%d7%9c%d7%a4%d7%95%d7%a0%d7%a7%d7%a6%d7%99%d7%95%d7%aa-%d7%90%d7%95-%d7%90%d7%99%d7%9a-%d7%92%d7%95%d7%a8%d7%9e%d7%99%d7%9d-%d7%9c%d7%9b%d7%9a-%d7%a9%d7%94/#comments</comments>
		<pubDate>Tue, 11 Jan 2011 12:23:30 +0000</pubDate>
		<dc:creator>‫אשרה‬</dc:creator>				<category><![CDATA[וורדפרס]]></category>

		<guid isPermaLink="false">http://codeart.co.il/?p=379</guid>
		<description><![CDATA[&#8235;וורדפרס מאפשרת לנו להשפיע על המחרוזות המוחזרות מפונקציות באמצעות פילטרים. בדוגמא הבאה (שורת קוד ששולבה <a href="http://codeart.co.il/2011/01/%d7%a4%d7%99%d7%9c%d7%98%d7%a8%d7%99%d7%9d-%d7%9c%d7%a4%d7%95%d7%a0%d7%a7%d7%a6%d7%99%d7%95%d7%aa-%d7%90%d7%95-%d7%90%d7%99%d7%9a-%d7%92%d7%95%d7%a8%d7%9e%d7%99%d7%9d-%d7%9c%d7%9b%d7%9a-%d7%a9%d7%94/" class="read-more">קריאה...</a>&#8236;]]></description>			<content:encoded><![CDATA[<div dir="rtl"><p>וורדפרס מאפשרת לנו להשפיע על המחרוזות המוחזרות מפונקציות באמצעות פילטרים.</p>
<p>בדוגמא הבאה (שורת קוד ששולבה בקובץ functions.php) אנו מוסיפים את הפונקציה my_add_author_info כפילטר לפונקציה  the_content . </p>
<pre class="brush: php; title: ; notranslate">
add_filter('the_content', 'my_add_author_info ', 9);
</pre>
<p>הפונקציה the_content מחזירה את תוכן הפוסט או העמוד. לאחר הפעלת הפילטר, קריאה ל the_content תחזיר לא רק את תוכן הפוסט אלא גם תשרשר לו מידע על המחבר.</p>
<p>כאשר תיקרא הפונקציה the_content היא תתבצע ולאחר מכן תקרא לפונקציה my_add_author_info  ואף תעביר לה כפרמטר את הערך המוחזר ממנה (כלומר את תוכן הפוסט או העמוד). הערך המוחזר מהפונקציה my_add_aouthr_info (ולמעשה גם מהפונקציה the_content) יכלול גם את העריכה שפונקציה 2 ביצעה (כלומר את הוספת המידע לגבי המחבר).</p>
<p>כל מה שעלינו לעשות הוא לכתוב את הפונקציה my_add_author_info כך שתקבל מחרוזת ותחזיר מחרוזת חדשה אליה היא שירשרה מידע לגבי המחבר ולשלבה בקובץ functions.php  <strong>לפני</strong> הוספת הפילטר.</p>
<p>קוד לדוגמא:</p>
<pre class="brush: php; title: ; notranslate">
function 'my_add_author_info($content)
{
     	$author_data = '&lt;div&gt;  שם המחבר,  תפקידו וכו' &lt;/div&gt;';
	return $content.$author_data;
}
add_filter('the_content', 'my_add_author_info ', 10); 
</pre>
<p>באפשרותינו לשלוט בסדר הפילטרים באחת משתי דרכים: באמצעות מיקום הפילטרים בקובץ function.php או באמצעות הפרמטר השלישי של add_filter הלוא הוא priority (עדיפות). ככל שהערך בפרמטר priority  נמוך יותר כך העדיפות גבוהה יותר.</p>
<p>להלן שתי דוגמאות לסדר פעולות שונה<br />
1.	עדיפות זהה, רשאית יתווסף לתוכן הפוסט מידע על המחבר ולאחריו גם רשימת פוסטים דומים</p>
<pre class="brush: php; title: ; notranslate">

function 'my_add_author_info($content)
{
     	$author_data = '&lt;div&gt;  שם המחבר,  תפקידו וכו' &lt;/div&gt;';
	return $content.$author_data;
}
add_filter('the_content', 'my_add_author_info ', 10);
function 'my_add_similer_post($content)
{
	$similer_post = '&lt;div&gt;  פוסטים דומים&lt;/div&gt;';
	return $content.$ similer_post;
}
add_filter('the_content', 'my_add_similer_post ', 10); 
</pre>
<p>2.	עדיפות גבוהה יותר לפילטר הנמצא שני בקוד. רשאית יתווסף לתוכן הפוסט רשימת פוסטים דומים  ולאחר מכן מידע על המחבר.</p>
<pre class="brush: php; title: ; notranslate">

function 'my_add_author_info($content)
{
     	$author_data = '&lt;div&gt;  שם המחבר,  תפקידו וכו' &lt;/div&gt;';
	return $content.$author_data;
}
add_filter('the_content', 'my_add_author_info ', 10);
function 'my_add_similer_post($content)
{
	$similer_post = '&lt;div&gt;  פוסטים דומים&lt;/div&gt;';
	return $content.$ similer_post;
}
add_filter('the_content', 'my_add_similer_post ', 9); 
</pre>
</div><img src="http://feeds.feedburner.com/~r/codeart-dev/~4/--hZqwdRtik" height="1" width="1"/>]]></content:encoded>			<wfw:commentRss>http://codeart.co.il/2011/01/%d7%a4%d7%99%d7%9c%d7%98%d7%a8%d7%99%d7%9d-%d7%9c%d7%a4%d7%95%d7%a0%d7%a7%d7%a6%d7%99%d7%95%d7%aa-%d7%90%d7%95-%d7%90%d7%99%d7%9a-%d7%92%d7%95%d7%a8%d7%9e%d7%99%d7%9d-%d7%9c%d7%9b%d7%9a-%d7%a9%d7%94/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://codeart.co.il/2011/01/%d7%a4%d7%99%d7%9c%d7%98%d7%a8%d7%99%d7%9d-%d7%9c%d7%a4%d7%95%d7%a0%d7%a7%d7%a6%d7%99%d7%95%d7%aa-%d7%90%d7%95-%d7%90%d7%99%d7%9a-%d7%92%d7%95%d7%a8%d7%9e%d7%99%d7%9d-%d7%9c%d7%9b%d7%9a-%d7%a9%d7%94/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25d7%25a4%25d7%2599%25d7%259c%25d7%2598%25d7%25a8%25d7%2599%25d7%259d-%25d7%259c%25d7%25a4%25d7%2595%25d7%25a0%25d7%25a7%25d7%25a6%25d7%2599%25d7%2595%25d7%25aa-%25d7%2590%25d7%2595-%25d7%2590%25d7%2599%25d7%259a-%25d7%2592%25d7%2595%25d7%25a8%25d7%259e%25d7%2599%25d7%259d-%25d7%259c%25d7%259b%25d7%259a-%25d7%25a9%25d7%2594</feedburner:origLink></item>
		<item>
		<title>‫jquery – טבלת "תוכן עניינים" לפוסט או עמוד‬</title>		<link>http://feedproxy.google.com/~r/codeart-dev/~3/LNR5o3LXaqM/</link>
		<comments>http://codeart.co.il/2011/01/jquery-%d7%98%d7%91%d7%9c%d7%aa-%d7%aa%d7%95%d7%9b%d7%9f-%d7%a2%d7%a0%d7%99%d7%99%d7%a0%d7%99%d7%9d-%d7%9c%d7%a4%d7%95%d7%a1%d7%98-%d7%90%d7%95-%d7%a2%d7%9e%d7%95%d7%93/#comments</comments>
		<pubDate>Wed, 05 Jan 2011 07:57:00 +0000</pubDate>
		<dc:creator>‫חנית‬</dc:creator>				<category><![CDATA[jquery]]></category>
		<category><![CDATA[וורדפרס]]></category>
		<category><![CDATA[מדריכים]]></category>

		<guid isPermaLink="false">http://codeart.co.il/?p=345</guid>
		<description><![CDATA[&#8235;אין ספק שאחד הפיצ'רים הנוחים ביותר למאמרים\פוסטים ארוכים הוא "תוכן עניינים" בתחילת הפוסט. יש כמה <a href="http://codeart.co.il/2011/01/jquery-%d7%98%d7%91%d7%9c%d7%aa-%d7%aa%d7%95%d7%9b%d7%9f-%d7%a2%d7%a0%d7%99%d7%99%d7%a0%d7%99%d7%9d-%d7%9c%d7%a4%d7%95%d7%a1%d7%98-%d7%90%d7%95-%d7%a2%d7%9e%d7%95%d7%93/" class="read-more">קריאה...</a>&#8236;]]></description>			<content:encoded><![CDATA[<div dir="rtl"><p>אין ספק שאחד הפיצ'רים הנוחים ביותר למאמרים\פוסטים ארוכים הוא "תוכן עניינים" בתחילת הפוסט.<br />
יש כמה תוספים לוורדפרס שעושים את העבודה, לרוע המזל לא מצאתי אחד שגם עושה אותה כפי שאני רוצה, וגם נותן לי לבחור אם ואיפה להכניס את הטבלה.<br />
שלא לומר - כשאנחנו מוסיפים את הקוד ישירות לתבנית אנחנו מייעלים את ההתקנה, חוסכים בתוספים ומאפשרים קסטומיזציה של קוד.</p>
<p>בכל מקרה הקוד למעשה מתחלק ל-2<br />
1. קוד ה-<a href="http://jquery.com/">jquery </a>הרלוונטי<br />
2. שימוש ב-<a href="http://codex.wordpress.org/Shortcode_API">shortcode </a>על מנת לאפשר את הכנסתו לתוך המיקום הרצוי בפוסט</p>
<p>שימו לב שהקוד מותאם אישית לתבנית בה אנו משתמשים, יש להתאימו לתבנית כדי שיעבוד.</p>
<p>קוד ה-javascript:</p>
<pre class="brush: jscript; title: ; notranslate">
$(&quot;#toc&quot;).append(\'&lt;p&gt;במאמר זה:&lt;/p&gt;\')
$(&quot;.hentry h1, .hentry h2, .hentry h3&quot;).each(function(i) {
        var current = $(this);
        current.attr(&quot;id&quot;, &quot;title&quot; + i);
        $(&quot;#toc&quot;).append(&quot;&lt;a id=\'link&quot; + i +
&quot;\' href=\'#title&quot; + i +  &quot;\' title=\'&quot; +
current.attr(&quot;tagName&quot;) + &quot;\'&gt;&lt;br/&gt;&quot; +
current.html() + &quot;&lt;/a&gt;&quot;);})
</pre>
<p>הקוד למעלה עובר למעשה על כל המסמך ומחפש כותרות מרמה 1-3 (ניתן לשנות כמובן)<br />
לכל כותרת שכזו אנחנו מוסיפים id ואח"כ מייצרים עבורה קישור בתוך טבלת הקישורים שלנו (היושבת בתוך div בשם toc)<br />
וזהו.</p>
<p>אם רוצים להוסיף גם קישורים "למעלה" לפני כל כותרת, צריך להוסיף לקוד את השורה </p>
<pre class="brush: jscript; title: ; notranslate">
current.before(\'&lt;a href=&quot;#toc&quot;&gt;למעלה&lt;/a&gt;\');
</pre>
<p>כפקודה אחרונה בלולאה. הקוד הזה יוסיף לנו קישור לטבלת התוכן (toc) לפני כל כותרת.</p>
<p>עד כה הקוד, על מנת להפעיל אותו צריך לדאוג שיהיה בתוך <a href="http://www.learningjquery.com/2006/09/introducing-document-ready">document.ready</a>... הבעיה היא שאם אנחנו רוצים להחליט על הפעלה ברמת הפוסט (כלומר <a href="http://codex.wordpress.org/Shortcode_API">shortcode</a>) הרי שעברנו את נקודת האל-חזור, ההאדרים כבר הוגדרו. למזלנו ל-<a href="http://jquery.com">jquery </a>יש פטנט נחמד נוסף. כל קוד שנכתב כקריאה לפונקציה אוטומטית משוייך ל-<a href="http://www.learningjquery.com/2006/09/introducing-document-ready">document.ready</a><br />
כך שהקוד שלנו למעשה ייראה כך:</p>
<pre class="brush: jscript; title: ; notranslate">
$(function($) {$(&quot;#toc&quot;).append('&lt;p&gt;במאמר זה:&lt;/p&gt;')
$(&quot;.hentry h1, .hentry h2, .hentry h3&quot;).each(function(i) {
    var current = $(this);
    current.attr(&quot;id&quot;, &quot;title&quot; + i);
    $(&quot;#toc&quot;).append(&quot;&lt;a id='link&quot; + i + &quot;' href='#title&quot; +
        i + &quot;' title='&quot; + current.attr(&quot;tagName&quot;) + &quot;'&gt;&lt;br/&gt;&quot; +
current.html() + &quot;&lt;/a&gt;&quot;);
	current.before('&lt;a href=&quot;#toc&quot;&gt;למעלה&lt;/a&gt;');});}))
</pre>
<p>ועכשיו המעבר לוורדפרס:<br />
- קודם כל כאשר <a href="http://digwp.com/2009/06/including-jquery-in-wordpress-the-right-way/">משתמשים ב-jquery בוורדפרס</a>, אין לנו יכולת להשתמש ב-$, השימוש הנכון הוא בעזרת הצורה המלאה (קרי jQuery). <a href="http://docs.jquery.com/Using_jQuery_with_Other_Libraries#Referencing_Magic_-_Shortcuts_for_jQuery">אם רוצים קצת לעקוף ניתן להעביר לפונקציה הראשית את הסימן $ כפרמטר ואז הוא יוכר בתוכה</a>. כלומר הקוד שלנו עכשיו נראה כך:</p>
<pre class="brush: jscript; title: ; notranslate">
jQuery(function($) {$(&quot;#toc&quot;).append(\'&lt;p&gt;במאמר זה:&lt;/p&gt;\')
$(&quot;.hentry h1, .hentry h2, .hentry h3&quot;).each(function(i) {
    var current = $(this);
    current.attr(&quot;id&quot;, &quot;title&quot; + i);
    $(&quot;#toc&quot;).append(&quot;&lt;a id=\'link&quot; + i + &quot;\' href=\'#title&quot; +
        i + &quot;\' title=\'&quot; + current.attr(&quot;tagName&quot;) + &quot;\'&gt;&lt;br/&gt;&quot; +
current.html() + &quot;&lt;/a&gt;&quot;);
	current.before(\'&lt;a href=&quot;#toc&quot;&gt;למעלה&lt;/a&gt;\');});})
</pre>
<p>- השלב הבא הוא הפיכת הקוד לפונקציית <a href="http://codex.wordpress.org/Shortcode_API">shortcode</a><br />
זה נראה כך:</p>
<pre class="brush: php; title: ; notranslate">function my_toc($atts) {
	return '&lt;div id=&quot;toc&quot;&gt;&lt;/div&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
jQuery(function($) {
    $(&quot;#toc&quot;).append(\'&lt;p&gt;במאמר זה:&lt;/p&gt;\')
    $(&quot;.hentry h1, .hentry h2, .hentry h3&quot;).each(function(i) {
        var current = $(this);
        current.attr(&quot;id&quot;, &quot;title&quot; + i);
        $(&quot;#toc&quot;).append(&quot;&lt;a id=\'link&quot; + i + &quot;\' href=\'#title&quot; +
            i + &quot;\' title=\'&quot; + current.attr(&quot;tagName&quot;) + &quot;\'&gt;&lt;br/&gt;&quot; +
            current.html() + &quot;&lt;/a&gt;&quot;);
	current.before(\'&lt;a href=&quot;#toc&quot;&gt;למעלה&lt;/a&gt;\');
    });
})
&lt;/script&gt;';
}
add_shortcode('TOC', 'my_toc');
</pre>
</div><img src="http://feeds.feedburner.com/~r/codeart-dev/~4/LNR5o3LXaqM" height="1" width="1"/>]]></content:encoded>			<wfw:commentRss>http://codeart.co.il/2011/01/jquery-%d7%98%d7%91%d7%9c%d7%aa-%d7%aa%d7%95%d7%9b%d7%9f-%d7%a2%d7%a0%d7%99%d7%99%d7%a0%d7%99%d7%9d-%d7%9c%d7%a4%d7%95%d7%a1%d7%98-%d7%90%d7%95-%d7%a2%d7%9e%d7%95%d7%93/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://codeart.co.il/2011/01/jquery-%d7%98%d7%91%d7%9c%d7%aa-%d7%aa%d7%95%d7%9b%d7%9f-%d7%a2%d7%a0%d7%99%d7%99%d7%a0%d7%99%d7%9d-%d7%9c%d7%a4%d7%95%d7%a1%d7%98-%d7%90%d7%95-%d7%a2%d7%9e%d7%95%d7%93/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=jquery-%25d7%2598%25d7%2591%25d7%259c%25d7%25aa-%25d7%25aa%25d7%2595%25d7%259b%25d7%259f-%25d7%25a2%25d7%25a0%25d7%2599%25d7%2599%25d7%25a0%25d7%2599%25d7%259d-%25d7%259c%25d7%25a4%25d7%2595%25d7%25a1%25d7%2598-%25d7%2590%25d7%2595-%25d7%25a2%25d7%259e%25d7%2595%25d7%2593</feedburner:origLink></item>
		<item>
		<title>‫טיפ – קטגוריות ותגיות בוורדפרס נעלמו‬</title>		<link>http://feedproxy.google.com/~r/codeart-dev/~3/17ueI4K901I/</link>
		<comments>http://codeart.co.il/2010/12/%d7%98%d7%99%d7%a4-%d7%a7%d7%98%d7%92%d7%95%d7%a8%d7%99%d7%95%d7%aa-%d7%95%d7%aa%d7%92%d7%99%d7%95%d7%aa-%d7%91%d7%95%d7%95%d7%a8%d7%93%d7%a4%d7%a8%d7%a1-%d7%a0%d7%a2%d7%9c%d7%9e%d7%95/#comments</comments>
		<pubDate>Fri, 31 Dec 2010 20:55:26 +0000</pubDate>
		<dc:creator>‫חנית‬</dc:creator>				<category><![CDATA[וורדפרס]]></category>
		<category><![CDATA[בעיות]]></category>
		<category><![CDATA[טיפים]]></category>
		<category><![CDATA[מדריכים]]></category>

		<guid isPermaLink="false">http://codeart.co.il/?p=340</guid>
		<description><![CDATA[&#8235;לאחד הלקוחות שלנו קרתה הבעיה הזו בדיוק.... הוא קם בבוקר והבלוג שלו לא עבד, הוא <a href="http://codeart.co.il/2010/12/%d7%98%d7%99%d7%a4-%d7%a7%d7%98%d7%92%d7%95%d7%a8%d7%99%d7%95%d7%aa-%d7%95%d7%aa%d7%92%d7%99%d7%95%d7%aa-%d7%91%d7%95%d7%95%d7%a8%d7%93%d7%a4%d7%a8%d7%a1-%d7%a0%d7%a2%d7%9c%d7%9e%d7%95/" class="read-more">קריאה...</a>&#8236;]]></description>			<content:encoded><![CDATA[<div dir="rtl"><p>לאחד הלקוחות שלנו קרתה הבעיה הזו בדיוק....<br />
הוא קם בבוקר והבלוג שלו לא עבד, הוא כמובן התקשר אלינו ישירות ואנחנו התחלנו לחטט מה קרה לאתר.<br />
לאחר מספר שניות הבנו שהסיבה שפוסטים אינם מופיעים בדף הבית קשורה לעובדה שדף הבית מציג רק קטגוריה אחת, ואילו הפוסטים מקוטלגים כולם כ-Uncategorized.<br />
זאת ועוד, קטגוריית ברירת המחדל אצל הלקוח שונתה וע"כ שמה אפילו לא היה Uncategorized...</p>
<p>חפירה קלה בפורומים של וורדפרס.אורג גילתה לא מעט אנשים שנתקלו בבעיה כזה, ולמעשה שניים שחזרו לספר על הפתרון הסופי.<br />
מסתבר שהבעיה קרורה בדרך כלל למערכת ה-mysql (מה שלא באמת מפתיע), כאשר ספריית ה -tmp/ מתמלאת, השרת הופך לבעייתי והאינדיקציה הראשונה היא בשמות תגיות וקטגוריות.</p>
<p>לקחנו הימור, בד בבד עם מחיקת התכנים מספריית ה-tmp. של הלקוח (מה שהיה סביר שלא יעזור) פנינו אל האחסון.<br />
שעה מאוחר יותר חיכה לנו מייל:</p>
<blockquote>
<p dir="ltr">Hi Hannit,</p>
<p dir="ltr">You're right /tmp partition was full.<br />
I've just cleaned it.<br />
Be free contact us if you need further assistance.</p>
</blockquote>
<p>והכל חזר לעבוד בצורה נפלאה.<br />
שווה לזכור ולשמור.</p>
</div><img src="http://feeds.feedburner.com/~r/codeart-dev/~4/17ueI4K901I" height="1" width="1"/>]]></content:encoded>			<wfw:commentRss>http://codeart.co.il/2010/12/%d7%98%d7%99%d7%a4-%d7%a7%d7%98%d7%92%d7%95%d7%a8%d7%99%d7%95%d7%aa-%d7%95%d7%aa%d7%92%d7%99%d7%95%d7%aa-%d7%91%d7%95%d7%95%d7%a8%d7%93%d7%a4%d7%a8%d7%a1-%d7%a0%d7%a2%d7%9c%d7%9e%d7%95/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://codeart.co.il/2010/12/%d7%98%d7%99%d7%a4-%d7%a7%d7%98%d7%92%d7%95%d7%a8%d7%99%d7%95%d7%aa-%d7%95%d7%aa%d7%92%d7%99%d7%95%d7%aa-%d7%91%d7%95%d7%95%d7%a8%d7%93%d7%a4%d7%a8%d7%a1-%d7%a0%d7%a2%d7%9c%d7%9e%d7%95/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25d7%2598%25d7%2599%25d7%25a4-%25d7%25a7%25d7%2598%25d7%2592%25d7%2595%25d7%25a8%25d7%2599%25d7%2595%25d7%25aa-%25d7%2595%25d7%25aa%25d7%2592%25d7%2599%25d7%2595%25d7%25aa-%25d7%2591%25d7%2595%25d7%2595%25d7%25a8%25d7%2593%25d7%25a4%25d7%25a8%25d7%25a1-%25d7%25a0%25d7%25a2%25d7%259c%25d7%259e%25d7%2595</feedburner:origLink></item>
		<item>
		<title>‫קורס תכנות וורדפרס‬</title>		<link>http://feedproxy.google.com/~r/codeart-dev/~3/29XrY5Ld0g0/</link>
		<comments>http://codeart.co.il/2010/07/%d7%a7%d7%95%d7%a8%d7%a1-%d7%aa%d7%9b%d7%a0%d7%95%d7%aa-%d7%95%d7%95%d7%a8%d7%93%d7%a4%d7%a8%d7%a1/#comments</comments>
		<pubDate>Thu, 08 Jul 2010 09:20:36 +0000</pubDate>
		<dc:creator>‫חנית‬</dc:creator>				<category><![CDATA[כללי]]></category>

		<guid isPermaLink="false">http://codeart.co.il/?p=293</guid>
		<description><![CDATA[&#8235;קוד-ארט מרימה קורס ראשון מסוגו בארץ למפתחי וורדפרס (WordPress). הקורס נועד ללמד תכנות תבניות וורדפרס <a href="http://codeart.co.il/2010/07/%d7%a7%d7%95%d7%a8%d7%a1-%d7%aa%d7%9b%d7%a0%d7%95%d7%aa-%d7%95%d7%95%d7%a8%d7%93%d7%a4%d7%a8%d7%a1/" class="read-more">קריאה...</a>&#8236;]]></description>			<content:encoded><![CDATA[<div dir="rtl"><p><img class="alignright" src="http://s.wordpress.org/about/images/logo-blue/blue-m.png" alt="" width="45" height="45" />קוד-ארט מרימה קורס ראשון מסוגו בארץ למפתחי וורדפרס (WordPress).</p>
<p>הקורס נועד ללמד תכנות תבניות וורדפרס ויכסה את גרסאות 2.5 ומעלה.</p>
<p><strong>דרישות קדם לקורס:</strong></p>
<ul>
<li><a class="zem_slink" title="HTML" rel="wikipedia" href="http://en.wikipedia.org/wiki/HTML">HTML</a> 3 ומעלה (עדיף 4)</li>
<li><a class="zem_slink" title="Cascading Style Sheets" rel="wikipedia" href="http://en.wikipedia.org/wiki/Cascading_Style_Sheets">CSS</a> 2 ומעלה</li>
<li><a class="zem_slink" title="PHP" rel="homepage" href="http://www.php.net/">PHP</a> ברמה סבירה +</li>
<li>JS, J/query - יתרון</li>
</ul>
<p>הקורס מיועד למתכנתים (אלא אם יתגלה צורך משמעותי ללימוד של PHP) ומטרתו הפיכת תכנתי PHP לתכנתי וורדפרס.</p>
<p>הקורס ייארך 40 שעות, בכיתת מחשבים באזור המרכז (כנראה ת"א).</p>
<p>הקורס מיועד להפתח באוקטובר ומיועד ל-10 איש בלבד.</p>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><span class="zem-script more-related pretty-attribution"><script src="http://static.zemanta.com/readside/loader.js" type="text/javascript"></script></span></div>
</div><img src="http://feeds.feedburner.com/~r/codeart-dev/~4/29XrY5Ld0g0" height="1" width="1"/>]]></content:encoded>			<wfw:commentRss>http://codeart.co.il/2010/07/%d7%a7%d7%95%d7%a8%d7%a1-%d7%aa%d7%9b%d7%a0%d7%95%d7%aa-%d7%95%d7%95%d7%a8%d7%93%d7%a4%d7%a8%d7%a1/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://codeart.co.il/2010/07/%d7%a7%d7%95%d7%a8%d7%a1-%d7%aa%d7%9b%d7%a0%d7%95%d7%aa-%d7%95%d7%95%d7%a8%d7%93%d7%a4%d7%a8%d7%a1/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25d7%25a7%25d7%2595%25d7%25a8%25d7%25a1-%25d7%25aa%25d7%259b%25d7%25a0%25d7%2595%25d7%25aa-%25d7%2595%25d7%2595%25d7%25a8%25d7%2593%25d7%25a4%25d7%25a8%25d7%25a1</feedburner:origLink></item>
	</channel>
</rss>

