Themes y MasterPages

3.1 Themes

Los themes son necesarios porque para personalizar algunos controles de .NET no basta con las hojas de estilos.

Para guardar el theme debe crearse una carpeta llamada App_Theme y dentro de ella otra carpeta por cada theme. Dentro de los themes podemos tener tantos archivos skin como queramos.

Los ficheros de skin contienen listas de controles web personalizados: por ejemplo, cajas de texto de determinado color.

Aplicación de themes
Para aplicarlos hay distintas maneras. Para aplicar un theme por página debemos meter en la directiva <%@ Page el atributo Theme:
<%@ Page Language=... Theme="SuperTheme" %>

Para establecer el theme en toda la web a través del web.config:
...
<system.web>
<pages theme="SuperTheme" />
</system.web>
...

En la programación también podemos cambiar el theme al vuelo, pero hay que hacerlo en la fase Page_PreInit:

protected void Page_PreInit (object sender, EvenArgs e)
{
// Vamos a suponer que establecemos un theme a través de una variable de sesión
if (Session["Theme"] == null)
{
// no hay theme, o dejamos en blanco o ponemos uno por defecto
Page.Theme = "";
}
else
{
Page.Theme = (String)Session["MiTema"];
}
}

Estilos
Se pueden incluir ficheros css para que los themes tengan estilos. Los ficheros deben meterse en la carpeta del theme y luego hay que hacer un pequeño cambio en la página para que incluya el css: convertir el head en un control de servidor poniéndole en runat.
...
<head runat="server">
</head>
...
En caso de conflicto entre las propiedades de un control y el theme, el theme gana.

3.2 Master Pages

Las master pages son páginas asp.net que sirven como plantilla a una web. La master page debe crearse como un nuevo elemento o a partir de una página ya hecha. Está página se personaliza y se pone a punto por un lado y por otro se establecen los placeholders, es decir lugares de la página donde meteremos contenido cambiante. Para agregar una masterpage, entre todas las opciones debemos seleccionar la de "página principal".

Para personalizar la página podemos meter diseño de bloques, hojas de estilo y todo lo habitual. Aquí tenemos parte de una masterpage. Podemos ver que cambia la declaración y que se meten placeholders como el del title:
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title> <asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder>
</title>

<link href="StyleSheet.css" rel="stylesheet" type="text/css" />
</head>
<body>
...

Lo siguiente es crear páginas de contenido. Se pueden crear a mano y luego personalizar (hay que quitar etiquetas <body> etc...), pero a través de visual studio lo hace automático y creando todos las etiquetas necesarias.

Para eso agregamos una nueva página y seleccionamos el checkbox de página principal. Ahí seleccionamos una master page y el visual nos crea una página con etiquetas Content. Esas Content se corresponden con los placeholders de la master:
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Inicio.aspx.cs" Inherits="Inicio" Title="Página sin título" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
Este es el inicio
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<h1>Inicio</h1>
Este es el inicio
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="pie" Runat="Server">
Página generada superRápido
</asp:Content>

Si desde código quisieramos alterar partes de la página master, en la clase de la master tendríamos que meter métodos set/get para hacerlos accesibles.

Puede cambiarse la master page al vuelo desde código usando la propiedad: Page.Master
Tambien en el web.config se puede establecer la página master:
...
<system.web>
<pages masterPageFile="SuperMaster.master" />
</system.web>
...

by Pello Altadill 02/17/2009 07:42:19 - 5242 hits

Aplicaciones Web.NET

2. Aplicaciones ASP.NETAplicaciones Web y Ciclo de vida de una página..NET es un poco peculiar a la hora de procesar las peticiones web. El protocolo HTTP tiene la peculiaridad de no conservar el estado ya que no mantiene una conexión permanente entre cliente y servidor. Por tanto la información de estado debe guardarse de alguna manera. .NET ofrece un mecanismo llamado viewstate. Así, surgen dos tipos de peticiones: La primer...

