Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros temas > Trucos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Los mejores trucos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-07-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Nombres de dominio flexibles

Si usted desarrolla aplicaciones para Internet y tiene que utilizar varios ordenadores en el proceso de desarrollo, como es mi caso, recibirá este sencillo truco como una bendición.

El principal problema que me produce el cambio constante de ordenador es que, teniendo cada uno de ellos un nombre diferente, el Personal Web Server o el Internet Information Server les asigna nombres de dominio distintos. En el texto HTML generado, en muchas ocasiones, es necesario incluir el nombre completo del dominio. Es cierto también que las rutas relativas dentro del dominio inicial pueden ser de utilidad. Pero a veces no funcionan bien.

Para agravar el asunto, parte del texto HTML que sirve de semilla a las respuestas de la aplicación puede residir dentro del propio código o en ficheros HTML externos. El primer caso sería el de un componente como TPageProducer que tuviese asignada su propiedad HTMLDoc. El segundo caso sería el del mismo componente cuando hacer referencia a un fichero externo mediante la propiedad HTMLFile. Es decir, la referencia al nombre del dominio puede venir configurada en los más diversos formatos y ubicaciones.

Afortunadamente, existe un punto central dentro las aplicaciones Web escritas con Delphi en el cual podemos resolver el problema planteado. Se trata de la respuesta al evento AfterDispatch del módulo Web:

Código Delphi [-]
type
  THTTPMethodEvent = procedure (Sender: TObject; Request: TWebRequest;
    Response: TWebResponse; var Handled: Boolean) of object;

El evento se dispara cuando ya se han activado todas las acciones que tenían algo que decir.

La respuesta se encuentra dentro de la propiedad Content del parámetro Response. El truco consiste en buscar dentro de la respuesta cierta cadena de caracteres, que utilizaremos como símbolo del nombre de dominio, y reemplazarla cuantas veces aparezca por el nombre de dominio verdadero.

Supongamos que el texto de cierta página que queremos generar es el siguiente:

Código:
<html>
 <body>
  Visite nuestra <a href="$#!+/moreinfo.htm">página de información</a>.</p>
 </body>
</html>
Observe que he utilizado la cadena $#!+ (una secuencia improbable, en circunstancias normales) como sustituto del nombre de dominio. Dentro de la unidad del módulo de datos defino dos constantes de alcance global:

Código Delphi [-]
const
  SDomainSymbol = '$#¡+';
  SDomain = 'http://naroa/scripts';

Debemos modificar el valor definido para SDomain cuando cambiamos de ordenador. Por supuesto, un truco más completo consistiría en sustituir la constante por una función inteligente que detecte o deduzca el nombre del dominio. Esto se lo dejo a usted.

El siguiente y último paso es interceptar el evento AfterDispatch:

Código Delphi [-]
procedure TmodData.WebModuleAfterDispatch(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
  if CompareText(Response.ContentType, 'text/html') = 0 then
    Response.Content := StringReplace(Response.Content, SDomainSymbol, SDomain,
      [rfReplaceAll]);
end;

Tome nota de la comprobación del valor de la propiedad ContentType; nuestra aplicación puede en ocasiones devolver un gráfico como resultado. La función StringReplace está definida en la unidad SysUtils.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 16:32:19.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi