Este blog esta destinado para la comunidad desarrolladora de software, en el podrán encontrar trucos, atajos o consejos de diferentes lenguajes de programación o frameworks, tanto de tipo desktop como web. Si quieres participar como editor por favor hacerlo saber escribiendo un correo a cualquiera de los editores.

jueves, 23 de diciembre de 2010

Borrar archivos recursivamente


rm -rf `find /rutadecarpetadondebuscar -name nombredearchivoocarpetaaborrar`


lo use basado en uno que encontré en



miércoles, 22 de diciembre de 2010

J2ME + Netbeans + Ubuntu

para instalar j2me en ubuntu recomiendo usar netbeans

sudo apt-get install netbeans

luego instalamos los plugins

hay que buscarlos en plugins:

mobility
mobility end to end

en linux hace falta instalar el j2me wireless toolkit ()

http://www.oracle.com/technetwork/java/download-135801.html

depues de instalarlo agregamos la nueva plataforma a netbeans

Add Platform, y seleccionamos la ruta donde hemos instalado el jwk (/home/anacleto/WTK2.5.2)

y listo

sábado, 4 de diciembre de 2010

Cambiar contraseña win xp

Si usted no puede ingresar a ninguna cuanta de usuario por que se le olvido, la apunto mal o su hermanit@ la cambio entonces puede probar lo siguiente:

1. Inicie un so(linux) desde cd o usb

2. Ingrese a windows/system32, y renombre el archivo sethc.exe a sethc_orig.exe

3. Haga una copia del archivo cmd.exe y cámbiele el nombre a sethc.exe

4. Arranque de nuevo el win

5. cuando pida el usuario y la contraseña presione la tecla shift varias veces (5 veces)

6. enseguida se abrirá la consola cmd e ingresas el siguiente comando:

net user //para ver los usuarios del sistema

net user usuario contraseña

donde usuario:usuario al que se le va a cambiar la contraseña y contraseña pues ya se imaginan que.

Y listo si quieren cambian de nuevo el archivo sethc.exe pa que quede como estaba.

No se si funcione en otra versión de win, si funciona por favor avisan como para saber.


martes, 23 de noviembre de 2010

ubuntu instalado dentro de windows con wubi

No me dejaba arrancar el synaptic hasta que diritara el siguiente comando

sudo dpkg --configure -a

luego por alla abajo me preguntaba lo siguiente.

You chose not to install GRUB to any devices. If you continue, the boot │
│ loader may not be properly configured, and when your computer next │
│ starts up it will use whatever was previously in the boot sector. If │
│ there is an earlier version of GRUB 2 in the boot sector, it may be │
│ unable to load modules or handle the current configuration file. │
│ │
│ If you are already running a different boot loader and want to carry on │
│ doing so, or if this is a special environment where you do not need a │
│ boot loader, then you should continue anyway. Otherwise, you should │
│ install GRUB somewhere. │
│ │

Por ser una instalacion dentro de window se debe escoje la opcion si, pilas.
│ Continue without installing GRUB?

lunes, 22 de noviembre de 2010

enlaces simbolicos en linux

Hola por si alguna vez necesitan usar enlaces simbolicos en linux, les cuento como se hace

CREAR ENLACE SIMBOLICO

ln -s nombre_de_lo_que_se_desea_enlazar nombre_enlace

ejemplo :

ln -s Escritorio/ mis_cosas_personales

Hay dos tipos de enlaces, duros y no duros, los duros son como tener una copia exacta, tal cual como si fuera el archivo o carpeta enlazado, es tan asi que si uno borra el enlace se borra fisicamente la carpeta. yo recomiendo no usar estos(enlaces duros).


CAMBIAR RUTA APUNTADA POR OTRA

Ahora me paso que queria cambiar el lugar al que apuntaba el enlace, es decir ya no quiero que el enlace apunte a un sitio sino a otro. simplemente agregamos la opcion -f para forzar a que sobreescriba el que habia antes.

ln -f -s Music/ mis_cosas_personales

esto funciona si lo que estaba direccionando antes es un archivo, si es un directorio, les recomiendo borrar el link y crear uno nuevo

rm mis_cosas_personales
ln -s Music mis_cosas_personales

VER ENLACES SIMBOLICOS
ls -l #esto te sirve para ver todos los archivos identifica los que tengan la l al inicio, estos son los enlaces simbolicos.