by Pello Altadill 02/16/2009 09:10:37 - 3961 hits

More »

Algunas formulas útiles para excel

Esto del excel da una pereza, en fin. Si queremos crear formulas para generar contenido aleatorio de fechas, códigos o fecha y hora. Estás hechas rápido y mal, son mejorables. Generar fechas con horas =CONCATENAR(REDONDEAR(ALEATORIO()*10;0)+1;"/";REDONDEAR(ALEATORIO()*10;0)+1;"/19";REDONDEAR(ALEATORIO()*100;0)) Generar fechas con horas =CONCATENAR(REDONDEAR(ALEATORIO()*10;0)+1;"/";REDONDEAR(ALEATORIO()*10;0)+1;"/19";REDONDEAR(ALEATORIO()*...

by Pello Altadill 10/06/2008 08:23:44 - 3759 hits

More »

Sobre gomenda.net

Cuánto tiempo. Pues resulta que haciendo uso del inframework dordoka se ha dado inicio al experimento de crear una web. Se trata de gomenda.net, una web colaborativa de recomendaciones de temas diversos: películas, música, locales, webs, etc... con un sistema de votación muy simple en el que se elige si bien, regular o mal. Ahora mism...

by Pello Altadill 12/30/2007 23:13:24 - 4976 hits

More »

win98 con qemu

Bueno, montar un viejo sistema windoze es bastante fácil, se puede incluso crear con soporte para tarjeta de red y sonido. Primero hay que crear el disco: qemu-img create -f qcow discowin.img 500M Aunque le digas que el tamaño es 500 de entrada no ocupará todo eso, si no lo que el sistema requiera. Además se puede aplicar compresión y cifrado. Ahora ya podemos meter el CD e instalar. Si el instalador arranca desde el propio cd no hay problema: qemu -net ...

by Pello Altadill 07/17/2007 15:39:34 - 5587 hits

More »

Debian virtual con qemu

Supongamos que nos hace falta una máquina linux virtual dentro del propio linux. Podemos descargarnos alguna imagen que ya este hecha o hacerla nosotros mismos. Lo primero de todo, debemos crear un disco duro para la máquina virtual, y para eso se crea un fichero especial con un tamaño determinado: qemu-img create -f qcow midisco.img 0.5G Con eso creamos un disco de 500 megas. Se supone que podemos poner 500M. Vale. Tenemos la máquina, con un disco duro. Ahora c...

by Pello Altadill 03/03/2007 19:51:36 - 43677 hits

More »

Acceso a MySQL desde C#

Este es un ejemplo simple de acceso a una BBDD Mysql con el driver 3, el 5 es beta y no está documentada la forma de conectar (o al menos no la encuentro). Esta sería la clase: using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Data.Odbc; public partial class Defa...

by Pello Altadill 02/11/2007 20:29:02 - 6109 hits

More »

Ordenar un array

BruteSort, un algoritmo chungo? Para este problema clásico ya existen varias soluciones de sobra conocidas como quicksort, mergesort, bubblesort, el caso es que no recordaba ninguno de esos algoritmos y he pensado: a ver si lo saco, si total esto es fácil. He sacado el siguiente programilla para javascript (sería válido para php,perl,c) y quizá he caido en el absurdo de reinventar la rueda. Ya nos decían en clase que anidar bucles era un fe...

by Pello Altadill 10/19/2006 11:32:27 - 7318 hits

More »

Frases aleatorias o Fortunes

Un elemento simpático del mundillo unix era cuando te logeabas en el sistema y te salía una frase ingeniosa aleatoria, cosa que se puede hacer con el juego fortune. Fortune es un programa que simplemente muestra una frase sacada de un fichero cargado de frases y proverbios. Puede ocurrir que al instalarlo no funcione, por ejemplo en un debian. Es un problema de PATH, ya que el programa fortune se guarda en el clasico directorio /usr/games Podemos añadirlo al path o usar la ruta compl...

by Pello Altadill 10/03/2006 12:45:39 - 27915 hits

More »