<?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>Blog cakephp en español por Hospedaxes &#187; helper</title>
	<atom:link href="http://cakephp.hospedaxes.com/tag/helper/feed" rel="self" type="application/rss+xml" />
	<link>http://cakephp.hospedaxes.com</link>
	<description>Blog sobre desarrollo web con cakephp en español por Hospedaxes</description>
	<lastBuildDate>Mon, 26 Apr 2010 07:11:23 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Calendario en CakePHP</title>
		<link>http://cakephp.hospedaxes.com/calendario-en-cakephp</link>
		<comments>http://cakephp.hospedaxes.com/calendario-en-cakephp#comments</comments>
		<pubDate>Mon, 28 Jul 2008 12:20:04 +0000</pubDate>
		<dc:creator>nuria</dc:creator>
				<category><![CDATA[Noticias]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[cakephp-1.2]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[cakephp 1.2]]></category>
		<category><![CDATA[calendario]]></category>
		<category><![CDATA[helper]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.hospedaxes.com/blog-cakephp/?p=12</guid>
		<description><![CDATA[Cuando estamos desarrollando una página web, a menudo necesitamos introducir un calendario que nos permita seleccionar las fechas sin tener que escribirlas a mano.
En este post vamos a explicar cómo hacer esto, utilizando para ello el calendario DHTML Calendar desarrollado por Dynarch. Es un calendario con licencia GNU y que cubre perfectamente todas las funcionalidades [...]]]></description>
			<content:encoded><![CDATA[<p>Cuando estamos <a href="http://www.hospedaxes.com">desarrollando una página web</a>, a menudo necesitamos introducir un calendario que nos permita seleccionar las fechas sin tener que escribirlas a mano.</p>
<p>En este post vamos a explicar cómo hacer esto, utilizando para ello el calendario <a href="http://www.dynarch.com/projects/calendar/">DHTML Calendar</a> desarrollado por <a href="http://www.dynarch.com/">Dynarch</a>. Es un calendario con licencia <a href="http://es.wikipedia.org/wiki/Licencia_p%C3%BAblica_general_de_GNU">GNU</a> y que cubre perfectamente todas las funcionalidades que necesitamos.</p>
<p>Todos los ficheros necesarios para introducir el calendario en nuestra página web, junto con la estructura como se organizan en CakePHP 1.2, pueden descargarse <a href="http://cakephp.hospedaxes.com/wp-content/uploads/2008/07/calendariotar.gz">calendario</a>. Lo explicaremos paso a paso.</p>
<p>Lo primero que tenemos que hacer es descargarnos el calendario (podemos hacerlo directamente de la página web de Dynarch, o bien mediante el enlace del párrafo anterior) y descomprimirlo en la carpeta <em>app/webroot/js</em>. Necesitamos también otro fichero javascript, <em>common.js</em>, que también meteremos en esa carpeta. En el <em>body</em>, incluiremos estos ficheros escribiendo:</p>
<pre class="prettyprint">// Calendar includes
echo $javascript->link('jscalendar-1.0/calendar.js');
echo $javascript->link('jscalendar-1.0/lang/calendar-es.js');
echo $javascript->link('common.js');
// CSS Theme
echo $html->css('../js/jscalendar-1.0/skins/aqua/theme');</pre>
<p>Necesitamos ahora implementar un helper para que nos sea mucho más fácil la utilización de este calendario. Lo descargamos del enlace anterior y lo metemos en la carpeta <em>app/views/helpers</em>. Si miramos el código de este helper vemos que tenemos dos funciones, <strong>picker</strong> y <strong>flat</strong>, que nos permiten hacer que este calendario aparezca al pulsar un botón o que esté siempre visible en nuestra página.</p>
<p>Ya sólo nos falta introducir este calendario en nuestras páginas.</p>
<p>En el controlador, importamos el helper:</p>
<pre class="prettyprint">var $helpers = array('DatePicker');</pre>
<p>Y en la vista mostramos el calendario:</p>
<pre class="prettyprint">echo $datePicker->flat('fechaCalendarioFlat', array('id'=>'fechaCalendarioFlat'));
echo $datePicker->picker('fechaCalendarioPicker', array('id'=>'fechaCalendarioPicker'));</pre>
<p>Podemos ver una demostración del funcionamiento del calendario en este <a title="Calendario en CakePHP 1.2" href="http://cakephp.hospedaxes.com/pruebas/calendario">enlace</a>.</p>
<p>A partir del código proporcionado, podríamos añadir muchas funcionalidades. Por ejemplo, podremos editar el código del helper, para añadirle un observador de javascript al calendario tipo flat y que al pulsar en una fecha nos lleve a otra url, o podríamos hacer que ciertas fechas especiales se coloreen de manera distinta al resto.</p>
<p><em>NOTA:</em> Tras el comentario de Hijal, hemos comprobado que la versión del helper enlazada en este post es para la versión 1.1 de CakePHP, para la versión 1.2 únicamente habría que modificar las funciones <strong>flat</strong> y <strong>picker</strong>, de la manera que se muestra a continuación:</p>
<p>function picker($fieldName, $options = array()) {<br />
$this-&gt;_setup();<br />
$htmlAttributes = $this-&gt;domId($options);<br />
$divOptions['class'] = &#8216;date&#8217;;<br />
$options['type'] = &#8216;text&#8217;;<br />
$options['div']['class'] = &#8216;date&#8217;;<br />
$options['after'] = $this-&gt;Html-&gt;link($this-&gt;Html-&gt;image(&#8217;../js/jscalendar-1.0/img.gif&#8217;), &#8216;#&#8217;, array(&#8217;onClick&#8217;=&gt;&#8221;return showCalendar(&#8217;&#8221;.$htmlAttributes['id'].&#8221;&#8216;, &#8216;&#8221;.$this-&gt;format.&#8221;&#8216;); return false;&#8221;), null, false);<br />
$output = $this-&gt;input($fieldName, $options);<br />
return $output;<br />
}</p>
<p>function flat($fieldName, $options = array()){<br />
$this-&gt;_setup();<br />
$htmlAttributes = $this-&gt;domId($options);<br />
$divOptions['class'] = &#8216;date&#8217;;<br />
$options['type'] = &#8216;hidden&#8217;;<br />
$options['div']['class'] = &#8216;date&#8217;;<br />
$hoder = &#8216;&lt;div id=&#8221;&#8216;.$htmlAttributes['id'].&#8217;_cal&#8217;.'&#8221;&gt;&lt;/div&gt;&lt;script type=&#8221;text/javascript&#8221;&gt;showFlatCalendar(&#8221;&#8216;.$htmlAttributes['id'].&#8217;&#8221;, &#8220;&#8216;.$htmlAttributes['id'].&#8217;_cal&#8217;.'&#8221;, &#8220;&#8216;.$this-&gt;format.&#8217;&#8221;, function(cal, date){document.getElementById(\&#8221;.$htmlAttributes['id'].&#8221;.&#8217;\').value = date});&lt;/script&gt;&#8217;;<br />
$output = $this-&gt;input($fieldName, $options).$hoder;<br />
return $output;<br />
}</p>
<p>Estas dos funciones se encuentran ya modificadas en el fichero tar.gz que se adjunta en el post. Junto con otra modificación surgida tras el siguiente comentario en el foro <a href="http://cakephp.hospedaxes.com/dudas/topic/calendario-en-cakephp" target="_blank">http://cakephp.hospedaxes.com/dudas/topic/calendario-en-cakephp</a></p>
]]></content:encoded>
			<wfw:commentRss>http://cakephp.hospedaxes.com/calendario-en-cakephp/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
	</channel>
</rss>