--resultado
drwxr-xr-x 2 maryit maryit 4096 2010-11-08 23:06 Documentos
lrwxrwxrwx 1 maryit maryit 11 2010-11-22 15:40 mis_cosas_personales -> Music/


ENLACES ROTOS
Cuando listas los enlaces simbolicos, algunos aparecen en rojo,estos son los enlaces que estan rotos, si quieres identificarlos por otro criterio, utiliza
ls -L


Para mas informacion man ln

jueves, 18 de noviembre de 2010

sábado, 9 de octubre de 2010

¿Cómo deshabilitar la barra del Debug en Symfony?

Hola,

Me encuentro trabajando en mi proyecto de grado con Symfony versión 1.2.10, y lo hago en el modo _dev.php (desarrollo) y ExtJS 3.1.1

Resulta que al subir un archivo como se indica en este blog, el servidor me debe retornar un texto en formato JSON, que me indica en que estado terminó mi transacción.

Pues funciona bién esa parte, el problema es cuando termina de renderizar ese texto. En Extjs al momento de llamar el evento success del submit del formulario, me arrojaba el código fuente de la barra del Debug de symfony :-(

Para ello, entonces (gracias a un amigo Geyffer Acosta) me indicó que podía quitar esa barra. ¿Cómo?

sfConfig::set('sf_web_debug', false);

Quedando entonces así, las últimas líneas de mi acción:

sfConfig::set('sf_web_debug', false);
$this->renderText($salida);
return sfView::NONE;


Espero a alguien más le sirva este mini tip ;)

Nos vemos!!!


viernes, 8 de octubre de 2010

Symfony, Propel, Transactions

Para hacer transacciones en Propel:

$transaction = Propel::getConnection();

try
{
$transaction->beginTransaction();

// hago todo lo que tenga que hacer, guardar eliminar, consultar, etc, normalmente

$transaction->commit();
}
catch(Exception $exception)
{
$transaction->rollback();
}

espero les sirva

Extjs, Symfony, FileUploadField

Esta vez le toco a los archivos, subir archivos con extjs, para esto necesitamos los siguientes archivos que se encuentran en

extjs/examples/ux/fileuploadfield/FileUploadField.js

extjs/examples/ux/fileuploadfield/css/fileuploadfield.css

donde extjs es la versión que hallan descargado, bueno los incluimos en nuestro html

y aquí un ejemplo del js:

var subir_archivos_formpanel = new Ext.FormPanel({
title: 'Subir archivos',
width: 400,
height: 300,
frame: true,
fileUpload: true,
style: {"margin-left": "10px"},
bodyStyle: 'padding:5px',
defaults: { xtype: 'textfield', anchor:'100%'},
items:
[
{
xtype: 'fileuploadfield',
id: 'archivo',
emptyText: 'Seleccione un documento',
fieldLabel: 'Escojer',
name: 'archivo',
buttonText: '',
allowBlank:false,
buttonCfg: {iconCls: 'archivo'} /// imagen del boton de seeccionar el archivo
}
],
buttons:
[
{
text:'Enviar',
handler: subir_archivo
}
]
});

function subir_archivo(){
subir_archivos_formpanel.getForm().submit({
method: 'POST',
timeout: 60000, // porsi es muy grande el archivo y se demora mucho en subir
url: url_del_php_o_la_accion_del_symfony,
params: {}, // parametros extra
waitTitle: 'Enviando',
waitMsg: 'Enviando datos...',
success: function(response, action){
obj = Ext.util.JSON.decode(action.response.responseText);
// aqui lo que quiera hacer despues de enviado el archivo con exito
},
failure: function(form, action, response){
if (action.failureType == 'server') {
obj = Ext.util.JSON.decode(action.response.responseText);
// mensaje de error
// lo que quiera hacer cuando falle
}
}
});
}


y en el php:

