Entradas etiquetadas con Programación
Symfony: La vista (I), fragmentos de código
0Debido a que la parte de Symfony que explicaré hoy es bastante densa no podré resumir en un solo post todo el capítulo referente a la Vista, por tanto este será el primero de una serie de post sobre la Vista en Symfony que se explica en el manual de Symfony.
La vista
Como ya he comentado en anteriores post, Symfony sigue el sistema de Modelo-Vista-Controlador (MVC) para que la realización de nuestros proyectos estén mucho mejor estructurados y sean más fáciles de comprender por otros programadores.
Symfony para crear las vistas o implementar el diseño que hemos creado a nuestro proyecto, utiliza plantillas, esto son trozos de código html que se unen para formar la página que ha pedido el usuario.
En Symfony todo el diseño se divide de la siguiente manera:
- Layout: Es la parte del diseño que se mostrará en todas las páginas (cabeceras, pie, menú, etc).
- Elementos parciales: Si el fragmento contiene poca lógica.
- Componentes: Si el fragmento tiene mucha lógica o debe acceder a la base de datos.
- Slots: Si el fragmento va a sustituir a una parte del layout y se mostrará una parte por defecto.
En el libro lo explican bastante bien como se dividen las plantillas, los fragmentos de código que se pueden utilizar, cómo pasar variables desde la acción a los fragmentos de código, y algún detalle más que viene bien conocer. Os dejo el link a los Fragmentos de código.
Normalmente cuando trabajamos con plantillas en nuestros proyectos PHP, utilizamos la instrucción include() y en Symfony podríamos añadir a nuestro código algo como lo siguiente:
<?php include(sfConfig::get(‘sf_app_template_dir’).’/miFragmento.php’) ?>
Pero esta forma de añadir fragmentos de código no es muy limpia y, además, la caché de Symfony no reconoce la instrucción include() con lo que ese fragmento no podría ser cacheado. Aquí es donde entran en juego los fragmentos de código que he comentado anteriormente.
ELEMENTOS PARCIALES
Observa un periódico digital, su portada concretamente, verás que las noticias estan encajadas como en recuadros imaginarios y que cada noticia sigue un patrón: un titular y un pequeño avance de la noticia. Eso es un elemento parcial. Podemos poner ese elemento parcial en cualquier parte de ese periódico digital, ya que siempre será importante que el usuario pueda acceder a otras noticias con un pequeño avance.
Symfony sigue esta misma lógica para los elementos parciales. Estos, al igual que las plantillas, se ubican en la carpeta “templates/” del proyecto y son accesibles desde el módulo en el que se encuentre el archivo, desde otro módulo o desde la carpeta raíz de las plantillas “templates/“. Los elementos parciales se diferencian de las plantillas por llevar un guión bajo al principio del nombre del archivo ( _elementoparcial.php). Veamos como llamar a los elementos parciales desde distintas ubicaciones:
// Incluir el elemento parcial de miaplicacion/modules/mimodulo/templates/_miparcial1.php
// Como la plantilla y el elemento parcial están en el mismo módulo,
// se puede omitir el nombre del módulo
<?php include_partial(‘miparcial1′) ?>// Incluir el elemento parcial de miaplicacion/modules/otromodulo/templates/_miparcial2.php
// En este caso es obligatorio indicar el nombre del módulo
<?php include_partial(‘otromodulo/miparcial2′) ?>// Incluir el elemento parcial de miaplicacion/templates/_miparcial3.php
// Se considera que es parte del módulo ‘global’
<?php include_partial(‘global/miparcial3′) ?>
PASANDO VARIABLES AL ELEMENTO PARCIAL
Primero definimos la variable en la acción del módulo llamado mimodulo (mimodulo/actions/actions.class.php)
class mimoduloActions extends sfActions
{
public function executeIndex()
{
$this->total = 100;
}
}
En la plantilla llamamos al elemento parcial con la función include_partial() y le pasamos la variable en mimodulo/templates/indexSuccess.php.
<p>¡Hola Mundo!</p>
<?php include_partial(‘miparcial’, array(‘mitotal’ => $total)
) ?>
De esta manera podremos usar la variable en el elemento parcial en mimodulo/templates/_miparcial.php.
<p>Total: <?php echo $mitotal ?></p>
COMPONENTES
Los componentes son como los módulos, pero más rápidos. Siguen la misma lógica que los módulos y tienen una estructura de archivos parecida. Para nombrar un componente se utiliza la palabra execute seguido del nombre del componente, por ejemplo:
La clase de los componentes, en modules/news/actions/components.class.php
<?php
class newsComponents extends sfComponents
{
public function executeHeadlines()
{
$c = new Criteria();
$c->addDescendingOrderByColumn(NewsPeer::PUBLISHED_AT);
$c->setLimit(5);
$this->news = NewsPeer::doSelect($c);
}
}
La parte visual de los componentes se crea utilizando los elementos parciales. Para nombrarlos se usa lo mismo que para los componentes solo que sustituyendo la palabra execute por un guión bajo.
El elemento parcial, en modules/news/templates/_headlines.php
<div>
<h1>Últimas noticias</h1>
<ul>
<?php foreach($news as $headline): ?>
<li>
<?php echo $headline->getPublishedAt() ?>
<?php echo link_to($headline->getTitle(),’news/show?id=’.$headline->getId()) ?>
</li>
<?php endforeach ?>
</ul>
</div>
Cada vez que se quiera añadir el componente a una plantilla, sólo será necesario escribir el siguiente código:
<?php include_component(‘news’, ‘headlines’) ?>
Paso de parámetros a un componente y su plantilla:
// Llamada al componente
<?php include_component(‘news’, ‘headlines’, array(‘parametro’ => ‘valor’)) ?>// Dentro del componente
echo $this->parametro;
=> ‘valor’// Dentro del elemento parcial _headlines.php
echo $parametro;
=> ‘valor’
SLOTS
Aquí debería hablaros de los slots que simplemente son una especie de elemento parcial configurable, y para explicároslo solo se me ocurre hacer un copy&paste del libro, así que os dejo el link (al final de la página) y espero que os ayude.
Pasar un proyecto symfony de un servidor a otro (a capón xD)
2Sí, soy un poco bestia para algunas cosas jejeje; en este caso tuve que pasar el proyecto con el que estaba trabajando en el portatil al ordenador de sobremesa. En el portatil tengo instalada una versión de WAMP y en el sobremesa AppServ así que cuando pasé la carpeta del proyecto con un copy&paste y fui a ejecutarlo al navegador, obviamente no funcionaba, exactamente daba este error:
Warning: sfAutoload::require(C:/wamp/www/sf_sandbox/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/database/sfDoctrineDatabase.class.php) [sfautoload.require]: failed to open stream: No such file or directory in F:\AppServ\www\sf_sandbox\lib\vendor\symfony\lib\autoload\sfAutoload.class.php on line 188
Fatal error: sfAutoload::require() [function.require]: Failed opening required ‘C:/wamp/www/sf_sandbox/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/database/sfDoctrineDatabase.class.php’ (include_path=’.;F:\AppServ\php5\pear’) in F:\AppServ\www\sf_sandbox\lib\vendor\symfony\lib\autoload\sfAutoload.class.php on line 188
Mi primer ¡Hola Mundo! con Symfony
9Ayer os mostré mi pequeña odisea para instalar Symfony en WAMP o al menos el SandBox, hoy toca empezar a programar.
Sigo con el libro en español de symfony.es. En el capítulo cuarto la cosa se empieza a poner interesante, voy a empezar a enrear con Symfony jejejeje.
Instalar Symfony + WAMP
20Una de las cosas más entretenidas de un programador (al menos para mí), es la de reciclarse cada poco tiempo para no quedarse estancado. Yo estoy en este proceso y después de varios días intentando instalar Symfony junto con WAMP al fin lo he conseguido (Sí, me ha costado un huevo, ¡que pasa! xD); para que otros desarrolladores no tengan que dedicarse a buscar información sobre como instalar Symfony junto a WAMP voy a explicar como realizarlo, los fallos que me ha dado, como solucionarlos, etc. Vamos allá.
GestAuto, programa para gestión de autoescuelas
16LA APLICACIÓN SE HA RELANZADO, SI QUIERES AYUDAR PROBANDO LA APLICACIÓN O APORTANDO SUGERENCIAS SIGUE EL SIGUIENTE LINK: GestAuto 0.0.1.0 pre-alpha, la aplicación de gestión de autoescuelas open source se relanza
Hace un tiempo comencé a desarrollar una aplicación para la gestión de autoescuelas, que por desgracia no tengo tiempo para continuar desarrollando, y me daba pena que el trabajo de muchos meses se quedase olvidado en un rincón del disco duro. Al final me he decidido a publicar lo que tengo hecho y bajo la licencia GPL v3.
¡OJO! LA APLICACIÓN NO ESTÁ TERMINADA, (ya me gustaría) AUNQUE SI SE PUEDE PROBAR SIN QUE GENERE ERRORES O LA APLICACIÓN SE CIERRE. PERO REPITO, NO ESTÁ TERMINADA, Y NO ME HAGO RESPONSABLE DE LA PERDIDA DE DATOS QUE PUEDA PRODUCIR UN ERROR EN LA APLICACIÓN.
Datos técnicos de la aplicación:
- Está programado en VB .NET (sí lo se, no es lo mejor para programar, pero a falta de conocimientos de C/C++, no me quedaba otra), está divido por clases y algún componente que tuve que crear. El código, no está precisamente muy comentado, (lo siento), aunque podréis preguntarme cualquier duda que tengais sobre el código.
- Base de datos Access (sí, también lo se, no es precisamente lo mejor), aunque sería relativamente sencillo crear una clase para conectar con una base de datos MySQL, por ejemplo, ya que la conexion a la BD y los métodos de acceso a los datos, están en una clase separada del resto del código.
- A través de MONO se podría ejecutar en GNU/Linux.
Características de la aplicación:
- Puede manejar multiples autoescuelas (No recuerdo si comprobé que lo hacía correctamente, pero en principio estaba pensado para ello).
- Puede manejar multiples tasas, matriculas, precios, ofertas, cursos, clases, etc.
- Puede elegirse un profesor para las clases teóricas y otro para las prácticas.
- Impresión de documentos oficiales (Creo que solo imprimía la prueba de aptitud, y únicamente para la Comunidad de Madrid)
- Listados de alumnos, profesores, vehículos, autoescuelas, etc.
- Gestión de alumnos, profesores, autoescuelas y vehículos (Esta última parte la deshabilité del programa ya que aun no estaba acabada, aunque en el código si aparece y se puede habilitar la pestaña).
Imprimir con saltos de página en javascript
0Todos los que nos dedicamos a la programación web sabemos que para imprimir una página web, es necesario usar la función print() de javascript, pero si deseamos imprimir documentos (como nóminas, albaranes, facturas, documentación oficial, etc), habitualmente necesitaremos imprimir esos documentos por triplicado o en hojas diferentes, y la manera más optima de realizarlo sería crear un pdf que el usuario podría o bien descargar o visualizar para su impresión.
Pero gracias a CSS podemos imprimir varias páginas sin necesidad de usar pdf (a no ser que también quisieramos tener una copia en este formato9
)
¿Cuántos elementos eres capaz de nombrar en cinco minutos?
0Pues eso, ¿cuantos elementos eres capaz de nombrar en cinco minutos?, con este pequeño script realizado en javacript lo sabrás:
PHP 6.0 :: Todo items
0PHP 6 cada día está más cerca, y nos traerá una gran cantidad de novedades, que nos permitirán mejorar nuestras aplicaciones web.
Os dejo el link donde podreis ver las tareas realizadas y las que aun quedan por realizar para la nueva versión de PHP.
Google Summer of Code 2008
0Como viene realizando desde 2005, Google prepara un nuevo verano de código para este 2008, por si aun no sabes en qué consiste te recomiendo que leas su faq.
Os invito a que visiteis los proyectos, tal vez alguno os interese: http://code.google.com/soc/2008