<?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>TecnoRetales &#187; jQuery</title>
	<atom:link href="http://www.tecnoretales.com/tag/jquery/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.tecnoretales.com</link>
	<description>La experiencia no se olvida</description>
	<lastBuildDate>Wed, 07 Jul 2010 21:23:33 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<!-- google ad injected by adsense-optimizer http://www.adsenseoptimizer.de -->
			<div  style="padding:7px; float: right; padding-right: 0; margin: 3px;"><!-- Ad number: 1 --><script type="text/javascript"><!--
    	 
    	google_ad_client = "pub-7180773421652966"; google_alternate_color = "FFFFFF";
		google_ad_width = 468; google_ad_height = 60;
		google_ad_format = "468x60_as"; google_ad_type = "text";
		google_ad_channel =""; google_color_border = "FE8B00";
		google_color_link = "FE8B00"; google_color_bg = "FFFFFF";
		google_color_text = "000000"; google_color_url = "D9D9D9";
		google_ui_features = "rc:6"; //--></script>
		<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script></div>	<item>
		<title>Cómo usar sfWidgetFormJQueryDate de sfFormExtraPlugin?</title>
		<link>http://www.tecnoretales.com/programacion/como-usar-sfwidgetformjquerydate-de-sfformextraplugin/</link>
		<comments>http://www.tecnoretales.com/programacion/como-usar-sfwidgetformjquerydate-de-sfformextraplugin/#comments</comments>
		<pubDate>Wed, 22 Jul 2009 20:43:32 +0000</pubDate>
		<dc:creator>Manel Pérez Mata</dc:creator>
				<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.tecnoretales.com/?p=552</guid>
		<description><![CDATA[sfFormExtraPlugin es un excelente plugin que mantienen los desarrolladores de Symfony con un montón de características adicionales que te ayudarán a construir formularios más completos.
¿Qué podemos encontrar en este plugin?
Són varias las utilidades que nos ofrece, desde la creación de campos captcha para evitar el spam hasta campos de texto autocompletables en función de lo [...]]]></description>
			<content:encoded><![CDATA[<!-- google_ad_section_start --><p>sfFormExtraPlugin es un excelente plugin que mantienen los desarrolladores de Symfony con un montón de características adicionales que te ayudarán a construir formularios más completos.</p>
<p><strong>¿Qué podemos encontrar en este plugin?</strong></p>
<p>Són varias las utilidades que nos ofrece, desde la creación de campos captcha para evitar el spam hasta campos de texto autocompletables en función de lo que vayamos escribiendo. Aquí os dejo una lista con sus posibilidades:</p>
<ol>
<li>ReCaptcha widget y validador</li>
<li>Editor HTML WYSIWYG para campos de texto</li>
<li>Selector de fechas tipo calendario</li>
<li>Selectores de idioma</li>
<li>Widget de listas dobles</li>
<li>Widget de autocompletado en campos de texto</li>
</ol>
<p><strong>¿Cómo instalar y usar sfWidgetFormJQueryDate?</strong></p>
<p>sfWidgetFormJQueryDate nos creará un selector de fechas con unas configuraciones mínimas para facilitar la tarea de rellenar los campos date en nuestros formularios. En la siguiente imágen, puedes ver el resultado de su correcta implementación:</p>
<p><img class="aligncenter size-full wp-image-553" title="sfwidgetformjquerydate" src="http://www.tecnoretales.com/wp-content/uploads/2009/07/sfwidgetformjquerydate.jpg" alt="sfwidgetformjquerydate" width="619" height="288" /><br />
<span id="more-552"></span><br />
A pesar de que este plugin está muy extendido, es muy poca la información que se puede encontrar sobre como instalarlo y usarlo correctamente. Espero que esta pequeña guía os sea de utilidad.</p>
<ol>
<li><strong>Instalar</strong> el plugin:<br />
<code>symfony plugin:install sfFormExtraPlugin</code></li>
<li>Una vez instalado, también necesitaremos <strong>descargar las librerías</strong> <a title="jQuery UI" href="http://jqueryui.com/download" target="_blank">jQuery UI</a> de la web oficial.</li>
<li>Ahora debemos <strong>configurar</strong> convenientemente nuestra aplicación para que use estas librerías javascript. Abre el zip descargado y mueve los archivos <em>jquery-1.3.2.min.js</em> y <em>jquery-ui-1.7.2.custom.min.js</em> a tu carpeta <em>/path/to/project/web/js/</em>Edita el archivo <em>/path/to/project/apps/[app]/config/view.yml</em> y añade esta información:<br />
<code>javascripts:    [jquery-1.3.2.min.js, jquery-ui-1.7.2.custom.min.js]</code></li>
<li>El siguiente paso será <strong>configurar los CSS</strong> de la librería jQuery UI. Añadimos  la siguiente información al archivo view.yml recién editado:<br />
<code>stylesheets:    [main.css, ui-lightness/jquery-ui-1.7.2.custom.css]</code></li>
<li>Configurar nuestro formulario para que utilice el widget:
<pre class="brush: php;">class myForm extends sfForm {
  public function configure()
  {
    $this-&gt;setWidgets(array(
      'from_date'    =&gt; new sfWidgetFormJQueryDate(array(
      'image'=&gt; '/images/icons/calendar_view_month.gif',
      'format' =&gt; '%day%/%month%/%year%')
    ),
      //...other widgets
    ));

    $this-&gt;widgetSchema-&gt;setLabels(array(
  		'from_date'    =&gt; 'From Date',
                //...other labels
    ));
  }
}</pre>
</li>
<li>Por último, lo prepararemos para usar en el action:
<pre class="brush: php;">  public function executeSearch(sfWebRequest $request){
    $this-&gt;form = new myForm();
    return sfView::SUCCESS;
  }</pre>
<p>y renderizaremos en la vista:</p>
<pre class="brush: php;">....
echo $form['from_date']-&gt;renderLabel().&quot;:&quot;.$form['from_date'];
....</pre>
</li>
</ol>
<p style="text-align: right;">Vía | <a href="http://symfonynerds.com/blog/?p=213" target="_blank">Symfonynerds.com</a></p>
<!-- google_ad_section_end -->]]></content:encoded>
			<wfw:commentRss>http://www.tecnoretales.com/programacion/como-usar-sfwidgetformjquerydate-de-sfformextraplugin/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Implementar FullCalendar en Symfony</title>
		<link>http://www.tecnoretales.com/programacion/implementar-fullcalendar-en-symfony/</link>
		<comments>http://www.tecnoretales.com/programacion/implementar-fullcalendar-en-symfony/#comments</comments>
		<pubDate>Fri, 12 Jun 2009 06:20:05 +0000</pubDate>
		<dc:creator>Manel Pérez Mata</dc:creator>
				<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.tecnoretales.com/?p=401</guid>
		<description><![CDATA[FullCalendar es un plugin jQuery que nos permite implementar de manera sencilla un calendario con una interfaz visual excelente y muy fácil de personalizar. Además, podemos hacer Drag&#38;Drop (arrastrar y soltar) de los eventos agendados para pasarlos de un día a otro.
Hoy vamos a montar en symfony un módulo que nos mostrará un calendario con [...]]]></description>
			<content:encoded><![CDATA[<!-- google_ad_section_start --><p><a title="FullCalendar" href="http://arshaw.com/fullcalendar/" target="_blank">FullCalendar</a> es un plugin jQuery que nos permite implementar de manera sencilla un calendario con una interfaz visual excelente y muy fácil de personalizar. Además, podemos hacer Drag&amp;Drop (arrastrar y soltar) de los eventos agendados para pasarlos de un día a otro.</p>
<p>Hoy vamos a montar en symfony un módulo que nos mostrará un calendario con los eventos almacenados en nuestra base de datos. La parte de administración no la desarrollaré, pero con las completas herramientas que nos ofrece symfony, nos será muy fácil montarlo (si estás dando tus primeros pasos con Symfony, te recomiendo realizar este <a title="Tutorial Symfony" href="http://www.symfony-project.org/jobeet/1_2/Doctrine/es/" target="_blank">tutorial</a> donde podrás ver paso a paso como se implementa un projecto con Symfony).</p>
<p><img class="aligncenter size-full wp-image-404" title="FullCalendar" src="http://www.tecnoretales.com/wp-content/uploads/2009/06/fullcalendar.png" alt="FullCalendar" width="600" height="379" /></p>
<h3><span id="more-401"></span>Generando y configurando el proyecto</h3>
<p>Empezaremos desde el principio, creando el proyecto, la aplicación frontend y el módulo calendar:</p>
<pre>symfony generate:project calendar
symfony generate:app frontend
symfony generate:module frontend calendar</pre>
<p>Ahora conectamos nuestro proyecto con la base de datos modificando el archivo <em>/path/to/project/config/databases.yml</em></p>
<pre class="brush: plain;">all:
  propel:
    class:        sfPropelDatabase
    param:
      classname:  PropelPDO
      dsn:        mysql:dbname=&lt;strong&gt;[DB-NAME]&lt;/strong&gt;;host=localhost
      username:   &lt;strong&gt;[DB-USER]&lt;/strong&gt;
      password:   &lt;strong&gt;[DB-PASS]&lt;/strong&gt;
      encoding:   utf8
      persistent: true
      pooling:    true</pre>
<p>Nuestro siguiente paso será añadir la estructura de base de datos al archivo <em>/path/to/project/config/schema.yml</em></p>
<pre class="brush: plain;">propel:
  cal:
    id: ~
    description: {type:varchar(50), required: true }
    category: {type: integer, foreignTable: cal_category, foreignReference: id, required: true}
    details: {type:varchar(255), required: true }
    dstart: {type: date, required: true }
    dend: {type: date, required: true }
    created_at: ~
    updated_at: ~
    _indexes:
      intra_cal_I_1: [dstart]
      intra_cal_I_1: [dend]

  cal_category:
    id: ~
    category: {type:varchar(50), required: true, index: unique}
    created_at: ~
    updated_at: ~</pre>
<p>y ahora, desde línea de comandos, indicaremos a symfony que genere la base de datos y el modelo de datos, para ello, ejecutamos:</p>
<pre>symfony propel:build-all</pre>
<p>Con estos pasos ya tenemos preparado nuestro proyecto para integrar FullCalendar&#8230; manos a la obra!</p>
<h3>Integrando FullCalendar</h3>
<p>El primer paso será bajarnos <a title="Download jQuery" href="http://docs.jquery.com/Downloading_jQuery" target="_blank">jQuery</a> y <a title="Download FullCalendar" href="http://arshaw.com/fullcalendar/download/" target="_blank">FullCalendar</a> de las páginas oficiales. Después guardamos los js <strong>jquery.min.js</strong>, <strong>fullcalendar.min.js</strong>, <strong>ui.draggable.js</strong> y <strong>ui.core.js</strong> en la carpeta <em>/path/to/project/web/js</em> y el css <strong>fullcalendar.css</strong> en <em>/path/to/project/web/css</em>.</p>
<p>Suele ser buena práctica definir las rutas antes de empezar a programar.  Dejaremos la ruta por defecto para mostrar el calendario, pero modificaremos la que nos muestra los detalles para indicarle que debe usar la clase sfPropelRoute que nos permitirá obtener el objeto job sin necesidad de generar la consulta SQL. Abrimos el archivo <em>/path/to/project/apps/frontend/config/routing.yml</em> y le añadimos:</p>
<pre class="brush: plain;">cal_show_event:
  url:   /:module/:action/id/:id
  class:   sfPropelRoute
  options: { model: Cal, type: object }
  param:   { module: calendar, action: show }</pre>
<p>El siguiente paso será implementar los eventos del mes actual hacia adelante, añadiendo la siguiente función al archivo <em>/path/to/project/lib/model/CalPeer.php</em></p>
<pre class="brush: php;">  static public function getCalEvents(){
    // crea el inicio de mes
    $IniMes = date('d-m-Y',mktime(0,0,0,date('m'),1,date('Y')));
    $criteria = new Criteria();
    $criteria-&gt;add(self::DSTART, $IniMes, Criteria::GREATER_EQUAL);
    return self::doSelect($criteria);
  }</pre>
<p>En el index de nuestro módulo <em>/path/to/project/apps/frontend/modules/calendar/actions/actions.class.php</em> llamámos a esta función:</p>
<pre class="brush: php;">  public function executeIndex(sfWebRequest $request)
  {
    $this-&gt;cal_list = CalPeer::getCalEvents();
  }
  public function executeShow(sfWebRequest $request)
  {
    $this-&gt;cal = $this-&gt;getRoute()-&gt;getObject();
  }</pre>
<p>Ahora es el momento de crear la vista  <em>/path/to/project/apps/frontend/modules/calendar/templates/indexSuccess.php</em></p>
<pre class="brush: php;">&lt;?php use_stylesheet('fullcalendar.css') ?&gt;
&lt;script type='text/javascript'&gt;

$(document).ready(function() {

var d = new Date();
var y = d.getFullYear();
var m = d.getMonth();

$('#calendar').fullCalendar({
draggable: true,
events: [
&lt;?php $total = count($intra_cal_list); $i=0; ?&gt;
&lt;?php foreach ($cal_list as $intra_cal): ?&gt;
{
&lt;?php $i++; ?&gt;
id: &lt;?php echo $intra_cal-&gt;getId() ?&gt;,
title: &quot;&lt;?php echo $intra_cal-&gt;getDescription() ?&gt;&quot;,
&lt;?php
$fecha = strtotime($intra_cal-&gt;getDstart());
$anno = date(&quot;Y&quot;, $fecha);
$mes = date(&quot;m&quot;, $fecha);
$mes--;
$dia = date(&quot;d&quot;, $fecha);
?&gt;
start: &lt;?php echo &quot;new Date(&quot;.$anno.&quot;, &quot;.$mes.&quot;, &quot;.$dia.&quot;)&quot;; ?&gt;,
&lt;?php
$fecha = strtotime($intra_cal-&gt;getDend());
$anno = date(&quot;Y&quot;, $fecha); $mes = date(&quot;m&quot;, $fecha);
$mes--;
$dia = date(&quot;d&quot;, $fecha);
?&gt;
end: &lt;?php echo &quot;new Date(&quot;.$anno.&quot;, &quot;.$mes.&quot;, &quot;.$dia.&quot;)&quot;; ?&gt;,
url: &quot;&lt;?php echo url_for('cal/show?id='.$intra_cal-&gt;getId()) ?&gt;&quot;
}&lt;?php if ($i != $total) echo &quot;,&quot; ?&gt;
&lt;?php endforeach; ?&gt;
]
});

});

&lt;/script&gt;

&lt;div id='calendar'&gt;&lt;/div&gt;</pre>
<p>y la vista que nos mostrará el detalle de un evento <em>/path/to/project/apps/frontend/modules/calendar/templates/showSuccess.php</em></p>
<pre class="brush: php;">&lt;h1&gt;&lt;?php echo $cal-&gt;getDescription()?&gt;&lt;/h1&gt;
&lt;?php echo $cal-&gt;getDetails() ?&gt;</pre>
<p>Por último, añadimos las siguientes líneas al layout <em>/path/to/project/apps/frontend/templates/layout.php</em></p>
<pre class="brush: php;">&lt;?php use_javascript('jquery.min.js') ?&gt;
&lt;?php use_javascript('fullcalendar.min.js') ?&gt;
&lt;?php use_javascript('ui.core.js') ?&gt;
&lt;?php use_javascript('ui.draggable.js') ?&gt;</pre>
<p>Hecho esto, si accedemos a nuestra aplicación desde el navegador http://localhost/web/calendar/index veremso nuestro calendario funcionando.</p>
<!-- google_ad_section_end -->]]></content:encoded>
			<wfw:commentRss>http://www.tecnoretales.com/programacion/implementar-fullcalendar-en-symfony/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