public function executeSubirArchivo()
{
$salida ='';

try
{
$nombre = $_FILES['archivo']['name'];
$tamano = $_FILES['archivo']['size'];
$tipo = $_FILES['archivo']['type'];
$temporal = $_FILES['archivo']['tmp_name'];
if(file_exists($nombre_carpeta_donde_se_guardan_los_archivos."/".$nombre))
{
$salida = "({success: false, errors: { reason: 'Ya existe el archivo con el mismo nombre en la base de datos'}})";
}
else
{
if($tamano > 2100000) // 1000000 aprox 1mega
{
$salida = "({success: false, errors: { reason: 'El archivo excede el limite de tamano'}})";
}
else
{
$copio = copy($temporal, "uploads/".$nombre_carpeta_donde_se_guardan_los_archivos."/".$nombre);
if($copio){
// guardo la info en db como para mostrar en una grid nombre tamaño y esas cosas
$salida = "({success: true, mensaje:'El archivo subio exitosamente'})";
return $this->renderText($salida);
}
}
}
}
catch (Exception $excepcion)
{
$salida = "({success: false, errors: { reason: 'Hubo un error'}})";
}
return $this->renderText($salida);
}


no esta muy explicado pero creo que el código es muy legible, no probé el código que aquí esta publicado, lo tome de otro que implemento maryitsv

espero les sirva y si hay algún error no duden en hacerlo saber.


sábado, 25 de septiembre de 2010

Power designer-como generar el sql con las referencias adentro

Hola a todos, alguna vez han necesitado utilizar una herramienta para crear modelos uml, les recomiendo power designer, no es libre pero es muy bueno.
Bueno pues tube una dudad usando el trial, como generar sql, pero que las llaves foraneas quedaran adentro, pegunte hasta que gaea me ilumino en esto, pero les comparto la solución.

  • Click derecho propietys
  • Click sobre la pestana preview
  • ahora en el toolbar hay uno que dice show generation options
  • alli te aparece un arbol y en el arbol de la derecha,abajo dice foreing key
  • alli escojer la opcion inside.

Chao ojala les sirva

domingo, 19 de septiembre de 2010

Extjs + GMap = gmappanel

Hola de Nuevo como ya vimos el caruosel, ahora le toca a Google Maps.

Lo primero descargamos el js del gmappanel de la siguiente url:


author: Shea Frederick (les debo la url de donde lo baje, apenas me quede tiempo la pongo para que visiten el portal o blog del hombre)

El archivo no fue creado por mi pero si lo he editado a mis necesidades, he incluido algunos métodos, pero bueno aquí un ejemplo de como usarlo:

var gmap_panel = new Ext.ux.GMapPanel({
plain: false,
monitorResize: true,
zoomLevel: 8,
gmapType: 'map',
addControl: new GSmallMapControl(),
setCenter: { lat: 3.393489, 'long': -76.546347 },
markers: [{ lat: 3.393489, 'long': -76.546347, marker: {title: 'Cali'}}]
});

para remover los marcadores:

gmap_panel.removeAllMarkers();

para centrar el gmappanel y agregar un marcador:

var latitud = coordenada_de_latitud;
var longitud = coordenada_de_longitud;
gmap_panel.moveCenter(latitud, longitud);
var mkr_point = new GLatLng(latitud, longitud);
var mark = new GMarker(mkr_point, { title: titulo_marker } );
gmap_panel.addGMarker(mark);
mark.openInfoWindowHtml('información que se quiera mostrar en la burbuja');

recuerden agregar la librería de Gmap:

script type="text/javascript" src="http://maps.google.com/maps?file=api&"
script type="text/javascript" src="...../gmaps/gmaps.js"

Espero les sea de ayuda.


martes, 24 de agosto de 2010

Internacionalizacion symfony

Bueno este es mi primer ensayo con la internacionalización, el truco es que podemos poner en diferentes idiomas los titulo mostrados al ejecutar propel:build-admin. yo los voy a poner en español

Lo primero es que hay que distinguir el concepto de cultura de usuario que es un parametro de user de symfony busquen en la web.

Los pasos son los siguientes para poner symfony en español

  • entrar en proyecto/apps/aplicacion/config/ e identificar los archivos routing.yml y settings.yml

  • abrimos el archivo settings.yml y agregamos las siguientes lineas

    all:
    .settings:
    default_culture: es_CO
    i18n: true
    charset: utf-8

    el i18n es para que este activa la internacionalización
    charset es para que permita caracteres especiales como las tildes
    y el default_culture es para poner en español de colombia

  • abrimos el archivo routing.yml y en la parte de abajo en los defaults agregamos la siguiente linea

    default:
    prefix_path: /:sf_culture

    que es para que a todos los modules se les aplique la internacionalización

  • en el action de logueo o incluso en el action de lo primero que visualiza la aplicación agregar lo siguiente

    $this->getUser()->setCulture('es_CO');

  • en la aplicación en la cual se le agregara el idioma se crea una carpeta i18n
    proyecto/apps/aplicacion/i18n/

  • dentro de la carpeta se crea un archivo messages.es.xml

  • finalmente nos salimos de la aplicación y nos volvemos a loguear y listo

