<?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>Javascript y PHP: recursos y explicaciones - por IUGO &#187; php</title>
	<atom:link href="http://www.iugo.com.uy/blog/index.php/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.iugo.com.uy/blog</link>
	<description>PHP y JavaScript claro y sencillo, por IUGO software &#38; design studio</description>
	<lastBuildDate>Thu, 17 Nov 2011 20:49:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Selección de un framework para PHP</title>
		<link>http://www.iugo.com.uy/blog/index.php/seleccion-de-un-framework-para-php/</link>
		<comments>http://www.iugo.com.uy/blog/index.php/seleccion-de-un-framework-para-php/#comments</comments>
		<pubDate>Mon, 27 Sep 2010 13:21:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[cakephp]]></category>
		<category><![CDATA[Iugo]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.iugo.com.uy/blog/?p=330</guid>
		<description><![CDATA[En nuestra empresa utilizamos, para desarrollar en PHP, dos frameworks que hemos desarrollado internamente. Uno de ellos es un framework diseñado en capas, con el clásico diseño de 3 capas: presentación, logica y acceso a datos. El segundo framework utiliza el patrón MVC, y tiene incorporada las funcionalidades básicas: autenticación, logging, manejo de sesiones, purificación [...]]]></description>
			<content:encoded><![CDATA[<p>En nuestra empresa utilizamos, para desarrollar en PHP, dos frameworks que hemos desarrollado internamente. Uno de ellos es un framework diseñado en capas, con el clásico diseño de 3 capas: presentación, logica y acceso a datos. El segundo framework utiliza el patrón MVC, y tiene incorporada las funcionalidades básicas: autenticación, logging, manejo de sesiones, purificación de datos ingresados por el  usuario.<br />
<span id="more-330"></span></p>
<p>Sin embargo, tal vez sea mejor utilizar uno de los tantos frameworks MVC de PHP que se encuentran disponibles para elegir: CakePHP, Symfony, CodeIgniter, Kohana, Zend, Yii, Lithium, etc. Despues de todo, dichos frameworks traen incoporadas más funcionalidades y deberían ser mucho más seguros, ya que son usados por  miles de personas y por lo tanto están muy bien testeados.</p>
<p>Ventajas de utilizar un framework desarrollado internamente:</p>
<ul>
<li>lo conocemos a la perfección</li>
<li>podemos modificarlo fácilemente para agregar funcionalidades a medida que son necesarias</li>
<li>no está sobrecargado con  funcionalidades que raramente utilizamos</li>
</ul>
<p>Ventajas de utilizar uno de los frameworks disponibles para PHP:</p>
<ul>
<li>mejor testeado, menos bugs y más seguridad</li>
<li>más funcionalidades disponibles, por ej: I18N, Caching, ORM, etc</li>
<li>utilizar convenciones y técnicas probadas</li>
</ul>
<p>Es por eso que nos hemos  embarcado en la tarea de probar y decidir si es que alguno de dichos frameworks es más conveniente que utilizar el nuestro.Lo cual ha resultado una tarea bastante complicada.</p>
<p>Lo primero que hicimos fue leer descripciones y reviews de los frameworks más conocidos, buscando en StackOverflow, en phpframeworks.com, etc. Lamentablemente, no es posible decidirse por un framework basándose sólo en la documentación y reviews, es necesario utilizarlo en un proyecto de la vida real para saber realmente que tan bueno resulta ser. Utilizamos todo lo que leimos para acotar la búsqueda a dos frameworks: <a href="http://www.yiiframework.com/">Yii</a> y <a href="http://cakephp.org">CakePHP</a></p>
<p>En siguientes posts iremos publicando nuestras experiencias.</p>
<p>
<!-- Begin Google Adsense code -->
<script type="text/javascript"><!--
google_ad_client = "pub-9655719705705223";
/* Blog IUGO II */
google_ad_slot = "4068642316";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Google Adsense code -->
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.iugo.com.uy/blog/index.php/seleccion-de-un-framework-para-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gráficas con OpenFlashChart 2 y CakePHP</title>
		<link>http://www.iugo.com.uy/blog/index.php/graficas-con-openflashchart-2-y-cakephp/</link>
		<comments>http://www.iugo.com.uy/blog/index.php/graficas-con-openflashchart-2-y-cakephp/#comments</comments>
		<pubDate>Thu, 20 May 2010 13:11:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[cakephp]]></category>
		<category><![CDATA[Iugo]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.iugo.com.uy/blog/?p=325</guid>
		<description><![CDATA[En varias oportunidades nos hemos encontrado con el requerimiento de incorporar gráficas en nuestras aplicaciones creadas con CakePHP. Una de las formas más sencillas que hemos encontrado, es combinar Open Flash Chart 2.0 y CakePHP. Sin embargo, hemos encontrado que el Helper disponible en el sitio oficial de CakePHP tiene algunos errores (por ej. el [...]]]></description>
			<content:encoded><![CDATA[<p>En varias oportunidades nos hemos encontrado con el requerimiento de incorporar gráficas en nuestras aplicaciones creadas con CakePHP. Una de las formas más sencillas que hemos encontrado, es combinar <a href="http://teethgrinder.co.uk/open-flash-chart-2">Open Flash Chart 2.0</a> y CakePHP. Sin embargo, hemos encontrado que el Helper <a href="http://bakery.cakephp.org/articles/view/flashcharthelper-version-3">disponible en el sitio oficial de CakePHP</a> tiene algunos errores (por ej. el gráfico de barras horizontal no está soportado por el helper)</p>
<p>Supongamos que tenemos una lista de gastos por fecha y queremos mostrar un gráfico de línea representando el gasto en función del tiempo:<br />

<!-- Begin Google Adsense code -->
<script type="text/javascript"><!--
google_ad_client = "pub-9655719705705223";
/* Blog IUGO II */
google_ad_slot = "4068642316";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Google Adsense code -->
<br />
<span id="more-325"></span><br />
<code><br />
begin();<br />
$max = 0;<br />
foreach ($gastos as $key =&gt; $model){<br />
if ($gastos[$key]['Expense']['monto'] &gt; $max) $max = $gastos[$key]['Expense']['monto'];<br />
$gastos[$key]['Expense']['fecha'] = $time-&gt;format('M',$gastos[$key]['Expense']['fecha']);<br />
}<br />
$max+=200;<br />
$step = 100;</code></p>
<p><code> </code></p>
<p><code> $flashChart-&gt;setTitle('Gastos totales x rubro','{font-size:14px;}');<br />
$flashChart-&gt;setData($gastos,'/Expense/monto','{n}.Expense.fecha','Gastos','dig');<br />
$flashChart-&gt;axis('y',array('range' =&gt; array(0,$max,$step)));<br />
$flashChart-&gt;axis('x');<br />
echo $flashChart-&gt;chart('area_line',array('colour'=&gt;'#3399AA'),'Gastos','dig');<br />
echo $flashChart-&gt;render(450,250,'dig');<br />
?&gt;</code></p>
<p>El método setData recibe el DataSet, una expresión xpath para indicar cuáles son los valores a graficar, otra expresión xpath para indicar las etiquetas en el eje de las x para esos valores, un nombre para el gráfico y un id de gráfico (de esta forma pueden superponerse varios gráficos en uno).</p>
<p>Es importante destacar que en el ejemplo del código del helper se muestra que la expresión xpath para determinar las etiquetas debería ser &#8220;<em>default.{n}.Day.date</em>&#8220;, pero revisando el código nos dimos cuenta que para que funcione no debe incluirse el nodo &#8220;<em>default&#8221;.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iugo.com.uy/blog/index.php/graficas-con-openflashchart-2-y-cakephp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nuevo proyecto de nuestra empresa: dameprecios.com</title>
		<link>http://www.iugo.com.uy/blog/index.php/nuevo-proyecto-de-nuestra-empresa-dameprecios-com/</link>
		<comments>http://www.iugo.com.uy/blog/index.php/nuevo-proyecto-de-nuestra-empresa-dameprecios-com/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 01:48:48 +0000</pubDate>
		<dc:creator>gonzalo</dc:creator>
				<category><![CDATA[emprendimientos]]></category>
		<category><![CDATA[Iugo]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[startups]]></category>
		<category><![CDATA[TI]]></category>
		<category><![CDATA[uruguay]]></category>
		<category><![CDATA[proyecto]]></category>

		<guid isPermaLink="false">http://www.iugo.com.uy/blog/?p=317</guid>
		<description><![CDATA[dameprecios.com es el último proyecto publicado por nuestra empresa. Se trata de un portal para comparar precios de productos en diversas tiendas.]]></description>
			<content:encoded><![CDATA[<p>En todo el mundo, principalmente en Europa son muy usados los llamados &#8220;Shopping Engines&#8221;. Se trata de motores de búsqueda que almacenan miles de productos en diversas tienas, y que les permiten a los usuarios <a title="dameprecios.com" href="http://uy.dameprecios.com" target="_blank">comparar precios de cualquier producto</a>, para elegir donde es el mejor lugar para comprar.</p>
<p>Para mantener los precios siempre actualizados, las tiendas proveen al sitio encargado de comprar los precios de un archivo de texto con la información de sus productos, los precios, la descripción, etc. Diariamente el sitio web analiza estos archivos y actualiza su base de datos.</p>
<p>De esa manera funciona <a title="dameprecios.com" href="http://uy.dameprecios.com" target="_blank">dameprecios.com, el portal de comparación de precios uruguayo</a> que acaba de publicar nuestra empresa.</p>
<p><span id="more-317"></span></p>
<p>Se trata de un proyecto muy ambicioso que implica imponer en el usuario de internet de Uruguay una nueva costumbre, un nuevo concepto y de incorporar un nuevo uso para internet, que tanto en Uruguay como en toda Amerérica Latina, no ha sido 100% explotada.</p>
<div class="wp-caption aligncenter" style="width: 374px"><a href="http://uy.dameprecios.com"><img title="dameprecios.com: portal de comparación de precios" src="http://www.iugo.com.uy/iugo/pics/novedades/dameprecios.png" alt="" width="364" height="307" /></a><p class="wp-caption-text">dameprecios.com: portal de comparación de precios</p></div>
<p style="text-align: center;">
<p>Por el momento, y por estar el proyecto aún en desarrollo, no hemos suscripto una gran cantidad de tiendas, pero poco a poco iremos sumando los principales comercios de Montevideo<!--more--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iugo.com.uy/blog/index.php/nuevo-proyecto-de-nuestra-empresa-dameprecios-com/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Magento &#8211; No puedo entrar al admin: SOLUCIONADO!</title>
		<link>http://www.iugo.com.uy/blog/index.php/magento-no-puedo-entrar-al-admin-solucionado/</link>
		<comments>http://www.iugo.com.uy/blog/index.php/magento-no-puedo-entrar-al-admin-solucionado/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 23:42:32 +0000</pubDate>
		<dc:creator>gonzalo</dc:creator>
				<category><![CDATA[Iugo]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[admin]]></category>
		<category><![CDATA[localhost]]></category>
		<category><![CDATA[login]]></category>

		<guid isPermaLink="false">http://www.iugo.com.uy/blog/?p=291</guid>
		<description><![CDATA[Tras haber probado y usado varios sistemas para tiendas online, sin dudas no podía dejar pasar mas tiempo sin probar Magento. Asi que me decidí, descargué la última versión estable y lo instalé localmente en mi notebook. De esa manera puedo probarlo, ver que posibilidades ofrece y cuáles son las principales complicaciones para personalizarlo. A [...]]]></description>
			<content:encoded><![CDATA[<p>Tras haber probado y usado varios sistemas para tiendas online, sin dudas no podía dejar pasar mas tiempo sin probar Magento. Asi que me decidí, descargué la última versión estable y lo instalé localmente en mi notebook. De esa manera puedo probarlo, ver que posibilidades ofrece y cuáles son las principales complicaciones para personalizarlo.</p>
<p>A decir verdad, Magento es muy interesante, así que tras instalarlo ya comenzé a trabajar en la nueva versión de una tienda online, para un cliente. Sin lugar a dudas es muy superior a todas las demás opciones (al menos las que yo conozco) por lo que sin pensarlo mucho tiempo, opté por usarlo para una tienda virtual que estaba comenzando a desarrollar.</p>
<p>El primer problema con el que me encontré, al instalarlo en mi servidor local (localhost) fue que no me permitía ingresar al admin. En un principio pensé que estaba ingresando mal la contraseña (en el proceso de instalación te permite elegir el usuario y contraseña para el primer administrador del sitio). Pero luego me di cuenta que cuando tipeaba mal el usuario o la contraseña me daba un mensaje de error, mientras que cuando la tipeaba bien, simplemente volvía a la pantalla de login sin mostrarme ningún error.<br />
<span id="more-291"></span><br />
Tras googlear un rato, encontré la solución (tomando información de distintos lugares) por lo que pensé que podría ser útil publicar aquí un resumen.</p>
<p>El problema parece darse en algunos navegadores (Firefox es el que uso yo) y se da porque no reconoce el dominio &#8220;localhost&#8221; como un dominio seguro. Una opción es cambiar la ruta de nuestro sitio, y en lugar de usar http://localhost/mitienda/admin usar http://127.0.0.1/mitienda/admin (127.0.0.1 es la IP para localhost). Eso puede cambiarse sencillamente desde el panel de administración, pero para ello, obviamente, tenemos que poder ingresar antes. Para cambiarlo sin ingresar al panel de administración tenemos que ejecutar una query en la base de datos MySQL, usando por ejemplo phpmyadmin.</p>
<p>La consulta que debemos ejecutar es la siguiente:<br />
<code>UPDATE core_config_data SET value="http://127.0.0.1/mitienda" WHERE path IN ('web/unsecure/base_url','web/secure/base_url') ;</code><br />
(hay que cambiar &#8220;mitienda&#8221; por el nombre de la carpeta donde estemos guardando la instalación de Magento en el servidor local).</p>
<p>Luego probamos de entrar al admin por &#8220;http://127.0.0.1/mitienda/admin&#8221;. Eso debería funcionar, y tiene como ventaja que si copiamos la instalación a otro servidor, solamente ejecutando de nuevo esta consulta cambiando el value por el valor correcto vamos a poder usar la tienda tal como la teníamos en localhost.</p>
<p>Esa es sin dudas la mejor opción, ya que no tenemos que cambiar nada de código, pero acá les dejo otra forma, por si la anterior no funcionó&#8230;</p>
<p>Esta opción implica retocar el código de uno de los archivos del core de Magento, por lo que no es ideal y puede sobreescribrse en algún momento (por ej., al actualizar Magento). El archivo que tenemos que modificar es el siguiente:</p>
<p>mitienda/app/code/core/Mage/Core/Model/Session/Abstract/Varien.php</p>
<p>y en ese archivo tenemos que modificar las siguientes líneas:<br />
<code><br />
// set session cookie params<br />
session_set_cookie_params(<br />
$this-&gt;getCookie()-&gt;getLifetime(),<br />
$this-&gt;getCookie()-&gt;getPath(),<br />
$this-&gt;getCookie()-&gt;getDomain(),<br />
$this-&gt;getCookie()-&gt;isSecure(),<br />
$this-&gt;getCookie()-&gt;getHttponly()<br />
);<br />
</code><br />
<strong>y dejarlas así:</strong><br />
<code><br />
// set session cookie params<br />
session_set_cookie_params(<br />
$this-&gt;getCookie()-&gt;getLifetime(),<br />
$this-&gt;getCookie()-&gt;getPath()//,<br />
//$this-&gt;getCookie()-&gt;getDomain(),<br />
//$this-&gt;getCookie()-&gt;isSecure(),<br />
//$this-&gt;getCookie()-&gt;getHttponly()<br />
);<br />
</code></p>
<p>Guardamos ese archivo y probamos nuevamente. Ahora si debería funcionar, pero tenemos que recordar que este cambio que hicimos, una vez que nuestra tienda es &#8220;mudada&#8221; a un servidor en internet bajo un dominio real (y por tanto, seguro para todos los navegadores) debemos deshacerlo y volver el archivo a su estado original.</p>
<p>
<!-- Begin Google Adsense code -->
<script type="text/javascript"><!--
google_ad_client = "pub-9655719705705223";
/* Blog IUGO II */
google_ad_slot = "4068642316";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Google Adsense code -->
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.iugo.com.uy/blog/index.php/magento-no-puedo-entrar-al-admin-solucionado/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Subir archivos con CakePHP y jQuery</title>
		<link>http://www.iugo.com.uy/blog/index.php/subir-archivos-con-cakephp-y-jquery/</link>
		<comments>http://www.iugo.com.uy/blog/index.php/subir-archivos-con-cakephp-y-jquery/#comments</comments>
		<pubDate>Sat, 11 Apr 2009 01:49:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[cakephp]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.iugo.com.uy/blog/?p=256</guid>
		<description><![CDATA[En este turorial veremos como se puede implementar la carga de archivos utilizando CakePHP y jQuery. 1. CakePHP. Carga de archivos Utilizando los consejos publicados en este post, implementaremos la lógica PHP para subir archivos al servidor. El siguiente método toma el nombre del directorio en el servidor al cual se quieren subir los archivos, [...]]]></description>
			<content:encoded><![CDATA[<p>En este turorial veremos como se puede implementar la carga de archivos utilizando CakePHP y jQuery.</p>
<p>1. <strong>CakePHP. Carga de archivos</strong><br />
Utilizando los consejos publicados en <a href="http://www.jamesfairhurst.co.uk/posts/view/uploading_files_and_images_with_cakephp">este post,</a> implementaremos la lógica PHP para subir archivos al servidor. El siguiente método toma el nombre del directorio en el servidor al cual se quieren subir los archivos, el array de archivos del formulario y un identificador opcional en caso que se desee crear un subdirectorio en donde guardar el archivo.<br />
<span id="more-256"></span></p>
<blockquote><p><code> </code></p>
<pre>/**
* uploads files to the server
* @params:
*		$folder 	= the folder to upload the files e.g. 'img/files'
*		$formdata 	= the array containing the form files
*		$itemId 	= id of the item (optional) will create a new sub folder
* @return:
*		will return an array with the success of each file upload
*/
function uploadFiles($folder, $formdata, $itemId = null) {
// setup dir names absolute and relative
$folder_url = WWW_ROOT.$folder;
$rel_url = $folder;

// create the folder if it does not exist
if(!is_dir($folder_url)) {
mkdir($folder_url);
}

// if itemId is set create an item folder
if($itemId) {
// set new absolute folder
$folder_url = WWW_ROOT.$folder.'/'.$itemId;
// set new relative folder
$rel_url = $folder.'/'.$itemId;
// create directory
if(!is_dir($folder_url)) {
mkdir($folder_url);
}
}

// list of permitted file types, this is only images but documents can be added
$permitted = array('image/gif','image/jpeg','image/pjpeg','image/png');

// loop through and deal with the files
foreach($formdata as $file) {
// replace spaces with underscores
$filename = str_replace(' ', '_', $file['name']);
// assume filetype is false
$typeOK = false;
// check filetype is ok
foreach($permitted as $type) {
if($type == $file['type']) {
$typeOK = true;
break;
}
}

// if file type ok upload the file
if($typeOK) {
// switch based on error code
switch($file['error']) {
case 0:
// check filename already exists
if(!file_exists($folder_url.'/'.$filename)) {
// create full filename
$full_url = $folder_url.'/'.$filename;
$url = $rel_url.'/'.$filename;
// upload the file
$success = move_uploaded_file($file['tmp_name'], $url);
} else {
// create unique filename and upload file
ini_set('date.timezone', 'Europe/London');
$now = date('Y-m-d-His');
$full_url = $folder_url.'/'.$now.$filename;
$url = $rel_url.'/'.$now.$filename;
$success = move_uploaded_file($file['tmp_name'], $url);
}
// if upload was successful
if($success) {
// save the url of the file
$result['urls'][] = $url;
} else {
$result['errors'][] = "Error uploaded $filename. Please try again.";
}
break;
case 3:
// an error occured
$result['errors'][] = "Error uploading $filename. Please try again.";
break;
default:
// an error occured
$result['errors'][] = "System error uploading $filename. Contact webmaster.";
break;
}
} elseif($file['error'] == 4) {
// no file was selected for upload
$result['nofiles'][] = "No file Selected";
} else {
// unacceptable file type
$result['errors'][] = "$filename cannot be uploaded. Acceptable file types: gif, jpg, png.";
}
}
return $result;
}</pre>
</blockquote>
<p>Dado que lo voy a usar en varios controllers, lo agregué al AppController. Un ejemplo de cómo usarlo sería el siguiente:</p>
<p>En la vista: &lt;?php echo $form-&gt;file(&#8216;File.image&#8217;); ?&gt;<br />
En el controller:</p>
<blockquote><p><code><br />
$fileOK = $this-&gt;uploadFiles('files', $this-&gt;data['File']);<br />
// si el archivo fue subido correctamente<br />
if(array_key_exists('urls', $fileOK)) {<br />
// guardar la url en la informacion del from<br />
$this-&gt;data['Post']['image_url'] = $fileOK['urls'][0];<br />
}<br />
</code></p></blockquote>
<p>2. <strong>jQuery</strong></p>
<p>Para el frontend, usamos el plugin AjaxUpload de jQuery, disponible <a href="http://valums.com/ajax-upload/" target="_self">aquí.</a> Les recomiendo que vean los ejemplos disponibles desde esa misma página. Una vez descargado, (requerden que también necesitan jQuery), lo guardamos en la carpeta app/webroot/js. Para poder utilizarlo, no olviden incluirlo en la vista: &lt;?php $this-&gt;addScript($javascript-&gt;link(&#8216;ajaxupload&#8217;)); ?&gt;</p>
<p>Un ejemplo de código javascript para inicializar AjaxUpload es el siguiente:</p>
<blockquote>
<pre>$(document).ready(function(){
 new AjaxUpload('#att_file', {
  action: 'controller/action',
  name: 'data[Attachment][path]',
  autoSubmit: true,
  onComplete : function(file, response){
    alert('Carga Filanizada');
  },
  onChange: function(){
  }
 });
});//document ready</pre>
</blockquote>
<p>Debemos setear el action para que apuente al controllador y acción correspondiente.</p>
<p>AjaxUpload permite utilizar cualquier elemento como botón para abrir el cuadro de dialogo de seleccionar archivos. Por ejemplo, podríamos usar un div:</p>
<blockquote>
<pre>&lt;div id='att_file'&gt;Cargar Archivos&lt;/div&gt;</pre>
</blockquote>
<p>AjaxUpload utiliza un iframe oculto para cargar el archivo, por lo que no es una técnica AJAX propiamente dicha, aunque logra una experiencia de uso similar.</p>
<p>Podríamos utlizar los eventos onChange y onComplete para mostrar un mensaje de Loading. Si es necesario adjuntar más datos para ser enviados por el formulario, se puede utilizar la propiedad data.</p>
<p>Con esto tenemos todos los elementos necesarios para tener carga de archivos AJAX utilizando CakePHP.<br />

<!-- Begin Google Adsense code -->
<script type="text/javascript"><!--
google_ad_client = "pub-9655719705705223";
/* Blog IUGO II */
google_ad_slot = "4068642316";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Google Adsense code -->
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.iugo.com.uy/blog/index.php/subir-archivos-con-cakephp-y-jquery/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

