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

<channel>
	<title>Erhan is typing... &#187; PHP</title>
	<atom:link href="http://erhanabay.com/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://erhanabay.com</link>
	<description>WebDevelopment , PHP, Javascript, CakePHP, ExtJS</description>
	<lastBuildDate>Sat, 23 Jan 2010 15:15:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Ext.Direct for CakePHP</title>
		<link>http://erhanabay.com/2009/11/28/ext-direct-for-cakephp/</link>
		<comments>http://erhanabay.com/2009/11/28/ext-direct-for-cakephp/#comments</comments>
		<pubDate>Sat, 28 Nov 2009 02:19:51 +0000</pubDate>
		<dc:creator>Erhan Abay</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://erhanabay.com/?p=385</guid>
		<description><![CDATA[Finally, I completed the basic implementation of Ext.Direct server-side stack for CakePHP. You can clone a working copy from http://github.com/eabay/directcakephp. It is not that good but it works! http://www.extjs.com/forum/showthread.php?t=86501 Related Posts:CakePHP Helper for rakaz Combine Items Per Page Plugin for ExtJS


Related Posts:<ul><li><a href='http://erhanabay.com/2009/11/19/cakephp-helper-for-rakaz-combine/' rel='bookmark' title='Permanent Link: CakePHP Helper for rakaz Combine'>CakePHP Helper for rakaz Combine</a></li>
<li><a href='http://erhanabay.com/2009/10/10/items-per-page-plugin-for-extjs/' rel='bookmark' title='Permanent Link: Items Per Page Plugin for ExtJS'>Items Per Page Plugin for ExtJS</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>Finally, I completed the basic implementation of Ext.Direct server-side stack for CakePHP.</p>
<p>You can clone a working copy from <a href="http://github.com/eabay/directcakephp" onclick="pageTracker._trackPageview('/outgoing/github.com/eabay/directcakephp?referer=');">http://github.com/eabay/directcakephp</a>.</p>
<p>It is not that good but it works! <img src='http://erhanabay.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://www.extjs.com/forum/showthread.php?t=86501" onclick="pageTracker._trackPageview('/outgoing/www.extjs.com/forum/showthread.php?t=86501&amp;referer=');">http://www.extjs.com/forum/showthread.php?t=86501</a></p>
<img src="http://erhanabay.com/?ak_action=api_record_view&id=385&type=feed" alt="" />

<p>Related Posts:<ul><li><a href='http://erhanabay.com/2009/11/19/cakephp-helper-for-rakaz-combine/' rel='bookmark' title='Permanent Link: CakePHP Helper for rakaz Combine'>CakePHP Helper for rakaz Combine</a></li>
<li><a href='http://erhanabay.com/2009/10/10/items-per-page-plugin-for-extjs/' rel='bookmark' title='Permanent Link: Items Per Page Plugin for ExtJS'>Items Per Page Plugin for ExtJS</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://erhanabay.com/2009/11/28/ext-direct-for-cakephp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP Helper for rakaz Combine</title>
		<link>http://erhanabay.com/2009/11/19/cakephp-helper-for-rakaz-combine/</link>
		<comments>http://erhanabay.com/2009/11/19/cakephp-helper-for-rakaz-combine/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 20:49:41 +0000</pubDate>
		<dc:creator>Erhan Abay</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[cakephp helper]]></category>
		<category><![CDATA[combine]]></category>
		<category><![CDATA[compress]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[helpers]]></category>

		<guid isPermaLink="false">http://erhanabay.com/?p=373</guid>
		<description><![CDATA[Combine is still my favorite javascript/css combine and compress script. I posted a solution how to use it in a CakePHP application and here is a little helper to make it more useful: &#60;?php //app/views/helpers/combine.php class CombineHelper extends AppHelper { public $helpers = array('Html', 'Javascript'); private $_pattern = '../combine.php?type=:type&#38;files=:files'; public function js($files) { echo $this-&#62;Javascript-&#62;link($this-&#62;_format($files)); [...]


Related Posts:<ul><li><a href='http://erhanabay.com/2009/11/28/ext-direct-for-cakephp/' rel='bookmark' title='Permanent Link: Ext.Direct for CakePHP'>Ext.Direct for CakePHP</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>Combine is still my favorite javascript/css combine and compress script.</p>
<p>I <a href="http://erhanabay.com/2009/01/29/using-rakaz-combine-with-your-cakephp-application/">posted</a> a solution how to use it in a CakePHP application and here is a little helper to make it more useful:</p>
<pre class="brush: php;">
&lt;?php
//app/views/helpers/combine.php
class CombineHelper extends AppHelper
{
	public $helpers = array('Html', 'Javascript');

	private $_pattern = '../combine.php?type=:type&amp;files=:files';

	public function js($files)
	{
		echo $this-&gt;Javascript-&gt;link($this-&gt;_format($files));
	}

	public function css($files)
	{
		echo $this-&gt;Html-&gt;css($this-&gt;_format($files, 'css'));
	}

	private function _format($files = array(), $type = 'javascript')
	{
		return String::insert($this-&gt;_pattern, array('type' =&gt; $type, 'files' =&gt; implode(',', $files)));
	}
}
</pre>
<p>Add it to controller&#8217;s helpers property:</p>
<pre class="brush: php;">
&lt;?php
class MyController extends AppController
{
	public $helpers = array('Combine');
</pre>
<p>And call it by passing an array of file names in your view:</p>
<pre class="brush: php;">
$combine-&gt;js(array(
    'javascript1.js',
    'javascript2.js',
    'javascript3.js'
));

$combine-&gt;css(array(
    'stylesheet1.css',
    'stylesheet2.css',
    'stylesheet3.css'
));
</pre>
<blockquote><p>Don&#8217;t forget to add file extensions!</p></blockquote>
<blockquote><p>If you want to add only one file, you don&#8217;t have to use combine helper. Directives added to .htaccess file let combine script to compress the file(<a href="http://erhanabay.com/2009/01/29/using-rakaz-combine-with-your-cakephp-application/">See related post</a>). Just use <em>$javascript->link(&#8216;filename&#8217;)</em>.</p></blockquote>
<img src="http://erhanabay.com/?ak_action=api_record_view&id=373&type=feed" alt="" />

<p>Related Posts:<ul><li><a href='http://erhanabay.com/2009/11/28/ext-direct-for-cakephp/' rel='bookmark' title='Permanent Link: Ext.Direct for CakePHP'>Ext.Direct for CakePHP</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://erhanabay.com/2009/11/19/cakephp-helper-for-rakaz-combine/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP: lcfirst</title>
		<link>http://erhanabay.com/2009/07/01/php-lcfirst/</link>
		<comments>http://erhanabay.com/2009/07/01/php-lcfirst/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 20:00:32 +0000</pubDate>
		<dc:creator>Erhan Abay</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP 5.3]]></category>

		<guid isPermaLink="false">http://erhanabay.com/?p=273</guid>
		<description><![CDATA[I need to make the first character of the string lowercase. I know ucfirst exists and I supposed that there is a &#8220;lcfirst&#8221; one as well. When I started to type &#8220;lcfirst&#8221;, Zend Studio didn&#8217;t suggest me a function with this name and it was interesting. PHP documentation says that it is available but it [...]


Related Posts:<ul><li><a href='http://erhanabay.com/2009/11/19/cakephp-helper-for-rakaz-combine/' rel='bookmark' title='Permanent Link: CakePHP Helper for rakaz Combine'>CakePHP Helper for rakaz Combine</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>I need to make the first character of the string lowercase. I know ucfirst exists and I supposed that there is a &#8220;<a href="http://us2.php.net/manual/en/function.lcfirst.php" onclick="pageTracker._trackPageview('/outgoing/us2.php.net/manual/en/function.lcfirst.php?referer=');">lcfirst</a>&#8221; one as well.</p>
<p>When I started to type &#8220;lcfirst&#8221;, Zend Studio didn&#8217;t suggest me a function with this name and it was interesting. PHP documentation says that it is available but it throws an exception. What the hack goes wrong?</p>
<p>Here is the answer: It was too late and too hard to keep my eyes open <img src='http://erhanabay.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>lcfirst function is available in <a href="http://www.php.net/archive/2009.php#id2009-06-30-1" onclick="pageTracker._trackPageview('/outgoing/www.php.net/archive/2009.php_id2009-06-30-1?referer=');">newly released version of PHP, 5.3</a>. I am still using 5.2.9. Here is a code snippet:</p>
<pre class="brush: php;">
if (!function_exists('lcfirst')) {
    function lcfirst($string) {
        return substr_replace($string, strtolower(substr($string, 0, 1)), 0, 1);
    }
}
</pre>
<p>It is unbelivable that I don&#8217;t ever need the function lcfirst before. <img src='http://erhanabay.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<img src="http://erhanabay.com/?ak_action=api_record_view&id=273&type=feed" alt="" />

<p>Related Posts:<ul><li><a href='http://erhanabay.com/2009/11/19/cakephp-helper-for-rakaz-combine/' rel='bookmark' title='Permanent Link: CakePHP Helper for rakaz Combine'>CakePHP Helper for rakaz Combine</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://erhanabay.com/2009/07/01/php-lcfirst/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Image Rotator For Your SilverStripe Application</title>
		<link>http://erhanabay.com/2009/01/30/image-rotator-for-your-silverstripe-application/</link>
		<comments>http://erhanabay.com/2009/01/30/image-rotator-for-your-silverstripe-application/#comments</comments>
		<pubDate>Fri, 30 Jan 2009 00:15:43 +0000</pubDate>
		<dc:creator>Erhan Abay</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[SilverStripe]]></category>
		<category><![CDATA[image rotator]]></category>
		<category><![CDATA[widget]]></category>

		<guid isPermaLink="false">http://erhanabay.com/?p=195</guid>
		<description><![CDATA[I used SilverStripe to develop couple of projects and I really liked it. I am still a fan of CakePHP but you should give a try if you don&#8217;t want to build a new CMS from scratch with CakePHP. I want to show you how easy to add an image rotator to your SilverStripe site [...]


Related Posts:<ul><li><a href='http://erhanabay.com/2009/11/19/cakephp-helper-for-rakaz-combine/' rel='bookmark' title='Permanent Link: CakePHP Helper for rakaz Combine'>CakePHP Helper for rakaz Combine</a></li>
<li><a href='http://erhanabay.com/2009/10/10/items-per-page-plugin-for-extjs/' rel='bookmark' title='Permanent Link: Items Per Page Plugin for ExtJS'>Items Per Page Plugin for ExtJS</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>I used <a href="http://www.silverstripe.org" onclick="pageTracker._trackPageview('/outgoing/www.silverstripe.org?referer=');">SilverStripe</a> to develop couple of projects and I really liked it. I am still a fan of <a href="http://cakephp.org" onclick="pageTracker._trackPageview('/outgoing/cakephp.org?referer=');">CakePHP</a> but you should give a try if you don&#8217;t want to build a new CMS from scratch with CakePHP.</p>
<p>I want to show you how easy to add an image rotator to your SilverStripe site by using <a href="http://www.longtailvideo.com/players/jw-image-rotator/" onclick="pageTracker._trackPageview('/outgoing/www.longtailvideo.com/players/jw-image-rotator/?referer=');">JW Image Rotator</a>. You can see it in action at <a href="http://sumpa.com.tr/" onclick="pageTracker._trackPageview('/outgoing/sumpa.com.tr/?referer=');">sumpa.com.tr</a>.</p>
<p>First <a href="http://www.longtailvideo.com/players/jw-image-rotator/" onclick="pageTracker._trackPageview('/outgoing/www.longtailvideo.com/players/jw-image-rotator/?referer=');">download</a> the greatest flash image rotator, JW Image Rotator. Then copy/move it to your SilverStripe project folder. I prefer &#8220;images&#8221; folder.</p>
<p><img class="size-full wp-image-198 aligncenter" title="ss01" src="http://erhanabay.com/wp-content/uploads/2009/01/ss01.png" alt="ss01" width="229" height="576" /></p>
<p>In order to add or remove new images (or swf files) to your rotator easily, we are going to use a folder in our &#8220;Uploads&#8221; directory and list all the files in this folder. Let&#8217;s assume that our directory name is &#8220;flash&#8221;. To do that, go to your admin panel in SilverStripe, switch to &#8220;Files &amp; Images&#8221; tab in your menu and create a new directory called &#8220;flash&#8221;.</p>
<p><a href="http://erhanabay.com/wp-content/uploads/2009/01/ss02.png"><img class="aligncenter size-full wp-image-199" title="ss02" src="http://erhanabay.com/wp-content/uploads/2009/01/ss02.png" alt="ss02" width="332" height="254" /></a></p>
<p>In your Page class, define a new method called ImageRotator().</p>
<pre class="brush: php;">
// myproject/code/Page.php

class Page extends SiteTree {

  static $db = array();
  static $has_one = array();

  function ImageRotator() {
    return DataObject::get('File', 'ClassName &lt;&gt; &quot;Folder&quot; AND ParentID = (SELECT ID FROM File WHERE ClassName = &quot;Folder&quot; AND Name = &quot;flash&quot; LIMIT 0,1)');
  }
}
</pre>
<p>Create a new file &#8220;ImageRotator.ss&#8221; in &#8220;myproject/templates/&#8221;</p>
<pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;playlist version=&quot;1&quot; xmlns=&quot;http://xspf.org/ns/0/&quot;&gt;
  &lt;trackList&gt;
  &lt;% if ImageRotator %&gt;
    &lt;% control ImageRotator %&gt;
    &lt;track&gt;
      &lt;title&gt;$Title.XML&lt;/title&gt;
      &lt;location&gt;$BaseHref$Filename.XML&lt;/location&gt;
    &lt;/track&gt;
    &lt;% end_if %&gt;
  &lt;% end_control %&gt;
  &lt;/trackList&gt;
&lt;/playlist&gt;
</pre>
<p> </p>
<p>Create a new file &#8220;Flash.ss&#8221; in &#8220;myproject/templates/Includes&#8221;</p>
<pre class="brush: xml;">

&lt;!--
Don't change the &quot;file&quot; variable. This is the URI of our XML which contains images
You can change other settings or add/remove.
--&gt;

&lt;script type=&quot;text/javascript&quot;&gt;
var introFlashvars = {
  width: &quot;950&quot;,
  height: &quot;300&quot;,
  file: &quot;$URLSegment/ImageRotatorXML&quot;,
  shownavigation: false,
  screencolor: &quot;0xFFFFFF&quot;,
  rotatetime: 15
};

var params = {
  wmode: &quot;transparent&quot;
}
&lt;/script&gt;

&lt;!--
Following div with id &quot;Intro&quot; is used as a container for our image rotator.
Browsers which are not supporting Javascript, &quot;dummyimage.jpg&quot; image linked to the home page is displayed

Don't forget to add swfobject.js into your head tag!
You can download it from http://code.google.com/p/swfobject/
--&gt;
&lt;div id=&quot;Intro&quot;&gt;&lt;a href=&quot;/&quot;&gt;&lt;img src=&quot;dummyimage.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  swfobject.embedSWF(&quot;$ThemeDir/images/imagerotator.swf&quot;, &quot;Intro&quot;, introFlashvars.width, introFlashvars.height, &quot;8&quot;, false, introFlashvars, params);
&lt;/script&gt;
</pre>
<p>We complete the steps to create our rotator. Now, you can call it from any page that you want with the following include directive:</p>
<pre class="brush: xml;">
&lt;% include Flash %&gt;
</pre>
<p>Upload your images and swf files into your &#8220;flash&#8221; directory and open the page by adding &#8220;?flush=1&#8243; to URI. It will refresh the cache.</p>
<p>I know, it should be a widget so that it can easily be added to the pages without hardcoding. I am not planning to do that kind of work but if you find it useful, convert it to a widget and <a href="http://www.silverstripe.org/widgets/" onclick="pageTracker._trackPageview('/outgoing/www.silverstripe.org/widgets/?referer=');">share with community</a>. You are free to do that! No license, no restrictions&#8230; <img src='http://erhanabay.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Contributions are welcome&#8230;</p>
<img src="http://erhanabay.com/?ak_action=api_record_view&id=195&type=feed" alt="" />

<p>Related Posts:<ul><li><a href='http://erhanabay.com/2009/11/19/cakephp-helper-for-rakaz-combine/' rel='bookmark' title='Permanent Link: CakePHP Helper for rakaz Combine'>CakePHP Helper for rakaz Combine</a></li>
<li><a href='http://erhanabay.com/2009/10/10/items-per-page-plugin-for-extjs/' rel='bookmark' title='Permanent Link: Items Per Page Plugin for ExtJS'>Items Per Page Plugin for ExtJS</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://erhanabay.com/2009/01/30/image-rotator-for-your-silverstripe-application/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Using rakaz Combine With Your CakePHP Application</title>
		<link>http://erhanabay.com/2009/01/29/using-rakaz-combine-with-your-cakephp-application/</link>
		<comments>http://erhanabay.com/2009/01/29/using-rakaz-combine-with-your-cakephp-application/#comments</comments>
		<pubDate>Thu, 29 Jan 2009 03:42:13 +0000</pubDate>
		<dc:creator>Erhan Abay</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[combine]]></category>
		<category><![CDATA[compress]]></category>
		<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://erhanabay.com/?p=189</guid>
		<description><![CDATA[Combine is a small PHP script and some clever URL rewriting designed to speed up the loading of pages that use many or large css and javascript files. It is good but how can you integrate it with your CakePHP project? And solution comes with the question . Download a copy of combine.php and drop [...]


Related Posts:<ul><li><a href='http://erhanabay.com/2009/11/19/cakephp-helper-for-rakaz-combine/' rel='bookmark' title='Permanent Link: CakePHP Helper for rakaz Combine'>CakePHP Helper for rakaz Combine</a></li>
<li><a href='http://erhanabay.com/2009/11/28/ext-direct-for-cakephp/' rel='bookmark' title='Permanent Link: Ext.Direct for CakePHP'>Ext.Direct for CakePHP</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<blockquote><p><a href="http://rakaz.nl/extra/code/combine" onclick="pageTracker._trackPageview('/outgoing/rakaz.nl/extra/code/combine?referer=');">Combine</a> is a small PHP script and some clever URL rewriting designed to speed up the loading of pages that use many or large css and javascript files.</p></blockquote>
<p>It is good but how can you integrate it with your CakePHP project? And solution comes with the question <img src='http://erhanabay.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p><a href="http://rakaz.nl/projects/combine/combine.phps" onclick="pageTracker._trackPageview('/outgoing/rakaz.nl/projects/combine/combine.phps?referer=');">Download</a> a copy of combine.php and drop it into your &#8220;app/webroot&#8221; directory (or whatever your application folder name is XXX/webroot/).</p>
<p>Open the file in your text editor and change lines:</p>
<pre class="brush: php;">
$cachedir = dirname(__FILE__) . '/cache';
$cssdir   = dirname(__FILE__) . '/css';
$jsdir    = dirname(__FILE__) . '/javascript';
</pre>
<p>with</p>
<pre class="brush: php;">
$cachedir = dirname(__FILE__) . '/../tmp/cache';
$cssdir   = dirname(__FILE__) . '/css';
$jsdir    = dirname(__FILE__) . '/js';
</pre>
<p>Open your &#8220;app/webroot/.htaccess&#8221; file and add those two lines</p>
<pre class="brush: php;">
RewriteRule ^css/(.*\.css) combine.php?type=css&amp;files=$1
RewriteRule ^js/(.*\.js) combine.php?type=javascript&amp;files=$1
</pre>
<p>That&#8217;s all! Check download times of your css and javascript files with a tool like Firebug. A fatty 527KB ext-all.js javascript framework file compressed to 140KB! Amazing ha?</p>
<p><a href="http://erhanabay.com/wp-content/uploads/2009/01/combinephp.jpg"><img src="http://erhanabay.com/wp-content/uploads/2009/01/combinephp.jpg" alt="rakaz combine" title="rakaz combine" width="865" height="292" class="aligncenter size-full wp-image-190" /></a></p>
<img src="http://erhanabay.com/?ak_action=api_record_view&id=189&type=feed" alt="" />

<p>Related Posts:<ul><li><a href='http://erhanabay.com/2009/11/19/cakephp-helper-for-rakaz-combine/' rel='bookmark' title='Permanent Link: CakePHP Helper for rakaz Combine'>CakePHP Helper for rakaz Combine</a></li>
<li><a href='http://erhanabay.com/2009/11/28/ext-direct-for-cakephp/' rel='bookmark' title='Permanent Link: Ext.Direct for CakePHP'>Ext.Direct for CakePHP</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://erhanabay.com/2009/01/29/using-rakaz-combine-with-your-cakephp-application/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>CakePHP RequestHandler Extended</title>
		<link>http://erhanabay.com/2009/01/29/cakephp-requesthandler-extended/</link>
		<comments>http://erhanabay.com/2009/01/29/cakephp-requesthandler-extended/#comments</comments>
		<pubDate>Thu, 29 Jan 2009 03:14:34 +0000</pubDate>
		<dc:creator>Erhan Abay</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[components]]></category>
		<category><![CDATA[extending cakephp component]]></category>

		<guid isPermaLink="false">http://erhanabay.com/?p=181</guid>
		<description><![CDATA[A CakePHP component which extends built-in RequestHandler component by adding some useful geolocation information. It requires MaxMind WebService license key to work properly. Save it with the name request_handler_ext.php into your application components directory under controllers. You can call the following methods within your controller (e.g. $this->RequestHandlerExt->methodName()): getClientCountryCode() : ISO 3166 Two-letter Country Code getClientRegionCode() [...]


Related Posts:<ul><li><a href='http://erhanabay.com/2009/11/19/cakephp-helper-for-rakaz-combine/' rel='bookmark' title='Permanent Link: CakePHP Helper for rakaz Combine'>CakePHP Helper for rakaz Combine</a></li>
<li><a href='http://erhanabay.com/2009/10/10/items-per-page-plugin-for-extjs/' rel='bookmark' title='Permanent Link: Items Per Page Plugin for ExtJS'>Items Per Page Plugin for ExtJS</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>A CakePHP component which extends built-in RequestHandler component by adding some useful geolocation information. It requires MaxMind WebService license key to work properly.</p>
<p>Save it with the name request_handler_ext.php into your application components directory under controllers.</p>
<p>You can call the following methods within your controller (e.g. $this->RequestHandlerExt->methodName()):</p>
<blockquote><p>
getClientCountryCode() : ISO 3166 Two-letter Country Code<br />
getClientRegionCode() : Region Code<br />
getClientCity() : City<br />
getClientPostalCode() : Postal Code<br />
getClientLatitude() : Latitude<br />
getClientLongitude() : Longitude<br />
getClientMetropolitanCode() : Metropolitan Code<br />
getClientMetropolitanCode() : Area Code<br />
getClientIsp() : ISP<br />
getClientOrganization() : Organization
</p></blockquote>
<pre class="brush: php;">
&lt;?php
/**
 * Extends RequestHandler component by adding some useful geolocation information.
 *
 * Requires MaxMind WebService license key to work properly
 *
 * @copyright     2009 Erhan Abay
 * @package       app
 * @subpackage    app.controllers.components
 * @version       $Revision$
 * @lastmodified  $Date$
 */

App::import('Component', 'RequestHandler');

class RequestHandlerExtComponent extends RequestHandlerComponent
{
	/**
	 * Required to query MaxMind WebService
	 *
	 * Provide your own key by replacing XXXXX.
	 */
	const MM_LICENSE_KEY = 'XXXXXX';

	public function startup(&amp;amp;amp;amp;amp;$controller)
	{
		parent::startup(&amp;amp;amp;amp;amp;$controller);
		$this-&gt;controller =&amp;amp;amp;amp;amp; $controller;
	}

	/**
	 * Searches key value in array returned by function getGeoLocation()
	 *
	 * @param string $name Name of the method
	 * @param unknown_type $arguments Not used, required not to give error
	 * @return string if key found
	 *         null else
	 */
	public function __call($name, $raw = false)
	{
		$var = Inflector::underscore(preg_replace('/getClient/i', '', $name));
		$geo_location = (array)$this-&gt;getGeoLocation($raw);

		return array_key_exists($var, $geo_location) ? $geo_location[$var] : null;
	}

	/**
	 * Queries to the MaxMind WebService and returns an array of information
	 *
	 * @param bool $raw
	 * @return null if IP address is local
	 *         bool false if webservice returns error code
	 *         string if $raw is set true
	 *         array else
	 */
  public function getGeoLocation($raw = false)
  {
  	if ($this-&gt;isLocalIP()) {
  		return null;
  	}

  	if ($this-&gt;controller-&gt;Session-&gt;check('User.GeoLocation')) {
  		return $raw ? $this-&gt;controller-&gt;Session-&gt;read('User.GeoLocation.raw') : $this-&gt;controller-&gt;Session-&gt;read('User.GeoLocation');
  	}

    App::import('HttpSocket');

    $http = new HttpSocket();

    /*
     * Returns in order:
     *
     * 0  ISO 3166 Two-letter Country Code,
     * 1  Region Code,
     * 2  City,
     * 3  Postal Code,
     * 4  Latitude,
     * 5  Longitude,
     * 6  Metropolitan Code,
     * 7  Area Code,
     * 8  ISP,
     * 9  Organization,
     * 10 Error code
     */
    $result = $http-&gt;get('http://geoip1.maxmind.com/f', array(
      'l' =&gt; self::MM_LICENSE_KEY,
      'i' =&gt; $this-&gt;getClientIP()
    ));

    $values = explode(',', $result);

    if (isset($values[10])) {
      return false;
    }

    if ($raw) {
    	return $result;
    }

    $keys = array('country_code', 'region_code', 'city', 'postal_code', 'latitude', 'longitude', 'metropolitan_code', 'area_code', 'isp', 'organization');
    $data = array_combine($keys, $values);
    $data['coords'] = $values[4].','.$values[5];
    $data['raw'] = $result;
    $this-&gt;controller-&gt;Session-&gt;write('User.GeoLocation', $data);

    return $data;
  }

  /**
   * Detects whether IP address is local or not
   *
   * @param string $ip IP address to check
   * @return bool
   */
  public function isLocalIP($ip = null) {
  	$ip = is_null($ip) ? $this-&gt;getClientIP() : $ip;

  	$regex = '/(192\.168\.[0-9]{1,3}\.[0-9]{1,3})';
	$regex .= '|(10\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})';
	$regex .= '|(172\.0?([1][6-9])Â¦([2][0-9])Â¦([3][0-1])\.[0-9]{1,3}\.[0-9]{1,3})';
	$regex .= '|(127\.0\.0\.1)/';

  	return (bool)preg_match($regex, $ip);
  }
}
?&gt;
</pre>
<img src="http://erhanabay.com/?ak_action=api_record_view&id=181&type=feed" alt="" />

<p>Related Posts:<ul><li><a href='http://erhanabay.com/2009/11/19/cakephp-helper-for-rakaz-combine/' rel='bookmark' title='Permanent Link: CakePHP Helper for rakaz Combine'>CakePHP Helper for rakaz Combine</a></li>
<li><a href='http://erhanabay.com/2009/10/10/items-per-page-plugin-for-extjs/' rel='bookmark' title='Permanent Link: Items Per Page Plugin for ExtJS'>Items Per Page Plugin for ExtJS</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://erhanabay.com/2009/01/29/cakephp-requesthandler-extended/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Make CakePHP Email Component Reusable</title>
		<link>http://erhanabay.com/2009/01/29/make-cakephp-email-component-reusable/</link>
		<comments>http://erhanabay.com/2009/01/29/make-cakephp-email-component-reusable/#comments</comments>
		<pubDate>Thu, 29 Jan 2009 02:52:36 +0000</pubDate>
		<dc:creator>Erhan Abay</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[components]]></category>
		<category><![CDATA[extending cakephp component]]></category>

		<guid isPermaLink="false">http://erhanabay.com/?p=175</guid>
		<description><![CDATA[I know the title of this post a little bit confusing but let me explain what I want to tell. You are using CakePHP&#8216;s email component and you should set the same information in each time before you send your email like server address, username, password etc. Just create a new file mailer.php with the [...]


Related Posts:<ul><li><a href='http://erhanabay.com/2009/11/19/cakephp-helper-for-rakaz-combine/' rel='bookmark' title='Permanent Link: CakePHP Helper for rakaz Combine'>CakePHP Helper for rakaz Combine</a></li>
<li><a href='http://erhanabay.com/2009/10/10/items-per-page-plugin-for-extjs/' rel='bookmark' title='Permanent Link: Items Per Page Plugin for ExtJS'>Items Per Page Plugin for ExtJS</a></li>
<li><a href='http://erhanabay.com/2009/11/28/ext-direct-for-cakephp/' rel='bookmark' title='Permanent Link: Ext.Direct for CakePHP'>Ext.Direct for CakePHP</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>I know the title of this post a little bit confusing but let me explain what I want to tell.</p>
<p>You are using <a href="http://cakephp.org" onclick="pageTracker._trackPageview('/outgoing/cakephp.org?referer=');">CakePHP</a>&#8216;s email component and you should set the same information in each time before you send your email like server address, username, password etc.</p>
<p>Just create a new file mailer.php with the following content and drop it into your CakePHP application components folder (I like convention over configuration! <img src='http://erhanabay.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ).</p>
<pre class="brush: php;">
&lt;?php
App::import('Component', 'Email');

class MailerComponent extends EmailComponent
{
  var $from = 'ME &lt;me@localhost&gt;';
  var $replyTo = 'noreply@localhost';
  var $sendAs = 'both';
  var $delivery = 'smtp';
  var $xMailer = 'Postman';
  var $smtpOptions = array(
    'port'=&gt; 25,
    'host' =&gt; 'serveradress',
    'timeout' =&gt; 30,
    'username' =&gt; 'username',
    'password' =&gt; 'password'
  );
}
?&gt;
</pre>
<p>And right now you have a new component with the name &#8220;Mailer&#8221; and its server configuration is predefined. You can reuse it without being affected by any kind of mail server change.</p>
<p>You can define a new function inside your controller (_sendEmail() in our case) and make the email sending process more painless.</p>
<pre class="brush: php;">
class AnyController extends AppController
{
  function contact()
  {
    if ($this-&gt;_sendEmail('Name', 'blabla@fakeemail', 'Grate site!')) {
      $this-&gt;Session-&gt;setFlash(__(&quot;Thank you&quot;, true));
    } else {
      $this-&gt;Session-&gt;setFlash('Damn it!');
    }
  }

  function _sendEmail($name, $email, $message)
  {
    $this-&gt;Mailer-&gt;to = 'info@localhost';
    $this-&gt;Mailer-&gt;subject = __(&quot;Site Contact&quot;, true);
    $this-&gt;Mailer-&gt;template = 'contact';

    $this-&gt;set('name', $name);
    $this-&gt;set('email', $email);
    $this-&gt;set('message', $message);
    $this-&gt;Mailer-&gt;send();

    $this-&gt;log( $this-&gt;Mailer-&gt;subject . ' -&gt; Name:'. $name .' | E-posta: '. $email .' | Message: '. $message .' | smtp error: '. serialize($this-&gt;Mailer-&gt;smtpError) );

    return $this-&gt;Mailer-&gt;smtpError ? false : true;
  }
}
</pre>
<p>That&#8217;s all! Check <a href="http://bakery.cakephp.org/" onclick="pageTracker._trackPageview('/outgoing/bakery.cakephp.org/?referer=');">Bakery</a> for other cakes <img src='http://erhanabay.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<img src="http://erhanabay.com/?ak_action=api_record_view&id=175&type=feed" alt="" />

<p>Related Posts:<ul><li><a href='http://erhanabay.com/2009/11/19/cakephp-helper-for-rakaz-combine/' rel='bookmark' title='Permanent Link: CakePHP Helper for rakaz Combine'>CakePHP Helper for rakaz Combine</a></li>
<li><a href='http://erhanabay.com/2009/10/10/items-per-page-plugin-for-extjs/' rel='bookmark' title='Permanent Link: Items Per Page Plugin for ExtJS'>Items Per Page Plugin for ExtJS</a></li>
<li><a href='http://erhanabay.com/2009/11/28/ext-direct-for-cakephp/' rel='bookmark' title='Permanent Link: Ext.Direct for CakePHP'>Ext.Direct for CakePHP</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://erhanabay.com/2009/01/29/make-cakephp-email-component-reusable/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>PHP Kurulumu</title>
		<link>http://erhanabay.com/2007/06/02/php-kurulumu/</link>
		<comments>http://erhanabay.com/2007/06/02/php-kurulumu/#comments</comments>
		<pubDate>Sat, 02 Jun 2007 21:48:14 +0000</pubDate>
		<dc:creator>Erhan Abay</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://erhanabay.com/2007/06/02/php-kurulumu/</guid>
		<description><![CDATA[Popüler web uygulama geliştirme dili PHP&#8217;nin IIS kurulu Windows işletim sistemine kurulumu. IIS için &#8220;IIS kurulumu&#8221; başlıklı video size yardımcı olacaktır. [coolplayer width="800" height="655" autoplay="1" loop="0" charset="utf-8" download="0" mediatype=""] PHP Kurulumu [/coolplayer]]]></description>
			<content:encoded><![CDATA[<p>Popüler web uygulama geliştirme dili PHP&#8217;nin IIS kurulu Windows işletim sistemine kurulumu. IIS için &#8220;<a href="/2007/06/02/iis-kurulumu/">IIS kurulumu</a>&#8221; başlıklı video size yardımcı olacaktır.</p>
<p><span id="more-109"></span></p>
<p>[coolplayer width="800" height="655" autoplay="1" loop="0" charset="utf-8" download="0" mediatype=""]<br />
<a href="http://erhanabay.com/wp-content/uploads/2007/06/php_kurulumu.swf">PHP Kurulumu</a><br />
[/coolplayer]</p>
<img src="http://erhanabay.com/?ak_action=api_record_view&id=109&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://erhanabay.com/2007/06/02/php-kurulumu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Studio</title>
		<link>http://erhanabay.com/2007/05/18/zend-studio/</link>
		<comments>http://erhanabay.com/2007/05/18/zend-studio/#comments</comments>
		<pubDate>Fri, 18 May 2007 03:43:47 +0000</pubDate>
		<dc:creator>Erhan Abay</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://erhanabay.com/2007/05/18/zend-studio/</guid>
		<description><![CDATA[Web programlama dillerinden en popüleri PHP ile uygulama geliştirenlerin işini kolaylaştırmak için gerekli araçlardan en önemlisi olan Zend Studio&#8217;yu incelemeye çalıştık. PHP geliştiricilerin kod yazarken ihtiyaç duydukları araç tabiÃ® ki bir metin düzenleyicidir. En basit metin düzenleyici programın bile yetebileceği PHP&#8217;de daha üretken olabilmek ve zamanı iyi kullanabilmek için bir uygulama geliştirme ortamına (IDE, Integrated [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://erhanabay.com/wp-content/uploads/2007/05/zend-studio.png" title="zend-studio.png" alt="zend-studio.png" align="right" border="0" />Web programlama dillerinden en popüleri PHP ile uygulama geliştirenlerin işini kolaylaştırmak için gerekli araçlardan en önemlisi olan Zend Studio&#8217;yu incelemeye çalıştık.</p>
<p><span id="more-77"></span></p>
<p>PHP geliştiricilerin kod yazarken ihtiyaç duydukları araç tabiÃ® ki bir metin düzenleyicidir. En basit metin düzenleyici programın bile yetebileceği PHP&#8217;de daha üretken olabilmek ve zamanı iyi kullanabilmek için bir uygulama geliştirme ortamına (IDE, Integrated Development Environment) sahip olmak programcının daha hızlı çalışabilmesini sağlar.</p>
<p>Dreamweaver gibi araçların kodu renklendirmekten öteye gidememesinden rahatsız olmaya başladığınızda ve daha ciddi uygulama süreçlerinin içerisine sürüklendiğinizde size yardımcı olabilecek araçlardan biri ve en iyisi de Zend Studio. Fiyat konusunda sizleri zorlayacağını düşünüyorsanız da açık kaynak alternatif Maguma Open Studio ve Eclipse hemen yanınızda.</p>
<p><strong>Zend Studio</strong></p>
<p align="center"><a href="http://erhanabay.com/wp-content/uploads/2007/05/zend-ekran.png" title="zend-ekran.png"><img src="http://erhanabay.com/wp-content/uploads/2007/05/zend-ekran.thumbnail.png" title="zend-ekran.png" alt="zend-ekran.png" border="0" /></a></p>
<p>Bir PHP uygulama geliştirme ortamından bekleyebileceğiniz her şey Zend Studio içersinde var dersek sanırız çok da abartmış olmayız. Ne de olsa sloganı &#8216;The php Company&#8217; olan bir şirketin ürünü ve bu şirket PHP&#8217;nin geliştirilmesi sürecinin tam da ortasında.</p>
<p>Zend Studio düzenleme, test etme ve hata ayıklama işlerinin tümünü tıpkı diğer uygulama geliştirme ortamlarında olduğu gibi aynı pencerede yürütebilmenizi sağlayan bir tasarıma sahip. Böylece kodunuzu da gözünüzden ayırmadan tüm kontrolü elinizde tutabiliyorsunuz.</p>
<p align="center"><a href="http://erhanabay.com/wp-content/uploads/2007/05/zend-belge_tipi.png" title="zend-belge_tipi.png"><img src="http://erhanabay.com/wp-content/uploads/2007/05/zend-belge_tipi.thumbnail.png" title="zend-belge_tipi.png" alt="zend-belge_tipi.png" border="0" /></a></p>
<p>PHP, HTML, Javascript, CSS, XML, JSP gibi web ile ilgili belgelerde renklendirme yapabiliyor. Eğer uzantısından tanınamayan bir belge açılmak istenirse hangi renklendirme şablonunun kullanılmadı gerektiğini siz seçebiliyorsunuz.</p>
<p align="center"><a href="http://erhanabay.com/wp-content/uploads/2007/05/zend-snippet.png" title="zend-snippet.png"><img src="http://erhanabay.com/wp-content/uploads/2007/05/zend-snippet.thumbnail.png" title="zend-snippet.png" alt="zend-snippet.png" border="0" /></a></p>
<p>Zend Studio sadece PHP konusunda yol almışların rahat etmesini sağlayan bir program değil. Sahip olduğu kod örnekleri bölümü zend.com sitesindeki veritabanından da güncellenebiliyor ve böylece daha az tecrübeli geliştiricilerin de programlama süreçlerini kolaylaştıran katkılar sağlamış oluyor.</p>
<p align="center"> <a href="http://erhanabay.com/wp-content/uploads/2007/05/zend-otomatik_tamamlama.png" title="zend-otomatik_tamamlama.png"><img src="http://erhanabay.com/wp-content/uploads/2007/05/zend-otomatik_tamamlama.thumbnail.png" title="zend-otomatik_tamamlama.png" alt="zend-otomatik_tamamlama.png" border="0" /></a></p>
<p>Geliştiricinin en çok rahat edeceği özelliklerden bir tanesi de otomatik tamamlama. Tüm PHP fonksiyonlarının ve sizin tanımlamış olduğunuz sınıf ve fonksiyonların siz yazarken seçim listesi olarak gelmesi ve aldığı parametreleri de göstermesi sizi sürekli olarak belge ve kod incelemekten alıkoyuyor. Ayrıca hata olan satırın kelime işlemci programlardaki imla hatalarında olduğu gibi vurgulanması ve orta panelin sağında küçük kırmızı çizgiler ile satırın belirtilmesi yine hata yapılmaması için iyi bir önlem. Bu özellik çalıştığınız sayfaya dahil diğer sayfalarda yaptığınız tanımlamaları da içeriyor.</p>
<p align="center"><a href="http://erhanabay.com/wp-content/uploads/2007/05/zend-inspectors.png" title="zend-inspectors.png"><img src="http://erhanabay.com/wp-content/uploads/2007/05/zend-inspectors.thumbnail.png" title="zend-inspectors.png" alt="zend-inspectors.png" border="0" /></a></p>
<p>Eğer sayfanızdaki tüm sınıf ve fonksiyonları, eğer bir proje oluşturduysanız tüm projedekileri ya da tüm PHP fonksiyonlarını görüntülemek isterseniz sol taraftaki &#8216;Inspectors&#8217; paneli çok işinize yarayacak.</p>
<p align="center"><a href="http://erhanabay.com/wp-content/uploads/2007/05/zend-gotodeclaration.png" title="zend-gotodeclaration.png"><img src="http://erhanabay.com/wp-content/uploads/2007/05/zend-gotodeclaration.thumbnail.png" title="zend-gotodeclaration.png" alt="zend-gotodeclaration.png" border="0" /></a></p>
<p>Yine programcıyı hızlandıran özelliklerden biri de fonksiyonun tanımlı olduğu sayfaya kolay erişimi sağlayan akıllı yönlendirici. Ctrl tuşuna basılı tutarak fareyi bir fonksiyon veya sınıf üzerine getirdiğinizde ve tıkladığınızda sizi tanımlandığı yere yönlendirecek.</p>
<p align="center"><a href="http://erhanabay.com/wp-content/uploads/2007/05/zend-sqlserver.png" title="zend-sqlserver.png"><img src="http://erhanabay.com/wp-content/uploads/2007/05/zend-sqlserver.thumbnail.png" title="zend-sqlserver.png" alt="zend-sqlserver.png" border="0" /></a> <a href="http://erhanabay.com/wp-content/uploads/2007/05/zend-sql.png" title="zend-sql.png"><img src="http://erhanabay.com/wp-content/uploads/2007/05/zend-sql.thumbnail.png" title="zend-sql.png" alt="zend-sql.png" border="0" /></a></p>
<p>Web uygulaması geliştiriyorsanız veritabanı işlemlerini göz ardı etmek olmaz. Zend Studio&#8217;nun sahip olduğu veritabanı desteği birçok türdeki veritabanına erişebilmenizi ve sorgulama yapabilmenizi sağlıyor. Sorgu geçmişi ve dönen verilerde düzenleme yapabilme gibi ayrıntılar da fazladan bir veritabanı yönetim aracı kullanma gereksinimini ortadan kaldırıyor.</p>
<p align="center"><a href="http://erhanabay.com/wp-content/uploads/2007/05/zend-ftp.png" title="zend-ftp.png"><img src="http://erhanabay.com/wp-content/uploads/2007/05/zend-ftp.thumbnail.png" title="zend-ftp.png" alt="zend-ftp.png" border="0" /></a></p>
<p>Bazen yerelde değil de doğrudan sunucu üzerinde değişikler yapmak isteyebilirsiniz. Böyle bir durumda FTP/SFTP desteğini kullanarak indir-düzenle-geri yükle zahmetinden kurtulabilir, değişiklikleri anında sunucunuzda görebilirsiniz. Yeni eklediğiniz FTP sunucuları &#8216;File Manager&#8217; panelindeki &#8216;File Sources&#8217; altında yeni bir disk olarak görünecek. Dosyaya çift tıklayıp açtıktan sonra kaydetme ile beraber dosya sunucuya yüklenecek.</p>
<p><strong>Kod Analizi</strong><br />
Kodu yazdınız ve analiz etmesi için bir arkadaşınızın gözden geçirmesiniz istediğiniz. Ama arkadaşınızın da işi var. İşte bu noktada Zend Studio sizin çok daha yakın bir arkadaşınız olacak. Kodunuzu inceleyerek size önerilerde bulunabilir. Özellikle de güvenlik konularında çok hassas.</p>
<p><strong>Hata Ayıklama</strong><br />
Zend Studio&#8217;nun en önemli özelliği diyebiliriz. Normalde derlenen diller için kullanılan hemen hemen tüm hata ayıklama süreçleri ve özellikleri yorumlanan bir dil olan PHP için de gerçek kılınmış. Adım adım ilerleme ile kodun tam olarak nasıl çalıştığını görme (step over), kırılma noktası (break point) ekleme, ortam değişkenlerini gözleme, kod çıktısını metin ya da HTML sayfası olarak anında görebilme gibi özellikler sayesinde işinizin sonucunu başka bir tarayıcı açmadan da kolaylıkla takip edebilirsiniz.</p>
<p><strong>CVS/SVN desteği</strong><br />
Bir yazılım grubu olarak çalışanların (ya da düzenli olarak çalışmak isteyenlerin) kaynak kodu yönetimi ve sürüm kontrolü için kullandığı CVS ve onun biraz daha geliştirilmişi olan SVN sistemlerinin de Zend Studio tarafından desteklendiğini söylediğimizde sanırım bazılarınız sevinecek. En azından biz sevinmiştik <img src='http://erhanabay.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Ayarlardan sunucu tipi ve bilgilerini girdikten sonra desteklenen birçok standart komut ile sürüm kontrollü çalışabilirsiniz.</p>
<p><strong>Belgeleme desteği</strong><br />
Eğer belgelemeye önem veriyorsanız PHPDocumentor eklentisi sayesinde bu işi otomatik olarak yapabilirsiniz. Tabii ki bunun için PHPDoc formatına uygun bir kod yazmış olmalısınız. Yorum satırından kaçan programcılar için pek de önemli olmasa gerek <img src='http://erhanabay.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> .</p>
<p><strong>Web servis desteği</strong><br />
Piyasanın yavaş yavaş servis tabanlı hizmetlere doğru kaydığını göz önüne alırsak web servislerini de destekleyen Zend Studio&#8217;ta iyi demek için bir neden daha bulabiliriz. WSDL belgelerinizi oluşturmak için sihirbaz ile işinizi kolaylaştırıyor ve web servislerinizi tanımlamanızı sağlıyor.</p>
<p><strong>Profil Çıkarma</strong><br />
Zend Studio ile sayfalarınıza ait performans testleri yapabilir ve grafiksel sonuçlar ile kodunuzu tekrar değerlendirebilirsiniz. Sonuçlar size kodunuzun ne kadar zamanda çalıştırıldığı gibi bilgileri sunuyor.</p>
<p>Bazı özellikler Zend Studio&#8217;nun diğer Zend ürünleri ile ortak çalışmasına ait olduğundan bunlara yer vermedik. Ama ilgilenen okurlarımız için bunların Zend Studio Server ve Encode olduğunu söyleyebiliriz. Zend Encode ile kodunuzu şifreleyebilir ve iyileştirebilirsiniz.</p>
<p><em>Bu yazı Aralık 2006 tarihinde PC Tech dergisinde yayınlanmıştır.</em></p>
<img src="http://erhanabay.com/?ak_action=api_record_view&id=77&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://erhanabay.com/2007/05/18/zend-studio/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