para mas información ver http://librosweb.es/symfony_1_0/capitulo13.html


sábado, 21 de agosto de 2010

Seguridad en Symfony

Bueno aunque a un plugin de Symfony (sfGuardPlugin) que ayuda mucho a solucionar el problema, incluyendo gestión de usuarios, credenciales y demás, como para empezar he decidido hacerlo a pie, porque es muy fácil y ademas para aprovechar el modulo de login y de gestión de usuarios que ya estaba hecho.

Bueno la implementación es muy sencilla, basta con agregar unas lineas al archivo security.yml (proyecto/apps/nombreaplicacion/config/security.yml) de nuestra aplicación:

default:
is_secure: true

recuerden conservar los espacios, porque si tabulan... bueno ya sabrán lo que pasa, estas lineas son para pedir que el acceso a los módulos de la aplicación solo puedan ser accedidos por usuarios autenticados, es decir que al momento de validar el usuario sea cual sea la forma en la que lo hagan, recuerden agregar

$this->getUser()->setAuthenticated(true);

de esta forma el usuario estará autenticado y podrá acceder a los módulos de la aplicación.

Bueno, hasta aquí nuestros usuarios del sistema no podrán acceder a nuestra aplicación si nuestro modulo de login se encuentra en el la aplicación que acabamos de proteger, para solucionar estos, conozco hasta ahora dos formas:

  • Crear nuestro modulo de login en otra aplicación.
  • Des proteger el modulo de login de la aplicación asegurada para que pueda ser accedida por usuarios sin autenticar.
Para la primera, si alguien necesita, que comente o me escriba para hacer una entrada explicando como hacer un modulo de login, y para la segunda, debemos crear una carpeta que se llame config dentro de la carpeta del modulo, es decir que quedara acompañada de las carpetas actions y templates de nuestro modulo, e incluir en la carpeta config un archivo llamado security.yml, y en este archivo incluir las siguientes lineas :

default:
is_secure: false

así de esta forma el modulo quedara desprotegido y podrá ser accedido por usuarios no autenticados pues para autenticarse.

Con lo explicado anteriormente también se pueden proteger o des proteger módulos a nivel de aplicación y acciones a nivel de modulo cambiando el default por el nombre de el modulo o la acción que queremos proteger o des proteger.

Otra cosa importante en la seguridad de la aplicación son los roles o credenciales como se llaman en Symfony.

Para hace esto primero autentiquemos a alguien como se dijo anteriormente y ademas agreguemos:

$this->getUser()->addCredential('nombredecredencial', 'valor'); //si necesitamos valores o

$this->getUser()->addCredential('nombredecredencial'); //credencial sencilla

así nuestro usuario tendrá una credencial de acceso a determinados módulos, y para configurar el acceso al modulo con cierta credencial agregamos al security.yml del modulo.

default:
is_secure: true
credentials: nombredecredencial

si necesita solo una credencial, para otras configuraciones de credenciales

credentials: [credencial1, credencial2] // credencial1 and credencial2

credentials: [[credencial1, credencial2]] // credencial1 or credencial2

recuerden que estas configuraciones la pueden hacer tanto a nivel de modulo como de acciones, yo probé hacerlo todo en el security.yml de la aplicación y no funciono, así que me toco ademas configurar el security.yml de algunos módulos.

Hasta aqui tenemos protegidos nuestros módulos por autenticación y por credenciales, pero cuando no puedo acceder? y estoy perdido, lo normal seria que la aplicación me redirigiera hacia el modulo de login, para hacer esto vamos a configurar el archivo settings.yml ubicado en la carpeta config de nuestra aplicación y agregamos o ubicamos las siguientes lineas:

all:
.action:
login_module: nombremodulodelogin
login_action: nombreaccionmostarinterfazlogin //normalmente index

Y por ultimo recordemos des autenticar y limpiar la variables de sesión de la siguiente forma:

$this->getUser()->setAuthenticated(false);
$this->getUser()->clearCredentials();
$this->getUser()->getAttributeHolder()->clear();

RECUERDEN EJECUTAR SYMFONY CC, CUANDO MODIFIQUEMOS CUALQUIER ARCHIVO .YML



Extjs Problema con FormPanel

El Problema consiste en incluir como ítem de un formpanel otro formpanel, y el problema aparece usando el navegador Firefox, no aparece como error en el firebug, sino como de los que no nos gustan, de esos que pareciera que alguien coge nuestro formulario y jugara fútbol con el, jejejejeje, bueno una forma de solucionarlo es dejar un panel con formpanels como items de el y a la hora de cargar los datos sobre el, hacerle el getForm a cada formpanel, no es muy elegante pero funciona y no es muy alto el costo. Ahhh y ultima cosa ni de vainas le van a poner layout: form al panel.


jueves, 29 de julio de 2010

Problema Tipo de Dato Bool en Symfony Propel y Postgres

Ha ocurrido un problema en un proyecto en el cual estoy participando, el problema consiste en que cuando uno tiene en su base de datos un campo de tipo bool, el propel no puede hacer la insercion del dato mandado true o false, puesto que con cualquiera que le mande va a asignarle al campo el valor de true, la forma de mandarle correctamente el dato, es mandarle 1 (true) o 0 (false), pero el problema no termina ahi, puesto que si para la insercion se mandaron datos de tipo int, para la consulta tenemos que nos arroja true o false, que es un poco inconsistente, bueno, una manera de abordar el problema es manejar los campos de tipo bool en la base de datos como smallint, asi mendamos y obtenemos el mismo tipo de dato.

Espero sea de ayuda esta informacion, ah y por ultimo y mas importante, version Symfony 1.4.6 - propel


miércoles, 14 de julio de 2010

Códigos HTML - Caracteres y símbolos

Hola, he aquí una tabla con los valores de los caracteres especiales para que puedan ser mostrados en html.

link.


No publico la tabla por que no la he hecho y creo que tiene derechos de copia.


jueves, 8 de julio de 2010

Problemas al instalar Postgres

Hola hace poco tuve un problema al instalar postgres en mi equipo, cuando ingresaba la contrasena, me decia que la contrasena era invalida. busque y encontre que tenia una instalacion fallida, ya que antes habia tenido instalado postgres, y exitia el usuario por debajo.
Como solucionarlo

  • Desintalar postgres, si lo sitenes instalado.
  • ejecutar en un cmd: net user postgres /del
  • tratar de instalar postgres de nuevo, aui funciono

miércoles, 7 de julio de 2010

Instalar phpPgAdmin en Ubuntu (10.04)

Para empezar abrimos una terminal y ejecutamos

sudo apt-get install apache2 php5 postgresql-client-8.4 libapache2-mod-auth-pgsql postgresql-8.4 php5-pgsql phppgadmin php5-xsl php-apc

introducimos la contraseña y esperamos a que instale

configuramos postgres (creamos usuario admin) .... y configuramos el archivo

/etc/phppgadmin/config.inc.php

cambiamos la linea

$conf['extra_login_security']=true

por

$conf['extra_login_security']=false

y listo, ahora lo podemos acceder por nuestro navegador con la dirección

http://localhost/phppgadmin



martes, 29 de junio de 2010

Vista de árbol en Combobox, Extjs

Encontré dos ejemplos para resolver este problema en la pagina de Extjs implementados por Saki

ejemplo1ejemplo2

link:


y la pagina de publicaciones de saki


viernes, 25 de junio de 2010

Generar pdf con dompdf en symfony

Bueno en general la librería dompdf me ha parecido muy fácil de trabajar, ya que se genera un html y este se pasa a pdf, es fácil la inclusión de imágenes y de caracteres especiales.

Para integrarla con symfony, sigues los siguientes pasos

  • instalar el plugin para symfony,
    ya sea que la descarguen de http://www.symfony-project.org/plugins/sfDomPDFPlugin la descompriman en la carpeta plugins del sproyecto en el cual estan trabajando y la publiquen mediante el comando plugin:publish-assets o ya sea que los instalen con los comandos de sinfony, creo que es algo asi: plugin:install sfDomPDF
  • descargar la librería dompdf, http://eclecticgeek.com/dompdf/
  • reemplazar la carperta de dompdf que hay en el proyecto de symfony en plugins/sfDomPDFPlugin/lib
  • copiar la carpeta dompdf que descargaste en web/
  • limpiar la cache de synfony: symfony cc
  • empezar a utilizar la libreria

