<?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; cakephp</title>
	<atom:link href="http://www.iugo.com.uy/blog/index.php/category/cakephp/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, 20 May 2010 13:13:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<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[Iugo]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[php]]></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>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[Javascript]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[php]]></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, el array [...]]]></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>