hay les dejo un ejemplo de como usarlo


public function reporte()
{
require_once("dompdf/dompdf_config.inc.php");
$html=stripslashes('<html>');
$html.=stripslashes('');
$html.=stripslashes("<body>");
$html.="Espero que les sirva ";
$html.=stripslashes('</body></html>');

//uso de dom
$dompdf = new DOMPDF();
$dompdf->load_html($html);
$dompdf->set_paper('letter','landscape');
$dompdf->render();
$dompdf->stream("reporte.pdf");

exit(0);
}


Incluir imágenes con dompdf
Para incluir imágenes que se incluye en el html que se va a cargar la etiqueta img.
 <img alt='gaea-uv' height='139'  src='logo.png'  width='485'/> 


Para incluir imágenes de urls externas a la de donde reside la aplicación deben editar el archivo dompdf_config.init.php y cambiar el false de la variable "DOMPDF_ENABLE_REMOTE" por true.

//configuracion inicial
define("DOMPDF_ENABLE_REMOTE", false);

//configuracion final
define("DOMPDF_ENABLE_REMOTE", true);

Nota:lo que me parecio charro fue que la forma de agregar pies de pagina y numeración no me parecio natural, en este caso me parece que TCPDF tiene su fuerte.

Visualización de gráficos

Hace rato estuve buscando librerías y cosas para hacer gráficos embebidos en la web.encontré unas muy chereveres aqui les dejo las url para que chismeen.

A mi personalmente me pareció que los gráficos del api de visualización y los gráficos de Fusion están súper cheveres y se pueden hacer cosas con un mayor grado de complejidad.

viernes, 11 de junio de 2010

Crear proyecto en Symfony + Extjs

Ya he visto cosas muy raras, así que voy a sugerir una forma de trabajar en Symfony y Extjs desde el principio y con calma. La versión de Symfony que sera usada, sera la 1.2.9 con el ORM Propel.

Para empezar instalamos Symfony como lo he puesto en las otras entradas o como quiera complicarse la vida (yo uso linux ubuntu no por rápido ni seguro ni nada de eso, simplemente por que es muy fácil trabajar allí), a continuación creamos el proyecto en nuestro servidor web, por ejemplo en /var/www/ , en el public_html de una cuenta, o si es win en c:\xampp\htdocs.

Para crear el proyecto recomiendo crear una carpeta como por ejemplo Proyecto, nos situamos dentro de ella y ejecutamos:

symfony generate:project Proyecto

esto nos creara todas las carpetas con la arquitectura usada por symfony. ahora crearemos una aplicación, para esto, allí mismo en la carpeta del proyecto ejecutamos:

symfony generate:app Aplicacion
esto creara una carpeta llamada Aplicacion en la carpeta apps del proyecto, lo siguiente es crear un modulo para esa aplicacion, allí mismo en la carpeta del proyecto ejecutamos:

symfony generate:module Aplicacion Modulo

Aplicacion= aplicacion creada anteriormente
Modulo= modulo de la aplicación creada anteriormente

esto creara una carpeta llamada Modulo en la carpeta Modules de la carpeta de la aplicación creada anteriormente, ya con esto podemos trabajar, pero antes debemos configurar algunos archivos:
  • databases.yml (configuración de conexión a la base de datos)
  • propel.ini (configuración de conexión a la base de datos)
en los archivos anteriores, configuramos la conexion a la base de datos para que Symfony se pueda conectar a ella, recuerde ser muy cuidadoso con los archivos yml, estos archivos se encuentran en la carpeta config del proyecto.

Otra cosa que recomiendo es cambiar el nombre del archivo .htaccess que se encuentra en la carpeta web por el de htaccess (quitar el punto), y añadir a la carpeta web la carpeta sf que la pueden descargar del siguiente link:


listo, ya con esto podemos revisar que vamos bien, para esto vamos a nuestro navegador, y accedemos al modulo creado de la siguiente manera:

localhost/Proyecto/web/index.php/Modulo

Ahora, después de la configuración de la base de datos, vamos a hacer el mapeo de la base de datos, para esto hay muchas formas de hacerlo, pero aquí explicare la forma de crear el schema.yml a partir de las tablas ya creadas en la base de datos.

Después de tener las tablas creadas en la base de datos, ejecutamos en la carpeta del proyecto:

symfony propel:build-schema

esto creara (modificara) el schema.yml que se encuentra en la carpeta config, este archivo se puede configurar pero recuerde ser muy cuidadoso con los espacios y demás. A partir de este schema, crearemos el modelo (clases de las relaciones), para esto ejecutamos:

symfony propel:build-model

y listo, ya tenemos preparada nuestra conexión y acceso de datos para nuestro proyecto.

Lo siguiente que haremos sera incluir el Extjs, para esto sugiero hacerlo asi como lo he explicado en una entrada anterior (Integración de Extjs en Symfony) perdón pero estoy muy cansado, apenas tenga tiempo lo termino.

Symfony + PDF, TCPDDF (sfTCPDFPlugin)

Bueno, como todo proyecto tiene reportes(en pdf), aquí va como agregar TCPDF a nuestro proyecto de Symfony.

Hasta donde hemos trabajado, lo hemos hecho de dos formas.

La primera es agregándolo con Symfony, situados en la carpeta de nuestro proyecto, ejecutamos:

symfony plugin:install sfTCPDFPlugin

luego

symfony plugin:publish-assets

luego

symfony cc

La segunda forma es descargarlo de:


recuerde revisar que la versión que descargue sea compatible con la versión del Symfony con la que esta trabajando. Despues de descargado lo descomprimen y lo copian en la carpeta de plugins del proyecto, debe quedar algo así: nombreProyecto/plugins/sfTCPDFPlugin, y despues ejecutamos:

symfony plugin:publish-assets

luego

symfony cc

y listo, ya tenemos el TCPDF en nuestro proyecto, ahora un ejemplo:

en el action de un modulo creamos una nueva acción

public function executeReportePDF()
{
$config = sfTCPDFPluginConfigHandler::loadConfig();

$pdf = new sfTCPDF();

$pdf->SetFont('FreeSerif', '', 8);

$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->setHeaderFont(array(PDF_FONT_NAME_MAIN, '', '13'));
$pdf->SetHeaderData('', 2, 'Symfony', 'Reporte PDF');
$pdf->setFooterFont(array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);

$pdf->AliasNbPages();
$pdf->AddPage();
$this->html='Linux Rulez';

$pdf->writeHTML($this->html);
$pdf->ln();
$pdf->Output();

throw new sfStopException();
}

es un ejemplo muy sencillo, como para probar, ya cada quien lo modificara y le agregara cosas a su antojo. (por ahora no se como poner etiquetas html en las entradas del blog.)

miércoles, 9 de junio de 2010

Integración de Extjs en Symfony

Bueno para empezar voy a decir que existen muchas formas, e incluso yo probé muchas de esas, con variantes y todo (links, doble carpeta, etc), pero la verdad es que es muy simple, bueno aquí presentare la que yo adapte y adopte en un proyecto que estoy realizando para la u.

Lo primero es copiar la carpeta del extjs a la carpeta web de nuestro proyecto (nombreProyecto/web/extjs), e incluir en view.yml de la aplicación (nombreProyecto/apps/nombreAplicacion/config/view.yml) los js y css respectivos para el funcionamiento del extjs, el archivo view.yml se tendría que ver algo así:

....

stylesheets: [../extjs/resources/css/ext-all.css, main.css, ../extjs/resources/css/xtheme-blue.css , ...]

...

javascripts: [../extjs/adapter/ext/ext-base.js, ../extjs/ext-all-debug.js, ../extjs/src/locale/ext-lang-es.js, ...]

...

y listo, no olviden aquí mismo incluir sus js.

nota: no se si al hacer esto altere en algo la arquitectura del proyecto (organizacion de las carpetas y demas), y a la hora de la revisión, algún profesor salga con las que el proyecto ya no esta en 3 + 1 capas. En lo personal creo que no, ya que solo estamos tocando la interfaz de presentacion.

domingo, 6 de junio de 2010

Extjs Carousel

Estoy trabajando con Extjs para mis trabajos de la universidad y encontré una forma de presentar imágenes o divs (que contienen cualquiercosa), de una manera muy agradable.

La extensión se llama carousel y esta disponible en:


y el ejemplo en:


yo lo organice de la forma en que están los ejemplos de Extjs que me gusta mucho y lo tengo publicado en el siguiente enlace.


un ejemplo para agregar imágenes dinamicamente:

var carouselpanel = new Ext.Panel({
title: 'titulo panel',
boxMaxHeight: 465,
boxMaxWidth: 700,
style: 'margin:0 auto 0 auto;',
footer: false
});

var imagenes_template = new Ext.Template(
'aqui creo el div como todos lo sabemos hacer con el id donde el carousel se va a renderizar, también se puede agregar de una vez imágenes'
///no pude poner el codigo todavia no se publicar codigo :'(
);

carouselpanel.add( imagenes_template );
carouselpanel.doLayout( true, true );

var imagenes_carousel = new Ext.ux.Carousel(
'imagenes_div',
{
itemSelector: 'img',
interval: 10,
autoPlay: true,
showPlayButton: true,
pauseOnNavigate: true,
freezeOnHover: true,
transitionType: 'fade',
navigationOnHover: false,
width: 650,
height: 460
}
);

para quitar las imágenes actuales:

imagenes_carousel.clear();

para agregarlas dinamicamente:

var img = document.createElement('img');
img.src = 'url_imagen';
img.title = 'nombre_imagen';
img.setAttribute('style', 'width:300px; height:300px');
imagenes_carousel.add(img, true);
imagenes_carousel.play();

por si alguien no sabe agregar el carousel:

type="text/javascript" src=".../carousel/carousel.js" ///script

rel="stylesheet" type="text/css" media="screen" href=".../carousel/css/carousel.css" ///css

espero les sea de ayuda.

Instalar symfony en win

Después de tener instalado php, apache y mysql, ya sea usando el xampp o wampp o cada uno independiente (yo lo hago con xampp), descargamos el symfony desde

http://www.symfony-project.org

o para una version especifica

http://www.symfony-project.org/get/symfony-"version".tgz

por ejemplo:

http://www.symfony-project.org/get/symfony-1.2.9.tgz

despues de descargado, lo extraemos en el directorio htdocs (xampp) que se encuentra en

c:\xampp\htdocs

y agregamos las variables de entorno para php y el symfony de la siguiente manera:

Equipo -> Clic derecho (propiedades) -> Configuración Avanzada del Sistema -> variables
de entorno. Modifico la variable Path, y le adiciono las rutas absolutas donde se encuentran el php y el symfony:

PHP: C:\xampp\php
Symfony: C:\xampp\htdocs\symfony-1.2.9\data\bin

y listo ya tenemos instalado Symfony en win.

Redactado con ayuda de una guía desarrollada por Jose Omar (jomaroc). vamos a ver si me deja publicarla aquí, ya que ahí se encuentra el proceso un poco mas detallado y ademas explica como crear y configurar un proyecto.

jomaroc, gracias por el comentario y por dejar publicar su trabajo.

Bueno sin mas aquí esta el link.



Instalar Symfony en Linux (Ubuntu)

Después de tener instalado el Php, Mysql y el Apache, ya sea por Lamp, Xampp, o cada uno independiente, lo siguiente es instalar Pear de la siguiente manera:

sudo apt-get install php-pear

luego agregar el canal de Symfony:

pear channel-discover pear.symfony-project.com

y finalmente instalar Symfony

sudo pear install symfony/symfony

si se quiere instalar una versión especifica, agregamos la versión al final, ej

sudo pear install symfony/symfony-1.2.9

y listo, recuerden tener instalado el php5-cli, y libxslt para usar el propel.

Migrar proyecto Symfony de Win a Linux o viceversa

Para migrar un proyecto realizado con el framework symfony de win a linux, usando la misma versión de symfony, lo unico que se necesita hacer es cambiar o alternar las siguiente linea del archivo ProjectConfiguration.class.php que se encuentra en

nombreProyecto/config/ProjectConfiguration.class.php

la linea que hay que cambiar es la siguiente.

require_once 'C:\xampp\htdocs\symfony-1.2.9\lib/autoload/sfCoreAutoload.class.php'; (win)

la cambiamos por:

require_once '/usr/share/php/symfony/autoload/sfCoreAutoload.class.php'; (linux)

o donde sea que tengamos instalado el symfony.

Lo he probado con la versión de symfony 1.2.9 y ha funcionado perfectamente.