Libro de Kamila 1.0.1 yiyi 2009 Universidad Centroocidental

Transcripción

Libro de Kamila 1.0.1 yiyi 2009 Universidad Centroocidental
Libro de Kamila 1.0.1
yiyi 2009
Universidad Centroocidental Lisandro Alvarado
Decanato de Ciencias y Tecnología
Departamento de Sistemas
Área de Laboratorios
Libro de Kamila Framework
Versión 1.0.1
... En honor a mi hija Camila S. Gonzalez A.
Autor: Prof. Edgar Gonzalez
[email protected]
1
Libro de Kamila 1.0.1
yiyi 2009
Instalación de KAMILA
Para usar el framework de Kamila éste funciona sobre una distribución
Linux como: Kubuntu 8.04 ó mayor, Ubuntu 8.04 ó mayor, Debian
3.0 o mayor.
Luego de instalado dicha distribución, se debe instalar el servidor Web
Apache2 versión 2.2.8 ó mayor a través del programa adept ó synactic
los siguientes paquetes a instalar son: apache2, apache2-mpm-prefork,
apache2-util, apache2.2-common.
Luego instalar el lenguaje ruby, para ello los paquetes necesitados son:
eruby, irb1.8,
libapache-ruby1.8,
libcairo-ruby1.8,
libapache2-mod-ruby,
libatk1-ruby,
libdbd-mysql-ruby1.8, libdbd-pg-ruby1.8,
libdbi-
ruby1.8, liberuby, libgdk-pixbuf2-ruby1.8, libgems-ruby1.8, libglib2ruby1.8, libgtk2-ruby1.8, libmysql-ruby1.8, libodbc-ruby1.8, libopensslruby1.8, libpango1-ruby1.8, libpgsql-ruby1.8, libqt0-ruby1.8, libqt4ruby1.8,
libreadline-ruby1.8,
librmagick-ruby1.8,
librmagick-ruby,
librmagick-ruby-doc,
libruby1.8, libxml-ruby1.8, libzip-ruby.1.8,
rdoc,
rdoc1.8, rmagic, ruby, ruby1.8, ruby1.8-dev.
Después, para cumplir el estándar de web: http://DNS ó IP /Sitio
Web/controlador/accion/parámetros, se agregó el módulo rewrite al
servidor web apache, a través del comando en una consola del sistema
operativo como super usuario de la siguiente forma:
# a2enmod rewrite
2
Libro de Kamila 1.0.1
yiyi 2009
Luego de instalar el mod_rewrite habilitamos para la carpeta de
publicación de apache2: /var/www el uso de éste módulo
Ubica
el
archivo
:
/etc/apache2/sites-enabled/000-default
ó
/etc/apache2/sites-enabled/default
Busca la línea para el directorio: /var/www donde dice: AllowOverride
None y cambiar por: AllowOverride All y reinicias el apache con:
# /etc/init.d/apache2 restart
Esto le permite al Apache hacer rediccionamientos de URLs según lo
indique el archivo: .htaccess. El archivo .htaccess debe residir en la
carpeta raíz del framework y su contenido es el siguiente:
# Permitir ejecución de scripts CGI y no presentar indice de directorios
Options +ExecCGI -Indexes
<IfModule mod_rewrite.c>
# Configuración del Framework Kamila
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#RewriteRule ^(.*)$ public/ [L,QSA]
RewriteRule ^(.*)$ index.rhtml [QSA,L]
# Descomentar alguna regla, si deseas desactivar
# alguna carpeta del Framework Kamila
#RewriteRule ^(controllers)/$ - [F]
#RewriteRule ^(models)/$ - [F]
#RewriteRule ^(views)/$ - [F]
</IfModule>
3
Libro de Kamila 1.0.1
yiyi 2009
Donde podemos resaltar la expresión regular o regla RewriteRule
^(.*)$ index.rhtml [QSA,L], donde del módulo rewrite de Apache2,
redireccionará cualquier dirección url que involucre el sitio web
(Kamila) a la página index.rhtml que se encuentra en la raíz de
Kamila.
Para configurar el apache y reconozca e interprete el código ruby en los
archivos con extensión *.rhtml se debe hacer lo siguiente:

Crear el archivo ruby.load con el siguiente contenido:

LoadModule ruby_module
/usr/lib/apache2/modules/mod_ruby.so
Crear el archivo ruby.conf con el siguiente contenido:
# Agregar el modulo ruby para apache2
<IfModule mod_ruby.c>
AddType text/html .rhtml
DirectoryIndex index.rhtml
RubyRequire apache/ruby-run
RubyRequire apache/eruby-run
#RubyRequire apache/ruby-debug
RubySafeLevel 0
RubyTimeOut 60
# Handle *.rhtml files as eRuby files
<Files *.rhtml>
SetHandler ruby-object
RubyHandler Apache::ERubyRun.instance
#RubyHandler Apache::ERubyDebug.instance
</Files>
</IfModule>
# fin del modulo ruby

Copiar los archivos ruby.load sino existe y ruby.conf al directorio:
/etc/apache2/mods-available
4
Libro de Kamila 1.0.1
yiyi 2009

Posicionarse en: /etc/apache2/mods-enabled

Crear un enlace simbolico como super usuario:
# ln -s /etc/apache2/mods-available/ruby.conf ruby.conf
# ln -s /etc/apache2/mods-available/ruby.load ruby.load
(sino existe)
y luego se debe restaurar el servicio de apache2:
# /etc/init.d/apache2 restart
Después se debe instalar través de adept o synatic, el servidor de base
de
datos
MySQL
y
los
paquetes
que
se
necesitan
son:
libmysqlclient15off, mysql-client-5.0, mysql-common, mysql-gui-toolscommon, mysql-query-browser, mysql-server-5.0.
Luego se debe instalar las siguientes librerías para ruby:

Descargar desde: http://rubyforge.org el archivo: rubygems1.0.1.gz o de seducla

Extraer como super usuario el archivo: rubygems-1.0.1.gz
posicionarse en la carpeta: rubygems-1.0.1 y ejecutar:
# ruby setup.rb

Como super usuario posicionarse en: /usr/bin y renombrar el
archivo gem1.8 a gem
# mv gem1.8 gem

Instalar como super usuario los siguientes librerías que puedes
buscar y descargar en: http://rubyforge.org :
# gem install rubyforge-0.4.5.gem
# gem install session-2.4.0.gem
# gem install abstract-1.0.0.gem
# gem install erubis-2.5.0.gem
5
Libro de Kamila 1.0.1
yiyi 2009
# gem install tree-0.2.1.gem
# gem install transaction-simple-1.3.0.gem
# gem install color-tools-1.3.0.gem
# gem install pdf-writer-1.1.3.gem
# gem install rake-0.7.3.gem
# gem install hoe-1.2.1.gem
# gem install gruff-0.2.8.gem
# gem install activesupport-1.3.1.gem
# gem install activerecord-1.14.4.gem
Luego descargar: fpdf-1.53.gem y kamila-1.0.1.gem desde
http://rubyforge.org/projects/kamila/
para su instalación:
# gem install fpdf-1.53.gem
# gem install kamila-1.0.1.gem
Luego
descargar
kamilaweb-1.0.1.zip
desde
http://rubyforge.org/projects/kamila/ y descomprimir dicho
archivo en la carpeta: /var/www como super usuario:
# cd /var/www
# unzip kamilaweb-1.0.1.zip
6
Libro de Kamila 1.0.1
yiyi 2009
Documentación de las Clases de Kamila
La siguiente clase es: Mycgi y su fuente se llama: mycgi.rb que está
empaquetada en la librería: kamila-1.0.0.gem y su diseño es:
Tarjeta CRC
Proyecto: Framework Kamila
Super Clase: CGI
Require: cgi
Sub Clase: Mycgi
Descripción: Esta clase permite el redicionamiento a un URL
Atributos
Nombre
Descripción
Responsabilidades
Nombre
Descripción
Dado el parámetro where o URL a
redirect( where )
redireccionar.
Observaciones: Se creó esta clase que hereda de CGI, ya que éste
método redirect, no existe en la clase CGI.
La
siguiente
clase
es:
Scanear_disco
y
su
fuente
se
llama:
scanear_disco.rb que está empaquetada en la librería: kamila1.0.0.gem y su diseño es:
Tarjeta CRC
Proyecto: Framework Kamila
Super Clase:
Require: fileutils, tree, open-uri, rexml/document
Sub Clase: Scanear_disco
Descripción: Esta clase contiene los métodos que permiten obtener
todos los directorios y archivos de cada directorios dado una rama o
raíz.
Atributos
Nombre
Descripción
@control : Boolean
Variable de control de la clase
@directorio : Boolean
Indica si el archivo es de tipo
7
Libro de Kamila 1.0.1
yiyi 2009
directorio
@nivel : Integer
Es un de tipo entero que indica el
nivel de profundidad en el scaneo
del disco
@raiz : Tree
De tipo árbol que contiene la raíz
que a partir de él se scaneará los
siguientes niveles de directorio
Responsabilidades
Nombre
Descripción
initialize()
Constructor de la clase
Obtiene las propiedades del
getArchivo(archivo)
archivo
Método que permite scanear el
directorio actual y hacer la
scandisco(nodo,dirActual)
llamada recursiva a él mismo para
seguir scaneando los siguietes
niveles
imprimirArbol()
Imprime el árbol
adicionarElementos(elementoAr Adiciona elementos al arrelgo de
ray,rama)
tipo Rama o Tree.
Genera un documento XML dado
generarXML(archivo)
el archivo de tipo Tree.
Observaciones:
La siguiente clase es: Mypdf y su fuente se llama: mypdf.rb que está
empaquetada en la librería: kamila-1.0.0.gem y su diseño es:
Tarjeta CRC
Proyecto: Framework Kamila
Super Clase: fpdf
Require: rubygems y fpdf
Sub Clase: Mypdf
Descripción: Esta clase contiene los atributos y métodos que
permiten generar reportes tabulares, basado en el ejemplo 5 del sitio
http://www.fpdf.org.
Atributos
Nombre
Descripción
@font
Arreglo que contiene las
caracteristicas de la fuente para el
8
Libro de Kamila 1.0.1
@fontf
@image1
@image2
@xy1
@xy2
@xy3
@xy4
@title1
@title2
@title3
yiyi 2009
encabezado, ver ejemplo: quince.
Arreglo que contiene las
caracteristicas de la fuente para el
pie de página, ver ejemplo: quince.
Arreglo que contiene las
caracteristicas de la imagen o logo
que se ubicará al tope izquierdo de
la página en el encabezado del
reporte tabular, ver ejemplo:
quince.
Arreglo que contiene las
caracteristicas de la imagen o logo
que se ubicará al tope derecho de
la página en el encabezado del
reporte tabular, ver ejemplo:
quince.
Arreglo que contiene las
coordenadas del primer título del
encabezado del reporte tabular,
ver ejemplo: quince.
Arreglo que contiene las
coordenadas del segundo título del
encabezado del reporte tabular,
ver ejemplo: quince.
Arreglo que contiene las
coordenadas del tercer título del
encabezado del reporte tabular,
ver ejemplo: quince.
Arreglo que contiene las
coordenadas del cuarto título del
encabezado del reporte tabular,
ver ejemplo: quince.
Arreglo que contiene las
características del primer título
del encabezado del reporte
tabular, ver ejemplo: quince.
Arreglo que contiene las
características del segundo título
del encabezado del reporte
tabular, ver ejemplo: quince.
Arreglo que contiene las
características del tercer título del
encabezado del reporte tabular,
9
Libro de Kamila 1.0.1
yiyi 2009
ver ejemplo: quince.
@title4
Arreglo que contiene las
características del cuarto título del
encabezado del reporte tabular,
ver ejemplo: quince.
@lines
Contiene cuantas líneas queda de
separación entre encabezado del
reporte y la tabla donde se vaciará
la información, ver ejemplo:
quince.
@y
Contiene cuantas líneas antes del
final de pie de página, ver
ejemplo: quince.
@pagef
Arreglo que contiene las
características del del pie de
página del reporte tabular, ver
ejemplo: quince.
Responsabilidades
Nombre
Descripción
HeaderPage(font,image1,image
Método que recibe los parámetros
2,xy1,title1,xy2,title2,xy3,title3,
para el encabezado del reporte.
xy4,title4,lines)
Método sobrecargado para
personalizar el encabezado, según
Header()
los parámetros recibidos en
HeaderPage().
Método que recibe los parámetros
FooterPage(font,y,page)
para el pie de página del reporte.
Método sobrecargado para
personalizar el pie de página,
Footer()
según los parámetros recibidos en
FooterPage().
Para cargar los datos de un
archivo de texto, separados por
LoadData(file)
punto y coma, y retorna un arreglo
de arreglos.
BasicTable(header, data)
Genera un reporte tabular básico,
dado el arreglo header con los
datos de las columnas y el arreglo
data que es un arreglo de arreglos
con los datos que se vaciarán en la
tabla básica, ver ejemplo quince.
ImprovedTable(header, data,
Equivalente al método BasicTable,
10
Libro de Kamila 1.0.1
yiyi 2009
wh, wd)
pero con la diferencia que
podemos personalizar los datos del
encabezado de las columnas y los
mismos datos, ver ejemplo quince.
FancyTable(header, data, wh,
wd, fillcolor, textcolor,
drawcolor, linewidth, font,
fillcolorRestart,
textcolorRestart, fontRestart)
Equivalente al método
ImprovedTable, pero con la
diferencia que podemos
personalizar todo los datos del
reporte tabular, ver ejemplo
quince.
Observaciones:
La siguiente clase es la llamada: Kamila y su fuente se llama:
kamila.rb que está empaquetada en la librería: kamila-1.0.0.gem y su
diseño es:
Tarjeta CRC
Proyecto: Framework Kamila
Super Clase:
Require: rubygems, mycgi, cgi/session, cgi/session/pstore,
utilidades,
fileutils, yaml.
Sub Clase: Kamila
Descripción: La clase núcleo del framework (core) que permite,
incializar variables globales a través del método: init() y validar a
través del URL, el controlador y acción a ejecutar a través del
método: dispatcher().
Atributos Globales
Nombre
Descripción
$kamila_titulo: String
Variable global contiene el título
del mensaje a mostrar.
$kamila_mensaje: String
Variable global el mensaje a
mostrar.
$kamila_icon_mensaje: String
Variable global contiene el nombre
del icono para el mensaje a
mostrar.
$kamila_linkto: String
Variable global contiene el URL
11
Libro de Kamila 1.0.1
$kamila_array_items: Array
$kamila_website: String
$kamila_site: String
$kamila_home: String
$kamila_lib: String
$kamila_serveraddr: String
$kamila_remoteddr: String
$kamila_DatabaseAdapter:
String
$kamila_DatabaseHost: String
$kamila_DatabasePort: String
$kamila_DatabaseName: String
$kamila_DatabaseUsername:
String
$kamila_DatabasePassword:
String
yiyi 2009
que se desea ir.
Variable global que obtiene por
fragmento los datos dados en el
URL.
Variable global obtiene la raíz del
servidor web apache.
Variable global y contiene el URL
del sitio web.
Variable global y contiene el
directorio raiz del sitio web:
/var/www/kamila.
Variable global que contiene la
ruta de la librería Kamila.
Variable global que contiene el IP
del servidor donde se ejecuta
Kamila Web.
Variable global que contiene el IP
del cliente que se conecta para
usar Kamila Web.
Variable global que contiene el
adaptador del motor de la base de
datos leido del database.yml en la
carpata: /var/www/kamila/config.
Variable global que contiene el
Host o IP del motor de la base de
datos leido del database.yml en la
carpata: /var/www/kamila/config.
Variable global que contiene el
Puerto del motor de la base de
datos leido del database.yml en la
carpata: /var/www/kamila/config.
Variable global que contiene el
Nombre de la base de datos leido
del database.yml en la carpata:
/var/www/kamila/config.
Variable global que contiene el
usuario permitido a la base de
datos leido del database.yml en la
carpata: /var/www/kamila/config.
Variable global que contiene la
clave permitido a la base de datos
leido del database.yml en la
carpata: /var/www/kamila/config.
12
Libro de Kamila 1.0.1
$kamila_array_controllers:
Array
yiyi 2009
Obtiene todos los controladore
(archivos: *.rb) que el programador lo
haya definido en la carpeta:
controllers del framework.
$kamila_controller_exist:
Boolean
Variable global que indica si existe
o no el controlador solicitado por
el usuario en la llamada escrita en
el URL del navegador.
$kamila_controller_class: String Variable global que tiene el
nombre de la clase que es el
mismo nombre del controlador,
pero con la inicial del controlador
en mayúscula porque las clases en
ruby la incial es en mayúscula.
$kamila_controller_object:
Variable global, que contiene la
String
instancia de la clase controlador.
$kamila_action: String
Variable global, que contiene el
método de la clase controlador que
el usuario denotó en el URL donde
dispatcher valida si existe o no
dicha acción.
Responsabilidades
Nombre
Descripción
initialize()
Constructor de la clase
Este método inicializa las variables
Kamila.init()
globales
Este método, desglosa el URL y
toma el estándar:
http://DNS ó IP /Sitio
Web/controlador
/accion/parámetros, toma el
controlador valida si existe,
Kamila.dispatcher()
instancia el controlador y ejecuta
el método de ese controlador dado
en el URL en la acción definida y si
envian parámetros también son
tomados para la ejecución del
mismo.
Observaciones: Los dos métodos son métodos de clase (está clase
no es instanciada) y son ejecutados cuando el usuario hace una
solicitud siguiendo el estándar:
http://DNS ó IP /Sitio Web/controlador/accion/parámetros
13
Libro de Kamila 1.0.1
yiyi 2009
Cada vez que el usuario sigue ese patrón para cada llamada de un
controlador y acción, el módulo rewrite de apache2 sigue las reglas
de expresión definidas en el archivo: .htaccess, haciendo un
redireccionamiento a la carpeta raíz del framework y ejecuta el
archivo: index.rhtml. Parte del contenido de éste archivo, se puede
ver la llamada dichos métodos:
if File.exist?("/etc/apache2/mods-available/rewrite.load")
begin
require 'kamila'
Kamila::init()
Kamila::dispatcher()
rescue LoadError
$kamila_icon_mensaje = "Ext.MessageBox.ERROR"
$kamila_titulo = "Error"
#$kamila_mensaje = $kamila_defaultMessages["message014"]
$kamila_mensaje = $!
$kamila_linkto = ENV['HTTP_REFERER']
%>
<script language="javascript">
location.href = "public/message/message.rhtml";
</script>
<%
end
La siguiente clase es la llamada: Applicaction y su fuente se llama:
application.rb
que
está
empaquetada
en
la
librería:
kamila-
1.0.0.gem y su diseño es:
Tarjeta CRC
Proyecto: Framework Kamila
Super Clases:
Require: rubygems, utilidades, fileutils, erubis, overload, mycgi, cgi,
pstore, digest
Sub Clase: Application
Descripción: Una vez que el método de clase: dispatcher de la
clase anterior: Kamila, ejecuta el controlador y acción denotado en
la url, un controlador hereda de está clase Apllicaction, donde se
encuentra el método render(vista) que hace uso del módulo erubis
para evaluar las instrucciones de la vista donde puede usar la gran
14
Libro de Kamila 1.0.1
yiyi 2009
cantidad de APIs que ofrece esta clase y además validar que la vista
no use instrucciones del modelo.
Atributos
Nombre
Descripción
@kamila_array_views_dir :
Obtiene todas las carpetas que
Array
estan en la carpeta: views del
framework.
@kamila_array_views_file :
Obtiene todas las vistas (archivos:
Array
*.rhtml) que el programador lo
haya definido en la carpeta:
views/controlador del framework.
@kamila_array_models: Array
Obtiene todas las modelos basado
en ORM usando active-record
(archvios *.rb) que el programador
lo haya definido en la carpeta:
models del framework.
@kamila_views_dir_exist:
Indica si la carpeta con el mismo
Boolean
nombre del controlador existe o no
en la carpeta: views del
framework.
@kamila_views_file_exist:
Indica si la vista en:
Boolean
views/controlador existe o no
cuando el controlador a tráves de
su método render(vista o page)
trata de mostrar en el navegador.
@kamila_model_exist: Boolean
Indica si el modelo existe o no
cuando el controlador a tráves de
su método: loadmodel(modelo)
trata de usar una clase ubicada en
la carpeta: models.
$kamila_view: String
Variable global, que contiene la
vista que existe en la carpeta:
views que necesitará el
controlador usando el método:
render(vista o page).
Responsabilidades
Nombre
Descripción
initialize()
Constructor de la clase.
verifyviews()
Esté método verifica, dada una
vista: *.rhtml, si existe la carpeta y
la vista o no en la carpeta: views
del framework.
loadmodel(modelo)
Esté método carga el modelo, dado
15
Libro de Kamila 1.0.1
render(page)
create_html()
close_html()
create_head()
close_head()
create_title(titulo)
close_title()
create_meta()
create_meta(httpequiv,content,c
harset)
create_body()
create_body(background,bgcolo
r,css,js)
create_body(marginheight,margi
nwidth,topmargin,leftmargin,bgc
olor)
yiyi 2009
como parámetro el nombre de la
clase , si existe o no en la carpeta:
models del framework. Nota: el
nombre del archivo *.rb que
contiene la clase de tipo modelo, y
el nombre de la clase deben ser
del mismo nombre.
Este método permite mostrar o
generar todo el contenido de una
vista o página *.rhtml, que el
programador haya creado o
programado con las APIs de
Kamila, en la carpeta:
views/nombre del
controlador/nombre de la vista:
*.rhtml
Genera la etiqueta <html>
Genera la etiqueta </html>
Genera la etiqueta <head>
Genera la etiqueta </head>
Genera la etiqueta <title>titulo
Genera la etiqueta </title>
Genera la etiqueta <meta
name="GENERATOR"
content="kamila version 1.0.0">
Genera la etiqueta como: <meta
http-equiv="Content-Type"
content="text/html; charset=iso8859-1">
Genera la etiqueta <body>
Genera la etiqueta <body> con los
atributos dados como parámetros.
Genera la etiqueta <body> con los
atributos dados como parámetros.
close_body()
create_center()
Genera la etiqueta </body>
close_center()
Genera la etiqueta </center>
create_css(css)
Genera etiqueta <link rel, dado el
parámetro como por ejemplo:
Genera la etiqueta <center>
16
Libro de Kamila 1.0.1
create_javascript()
create_javascript(js)
create_javascript(url_externo,fla
g)
close_javascript()
create_javascript_md5()
create_javascript_livevalidation(
)
create_javascript_extjs()
create_javascript_rialto(theme)
yiyi 2009
<link rel="stylesheet"
type="text/css"
href="http://192.168.232.132/kami
la/public/css/estilo_rojo.css">
Genera la etiqueta <script>
Genera etiqueta <script
type="text/javascript" src=, dado
el parámetro como por ejemplo:
<script type="text/javascript"
src=$kamila_site+"/public/js/msg.j
s"></script>
Genera etiqueta <script
type="text/javascript" src=, dado
el parámetro como por ejemplo:
<script type="text/javascript"
src="url_externo/msg.js"></script
>
Genera la etiqueta </script>
Genera la etiqueta javascript que
incluye la librería md5.js para ser
uso del algoritmo de encriptación
para los campos de tipo password,
para los frameworks:
livevalidation, extjs y rialto.
Genera la etiqueta de javascript y
css que incluye la librería
Livevalidation para ser uso de las
APIs o funciones de está clase con
sufijo: _lv, como por ejemplo:
input_text_presence_lv('text','form'
,'f1','usuario','','false',12,12,'false','
introduzca el usuario',1,'cajatexto')
Genera la etiqueta de javascript y
css que incluye del framework
Extjs para ser uso de las APIs o
funciones de está clase con sufijo:
_extjs, como por ejemplo:
input_textField_extjs(id,name,input
Type,width,allowBlank,value,disabl
ed,cls)
Genera la etiqueta de javascript y
css que incluye del framework
Rialto para ser uso de las APIs o
funciones de está clase con sufijo:
17
Libro de Kamila 1.0.1
create_javascript_language_extj
s(language,charset)
create_javascript_validate_rang
e_extjs(funcion)
create_heading(h)
create_heading(h,texto)
create_heading(h,id,texto)
close_heading(h)
create_paragraphs()
create_paragraphs(id)
create_paragraphs(id,text)
create_paragraphs(id,text,css)
close_paragraphs()
insert_linebreaks(cantidad)
insert_text(texto)
create_span(text)
create_span(text,id)
create_span(text,id,css)
create_div()
create_div(id)
create_div(id,css)
create_div(id,css,text)
yiyi 2009
_rialto, como por ejemplo:
input_checkbox_rialto(name,top,lef
t,parent,text,isChecked,className
)
Genera el javascript para el idioma
en los mensajes que se emitirán
cuando se use las APIs o funciones
con sufijo _extjs
Genera el javascript para la
validación de fechas entre un
rango, necesitada por la API:
input_datefield_extjs(id,name,valu
e,readonly,blankText,invalidText,ty
pe,vtype,disabled,dateField)
Genera la etiqueta <h1> o <h2>
... <hn>
Genera la etiqueta <h1>texto o
<h2>texto
Genera la etiqueta <hn
id='id1'>texto
Genera la etiqueta </h1> o </h2>
... </hn>
Genera la etiqueta <p>
Genera la etiqueta <p id=”id”>
Genera la etiqueta <p
id=”id”>texto
Genera la etiqueta <p id=”id”
class=”css”>
Genera la etiqueta </p>
Genera tanta(s) etiqueta(s) <br/>
según la cantidad.
Inserta un texto
Genera la etiqueta <span>text
Genera la etiqueta <span id>text
Genera la etiqueta
class=css>text
Genera la etiqueta
Genera la etiqueta
Genera la etiqueta
class=”css”>
Genera la etiqueta
18
<span id,
<div>
<div id=”id”>
<div id=”id”
<div id=”id”
Libro de Kamila 1.0.1
create_div(id,css,align,text)
close_div()
create_font(face,size,color,css)
close_font()
create_ol()
create_ol(id)
create_ol(id,css)
close_ol()
create_li()
create_li(id)
create_li(id,css)
close_li()
yiyi 2009
class=”css”>texto
Genera la etiqueta <div id=”id”
class=”css” align=”align”>texto
Genera la etiqueta </div>
Genera la etiqueta <font
face=”face” size=”size”
color=”color” class=”css”>
Genera la etiqueta </font>
Genera la etiqueta <ol>
Genera la etiqueta <ol id=”id”>
Genera la etiqueta <ol id=”id”
class=”css”>
Genera la etiqueta </ol>
Genera la etiqueta <li>
Genera la etiqueta <li id=”id”>
Genera la etiqueta <li id=”id”
class=”css”>
Genera la etiqueta </li>
create_href(url)
Genera la etiqueta <a href=”url”>
Genera la etiqueta <a
create_href(url,texto)
href=”url”>texto
create_href(url,texto,target)
Genera la etiqueta <a href=”url”
target=”target”>texto
close_href()
Genera la etiqueta </a>
Genera la etiqueta <table
create_table(border)
border=”border”>
create_table(border,width)
Genera la etiqueta <table
border=”border” width=”width”>
create_table(cellpadding,cellspa Genera la etiqueta <table
cing,border,align,width,height,ba cellpadding=”cellpadding”
ckground)
cellspacing=”cellspacing”
border=”border” align=”align”
width=”width” height=”height”
background=”background”>
close_table()
Genera la etiqueta </table>
create_tr()
Genera la etiqueta <tr>
19
Libro de Kamila 1.0.1
yiyi 2009
close_tr()
create_td()
create_td(width)
Genera la etiqueta </tr>
Genera la etiqueta <td>
Genera la etiqueta <td
width=”width”>
create_td(width,css)
Genera la etiqueta <td
width=”width” class=”css”>
create_td(width,height,css)
Genera la etiqueta <td
width=”width” height=”height”
class=”css”>
create_td(valign,align,height,css Genera la etiqueta <td
)
valign=”valign” align=”align”
height=”height” class=”css”>
create_td(width,height,align,bor Genera la etiqueta <td
der,css)
width=”width” height=”height”
align=”align” border=”border”
class=”css”>
close_td()
Genera la etiqueta </td>
Genera la etiqueta <img src=”src”
create_img(src)
/>
Genera la etiqueta <img id=”id
create_img(id,src)
”src=”src” />
Genera la etiqueta <img id=”id
create_img(id,src,alt)
”src=”src” alt=”alt” />
Genera la etiqueta <img id=”id
create_img(id,src,alt,border)
”src=”src” alt=”alt”
border+”border” />
Genera la etiqueta <img id=”id
create_img(id,src,alt,border,hei
”src=”src” alt=”alt”
ght)
border+”border” height=”height”
/>
Genera la etiqueta <img id=”id
create_img(id,src,alt,border,hei
”src=”src” alt=”alt”
ght,width)
border+”border” height=”height”
width=”width” />
create_text_lightbox2(url,text)
Ver ejemplo veinte.rb
create_text_lightbox2(src,title,
description)
Ver ejemplo veinte.rb
create_img_lightbox2(src,title,al
t,height,width)
Ver ejemplo veinte.rb
create_img_lightbox2(src,title,h
Ver ejemplo veinte.rb
20
Libro de Kamila 1.0.1
yiyi 2009
eight,width)
Genera la etiqueta <form id=”id”
create_form(id,name,method,act
name=”name” method=”method”
ion)
action=”action”>
Genera la etiqueta <form id=”id”
create_form(id,name,method,act name=”name” method=”method”
ion,multipart)
action=”action”
enctype="multipart/form-data>
close_form()
Genera la etiqueta </form>
Genera el código javascript para
seleccionar el foco de un campo
del formulario dado, por ejemplo:
select_focus(form,name)
<script language="JavaScript">
document.form.usuario.select();
document.form.usuario.focus();
</script>
input_button(id,name,value,css, Genera la etiqueta: <input
js)
type=”button” id=”id”
name=”name”, value=”value”
class=”css”>
Genera la etiqueta: <input
type=”submit” id=”id”
input_submit(id,name,value,css)
name=”name”, value=”value”
class=”css”>
Genera la etiqueta: <input
type=”reset” id=”id”
input_reset(id,name,value,css)
name=”name”, value=”value”
class=”css”>
nput_hidden(id,name,value)
Genera la etiqueta: <input
type=”hidden” id=”id”
name=”name”, value=”value” >
input_submit_lv(id,name,value,c Genera la etiqueta: <input
ss,form,fieldsHidden)
type=”submit” id=”id”
name=”name”, value=”value”
class=”css”> Pero, además genera
el código javascript, según el
contenido del parámetro:
fieldsHidden que debe ser de la
siguiente forma: “tipo,eliminar|
valor,10” donde vienen pares de
valores separados por coma, y
cada par de valores separado por
“|”. El código javascript generado
21
Libro de Kamila 1.0.1
input_submit_lv(id,name,value,c
ss,form,fieldsHidden,ids,messag
eError)
input_reset_lv(id,name,value,css
)
input_text_key_validate_lv(name
form,range,type,id,name,value,r
eadonly,size,maxlength,disabled
,alt,tabindex,css)
input_text_presence_lv(type,na
meform,id,name,value,readonly,
size,maxlength,disabled,alt,tabi
ndex,css)
input_textarea_key_validate_lv(r
ange,id,name,value,readonly,dis
abled,alt,tabindex,css,rows,cols)
input_textarea_presence_lv(id,n
ame,value,readonly,disabled,alt,
tabindex,css,rows,cols)
input_numericality_lv(typeinteg
er,type,id,name,value,readonly,s
yiyi 2009
es: form.tipo=”eliminar”;
form.valor=”10”;
Equivalente a la anterior función,
pero además, el parámetro ids,
contiene los id de los campos que
deseamos validar según el tipo de
dato que hallamos definido usando
la librería livevalidation ( por
ejemplo una entrada de datos
según la API:
input_text_presence_lv) antes de
hacer un submit, de lo contrario
mostrará el mensaje de error que
contiene: messageError.
Genera la etiqueta: <input
type=”reset” id=”id”
name=”name”, value=”value”
class=”css”>
Genera la etiqueta <input
type=”text” ...> con los demas
atributos. Pero además genera el
código javascript que dado el
parámetro: range, no permitirá la
entrada de datos a la caja de texto
que no esté en el rango.
Genera la etiqueta <input
type=”text” ...> con los demas
atributos. Pero además genera el
código javascript que valida que el
campo no esté vacío.
Genera la etiqueta <textarea ... >
con los demas atributos. Pero
además genera el código javascript
que dado el parámetro: range, no
permitirá la entrada de datos a la
caja de texto que no esté en el
rango.
Genera la etiqueta <textarea ... >
con los demas atributos. Pero
además genera el código javascript
que valida que el campo no esté
vacío.
Genera la etiqueta <input
type=”text” ...> con los demas
22
Libro de Kamila 1.0.1
ize,maxlength,disabled,alt,tabin
dex,css)
input_length_lv(typelength,type
size,type,id,name,value,readonly
,size,maxlength,disabled,alt,tabi
ndex,css)
input_checkbox_lv(id,name,valu
e,readonly,disabled,alt,tabindex,
css)
input_checkbox_lv(id,name,valu
e,readonly,disabled,alt,tabindex)
input_radio_button_lv(id,name,v
alue,readonly,disabled,alt,tabind
ex)
input_radio_button_lv(id,name,v
alue,readonly,disabled,alt,tabind
ex,css)
input_combobox_lv(id,name,ran
ge,readonly,disabled,alt,tabinde
x)
input_combobox_lv(id,name,ran
ge,readonly,disabled,alt,tabinde
x,css)
input_inclusion_lv(range,partial,
type,id,name,value,readonly,size
,maxlength,disabled,alt,tabindex
,css)
input_exclusion_lv(range,partial,
type,id,name,value,readonly,size
,maxlength,disabled,alt,tabindex
yiyi 2009
atributos. Pero además genera el
código javascript que valida que el
campo sea númerico.
Genera la etiqueta <input
type=”text” ...> con los demas
atributos. Pero además genera el
código javascript que valida que el
campo no exceda la longitud según
el parámetro: typelength y
typesize.
Gener la etiqueta <input
type="checkbox" ..> con los
atributos dados. Usando css.
Gener la etiqueta <input
type="checkbox" ...> con los
atributos dados. Sin usar css.
Genera la etiqueta <input selected
type="radio"..> con los atributos
dados, pero sin usar css.
Genera la etiqueta <input selected
type="radio"..> con los atributos
dados, pero usando css.
Genera la etiqueta <select
...><option ..></select> con los
atributos dados, pero sin usar css.
Genera la etiqueta <select
...><option ..></select> con los
atributos dados, pero usando css.
Genera la etiqueta <input
type=”text” ...> con los demás
atributos dato. Pero además
general el código javascript de
validación basada en la libería
livevalidation, que los datos
introducidos esté en el rango. Ese
rango es por el parámetro: range y
su contenido puede ser:
“casa,hotel,apartamento”. Solo
aceptará en ese rango, sino emite
un mensaje de error al lado de la
caja de texto.
Genera la etiqueta <input
type=”text” ...> con los demás
atributos dato. Pero además
23
Libro de Kamila 1.0.1
yiyi 2009
general el código javascript de
validación basada en la libería
livevalidation, que los datos
introducidos NO esté en el rango.
Ese rango es por el parámetro:
,css)
range y su contenido puede ser:
“casa,hotel,apartamento”. Solo
aceptará cualquier palabra pero no
las contenidas en el rango, sino
emite un mensaje de error al lado
de la caja de texto.
Genera la etiqueta <input
type=”text” ...> con los demás
atributos dato. Pero además
general el código javascript de
validación basada en la libería
input_validate_email_lv(id,name,
livevalidation, que el dato
value,readonly,size,maxlength,di
introducido sea del formato de un
sabled,alt,tabindex,css)
correo, por ejemplo:
[email protected] es formato
valido. Un formato no valido es:
casa@ y mite un mensaje de error
al lado de la caja de texto.
Genera el código javascript de
validación basada en la libería
livevalidation, dando como
parámetros los ids de las
validaciones de las APIs
create_massValidate_lv(ids,,mes
anteriores, para validar en masa,
sageError)
si alguno de los ids o campos de
datos hay un error emitirá un
mensaje dado por el parámetro
messageError y no se ejecutará el
submit dentro del formulario.
create_label_extjs(id,width,text, Genera un texto o label, con los
disabled,cls)
parámetros dado, a través de
javascript basada en el framework
Extjs, por ejemplo:
<script>
var e1 = new
Ext.form.Label({... });
input_datefield_extjs(id,name,va Genera un caja de texto de tipo
lue,readonly,blankText,disabled, fecha, con los parámetros dado, a
invalidText)
través de javascript basada en el
24
Libro de Kamila 1.0.1
yiyi 2009
framework Extjs, por ejemplo:
<script>
var fecha = new
Ext.form.DateField({..});
Igual que la función anterior,
excepto por el último parámetro
input_datefield_extjs(id,name,v que se da un campo fecha de Extjs
alue,readonly,blankText,invalidT para validar el rango y segundo
ext,type,vtype,disabled,dateFiel que use la API:
d)
create_javascript_validate_range(f
uncion), incluida en la sección:
HEAD.
Genera un caja de texto de tipo
fecha, con los parámetros dado, a
través de javascript basada en el
framework Extjs, por ejemplo:
input_textField_extjs(id,name,in <script>
putType,width,allowBlank,value, var nombre = new
disabled,cls)
Ext.form.TextField({..});
Uno de los parámetros
importantes es inputType, que
puede ser de los tipos: textfield,
password, md5.
Genera una Area de texto con los
parámetros dado, a través de
input_textArea_extjs(id,name,wi javascript basada en el framework
dth,height,allowBlank,value,disa Extjs, por ejemplo:
bled,cls)
<script>
var memo = new
Ext.form.TextArea({..});
Genera un caja de texto de tipo
hora o tiempo, con los parámetros
input_timeField_extjs(id,name,w dado, a través de javascript basada
idth,minValue,maxValue,increm en el framework Extjs, por
ent,allowBlank,value,disabled,cl ejemplo:
s)
<script>
var hora = new
Ext.form.TimeField({..});
input_numberField_extjs(id,nam Genera un caja de texto de tipo
e,inputType,width,allowBlank,va númerico con los parámetros dado,
lue,disabled,cls)
a través de javascript basada en el
framework Extjs, el parámetro
inputType, puede ser integer y
generará:
25
Libro de Kamila 1.0.1
yiyi 2009
<script>
var cedula = new
Ext.form.TextField({..}); y valida
solo enteros. Si es double,
generará:
<script>
var monto = new
Ext.form.NumberField({..});
validando datos númericos de tipo
punto flotante.
Genera un radio button, con los
parámetros dado, a través de
javascript basada en el framework
input_radioGroup_extjs(id,name,
Extjs, por ejemplo:
columns,items,disabled,cls)
<script>
var sexo = new
Ext.form.RadioGroup({..});
Genera un comboBox, con los
parámetros dado, a través de
input_comboBox_extjs(id,name, javascript basada en el framework
width,store,emptyText,disabled, Extjs, por ejemplo:
cls)
<script>
var estado = new
Ext.form.ComboBox({..});
Genera un grupo de checkBoxs,
con los parámetros dado, a través
de javascript basada en el
input_checkboxGroup_extjs(id,n
framework Extjs, por ejemplo:
ame,columns,items,disabled,cls)
<script>
var titulos = new
Ext.form.CheckboxGroup({..});
Genera un caja de texto de tipo
email, con los parámetros dado, a
través de javascript basada en el
input_emailField_extjs(id,name, framework Extjs, por ejemplo:
width,allowBlank,value,disabled <script>
,cls)
var correo = new
Ext.form.TextField({..}); y valida
que el dato sea del formato de tipo
email.
input_htmlEditor_extjs(id,name, Genera una Area de Texto del tipo
value,width,height,allowBlank,d Rich Editor, con los parámetros
isabled,cls)
dado, a través de javascript basada
en el framework Extjs, por
26
Libro de Kamila 1.0.1
yiyi 2009
ejemplo:
<script>
var curriculum = new
Ext.form.HtmlEditor({..});
Genera una ventana de tipo modal
dentro del navegador mostrando
un mensaje, con los parámetros
dado, a través de javascript basada
show_Message_extjs(icon,title,m
en el framework Extjs, por
essage)
ejemplo:
<script>
var mensaje =
Ext.MessageBox.show({..});
Igual que la API o función anterior,
pero con la diferencia que el
show_Message_extjs(icon,title,m parámetro linkto, tiene la URL
essage,linkto)
donde se redireccionará luego de
presionar el botón OK de la
ventana de mensaje.
Genera tantas pestañas y la URL
que se cargará, con los parámetros
create_tabpanel_extjs(id,active,c dado, a través de javascript basada
ollapsible,floating,width,height, en el framework Extjs, por
plain,titles,icons,tabtips,urls,clo ejemplo:
seable,col,row)
<script>
var f1tabs = new
Ext.TabPanel({..});
Genera un catálogo estático de
tipo modal dentro del navegador,
con los parámetros dado, a través
de javascript basada en el
framework Extjs, por ejemplo:
create_gridView_extjs(nameFun
<script>
ction,title,idCatalogo,ids,ds,cm,
miGridgrid = new
widthcm,data)
Ext.grid.GridPanel({..});
Se denota estático porque el
parámetro data donde resisde los
datos, no se actualiza o no se
sincroniza con el servidor.
create_gridAjaxView_extjs(name Genera un catálogo dinámico de
Function,title,idCatalogo,ids,ds, tipo modal dentro del navegador,
cm,widthcm,pageserver)
con los parámetros dado, a través
de javascript basada en el
framework Extjs, por ejemplo:
27
Libro de Kamila 1.0.1
input_submit_extjs(id,name,valu
e,css,form,fieldsHidden,js)
input_submit_extjs(id,name,valu
e,css,form,fieldsHidden,fieldsNa
mes,messageError)
input_reset_extjs(id,name,value,
css)
yiyi 2009
<script>
miGridgrid = new
Ext.grid.GridPanel({..});
Se denota dinámico porque el
parámetro data donde reside los
datos, se actualiza
sincronizadamente con el servidor
a tráves de la página servidora por
el parámetro pageserver usando
Ajax.
Genera la etiqueta: <input
type=”submit” id=”id”
name=”name”, value=”value”
class=”css”> Pero, además genera
el código javascript, según el
contenido del parámetro:
fieldsHidden que debe ser de la
siguiente forma: “tipo,eliminar|
valor,10” donde vienen pares de
valores separados por coma, y
cada par de valores separado por
“|”. El código javascript generado
es: form.tipo=”eliminar”;
form.valor=”10”; y por el
parámetro: js, donde se le indica la
función de javascript que es
generada por la API:
create_massValidate_extjs
Equivalente a la anterior función,
pero además, el parámetro
fieldsNames, contiene los nombres
de los campos que deseamos
validar según el tipo de dato que
hallamos definido usando la
librería Extjs ( por ejemplo una
entrada de datos según la API:
input_emailField_extjs) antes de
hacer un submit, de lo contrario
mostrará el mensaje de error que
contiene: messageError.
Genera la etiqueta: <input
type=”reset” id=”id”
name=”name”, value=”value”
class=”css”>
28
Libro de Kamila 1.0.1
yiyi 2009
Genera el código javascript de
validación basada en la librería
Extjs, dando como parámetros los
ids de las validaciones de las APIs
create_massValidate_extjs(form, anteriores, para validar en masa,
name,ids,mensaje)
si alguno de los ids o campos de
datos hay un error emitirá un
mensaje dado por el parámetro
mensaje y no se ejecutará el
submit dentro del formulario.
Genera una ventana de tipo modal
dentro del navegador mostrando
un mensaje, con los parámetros
dado, a través de javascript basada
en el framework Rialto, por
show_Message_rialto(top,left,wi ejemplo:
dth,height,title,message,gray)
<script>
var sPopup = new
rialto.widget.PopUp("popupRialto",
150,420,"260","80","Datos no
completados","Informacion","gray"
);
Igual que la función anterior, pero
show_Message_rialto(top,left,wi
al presionar el botón: OK, nos
dth,height,title,message,gray,lin
redirecciona a la url dado por el
kto)
parámtro: linkto.
Genera el código javascript para la
creación de una etiqueta, con los
parámetros dado, basada en la
librería Rialto:
create_label_rialto(name,top,left <script>
,parent,text,className)
var lab6 = new
rialto.widget.Label("lab6",parseInt
(screen.height *
0.35),parseInt(screen.width *
0.15),id7,"Comentario:","e6");
input_text_rialto(name,top,left,
Genera el código javascript para la
width,type,parent,options)
creación de una caja texto, con los
parámetros dado, basada en la
librería Rialto:
<script>
var nombre = new
rialto.widget.Text("nombre",parseI
nt(screen.height *
29
Libro de Kamila 1.0.1
yiyi 2009
0.10),parseInt(screen.width *
0.24),300,"A",id2,{initValue:"yiyi",
autoUp:false,isRequired:true,disab
le:false,alt:"Introduzca el
nombre",accessKey:"n",rows:5,tabI
ndex:1});
Dado el parámetro type, puede ser
los siguientes tipo de datos,
A:Alfanúmerico, N:Númerico,
D:Fecha, H:Hora, T:Area de Texto,
P:Password, MD5: Tipo password
con encriptamiento md5.
Genera el código javascript para la
creación de una entrada de dato
de tipo verficación, con los
parámetros dado, basada en la
input_checkbox_rialto(name,top, librería Rialto:
left,parent,text,isChecked,class
<script>
Name)
var titulo1 = new
rialto.widget.Checkbox("titulo1",pa
rseInt(screen.height *
0.50),parseInt(screen.width *
0.24),id9,"Pregrado",true,"chk01");
Genera el código javascript para la
creación de una entrada de dato
de tipo selección o combo box, con
los parámetros dado, basada en la
librería Rialto:
input_combo_rialto(name,top,lef
<script>
t,width,items,selWithText,parent
var estado = new
,enable,heightItem)
rialto.widget.Combo("","estado",pa
rseInt(screen.height *
0.60),parseInt(screen.width *
0.24),100,id12,{suggest:true,enabl
e:true,heightItem:0});
input_submit_rialto(name,top,lef Genera la etiqueta: <input
t,text,alt,parent,options,form,fie type=”submit” id=”id”
ldsHidden,rialtoMassValidate)
name=”name”, value=”value”
class=”css”> Pero, además genera
el código javascript, según el
contenido del parámetro:
fieldsHidden que debe ser de la
siguiente forma: “tipo,eliminar|
valor,10” donde vienen pares de
30
Libro de Kamila 1.0.1
yiyi 2009
valores separados por coma, y
cada par de valores separado por
“|”. El código javascript generado
es: form.tipo=”eliminar”;
form.valor=”10”; y por el
parámetro: rialtoMassValidate,
donde se le indica la función de
javascript que es generada por la
API: create_massValidate_rialto
Equivalente a la anterior función,
pero además, el parámetro
fieldsNames, contiene los nombres
de los campos que deseamos
input_submit_rialto(name,top,lef validar según el tipo de dato que
t,text,alt,parent,options,form,fie hallamos definido usando la
ldsHidden,fieldsNames,message librería Rialto ( por ejemplo una
entrada de datos según la API:
Error)
input_text_rialto) antes de hacer
un submit, de lo contrario
mostrará el mensaje de error que
contiene: messageError.
Genera la etiqueta: <input
input_reset_rialto(name,top,left, type=”reset” id=”id”
text,alt,parent,options,form)
name=”name”, value=”value”
class=”css”>
Genera el código javascript de
validación basada en la librería
Rialto, dando como parámetros los
ids de las validaciones de las APIs
create_massValidate_rialto(form anteriores, para validar en lote, si
,name,ids,mensaje)
alguno de los ids o campos de
datos hay un error emitirá un
mensaje dado por el parámetro
mensaje y no se ejecutará el
submit dentro del formulario.
Genera un catálogo estático de
create_gridView_rialto(top,left,
tipo modal dentro del navegador,
width,height,nameFunction,title
con los parámetros dado, a través
,nameCatalogo,nameFields,cn,w
de javascript basada en el
idthc,typec,data)
framework Rialto.
create_gridAjaxView_rialto(top,l Genera un catálogo dinámico,
eft,width,height,nameFunction,t basado en AJAX, de tipo modal
itle,nameCatalogo,nameFields,c dentro del navegador, con los
n,widthc,typec,pageserver)
parámetros dado, a través de
31
Libro de Kamila 1.0.1
yiyi 2009
javascript basada en el framework
Rialto.
Da formato a un número String,
por ejemplo si tenemos: 12354.50
format_number(number,
y el segundo parámetro es el
separator)
separador de unidades de mil es:
“,” nos genera: 12,354.50
Genera gráficas según el
create_graph_gruff(type,theme,f parámetro type, de tipo: line, pie,
ont,fontsize,title,x_axis_label,y_a bar, area, sidebar, stackedbar,
xis_label,titlearray,dataarray,xla sidestackedbar, basadas en la
bels,xvalue,file)
librería Gruff, ver ejemplo:
catorce.
create_css_contentslider(borderli
ne,bordercolor,width,height,ctp,
Ver dieciseis.rb
btp,sctp,sbtp)
create_ContentSlider_text(id,con
tent,link,label1,label2)
Ver dieciseis.rb
create_ContentSlider_image(id,c
ontent,link,label1,label2,isTable)
Ver diecisiete.rb
create_showVideo_wmv(id,width
,height,url)
Ver dieciocho.rb
create_showVideo_flash(id,width
,height,url)
Ver dieciocho.rb
create_showVideo_jwplayer(id,wi
dth,height,url)
Ver dieciocho.rb
callController(controller)
Desde un controlador llamar a otro
controlador por ejemplo
callcontroller('inicio')
callController(controller,message Desde un controlador llamar a otro
,link)
controlador donde aparecerá el
mensaje y luego al presionar el
botón OK irá a otro controlador
dado por el parámetro: link
antespor ejemplo
callcontroller('informacion','No
existe el usuario','inicio')
32
Libro de Kamila 1.0.1
yiyi 2009
initSession()
initSession('minutos')
Inicia un objeto sesión por defecto
de 30 minutos.
Inicia un objeto sesión cuyo
parámetro es un String indicadole
los minutos de la sesión.
deleteSession()
Elimina un objeto sesión
setValueSession(variable,valor)
Guarda en el objeto sesión ya
iniciado en un arreglo hash el par
la variable y su respectivo valor
Obtiene el valor dada una variable
de un objeto sesión ya iniciado.
getValueSession(variable)
Observaciones:
Estructura de Directorios de Kamila
Luego de haber instalado las librerías (gems) de soporte para Kamila,
la estructura de directorios del framework: Kamila reside en la carpeta
de publicación web: /var/www, en cualquier distribución Linux. La
estructura de directorios de Kamila, se puede ver en la siguiente figura:
Figura 8: Estructura de directorios de Kamila. Fuente: el autor.
En la carpeta config, reside los archivos: config.yml que sirve para
definir
las
siguientes
variables
del
framework:
Kamila,
como:
mvcplusplus, los valores que reconece Kamila es: yes, que estará
33
Libro de Kamila 1.0.1
yiyi 2009
activa en las vistas y modelos el uso del patrón de diseño: MVC++,
además que en las vistas sólo se programará con las APIS de Kamila,
si el parámetro es: no, no validará MVC++ y además en las vistas se
puede programar con las primitivas de etiquetas de: HTML y XHTML.
Además, se puden definir los mensajes de error según el idioma que
desee, en el atributo defaultMessage: es, significa que los mensajes
de error que emitirá el framework será en idioma español, si es: es, si
se desea en idioma inglés, es: en, también puede recibir como
parámetro: ruby, esto permitirá ser más ser específicos en algunos
errores y los mensaje se emitirá en idioma inglés. El contenido de dicho
archivo, es el siguiente:
# MVC++
mvcplusplus: no
# Default Messages
defaultMessages: es
# Definitions of Messages
english:
message001: Not installed mod_rewrite for Apache 2
message002: session can't created
message003: Not load using require for the controller
message004: Not exist the class
message005: undefined action
meessge006: or not exist the class
message007: undefined controller
message008: for controller
message009: Not permited in
meesage010: to using views instructions (puts,print,etc...) referenced
MVC++
message011: to using active record instructions referenced MVC++
or native instruccions html,css,javascript
message012: Undefined parametes for
message013: View not exist
message014: Not load or init Kamila or Application
message015: Not installed gems for kamila, to see help installation of
kamila
34
Libro de Kamila 1.0.1
yiyi 2009
message016: Configuration damaged in the file database.yml
message017: Configuration file database.yml not exist
message018: Syntax error in the view
message019: In the folder views not exist the folder with the same
name of the controller
spanish:
message001: No ha instalado el modulo mod_rewrite de Apache2
message002: sesion no creada
message003: No se pudo cargar usando require en el controlador
message004: No existe la clase
message005: indefinida la accion
message006: o no existe la clase
message007: Indefinido el controlador
message008: para el controlador
message009: No esta permitido en
message010: para usar instrucciones de la vista como
(puts,print,etc...) referenciado por MVC++
message011: para usar instrucciones de active record referenciado
por MVC++ o instrucciones nativas de html,css,javascript
message012: Indefinido parametros para
message013: Vista no existe
message014: No se pudo cargar o iniciar Kamila o la Aplicacion
message015: No estan instaladas las librerias o gems para kamila,
ver la ayuda de la instalacion de kamila
message016: Archivo de configuracion database.yml errada
message017: El archivo de configuracion database.yml no existe
message018: Sintaxis de error en la vista
message019: En la carpeta views no existe la carperta con el mismo
nombre del controlador
El otro archivo que reside en la carpeta: config, es el archivo:
database.yml, donde se definen los parámetros de conexión al motor
de base de datos que se usarán en las clases de tipo modelo, de los
archivos que residen en la carpeta: models. El contenido de dicho
archivo es:
# MySQL
development:
active: yes
35
Libro de Kamila 1.0.1
yiyi 2009
adapter: mysql
host: localhost
port: 3306
database: kamila
username: root
password:
test:
active: no
adapter: mysql
host:
port:
database:
username:
password:
production:
active: no
adapter: mysql
host:
port:
database:
username:
password:
El método: Kamila.init(), leerá éste archivo en formato: yml y generá
las siguientes variables golbales:
$kamila_DatabaseAdapter = “mysql”
$kamila_'DatabaseHost = “localhost”
$kamila_DatabasePort = “3306”
$kamila_DatabaseName = “kamila”
$kamila_DatabaseUsername = “root”
$kamila_DatabasePassword = “”
Cuando un controlador usa el método: loadmodel(“nombre del
modelo”) usará los objetos sesión antes descritos para realizar la
conexión
a
través
36
del
método:
Libro de Kamila 1.0.1
yiyi 2009
ActiveRecord::Base.establish_connection de la clase: ActiveRecord
basado en ORM. Por ejemplo:
=begin
Application: octava.rb, novena.rb y once.rb
View
: index.rhtml
models
: usuarios.rb
Autor
: Edgar Gonzalez
kamila
: versión 1.0.0
Fecha
: 10 de Agosto del 2008
=end
require "active_record"
class Usuarios < ActiveRecord::Base
end
Ahora, sino deseamos que por defecto tomar los parámetros de
conexión a un motor de base de datos definido en database.yml,
podemos definir la conexión en la clase modelo. Por ejemplo, en la
clase:
Mensajes,
que
/var/www/kamila/models/mensaje.rb:
=begin
Application: doce.rb
View
: index.rhtml
models
: mensajes.rb
Autor
: Edgar Gonzalez
kamila
: versión 1.0.0
Fecha
: 10 de Agosto del 2008
=end
require "active_record"
ActiveRecord::Base.establish_connection(
:adapter => "pgsql", # Posgres
:host
=> "192.168.232.132",
:port
=> 5243,
37
reside
en
Libro de Kamila 1.0.1
yiyi 2009
:database => "mibd",
:username => "root",
:password => "123456"
)
class Mensajes < ActiveRecord::Base
end
En la carpeta: controllers, se archivarán los controladores de la
aplicación web y la extensión de los archivos son: *.rb, dentro de esos
archivos, contendrán clases que describen la lógica del negocio y
heredan de la clase: Application. En la carpeta: models, se archivarán
los mdelos de la aplicación web y la extensión de los archivos son: *.rb,
dentro de esos archivos, contendrán las clases que describen el nombre
de las tablas que a tráves de la clase que heredan: ActiveRecord, y
usarán la tecnica de programación: ORM. En la carpeta: views/nombre
del controlador, se archivarán las vistas de la aplicación web y la
extensión de los archivos son: *.rhtml, dentro de esos archivos,
contendrán clases que describen la capa de presentación e interacción
que los usuarios de la aplicación web lo harán a tráves de un
navegador.
En la carpeta: lib es para colocar los fuentes de ruby que sean clases
para ser usada como librerías o instanciadas en los controladores.
En la carpeta: public residen los recursos como: hojas de estilos,
imagenes y código javascript necesitados por las vistas: *.rhtml; como
se puede ver en la figura:
38
Libro de Kamila 1.0.1
yiyi 2009
Figura 1: Estructura de directorios de Kamila/public. Fuente: el autor.
En la carpeta: css, donde se ubican las hojas de estilos del framework
Kamila, más las hojas de estilos de los framework basado en javascript
como: Livevalidation, los basados en AJAX, como: Extjs y Rialto, como
también, las hojas de estilo del programador que halla creado.
En la carpeta: img, donde se ubican las imagenes del framework
Kamila, más las imagenes de los framework basado en javascript como:
Livevalidation, los basados en AJAX, como: Extjs y Rialto, como
también, las imagenes del programador que halla creado.
En la carpeta: js, donde se ubican los archivos javascript del framework
Kamila, más los archivos javascript de los framework basado en
javascript como: Livevalidation, los basados en AJAX, como: Extjs y
Rialto, como también, los archivos javascript del programador que halla
creado.
39
Libro de Kamila 1.0.1
yiyi 2009
Presentación de Kamila
Luego
de
definir
los
archivos
de
configuración
el
idioma,
la
configuración el motor de base de datos que por defecto usará la
aplicación web que vamos a desarrollar y de describir la estructura de
directorios y archivos del framework; veamos la presentación de
Kamila. Para ello, en cualquier navegador colocamos la url en la caja de
texto
de
direcciones,
donde
reside
Kamila,
por
ejemplo:
http://192.168.232.132/kamila/
Figura 2: Inicio de Kamila, Fuente: el autor.
Luego el Apache2 basado en el módulo: rewrite, redirecciona según lo
indique las reglas definidas en el archivo: .htaccess, que reside en la
raíz del framework: Kamila a la siguiente url:
Figura 3: Redireccionamiento a la presentación Kamila,
Fuente: el autor.
Y nos mostrará la presentación del framework Kamila:
40
Libro de Kamila 1.0.1
yiyi 2009
Figura 4: Presentación de Kamila, Fuente: el autor.
Primera Aplicación usando Kamila
Luego de la presentación, vamos a programar nuestra primera
aplicación en Kamila. Primero programamos nuestro controlador que se
llamará: primera.rb, a través de cualquier editor de texto y lo
guardamos en la carpeta: /var/www/kamila/controllers. Su codigo es
el siguiente:
41
Libro de Kamila 1.0.1
yiyi 2009
=begin
Application: primera.rb
View
: index.rhtml
models
: Ninguno
Autor
: Edgar Gonzalez
kamila
: versión 1.0.0
Fecha
: 18 de Julio del 2008
=end
require $kamila_lib+"application"
class Primera < Application
def initialize()
end
def index()
render("index")
end
end
La primera instrucción es un comentario en bloque, en ruby se denota
el comienzo con: =begin y el final: =end donde se documenta la clase:
Primera. La segunda instrucción es la clase que se necesita, en este
caso: Application, que reside en el directorio de las librerías de ruby y
que se instalarón anteriormente. Esto se hace con la instrucción:
require (equivale a la instrucción include que se usa en PHP) luego la
variable global del framework que contiene el camino de la librería
concatenado con el archivo fuente: application.rb donde reside la clase
Applicaction, en el require no se coloca la extensión del archivo:
require $kamila_lib+"application". La tercera instrucción se define
la clase, con la palabra reservada: class y luego se coloca su nombre
con la inicial en mayúscula y la herencia se denota con el símbolo
menor: < y luego el nombre de la clase que se hereda: class Primera
< Application. Luego se definen los atributos de la clase, en este
ejemplo no se definieron. La cuarta instrucción se define el constructor
de la clase y se denota con el nombre de: initialize(), en ruby los
42
Libro de Kamila 1.0.1
yiyi 2009
métodos se definen con la palabra reservada: def, por ejemplo: def
initialize(), sin parámetros en este ejemplo, luego el código, que este
caso no hay y finaliza el método con la palabra reservada: end. Todos
los controladores deberían definir el método: index, el framework lo
sobre entenderá, en la barra de direcciones del navegador, sino se
coloca la acción a ejecutar, luego que de el nombre del controlador,
ejemplo:
http://192.168.232.132/kamila/primera
es igual a:
http://192.168.232.132/kamila/primera/index
El contenido del método index, es ejecutado a través del método:
render(“index”), éste método es heredado de la clase Application, y su
parámetro es la página a mostrar: index.rhtml, que debe residir: en la
carpeta con el mismo nombre del controlador: primera, que pertenezca
a la carpeta: views del framework: Kamila, en otras palabras:
/var/www/kamila/views/primera/index.rhtml.
El contenido de la vista: index.rhtml, que reside en la carpeta:
/var/www/kamila/views/primera/index.rhtml, es el siguiente:
<!-Application: primera.rb
View
: index.rhtml
models
: Ninguno
Autor
: Edgar Gonzalez
kamila
: versión 1.0.0
Fecha
: 18 de Julio del 2008
-->
<%=create_html() %>
<%=create_head() %>
<%=create_title('Primera Aplicaci&oacute;n') %>
43
Libro de Kamila 1.0.1
yiyi 2009
<%=create_meta() %>
<%=create_meta('Content-Type','text/html','iso-8859-1') %>
<%=close_head() %>
<%=create_body() %>
<%=create_heading('h1','Prueba de Primera:')
%><%=close_heading("h1") %>
<%="Hola , mi primera aplicaci&oacute;n con kamila" %>
<%=insert_linebreaks(1) %>
<%=create_heading('h1','Fin de Prueba de Primera')
%><%=close_heading("h1") %>
<%=close_body() %>
<%=close_html() %>
En el mismo se programa con las APIs definidas en la clase diseñada y
programada:
Application.
Basado
en
el
concepto
de
etiquetas
personalizadas y así estandarizar la programación en la vista.
Ahora ejecutemos la primera aplicación programa en el framework:
Kamila, para ello debemos seguir el patrón o estándar: http://DNS ó IP
/Sitio
Web/controlador/accion/parámetros,
http://192.168.232.132/kamila/primera
es
decir:
ó
http://192.168.232.132/kamila/primera/index en la barra de direcciones
del navegador:
44
Libro de Kamila 1.0.1
yiyi 2009
Figura 5: Primera aplicación usando Kamila, Fuente: el autor.
Si vemos el código generado por el framework en la vista: index.rhtml
de la aplicación primera, donde a tráves del método render evalúa
todas las APIs y genera el codigo HTML correspondiente para poder ser
visualizado en el navegador:
<!-Application: primera.rb
View
: index.rhtml
models
: Ninguno
Autor
: Edgar Gonzalez
kamila
: versión 1.0.0
Fecha
: 18 de Julio del 2008
-->
<html>
<head>
<title>Primera Aplicaci&oacute;n</title>
<meta name="GENERATOR" content="kamila version 1.0.0">
<meta http-equiv="Content-Type" content="text/html; charset=iso8859-1">
</head>
<body>
45
Libro de Kamila 1.0.1
yiyi 2009
<h1>Prueba de Primera:</h1>
Hola , mi primera aplicaci&oacute;n con kamila
<br/>
<h1>Fin de Prueba de Primera</h1>
</body>
</html>
Manejo de Errores en Kamila según MVC++
Ahora, veamos algunos errores que el framework: Kamila valida
siguiendo el patrón de diseño: MVC++.
Si colocamos en la barra de direcciones un método que no está definido
en la clase controladora: Primera, como por ejemplo, otrometodo:
http://192.168.232.132/kamila/primera/otrometodo, el framework nos
emite el siguiente error: Indefinida la accion otrometodo para el
controlador primera.
Figura 6: Error de una acción indefinida, Fuente: el autor.
Al presionar el botón OK, el framework redirecciona a la presentación
de Kamila.
46
Libro de Kamila 1.0.1
yiyi 2009
Si colocamos un controlador que no esta programado, por ejemplo:
otrocontrolador
http://192.168.232.132/kamila/otrocontrolador,
nos
emite el siguiente error: Indefinido el controlador otrocontrolador.
Figura 7: Error de un controlador indefinido, Fuente: el autor.
Si en el método: index(), llamamos a través del método: render otra
vista que no existe, por ejemplo: index1, el framework: Kamila, lo
validará
def index()
render("index1")
# Error, Vista no existe index1.rhtml
47
Libro de Kamila 1.0.1
yiyi 2009
end
Figura 8: Error, Vista no existe index1.rhtml, Fuente: el autor.
Si renombramos la carpeta: primera por primero, que se encuentra
en: /var/www/kamila/views/, el framework: Kamila, validarará que en
la carpeta: /var/www/kamila/views/ no existe una carpeta con el
mismo nombre del controlador.
48
Libro de Kamila 1.0.1
yiyi 2009
Figura 9: Error, No existe en la carpeta views una carpeta con el mismo
nombre del controlador, Fuente: el autor.
Si renombramos la clase: Primera, por Primero, el framework Kamila,
validarará y emitirá el siguiente mensaje: “indefinida la accion index
o no existe la clase Primera para el controlador primera”. En
otras palabras el fuente del controlador: primera.rb, debe ser del
mismo nombre y con la inicial en mayúsculas:
class Primera < Application
por
49
Libro de Kamila 1.0.1
yiyi 2009
class Primero < Application
Figura 10: Error, indefinida la accion index o no existe la clase Primera
para el controlador primera, Fuente: el autor.
Variables globales que usa o se definen Kamila
Luego de ver el funcionamiento de la primera aplicación, ahora vamos a
crear el segundo controlador, que llamaremos: segunda, en la carpeta:
controllers:
=begin
Application: segunda.rb
Views
: index.rhtml
models
: Ninguno
Autor
: Edgar Gonzalez
50
Libro de Kamila 1.0.1
kamila
Fecha
=end
yiyi 2009
: versión 1.0.0
: 18 de Julio del 2008
require $kamila_lib+"application"
class Segunda < Application
public
def initialize()
end
def index()
render("index")
end
def otro()
render("index")
end
end
Luego
programamos
las
vista:
index.rhtml,
en
la
views/segunda:
<!-Application: segunda.rb
View
: index.rhtml
models
: Ninguno
Autor
: Edgar Gonzalez
kamila
: versión 1.0.0
Fecha
: 18 de Julio del 2008
-->
<%=create_html() %>
<%=create_head() %>
<%=create_title('Segunda Aplicaci&oacute;n') %>
<%=create_meta() %>
<%=create_meta('Content-Type','text/html','iso-8859-1') %>
<%=close_head() %>
<%=create_body() %>
<%=create_heading('h1','Prueba de Segunda:')
%><%=close_heading("h1") %>
<%="$kamila_site: "
%><%=$kamila_site%><%=insert_linebreaks(1) %>
51
carpeta:
Libro de Kamila 1.0.1
yiyi 2009
<%="$kamila_home: "
%><%=$kamila_home.to_s%><%=insert_linebreaks(1) %>
<%="$kamila_controller:
"%><%=$kamila_controller%><%=insert_linebreaks(1) %>
<%="$kamila_action:
"%><%=$kamila_action%><%=insert_linebreaks(1) %>
<%="@kamila_view:
"%><%=@kamila_view%><%=insert_linebreaks(1) %>
<%="$kamila_DatabaseAdapter= "
%><%=$kamila_DatabaseAdapter%><%=insert_linebreaks(1) %>
<%="$kamila_DatabaseHost= "
%><%=$kamila_DatabaseHost%><%=insert_linebreaks(1) %>
<%="$kamila_DatabasePort= "
%><%=$kamila_DatabasePort%><%=insert_linebreaks(1) %>
<%="$kamila_DatabaseName= "
%><%=$kamila_DatabaseName%><%=insert_linebreaks(1) %>
<%="$kamila_DatabaseUsername= "
%><%=$kamila_DatabaseUsername%><%=insert_linebreaks(1) %>
<%="$kamila_DatabasePassword= "
%><%=$kamila_DatabasePassword%><%=insert_linebreaks(1) %>
<%=create_heading('h1','Fin de Prueba de Segunda')
%><%=close_heading("h1") %>
<%=close_body() %>
<%=close_html() %>
Al ejecutarlo en el navegador: http://192.168.232.132/kamila/segunda ó
podemos
llamar
el
método:
otro()
de
la
clase:
segunda:
http://192.168.232.132/kamila/segunda/otro y hará lo mismo. La salida
es la siguiente:
52
Libro de Kamila 1.0.1
yiyi 2009
Figura 11: Segunda aplicación usando Kamila, Fuente: el autor.
Esta aplicación, nos permite ver las variables globales que se denotan
con el prefijo: $ y son las siguientes:

$kamila_site

$kamila_home

$kamila_controller

$kamila_action

$kamila_view.
Y las variables globales:

$kamila_DatabaseAdapter

$kamila_DatabaseHost

$kamila_DatabasePort

$kamila_DatabaseName

$kamila_DatabaseUsername
53
Libro de Kamila 1.0.1

yiyi 2009
$kamila_DatabasePassword
Pase de Parámetros en Kamila a tráves de GET
En la aplicación: tercera, veamos como es el pase de parámetros vía
url, usando el estándar: GET en vez de POST. Para ello creamos la
clase o controlador: Tercera, en la carpeta: controllers:
=begin
Application: tercera.rb
Views
: otro_index.rhtml
models
: Ninguno
Autor
: Edgar Gonzalez
kamila
: versión 1.0.0
Fecha
: 18 de Julio del 2008
=end
require $kamila_lib+"application"
class Tercera < Application
private
@atributo = nil
@parametros = nil
@parametro1 = nil
@parametro2 = nil
@valor = nil
public
attr_accessor :atributo
def initialize()
@atributo = "nada"
@parametros = Array.new
@parametro1 = Array.new
@parametro2 = Array.new
end
def index()
render("otro_index")
end
def hola()
@parametros = $kamila_params_get.split("&")
54
Libro de Kamila 1.0.1
yiyi 2009
@atributo = "yiyi"
@valor = 10
render("otro_index")
end
def otro()
if $kamila_params_get.to_s!=''
begin
@parametros = $kamila_params_get.split("&")
@parametro1 = @parametros[0].split("=")
@parametro2 = @parametros[1].split("=")
rescue
@parametro1 = @parametros[0].split("=")
end
end
render("otro_index")
end
end
En la primera parte declaramos los atributos de la clase que son
atributos de instancias, los atributos de instancias llevan el prefijo: @ y
los atributos de clase llevan el prefijo: @@, en ruby y la inicializamos
con nil, es decir, con nada:
private
@atributo = nil
@parametros = nil
@parametro1 = nil
@parametro2 = nil
@valor = nil
En ruby para declarar lo equivalente en Java a los métodos getter y
setter para cada atributo, se declara en la sección pública con:
attr_accessor:
public
attr_accessor :atributo
55
Libro de Kamila 1.0.1
yiyi 2009
Después se crea el constructor de la clase y se inicializa, el atributo:
@atributo con la cadena de carácteres: “nada”, y a los atributos de
instancias: @parametros, @parametro1, @parametro2 como objetos de
Arreglos, al atributo de instancia @valor con cero y se crea una variable
de sesión 'valor' con el valor de cero. Es bueno hacer notar que en ruby
no es tipeado como Java o C++,
por lo tanto no se declaran los
atributos con un tipo especifíco de datos:
def initialize()
@atributo = "nada"
@parametros = Array.new
@parametro1 = Array.new
@parametro2 = Array.new
@valor = 0
end
Luego
declaramos
el
método
index()
que
llama
a
la
vista:
otro_index.rhtml a tráves del método render:
def index()
render("otro_index")
end
Después definimos al método: hola() que asigna al atributo de
instancia: @parametros que es un arreglo, en cada posición los
parámetros dados en el url separado cada parámetro y valor por el
carácter: &, que están contenido en la variable global:
@kamila_params_get y a tráves del método split, se obtienen cada
par, parámetro y valor. En otras palabras el usuario coloca en la caja de
texto del navegador la url:
http://192.168.232.132/kamila/tercera/hola/cedula=1234567&nombre=camila
^
|
^
|
56
^
|
^
|
Libro de Kamila 1.0.1
yiyi 2009
controlador acción parámetro 1
parámetro 2
def hola()
@parametros = $kamila_params_get.split("&")
@atributo = "yiyi"
@valor = 10
render("otro_index")
end
Al ejecutar: @parametros = $kamila_params_get.split("&"), asigna, en
la posición cero, del atríbuto @parametros, @parametros[0] =
“cedula=1234567”
y
la
posición
1,
@parametros[1]
=
“nombre=camila”.
Si vemos la ejecución de la misma la salida es la siguiente:
Figura 12: Tercera aplicación usando Kamila, pase de parámetros vía
GET, Fuente: el autor.
La definición del método: otro() , es más especifíco para extaer los
parámetros. @parametro1[0]=”cedula”, @parametro1[0]=”123456” y
@parametro2[0]=”nombre”, @parametro2[0]=”camila”
def otro()
if $kamila_params_get.to_s!=''
57
Libro de Kamila 1.0.1
yiyi 2009
begin
@parametros = $kamila_params_get.split("&")
@parametro1 = @parametros[0].split("=")
@parametro2 = @parametros[1].split("=")
rescue
@parametro1 = @parametros[0].split("=")
end
end
render("otro_index")
end
El manejo de excepciones en ruby, es usando begin/rescue. Si hay una
excepción al extraer los parámetros en: @parametros[1].split("="),
porque
puede
no
existir,
entonces
sólo
extraerá:
@parametros[0].split("="). La ejecución de la misma la veremos en
la siguiente pantalla:
Figura 13: Tercera aplicación usando Kamila, ejecutando la acción:
otro, Fuente: el autor.
El código de la vista de tercera: otro_index.rhtml es el siguiente:
<!-Application: tercera.rb
58
Libro de Kamila 1.0.1
View
models
Autor
kamila
Fecha
yiyi 2009
: otro_index.rhtml
: Ninguno
: Edgar Gonzalez
: versión 1.0.0
: 18 de Julio del 2008
-->
<%=create_html() %>
<%=create_head() %>
<%=create_title('Tercera Aplicaci&oacute;n') %>
<%=create_meta() %>
<%=create_meta('Content-Type','text/html','iso-8859-1') %>
<%=close_head() %>
<%=create_body() %>
<%=create_heading('h1','Prueba de otro_index:')
%><%=close_heading("h1") %>
<%="Parametros: "%><%=$kamila_params_get %>
<%=insert_linebreaks(1) %>
<%=create_heading('h1','Par&aacute;metro 1:')
%><%=close_heading("h1") %>
<%="Parametro: "%><%=@parametro1[0].to_s %>
<%=insert_linebreaks(1) %>
<%="Valor: "%><%=@parametro1[1].to_s %>
<%=insert_linebreaks(1) %>
<%=create_heading('h1','Par&aacute;metro 2:')
%><%=close_heading("h1") %>
<%="Parametro: "%><%=@parametro2[0].to_s %>
<%=insert_linebreaks(1) %>
<%="Valor: "%><%=@parametro2[1].to_s %>
<%=insert_linebreaks(1) %>
<%=create_heading('h1','Fin de otro_index')
%><%=close_heading("h1") %>
<%=close_body() %>
<%=close_html() %>
Uso de Apis de Kamila basadas en Livevalidation
En el siguiente ejemplo, vamos a ver las bondades de las APIs que
tienen relación con la librería basada en javascript: Livevalidation;
este conjunto de funciones nos permite validar los datos de entrada,
como también, al presionar un botón para enviar los datos vía submit,
entonces no se permitirá la enviada de datos, hasta que el usuario llene
los datos según el tipo de datos que se solicite.
59
Libro de Kamila 1.0.1
yiyi 2009
Para ello creamos el controlador: cuarta.rb, en la carpeta: controllers,
a la clase la llamaremos: Cuarta.
Figura 14 de la clase: Cuarta, Fuente el autor.
Si observamos la figura, en las líneas del 1 al 8, son los comentario en
bloque de la clase Cuarta. En la línea 10, se debe incluir el fuente de la
clase applicaction.rb. En la línea 11 declaramos la clase: Cuarta que
hereda de Applicaction, desde la línea 13 hasta la 27, declaramos los
atributos de instancias de la clase Cuarta.
Figura 15 de la clase: Cuarta, definición del constructor y el método
index, Fuente el autor.
60
Libro de Kamila 1.0.1
yiyi 2009
En la línea 29 a la 30 definimos al constructor de la clase, y desde la
línea 31 hasta la 33 al método: index, donde en la 32 se llama al método
render que mostrará la vista: index.rhtml.
Figura 16 de la clase: Cuarta, definición métodos:
recibirParametros_uno y recibirParametros_dos, Fuente el autor.
En la línea 34 definimos el método: recibirParametros_uno(), donde
cada variable de instancia, por ejemplo como la línea 34, el atributo
@usuario se le asigna el parámetro recibido a vía: POST a tráves del
formulario que se encuentra diseñado en la vista: index.rhtml.
$kamila_cgi, es un objeto global que contiene los parámetros vía:
POST. Recuerde que en el ejemplo anterior, enviamos datos vía: GET,
donde el objeto: $kamila_params_get contiene los parámetros enviado
por esa vía. En la línea 49, a tráves del método render, llamamos la
vista: recibirParametros_uno.rhtml para que muestre los datos
enviados vía: POST, validados antes en el formulario que se encuentra
en la vista: index.rhtml.
61
Libro de Kamila 1.0.1
yiyi 2009
Desde la línea 51 a la 54, se define el método: recibirParametros_dos(),
donde la línea 52, se denota con el método: params del objeto global:
$kamila_cgi, como otra forma de recibir todos los parámetros enviados
vía: POST, desde el formulario que se encuentra en: index.rhtml. Para
accesar
cada
parámetro,
sería
de
la
forma
@arregloparametros['usuario'],
como
se
verá
en
la
vista:
recibirParametros_dos.rhtml, que es llamada en la línea 53 a tráves del
método, render.
Veamos la ejecución de cuarta, llamado a la acción: index, que a su vez
llama a la vista: index.rhtml, donde reside el formulario que capta los
diferentes tipos de datos que se base de la librería: Livevalidation:
Figura 17: Ejecución del controlador: cuarta, acción: index, Fuente el
autor.
Cada campo tiene un tipo de dato que es definido por las APIs basada
en la librería: Livevalidation, por ejemplo: Usuario es alfanúmerico,
pero todos los campos además, no se permite que esten vacíos, si
presionamos el botón: Aceptar, se enviará un error, porque no se
llenaron todos los datos según su tipo.
62
Libro de Kamila 1.0.1
yiyi 2009
Figura 18: Ejecución del controlador: cuarta, mostrando el error por no
llenar los datos correspondientes, en la vista: index.rhtml, Fuente el
autor.
Veamos el código de la vista: index.rhtml, donde reside el formulario
que muestra la figura anterior.
Figura 19: Fuente de la vista index.rhtml, líneas 1 a la 21, Fuente el
autor.
Desde la línea 1 hasta la 8, comentarios en bloque documentando la
vista. La línea 10 se llama a la API o método de la clase Applicaction:
create_html(), que genera la etiqueta: <html>, asi mismo desde las
líneas: 11, 12, 19, 20 y 21 a las etiquetas: <head>, <title>,</head>,
63
Libro de Kamila 1.0.1
yiyi 2009
<body> y <div> respectivamente. La línea 15 incluye al archivo de
definición de hoja de estilo: estilo_rojo.css que debemos ubicar en la
carpeta: public/css del framework. En la línea 16, llamamos a la API o
función: create_javascript_livevalidation(), que agrega la librería de
javascript y hoja de estilo de la librería que necesitarán para las otras
APIs de entrada de datos basadas en la misma. La línea: 17, agrega las
librería de javascript: Extjs, para los mensajes de error que se
mostrarán, de hecho el framework: Kamila, para los mensajes de error
se basan en: Extjs, la línea: 18, agrega la librería de javascript: MD5, el
algoritmo de encriptación para los campos de tipo password, para la
API:
input_text_presence_lv('md5','form','f2','clave','','false',12,12,'fals
e','introduzca la clave',2,'cajatexto')
Figura 20: Fuente de la vista index.rhtml, líneas 22 a la 42, Fuente el
autor.
La línea 27, se llama a la API o función create_form, donde se crea un
formulario basado en el envío de datos al servidor vía: POST, y la
acción o método del controlador cuarta es: recibirParametros_dos().
En la línea 32, se llama a la API o función: insert_text, que agrega el
texto o etiqueta: Usuario, en la línea 40, se llama a la función:
input_text_presence_lv, donde se crea una caja de texto con los
64
Libro de Kamila 1.0.1
yiyi 2009
parámetros dados, donde se valida que sea alfanúmerico y no puede
estar vacío, si lo está, aparece un mensaje de error al lado de la caja de
texto que está vacío, todas estas APIs un funciones que se una en esta
vista, se basan en la librería: Livevalidation.
A continuación todo el fuente de la vista: index.rhtml, que contiene
todas las APIs basada en: Livevalidation, de todos los tipos de datos que
se pueden usar.
<!-Application: cuarta.rb
View
: index.rhtml
models
: Ninguno
Autor
: Edgar Gonzalez
kamila
: versión 1.0.0
Fecha
: 18 de Julio del 2008
-->
<%=create_html() %>
<%=create_head() %>
<%=create_title('Cuarta Aplicaci&oacute;n') %>
<%=create_meta() %>
<%=create_meta('Content-Type','text/html','iso-8859-1') %>
<%=create_css('estilo_rojo.css') %>
<%=create_javascript_livevalidation()%>
<%=create_javascript_extjs() %>
<%=create_javascript_md5() %>
<%=close_head() %>
<%=create_body() %>
<%=create_div('div1','h1','Formulario de Prueba de Cuarta:') %>
<%=close_div() %>
<!-create_form parametros:
id, name, method, action
-->
<%=create_form('form','form','POST','cuarta/recibirParametros_dos')
%>
<%=create_paragraphs('p1','','h12d') %>
<%=create_table("0") %>
<%=create_tr() %>
<%=create_td() %>
<%=insert_text('Usuario: ') %>
<%=close_td() %>
<%=create_td() %>
<!-65
Libro de Kamila 1.0.1
yiyi 2009
input_text_presence_lv parametros:
type, nameform, id, name, value, readonly=true o false, size,
maxlength, disabled, alt, tabindex, css
-->
<%=input_text_presence_lv('text','form','f1','usuario','','false',12,12,'
false','introduzca el usuario',1,'cajatexto') %>
<%=close_td() %>
<%=close_tr() %>
<%=create_tr() %>
<%=create_td() %>
<%=insert_text('Clave: ') %>
<%=close_td() %>
<%=create_td() %>
<!-input_text_presence_lv parametros:
type, id, name, value, readonly, size, maxlength, disabled, alt,
tabindex, css
-->
<%=input_text_presence_lv('md5','form','f2','clave','','false',12,12,'fa
lse','introduzca la clave',2,'cajatexto') %>
<%=close_td() %>
<%=close_tr() %>
<%=create_tr() %>
<%=create_td() %>
<%=insert_text('nivel: ') %>
<%=close_td() %>
<%=create_td() %>
<!-input_numericality_lv parametros:
typeinteger: true o false, type, id, name, value, readonly, size,
maxlength, disabled, alt, tabindex, css
-->
<%=input_numericality_lv('true','text','f3','nivel','','false',12,12,'false
','introduzca el nivel',3,'cajatexto') %>
<%=close_td() %>
<%=close_tr() %>
<%=create_tr() %>
<%=create_td() %>
<%=insert_text('texto: ') %>
<%=close_td() %>
<%=create_td() %>
<!-input_length_lv parametros:
typelength: is, minumum o maximum; typesize: numero, type, id,
66
Libro de Kamila 1.0.1
yiyi 2009
name, value, readonly, size, maxlength, disabled, alt, tabindex, css
-->
<%=input_length_lv('is',5,'text','f4','texto','','false',12,12,'false','intr
oduzca un texto',4,'cajatexto') %>
<%=close_td() %>
<%=close_tr() %>
<%=create_tr() %>
<%=create_td() %>
<%=insert_text('rango 1: ') %>
<%=close_td() %>
<%=create_td() %>
<!-input_inclusion_lv parametros:
range: edgar,yiyi; partial: true o false, type, id, name, value,
readonly, size, maxlength, disabled, alt, tabindex, css
-->
<%=input_inclusion_lv('edgar,yiyi','true','text','f5','rango1','','false',1
2,12,'false','introduzca edgar o yiyi',5,'cajatexto') %>
<%=close_td() %>
<%=close_tr() %>
<%=create_tr() %>
<%=create_td() %>
<%=insert_text('rango 2: ') %>
<%=close_td() %>
<%=create_td() %>
<!-input_exclusion_lv parametros:
range: edgar,yiyi o A..9, A..Z, a..9, a..z, 0..9; partial: true o false,
type, id, name, value, readonly, size, maxlength, disabled, alt, tabindex,
css
-->
<%=input_exclusion_lv('0..9','true','text','f6','rango2','','false',12,12,'
','Introduzca alfabeticos exceptos del 0 al 9',6,'cajatexto') %>
<%=close_td() %>
<%=close_tr() %>
<%=create_tr() %>
<%=create_td() %>
<%=insert_text('Frase: ') %>
<%=close_td() %>
<%=create_td() %>
<!-input_textarea_presence_lv parametros:
id, name, value, readonly, disabled, alt, tabindex, css, rows, cols
-->
67
Libro de Kamila 1.0.1
yiyi 2009
<%=input_textarea_presence_lv('f7','frase','algo','false','false','intro
duzca una frase',7,'cajatexto3','5','30') %>
<%=close_td() %>
<%=close_tr() %>
<%=create_tr() %>
<%=create_td() %>
<%=insert_text('Acepto: ') %>
<%=close_td() %>
<%=create_td() %>
<!-input_checkbox_lv parametros:
id, name, value, readonly, disabled, alt, tabindex, css
-->
<%=input_checkbox_lv('f8','acepto','1','false','false','Acepte por
favor',8) %>
<%=close_td() %>
<%=close_tr() %>
<%=create_tr() %>
<%=create_td() %>
<%=insert_text('Sexo: ') %>
<%=close_td() %>
<%=create_td() %>
<!-input_radio_button_lv parametros:
id, name, value, readonly, disabled, alt, tabindex, css
-->
<%=input_radio_button_lv('f9','sexo','Hombre','false','false','Diga el
sexo por favor',9) %>
<%=input_radio_button_lv('f10','sexo','Mujer','false','false','Diga el
sexo por favor',10) %>
<%=close_td() %>
<%=close_tr() %>
<%=create_tr() %>
<%=create_td() %>
<%=insert_text('Seleccione: ') %>
<%=close_td() %>
<%=create_td() %>
<!-input_combobox_lv parametros:
id, name, range, readonly, disabled, alt, tabindex, css
-->
<%=input_combobox_lv('f11','seleccion','lara,caracas,merida,zulia','
false','false','selecciones un estado',11,'cajatexto') %>
<%=close_td() %>
68
Libro de Kamila 1.0.1
yiyi 2009
<%=close_tr() %>
<%=create_tr() %>
<%=create_td() %>
<%=insert_text('Email: ') %>
<%=close_td() %>
<%=create_td() %>
<!-input_validate_email_lv parametros:
id, name, value, readonly, size, maxlength, disabled, alt, tabindex,
css
-->
<%=input_validate_email_lv('f12','correo','','false',150,150,'false','in
troduzca un email',12,'cajatexto') %>
<%=close_td() %>
<%=close_tr() %>
<%=create_tr() %>
<%=create_td() %>
<%=insert_text('Solo alfa numericos: ') %>
<%=close_td() %>
<%=create_td() %>
<!-input_text_key_validate_lv parametros:
formname,range,type=text,password,md5, id, name, value,
readonly=true o false, size, maxlength, disabled, alt, tabindex, css
-->
<%=input_text_key_validate_lv('form','a..9','md5','f13','solonumeros
','','false',12,12,'false','introduzca solo alfa numericos',13,'cajatexto')
%>
<%=close_td() %>
<%=close_tr() %>
<%=create_tr() %>
<%=create_td() %>
<%=insert_text('Solo letras en el area de texto: ') %>
<%=close_td() %>
<%=create_td() %>
<!-input_textarea_key_validate_lv parametros:
range,id, name, value, readonly, disabled, alt, tabindex, css, rows,
cols
-->
<%=input_textarea_key_validate_lv('a..z','f14','sololetras','','false','fa
lse','introduzca solo letras',14,'cajatexto3','5','30') %>
<%=close_td() %>
<%=close_tr() %>
69
Libro de Kamila 1.0.1
yiyi 2009
<%=close_table() %>
<%=input_hidden('f15','tipo','buscar') %>
<%=close_paragraphs() %>
<%=insert_linebreaks(2) %>
<!-input_submit parametros:
id, name, value, css, form, hidden1,valor1...hiddenn,valorn
-->
<%=input_submit_lv('f30','Aceptar','Aceptar','botones','form','tipo,eli
minar') %>
<%=input_reset_lv('f31','Cancelar','Cancelar','botones') %>
<!-close_form sin parametros
-->
<%=close_form() %>
<!-create_massValidate parametros:
form, id1,id2,...,idn, messageError
-->
<%=create_massValidate_lv('f1,f2,f3,f4,f5,f6,f7,f8,f12,f13,f14','Datos
No completados') %>
<%=select_focus('form','usuario') %>
<%=create_div('div2','h1','Fin de Prueba de Cuarta') %>
<%=close_div() %>
<%=close_body() %>
<%=close_html() %>
También el fuente de: recibirParametros_uno.rhtml:
<!-Application: cuarta.rb
View
: recibirParametros_uno.rhtml
models
: Ninguno
Autor
: Edgar Gonzalez
kamila
: versión 1.0.0
Fecha
: 18 de Julio del 2008
-->
<%=create_html() %>
<%=create_head() %>
<%=create_title('Cuarta Aplicaci&oacute;n') %>
<%=create_meta() %>
<%=create_meta('Content-Type','text/html','iso-8859-1') %>
70
Libro de Kamila 1.0.1
yiyi 2009
<%=create_css('estilo_rojo.css') %>
<%=create_javascript_livevalidation(“es”)%>
<%=create_javascript_extjs() %>
<%=close_head() %>
<%=create_body() %>
<%=create_div('div1','h1','recibirParametros_uno: Datos llenados del
Formulario de Cuarta:') %>
<%=close_div() %>
<%=create_paragraphs('p1','','h12d') %>
<%=insert_text('Usuario: ') %><%=@usuario%>
<%=insert_linebreaks(1) %>
<%=insert_text('Clave: ') %><%=@clave%>
<%=insert_linebreaks(1) %>
<%=insert_text('Nivel: ') %><%=@nivel%>
<%=insert_linebreaks(1) %>
<%=insert_text('Texto: ') %><%=@texto%>
<%=insert_linebreaks(1) %>
<%=insert_text('Rango 1: ') %><%=@rango1%>
<%=insert_linebreaks(1) %>
<%=insert_text('Rango 2: ') %><%=@rango2%>
<%=insert_linebreaks(1) %>
<%=insert_text('Frase: ') %><%=@frase%>
<%=insert_linebreaks(1) %>
<%=insert_text('Acepto: ') %><%=@acepto%>
<%=insert_linebreaks(1) %>
<%=insert_text('Sexo: ') %><%=@sexo%>
<%=insert_linebreaks(1) %>
<%=insert_text('Seleccion: ') %><%=@seleccion%>
<%=insert_linebreaks(1) %>
<%=insert_text('Correo: ') %><%=@correo%>
<%=insert_linebreaks(1) %>
<%=insert_text('solo numeros: ') %><%=@solonuneros%>
<%=insert_linebreaks(1) %>
<%=insert_text('solo letras: ') %><%=@sololetras%>
<%=insert_text('tipo: ') %><%=@tipo%>
<%=insert_linebreaks(1) %>
<%=close_paragraphs() %>
<%=insert_linebreaks(2) %>
<%=create_div('div1','h1','Fin de recibirParametros_uno de Cuarta')
%>
<%=close_div() %>
<%=close_body() %>
<%=close_html() %>
71
Libro de Kamila 1.0.1
yiyi 2009
Como también el fuente de: recibirParametros_dos.rhtml:
<!-Application: cuarta.rb
View
: recibirParametros_dos.rhtml
models
: Ninguno
Autor
: Edgar Gonzalez
kamila
: versión 1.0.0
Fecha
: 18 de Julio del 2008
-->
<%=create_html() %>
<%=create_head() %>
<%=create_title('Cuarta Aplicaci&oacute;n') %>
<%=create_meta() %>
<%=create_meta('Content-Type','text/html','iso-8859-1') %>
<%=create_css('estilo_rojo.css') %>
<%=close_head() %>
<%=create_body() %>
<%=create_div('div1','h1','recibirParametros_dos: Datos llenados del
Formulario de Cuarta:') %>
<%=close_div() %>
<%=create_paragraphs('p1','','h12d') %>
<% for i in [email protected] %>
<% case i %>
<% when 0 %>
<%=insert_text('Usuario: ')
%><%=@arregloparametros['usuario'].to_s %>
<% when 1 %>
<%=insert_text('Clave: ') %><%=@arregloparametros['clave'].to_s
%>
<% when 2 %>
<%=insert_text('Nivel: ') %><%=@arregloparametros['nivel'].to_s
%>
<% when 3 %>
<%=insert_text('Texto: ') %><%=@arregloparametros['texto'].to_s
%>
<% when 4 %>
<%=insert_text('Rango 1: ')
%><%=@arregloparametros['rango1'].to_s %>
<% when 5 %>
<%=insert_text('Rango 2: ')
%><%=@arregloparametros['rango2'].to_s %>
72
Libro de Kamila 1.0.1
yiyi 2009
<% when 6 %>
<%=insert_text('Frase: ') %><%=@arregloparametros['frase'].to_s
%>
<% when 7 %>
<%=insert_text('Acepto: ')
%><%=@arregloparametros['acepto'].to_s %>
<% when 8 %>
<%=insert_text('Sexo: ') %><%=@arregloparametros['sexo'].to_s
%>
<% when 9 %>
<%=insert_text('Seleccion: ')
%><%=@arregloparametros['seleccion'].to_s %>
<% when 10 %>
<%=insert_text('Correo: ')
%><%=@arregloparametros['correo'].to_s %>
<% when 11 %>
<%=insert_text('Solo Numeros: ')
%><%=@arregloparametros['solonumeros'].to_s %>
<% when 12 %>
<%=insert_text('Solo Letras: ')
%><%=@arregloparametros['sololetras'].to_s %>
<% when 13 %>
<%=insert_text('tipo: ') %><%=@arregloparametros['tipo'].to_s
%>
<% end %>
<%=insert_linebreaks(1) %>
<% end %>
<%=close_paragraphs() %>
<%=insert_linebreaks(2) %>
<%=create_div('div1','h1','Fin de recibirParametros_dos de Cuarta')
%>
<%=close_div() %>
<%=close_body() %>
<%=close_html() %>
Veamos la ejecución cuando se llenan todos los datos, según el tipo que
se pide, y llamará al método: recibirParametros_dos(), de la clase
cuarta, que a su vez llamará a la vista: recibirParametros_dos.rhtml.
Si deseamos llamar al método: recibirParametros_uno(), solo
cambiamos el último parámetro a la API o función: create_form(), y
sustituir:
'cuarta/recibirParametros_dos'
por:
'cuarta/recibirParametros_uno', que a su vez llamará a la vista:
73
Libro de Kamila 1.0.1
recibirParametros_uno.rhtml,
framework: MVC++.
yiyi 2009
basado
según
las
reglas
del
Figura 21: Ejecución de la vista: index.rhtml, con los datos correctos,
Fuente el autor.
74
Libro de Kamila 1.0.1
yiyi 2009
Figura 22: Vista: recibirParametros_dos.rhtml, donde recibe los
datos desde la vista: index.rhtml, del controlador: cuarta, Fuente el
autor.
APIS de Kamila basado en el Framework Extjs
El ejemplo del controlador: cuarta.rb, demuestra el uso de las APIs del
framework, basada en la librería: Livevalidation. Del mismo modo, el
controlador: quinta.rb, demostrará lo equivalente, pero usando, el
framework o librería: Extjs.
Para ello creamos el controlador: quinta.rb, que dentro del mismo, se
encuentra la clase: Quinta:
=begin
Application: quinta.rb
View
: index.rhtml
models
: Ninguno
Autor
: Edgar Gonzalez
kamila
: versión 1.0.0
Fecha
: 18 de Julio del 2008
75
Libro de Kamila 1.0.1
yiyi 2009
=end
require $kamila_lib+"application"
class Quinta < Application
def initialize()
end
def index()
render("index")
end
def recibirParametros_dos()
@arregloparametros = $kamila_cgi.params
render("recibirParametros_dos")
end
end
Ahora veamos el fuente, de la vista: index.rhtml, donde reside el
formulario, que contiene las APIs, basada en la librería: Extjs:
<!-Application: quinta.rb
View
: index.rhtml
models
: Ninguno
Autor
: Edgar Gonzalez
kamila
: versión 1.0.0
Fecha
: 18 de Julio del 2008
-->
<%=create_html() %>
<%=create_head() %>
<%=create_title('Quinta Aplicaci&oacute;n') %>
<%=create_meta() %>
<%=create_meta('Content-Type','text/html','utf8') %>
<%=create_css('estilo_rojo.css') %>
<%=create_javascript_extjs() %>
<%=create_javascript_md5() %>
<%=create_javascript_language_extjs('es','ascii') %>
<%=close_head() %>
<%=create_body() %>
<%=create_div('div1','h1','Formulario de Prueba de Quinta:') %>
<%=close_div() %>
<%=create_form('form','form','POST','quinta/recibirParametros_dos')
%>
76
Libro de Kamila 1.0.1
yiyi 2009
<%=create_paragraphs('p1','','h12d') %>
<%=create_table("0") %>
<%=create_tr() %>
<%=create_td() %>
<%=create_label_extjs('e1','300','Nombre:','false','h12e') %>
<%=close_td() %>
<%=create_td() %>
<%=
input_textField_extjs('f1','nombre','textfield','130','false','','false','cajatex
to') %>
<%=close_td() %>
<%=close_tr() %>
<%=create_tr() %>
<%=create_td() %>
<%=create_label_extjs('e2','300','Clave:','false','h12e') %>
<%=close_td() %>
<%=create_td() %>
<%=
input_textField_extjs('f2','clave','md5','130','false','','false','h12e') %>
<%=close_td() %>
<%=close_tr() %>
<%=create_tr() %>
<%=create_td() %>
<%=create_label_extjs('e3','300','Cedula:','false','h12e') %>
<%=close_td() %>
<%=create_td() %>
<%=
input_numberField_extjs('f3','cedula','integer','130','false','','false','h12e'
) %>
<%=close_td() %>
<%=close_tr() %>
<%=create_tr() %>
<%=create_td() %>
<%=create_label_extjs('e4','300','Monto Bs.F.:','false','h12e') %>
<%=close_td() %>
<%=create_td() %>
<%=
input_numberField_extjs('f4','monto','double','130','false','','false','h12m'
) %>
<%=close_td() %>
<%=close_tr() %>
<%=create_tr() %>
<%=create_td() %>
<%=create_label_extjs('e5','300','Sexo:','false','h12e') %>
77
Libro de Kamila 1.0.1
yiyi 2009
<%=close_td() %>
<%=create_td() %>
<%= input_radioGroup_extjs('f5','sexo','70,70','Mujer,1,false|
Hombre,2,true','false','h12b') %>
<%=close_td() %>
<%=close_tr() %>
<%=create_tr() %>
<%=create_td() %>
<%=create_label_extjs('e6','300','Estados:','false','h12e') %>
<%=close_td() %>
<%=create_td() %>
<%=
input_comboBox_extjs('f6','estado','175','Amazonas,Apure,Lara,Merida,
Sucre','Seleccione un Estado...','false','cajatexto') %>
<%=close_td() %>
<%=close_tr() %>
<%=create_tr() %>
<%=create_td() %>
<%=create_label_extjs('e7','300','Correo:','false','h12e') %>
<%=close_td() %>
<%=create_td() %>
<%= input_emailField_extjs('f7','correo','180','false','','false','h12e')
%>
<%=close_td() %>
<%=close_tr() %>
<%=create_tr() %>
<%=create_td() %>
<%=create_label_extjs('e8','300','Titulos:','false','h12e') %>
<%=close_td() %>
<%=create_td() %>
<%= input_checkboxGroup_extjs('f8','titulos','120,120','Titulo
Bachiller,titulo1,true|Titulo Pregrado,titulo2,false,|Titulo
Postgrado,titulo3,false|Titulo Doctorado,titulo4,false','false','h12b') %>
<%=close_td() %>
<%=close_tr() %>
<%=create_tr() %>
<%=create_td() %>
<%=create_label_extjs('e9','300','Hora:','false','h12e') %>
<%=close_td() %>
<%=create_td() %>
<%= input_timeField_extjs('f9','hora','130','12:00 PM','2:00
PM','1','false','','false','cajatexto') %>
<%=close_td() %>
<%=close_tr() %>
78
Libro de Kamila 1.0.1
yiyi 2009
<%=create_tr() %>
<%=create_td() %>
<%=create_label_extjs('e10','300','Memo:','false','h12e') %>
<%=close_td() %>
<%=create_td() %>
<%=
input_textArea_extjs('f10','memo','600','150','false','','false','cajatexto')
%>
<%=close_td() %>
<%=close_tr() %>
<%=create_tr() %>
<%=create_td() %>
<%=create_label_extjs('e11','300','Curriculum:','false','h12e') %>
<%=close_td() %>
<%=create_td() %>
<%= input_htmlEditor_extjs('f11','curriculum','Coloque
algo','600','300','false','false','h12e') %>
<%=close_td() %>
<%=close_tr() %>
<%=create_tr() %>
<%=create_td() %>
<%=create_label_extjs('e12','300','Fecha:','false','h12e') %>
<%=close_td() %>
<%=create_td() %>
<%=
input_datefield_extjs('idfecha','fecha','20/08/2008','false','Fecha
requerida','false','Fecha super invalida') %>
<%=close_td() %>
<%=close_tr() %>
<%=close_table() %>
<%=input_hidden('f15','tipo','buscar') %>
<%=close_paragraphs() %>
<%=insert_linebreaks(2) %>
<%=input_submit_extjs('f30','Aceptar','Aceptar','x-btnclick','form','tipo,eliminar','massValidateExtjs()') %>
<%=input_reset_extjs('f31','Cancelar','Cancelar','x-btn-click') %>
<%=close_form() %>
<%=create_massValidate_extjs('massValidateExtjs()','nombre,clave,ced
ula,monto,correo,hora,memo,fecha','Datos no completados') %>
<%=select_focus('form','nombre') %>
<%=create_div('div11','h1','Fin de Prueba de Quinta') %>
<%=close_div() %>
<%=close_body() %>
<%=close_html() %>
79
Libro de Kamila 1.0.1
yiyi 2009
Veamos la vista: index.rhtml, al ejecutar el controlador: quinta:
Figura 23: Ejecución del controlador: quinta, acción: index, Fuente el
autor.
Si presionamos el botón: Aceptar, emitirá un error porque no se
llenaron todos los datos:
Figura 24: Ejecución del controlador: quinta, mostrando el error por
no llenar los datos correspondientes, en la vista: index.rhtml, Fuente
el autor.
80
Libro de Kamila 1.0.1
yiyi 2009
Si llenamos todos los datos correspondiente de la vista: index.rhtml,
del controlador: quinta, la acción del formulario de: index.rhtml,
llamará al método: recibirParametros_dos() y este a su vez llamará a
la vista: recibirParametros_dos.rhtml.
Figura 25: Vista: recibirParametros_dos.rhtml, donde recibe los
datos desde la vista: index.rhtml, del controlador: quinta, Fuente el
autor.
81
Libro de Kamila 1.0.1
yiyi 2009
Apis de Kamila basada en Extjs para validaciones de
Rangos de Fechas
Nuestro controlador se llamará: sexta.rb, por supuesto la clase se
llamará: Sexta, he aquí su fuente:
=begin
Application: sexta.rb
View
: index.rhtml
models
: Ninguno
Autor
: Edgar Gonzalez
kamila
: versión 1.0.0
Fecha
: 18 de Julio del 2008
=end
require $kamila_lib+"application"
class Sexta < Application
def initialize()
end
def index()
render("index")
end
def otro()
render("index")
end
end
Ahora veamos el fuente de la vista: index.rhtml
<!-Application: sexta.rb
View
: index.rhtml
models
: Ninguno
Autor
: Edgar Gonzalez
kamila
: versión 1.0.0
Fecha
: 18 de Julio del 2008
-->
<%=create_html() %>
<%=create_head() %>
<%=create_title('Sexta Aplicaci&oacute;n') %>
<%=create_meta() %>
<%=create_meta('Content-Type','text/html','iso-8859-1') %>
82
Libro de Kamila 1.0.1
yiyi 2009
<%=create_css('estilo_rojo.css') %>
<%=create_javascript_extjs() %>
<%=create_javascript_language_extjs('es','ascii') %>
<%=create_javascript_validate_rangedate_extjs('validarrangofec
ha') %>
<%=close_head() %>
<%=create_body() %>
<%=create_div('div1','h1','Formulario de Prueba de Sexta:') %>
<%=close_div() %>
<!-create_form parametros:
id, name, method, action
-->
<%=create_form('form','form','POST','primera') %>
<%=create_paragraphs('p1','','h12d') %>
<%=create_table("0") %>
<%=create_tr() %>
<%=create_td() %>
<%=insert_text('Fecha de inicio: ') %>
<%=close_td() %>
<%=create_td() %>
<%=
input_datefield_extjs('fechainicio','fechaini','','false','Fecha
requerida','Fecha
invalida','1','validarrangofecha','false','fechafinal') %>
<%=close_td() %>
<%=close_tr() %>
<%=create_tr() %>
<%=create_td() %>
<%=insert_text('Fecha de Finalizacion: ') %>
<%=close_td() %>
<%=create_td() %>
<%=
input_datefield_extjs('fechafinal','fechafin','','false','Fecha
requerida','Fecha
invalida','2','validarrangofecha','false','fechainicio') %>
<%=close_td() %>
<%=close_tr() %>
<%=close_table() %>
<%=close_paragraphs() %>
<%=insert_linebreaks(2) %>
<!-input_submit parametros:
id, name, value, css
83
Libro de Kamila 1.0.1
yiyi 2009
-->
<%=input_submit('f30','Aceptar','Aceptar','botones') %>
<!-close_form sin parametros
-->
<%=close_form() %>
<%=create_div('div1','h1','Fin de Prueba de Sexta') %>
<%=close_div() %>
<%=close_body() %>
<%=close_html() %>
En la vista hay dos (2) Apis importante para solicitar las fechas y
validarla para que este dentro de un rango:
La primera API es:
create_javascript_validate_rangedate_extjs('validarrangofecha')
Esta api, permite generar el javascript basado en el framework Extjs,
donde el parámetro que se le pasa, es el nombre de la función que hara
la validación entre rango de fechas.
La segunda API es:
input_datefield_extjs('fechainicio','fechaini','','false','Fecha
requerida','Fecha
invalida','1','validarrangofecha','false','fechafinal')
input_datefield_extjs('fechafinal','fechafin','','false','Fecha
requerida','Fecha
invalida','2','validarrangofecha','false','fechainicio')
Note el primer parámetro es el nombre del campo o id: fechainicio, del
campo de la primera fecha solicitada, es decir la fecha de inicio,
además se puede resaltar el parámetro de la función de validación de
rango que es: validarangofecha y el último parámetro: fechafinal,
que es el id o nombre del campo fecha para la validación dentro del
rango.
De igual modo el segundo campo fecha: fechafinal, que tiene lo
equivalente, pero el último campo, es el id o nombre del campo:
84
Libro de Kamila 1.0.1
yiyi 2009
fechainicio, que la fecha de inicio para la validación del rango a tráves
de la función: validarrangofecha.
Veamos la ejecución de la misma
Figura 26: Ejecucuón de Sexta, Fecha de Inicio: 26/09/2008. Fuente el
autor.
En la fecha de inicio, se escogio: 26/09/2008, cuando se escoja la
segunda fecha, la función: validarrangofecha, no permitirá escoger
fechas anteriores a: 26/09/2008, ya que dibujará el calendario en dichas
fechas inferiores en gris y desabilitadas para escoger.
85
Libro de Kamila 1.0.1
yiyi 2009
Figura 27: Ejecucuón de Sexta, Fecha de Final debe ser mayor o igual
a: 26/09/2008. Fuente el autor.
Crear TabPanel usando Kamila
Esta API de Kamila, llamada: create_tabpanel_extjs, permite crear u
marco con pestañas, donde cada pestaña se puede llamar un
controlador y este a su vez llamará a la vista respectiva que se verá en
dicha pestaña. Los métodos de estos controladores, que llaman a su
vista respectiva, no pueden llamar vistas de tipo formulario, porque NO
funcionan en dicha pestaña. Solo se llaman vistas para mostrar
información estática o dinámica que no tenga formularios.
Para ello creamos el controlador: septima.rb y por supuesto su clase se
llama: Septima, he aquí su fuente:
=begin
Application: septima.rb
View
: index.rhtml
models
: Ninguno
Autor
: Edgar Gonzalez
kamila
: versión 1.0.0
Fecha
: 18 de Julio del 2008
=end
require $kamila_lib+"application"
86
Libro de Kamila 1.0.1
yiyi 2009
class Septima < Application
@itemsTitulos=nil
@id=nil
@activo=nil
@expandible=nil
@flotante=nil
@amplitud=nil
@altura=nil
@plano=nil
@itemsTitulos=nil
@itemsIcons=nil
@itemsTips=nil
@itemsUrls=nil
@itemsCloseable=nil
@columna=nil
@fila=nil
def initialize()
end
def index()
@id = 'f1'
@activo = '0'
@expandible = 'true'
@flotante = 'true'
@amplitud = '600'
@altura = '510'
@plano = 'false'
@itemsTitulos = 'Primera,Segunda,Tercera'
@itemsIcons = 'icon1,icon2,icon3'
@itemsTips = 'Ejemplo de Primera,Ejemplo de Segunda,Ejemplo de
Tercera'
@itemsUrls = $kamila_site+'/'+'primera,'
@itemsUrls = @itemsUrls+$kamila_site+'/'+'segunda,'
@itemsUrls = @itemsUrls+$kamila_site+'/'+'tercera'
@itemsCloseable = 'false,false,true'
#@columna='parseInt(screen.width * 0.25)'
@columna='300'
#@fila='parseInt(screen.height * 0.075)'
@fila='75'
render("index")
end
end
87
Libro de Kamila 1.0.1
yiyi 2009
Podemos notar todos los atributos de la clase, llenados en el método:
index con los valores respectivos, que luego serán parámetros para la
API: create_tabpanel_extjs, en la llamada de la vista: index.rhtml.
Veamos ahora el fuente de: index.rhtml:
<!-Application: septima.rb
View
: index.rhtml
models
: Ninguno
Autor
: Edgar Gonzalez
kamila
: versión 1.0.0
Fecha
: 01 de agosto del 2008
-->
<%=create_html() %>
<%=create_head() %>
<%=create_title('Septima Aplicaci&oacute;n') %>
<%=create_meta() %>
<%=create_meta('Content-Type','text/html','iso-8859-1') %>
<%=create_css('estilo_rojo.css') %>
<%=create_javascript_extjs() %>
<%=close_head() %>
<%=create_body() %>
<%=create_tabpanel_extjs(@id,@activo,@expandible,@flotante,@
amplitud,@altura,@plano,@itemsTitulos,@itemsIcons,@itemsTip
s,@itemsUrls,@itemsCloseable,@columna,@fila) %>
<%=close_div() %>
<%=close_body() %>
<%=close_html() %>
88
Libro de Kamila 1.0.1
yiyi 2009
Ahora veamos la ejecución de: séptima, por defecto carga la primera
pestaña, donde dentro de la misma ejecuta la aplicación: primera,
luego le damos a la segunda pestaña, y ejecutará a la seggunda
aplicación, y asi la tercera. Note que podemos mover el Panel y además
la tercera pestaña tiene la propiedad de poder cerrarla:
Figura 28: Ejecución del controlador: septima, acción: index, ejemplo
usando la API create_tabpanel_extjs. Fuente el autor.
Grid o Catálogo Estático
Una de las facilidades en cualquier aplicación sea de escritorio o web,
es el uso de GRID o rejillas donde una de sus utilidades para el usuario,
es mostrar la información en forma de un catálogo, donde el usuario
navega en dicho grid o catálogo escoge el item o registro y este a su vez
es traido en un formulario llenando los datos en cada caja de texto.
89
Libro de Kamila 1.0.1
yiyi 2009
Para ello, Kamila tiene la API: create_gridView_extjs, basada en el
framework Extjs. A pesar que los datos son traidos de la tabla de la
base de datos en el controlador y pasado a la API, se define como
estático, porque cualquier cambio hecho en las tablas, el usuario
tendría que hacer un request a toda la página, es decir llamar de nuevo
al controlador, para que los datos sean actualizados en el catálogo. Para
demostrar el uso de está API, primero creamos el controlador:
octava.rb:
=begin
Application: octava.rb
View
: index.rhtml
models
: Ninguno.
Autor
: Edgar Gonzalez
kamila
: versión 1.0.0
Fecha
: 09 de Agosto del 2008
=end
require $kamila_lib+"application"
class Octava < Application
public
def initialize()
end
def index()
existe = loadmodel("mensajes")
if existe==true
@objetoDatosm = '|'
@objetoMensajes=Mensajes.find(:all)
totalregistros = @objetoMensajes.length
i=1
@objetoMensajes.each do |mensaje|
@objetoDatosm = @objetoDatosm + mensaje.descripcion + ','
if i==totalregistros
@objetoDatosm = @objetoDatosm + mensaje.vinculo
else
@objetoDatosm = @objetoDatosm + mensaje.vinculo + '|'
end
i=i+1
end
end
existe = loadmodel("usuarios")
if existe==true
@objetoDatosu = '|'
@objetoUsuarios=Usuarios.find(:all)
totalregistros = @objetoUsuarios.length
90
Libro de Kamila 1.0.1
yiyi 2009
i=1
@objetoUsuarios.each do |usuario|
@objetoDatosu = @objetoDatosu + usuario.usuario + ','
@objetoDatosu = @objetoDatosu + usuario.clave + ','
if i==totalregistros
@objetoDatosu = @objetoDatosu + usuario.nivel
else
@objetoDatosu = @objetoDatosu + usuario.nivel + '|'
end
i=i+1
end
end
@nombreFuncion = 'catalogousuarios'
@titulo = 'Catalogo de Usuario'
@idGrid = 'miGrid'
@ids = 'f1,f2,f3'
@ds = 'usuario,clave,nivel'
@cm = 'Usuario, Clave, Nivel'
@amplitudcm = '70,120,30'
render("index")
end
end
Ahora veamos el contenido o fuente de la vista: index.rhtml:
<!-Application: octava.rb
View
: index.rhtml
models
: usuarios y mensajes.
Autor
: Edgar Gonzalez
kamila
: versión 1.0.0
Fecha
: 09 de Agosto del 2008
-->
<%=create_html() %>
<%=create_head() %>
<%=create_title('Octava Aplicaci&oacute;n') %>
<%=create_meta() %>
<%=create_meta('Content-Type','text/html','utf8') %>
<%=create_css('estilo_rojo.css') %>
<%=create_javascript_livevalidation("en")%>
<%=create_javascript_extjs() %>
91
Libro de Kamila 1.0.1
yiyi 2009
<%=close_head() %>
<%=create_body() %>
<%=create_div('div1','h1','Formulario de Prueba de Octava:') %>
<%=close_div() %>
<%=create_form('form','form','POST','primera') %>
<%=create_paragraphs('p1','','h12d') %>
<%=create_table("0") %>
<%=create_tr() %>
<%=create_td() %>
<%=insert_text('Usuario: ') %>
<%=close_td() %>
<%=create_td() %>
<%=input_text_key_validate_lv('form','0..9','text','f1','tusuario','','fal
se',12,12,'false','introduzca el usuario',1,'cajatexto') %>
<%=close_td() %>
<%=close_tr() %>
<%=create_tr() %>
<%=create_td() %>
<%=insert_text('Clave: ') %>
<%=close_td() %>
<%=create_td() %>
<%=input_text_presence_lv('password','form','f2','tclave','','false',12
,12,'false','introduzca la clave',2,'cajatexto') %>
<%=close_td() %>
<%=close_tr() %>
<%=create_tr() %>
<%=create_td() %>
<%=insert_text('Nivel: ') %>
<%=close_td() %>
<%=create_td() %>
<%=input_text_key_validate_lv('form','0..9','text','f3','tnivel','','false',
1,1,'false','introduzca el nivel',1,'cajatexto') %>
<%=close_td() %>
<%=close_tr() %>
<%=close_table() %>
<%=close_paragraphs() %>
<%=insert_linebreaks(2) %>
<%=input_submit('f30','Aceptar','Aceptar','x-btn-click') %>
<%=input_reset('f31','Cancelar','Cancelar','x-btn-click') %>
<%=input_button('f32','Catalogou','Catalogo de Usuarios','x-btnclick','onclick="catalogousuarios()"') %>
<%=input_button('f33','Catalogom','Catalogo de Mensajes','x-btnclick','onclick="catalogomensajes()"') %>
<%=create_gridView_extjs(@nombreFuncion,@titulo,@idGrid,@i
92
Libro de Kamila 1.0.1
yiyi 2009
ds,@ds,@cm,@amplitudcm,@objetoDatosu) %>
<%=create_gridView_extjs('catalogomensajes','Catalogo de
Mensajes','miGridM','','descripcion,vinculo','Descripcion,Vinculo'
,'120,120',@objetoDatosm) %>
<%=close_form() %>
<%=select_focus('form','tusuario') %>
<%=create_div('div1','h1','Fin de Prueba de Octava') %>
<%=close_div() %>
<%=close_body() %>
<%=close_html() %>
En la primera llamada de la API, los parámetros son llenados en el
controlador, como atributos de la clase: Octava, note el cuarto
parámetro, donde se le pasa los ids de los datos que serán actualizados
de las caja de texto cuando se escoja un registro en el catálogo:
create_gridView_extjs(@nombreFuncion,@titulo,@idGrid,@ids,@d
s,@cm,@amplitudcm,@objetoDatosu)
En la segunda llamada, note que los parámetros son pasados
directamente, no con atributos de la clase Octava, excepto el último
parámetro, además en el cuarto parámetro no se le pasa nada, es decir
vacío, ya que nuestro formulario, maneja usuarios y no mensajes, y es
por ello que se verá en el catálogo el botón: Salir , pero no el botón:
Aceptar, para seleccionar un elemento del catálogo, como se verá en la
primera llamada, con el manejo del catálogo de usuarios:
create_gridView_extjs('catalogomensajes','Catalogo de
Mensajes','miGridM','','descripcion,vinculo','Descripcion,Vinculo
','120,120',@objetoDatosm)
Veamos la ejecución de octava:
93
Libro de Kamila 1.0.1
yiyi 2009
Figura 29: Ejecución del controlador: octava, acción: index, ejemplo
usando la API create_gridView_extjs. Escogiendo el tercer registro del
grid de usuarios. Fuente el autor.
Figura 30: Ejecución del controlador: octava, acción: index, ejemplo
usando la API create_gridView_extjs. El dato escogido, vaciado en el
formulario, en los campos respectivos. Fuente el autor.
94
Libro de Kamila 1.0.1
yiyi 2009
Grid o Catálogo Dinámico
Para
crear
un
catálogo
dinámico,
Kamila
tiene
la
API:
create_gridAjaxView_extjs, basada en el framework Extjs. La
diferencia con el anterior, que cada vez que presionemos el botón para
el catálogo respectivo, los datos serán cargados automáticamente,
usando AJAX, a tráves de una página servidora llamada:
ajaxnovena.rb, es decir, en nuestro catálogo siempre tendremos los
datos actualizados. Para demostrar el uso de ésta API, primero creamos
el controlador: novena.rb:
=begin
Application: novena.rb
View
: index.rhtml
models
: Ninguno.
Autor
: Edgar Gonzalez
kamila
: versión 1.0.0
Fecha
: 10 de Agosto del 2008
=end
require $kamila_lib+"application"
class Novena < Application
private
@pageserver = nil
@nombreFuncion = nil
@titulo = nil
@idGrid = nil
@ids = nil
@ds = nil
@cm = nil
@amplitudcm = nil
public
def initialize()
end
def index()
@pageserver= 'ajaxnovena/usuarios'
@nombreFuncion = 'catalogousuarios'
@titulo = 'Catalogo de Usuario'
@idGrid = 'miGrid'
@ids = 'f1,f2,f3'
@ds = 'usuario,clave,nivel'
@cm = 'Usuario, Clave, Nivel'
@amplitudcm = '70,120,30'
render("index")
95
Libro de Kamila 1.0.1
yiyi 2009
end
end
Ahora veamos la vista: index.rhtml:
<!-Application: novena.rb
View
: index.rhtml
models
: Ninguno
Autor
: Edgar Gonzalez
kamila
: versión 1.0.0
Fecha
: 09 de Agosto del 2008
-->
<%=create_html() %>
<%=create_head() %>
<%=create_title('novena Aplicaci&oacute;n') %>
<%=create_meta() %>
<%=create_meta('Content-Type','text/html','utf8') %>
<%=create_css('estilo_rojo.css') %>
<%=create_javascript_livevalidation("en")%>
<%=create_javascript_extjs() %>
<%=close_head() %>
<%=create_body() %>
<%=create_div('div1','h1','Formulario de Prueba de Novena:') %>
<%=close_div() %>
<%=create_form('form','form','POST','primera') %>
<%=create_paragraphs('p1','','h12d') %>
<%=create_table("0") %>
<%=create_tr() %>
<%=create_td() %>
<%=insert_text('Usuario: ') %>
<%=close_td() %>
<%=create_td() %>
<%=input_text_key_validate_lv('form','0..9','text','f1','tusuario','','fal
se',12,12,'false','introduzca el usuario',1,'cajatexto') %>
<%=close_td() %>
<%=close_tr() %>
<%=create_tr() %>
<%=create_td() %>
<%=insert_text('Clave: ') %>
<%=close_td() %>
<%=create_td() %>
<%=input_text_presence_lv('password','form','f2','tclave','','false',12
96
Libro de Kamila 1.0.1
yiyi 2009
,12,'false','introduzca la clave',2,'cajatexto') %>
<%=close_td() %>
<%=close_tr() %>
<%=create_tr() %>
<%=create_td() %>
<%=insert_text('Nivel: ') %>
<%=close_td() %>
<%=create_td() %>
<%=input_text_key_validate_lv('form','0..9','text','f3','tnivel','','false',
1,1,'false','introduzca el nivel',1,'cajatexto') %>
<%=close_td() %>
<%=close_tr() %>
<%=close_table() %>
<%=close_paragraphs() %>
<%=insert_linebreaks(2) %>
<%=input_submit('f30','Aceptar','Aceptar','botones') %>
<%=input_reset('f31','Cancelar','Cancelar','botones') %>
<%=input_button('f32','Catalogou','Catalogo de
Usuarios','botones','onclick="catalogousuarios()"') %>
<%=input_button('f33','Catalogom','Catalogo de
Mensajes','botones','onclick="catalogomensajes()"') %>
<%=create_gridAjaxView_extjs(@nombreFuncion,@titulo,@idGr
id,@ids,@ds,@cm,@amplitudcm,@pageserver) %>
<%=create_gridAjaxView_extjs('catalogomensajes','Catalogo de
Mensajes','miGridM','','descripcion,vinculo','Descripcion,Vinculo'
,'120,120','ajaxnovena/mensajes') %>
<%=close_form() %>
<%=select_focus('form','tusuario') %>
<%=create_div('div1','h1','Fin de Prueba de Novena') %>
<%=close_div() %>
<%=close_body() %>
<%=close_html() %>
Note el último parámetro, donde se llama la página servidora: para
usuarios, llama el controlador: @pageserver = 'ajaxnovena/usuarios'
y para mensajes: 'ajaxnovena/mensajes'
este controlador a su vez tiene su vista: index.rhtml.
Veamos el fuente de: ajaxnovena.rb:
=begin
Application: ajaxnovena.rb
View
: index.rhtml
97
Libro de Kamila 1.0.1
models
Autor
kamila
Fecha
=end
yiyi 2009
: usuarios y mensajes.
: Edgar Gonzalez
: versión 1.0.0
: 10 de Agosto del 2008
require $kamila_lib+"application"
class Ajaxnovena < Application
private
@objetoDatosu = nil
@objetoUsuarios = nil
@objetoDatosm = nil
@objetoMensajes = nil
@registros = nil
public
def initialize()
@registros = ''
end
def mensajes()
existe = loadmodel("mensajes")
if existe==true
@objetoDatosm = '|'
@objetoMensajes=Mensajes.find(:all)
totalregistros = @objetoMensajes.length
i=1
@objetoMensajes.each do |mensaje|
@objetoDatosm = @objetoDatosm + mensaje.descripcion + ','
if i==totalregistros
@objetoDatosm = @objetoDatosm + mensaje.vinculo
else
@objetoDatosm = @objetoDatosm + mensaje.vinculo + '|'
end
i=i+1
end
@registros = @objetoDatosm
end
render("index")
end
def usuarios()
existe = loadmodel("usuarios")
if existe==true
@objetoDatosu = '|'
@objetoUsuarios=Usuarios.find(:all)
totalregistros = @objetoUsuarios.length
98
Libro de Kamila 1.0.1
yiyi 2009
i=1
@objetoUsuarios.each do |usuario|
@objetoDatosu = @objetoDatosu + usuario.usuario + ','
@objetoDatosu = @objetoDatosu + usuario.clave + ','
if i==totalregistros
@objetoDatosu = @objetoDatosu + usuario.nivel
else
@objetoDatosu = @objetoDatosu + usuario.nivel + '|'
end
i=i+1
end
@registros = @objetoDatosu
end
render("index")
end
end
Ahora veamos el index.rhtml para ajaxnovena.rb:
<%=@registros %>
@registros, es un atributo de la clase: Ajaxnovena del controlador.
Recuerde que para AJAX, una página servidora envian los datos al
cliente en formato: XML, a tráves del método responseXML, o TEXT
con responseTEXT, en nuestro caso es: TEXT, donde los datos vienen
separados por coma para cada registro y cada registo por el carácter: |,
ejemplo: 22000000,camila,1|23000000,yeye,2|. Veamos la ejecuación
de Novena:
99
Libro de Kamila 1.0.1
yiyi 2009
Figura 31: Ejecución del controlador: novena, acción: index, ejemplo
usando la API create_gridAjaxView_extjs. Fuente el autor.
APIS de Kamila basado en el Framework Rialto
Kamila ofrece una cantidad de APIS basada en el framework: Rialto.
Esto permite al programdor que usa el framework, tener una variedad
de APIS para crear formularios, basados en: Livevalidation, Extjs y
Rialto.
Para ver casi todas las APIS de Kamila basadas en Rialto, veamos el
siguiente ejemplo. El controlador se llamará: decima.rb, veamos el
fuente:
=begin
Application: decima.rb
View
: index.rhtml
models
: Ninguno
Autor
: Edgar Gonzalez
kamila
: versión 1.0.0
Fecha
: 03 de septiembre del 2008
=end
require $kamila_lib+"application"
class Decima < Application
100
Libro de Kamila 1.0.1
yiyi 2009
def initialize()
end
def index()
render("index")
end
def recibirParametros_dos()
@arregloparametros = $kamila_cgi.params
render("recibirParametros_dos")
end
end
Ahora veamos la vista: index.rhtml
<!-Application: decima.rb
View
: index.rhtml
models
: Ninguno
Autor
: Edgar Gonzalez
kamila
: versión 1.0.0
Fecha
: 03 de septiembre del 2008
-->
<%=create_html() %>
<%=create_head() %>
<%=create_title('Decima Aplicaci&oacute;n') %>
<%=create_meta() %>
<%=create_meta('Content-Type','text/html','utf8') %>
<%=create_css('estilo_rojo.css') %>
<%=create_javascript_rialto('defaultSkin.css') %>
<%=create_javascript_md5() %>
<%=close_head() %>
<%=create_body() %>
<%=create_div('div1','h1','Formulario de Prueba de Decima:') %>
<%=close_div() %>
<%=create_form('form','form','POST','decima/recibirParametros_dos')
%>
<%=create_label_rialto('lab1','parseInt(screen.height *
0.10)','parseInt(screen.width * 0.15)','id1','Nombre:','e1') %>
<%=input_text_rialto('nombre','parseInt(screen.height *
0.10)','parseInt(screen.width *
0.24)','300','A','id2','yiyi','false,true,false,Introduzca el nombre,n,5,1')
%>
<%=create_label_rialto('lab2','parseInt(screen.height *
101
Libro de Kamila 1.0.1
yiyi 2009
0.15)','parseInt(screen.width * 0.15)','id2','Monto:','e2') %>
<%=input_text_rialto('monto','parseInt(screen.height *
0.15)','parseInt(screen.width *
0.24)','100','N','id3','0.00','false,true,false,Introduzca el monto en
Bs.F.,m,5,2') %>
<%=create_label_rialto('lab3','parseInt(screen.height *
0.20)','parseInt(screen.width * 0.15)','id3','Fecha:','e3') %>
<%=input_text_rialto('fecha','parseInt(screen.height *
0.20)','parseInt(screen.width *
0.24)','100','D','id4','','false,true,false,Introduzca la fecha de
nacimiento,f,5,3') %>
<%=create_label_rialto('lab4','parseInt(screen.height *
0.25)','parseInt(screen.width * 0.15)','id4','Hora:','e4') %>
<%=input_text_rialto('hora','parseInt(screen.height *
0.25)','parseInt(screen.width *
0.24)','100','H','id5','','false,true,false,Introduzca la hora de
nacimiento,h,5,4') %>
<%=create_label_rialto('lab5','parseInt(screen.height *
0.30)','parseInt(screen.width * 0.15)','id5','Clave:','e5') %>
<%=input_text_rialto('clave','parseInt(screen.height *
0.30)','parseInt(screen.width *
0.24)','100','md5','id6','','false,true,false,Introduzca la clave,c,5,5') %>
<%=create_label_rialto('lab6','parseInt(screen.height *
0.35)','parseInt(screen.width * 0.15)','id7','Comentario:','e6') %>
<%=input_text_rialto('comentario','parseInt(screen.height *
0.35)','parseInt(screen.width *
0.24)','200','T','id8','','false,true,false,Introduzca un breve
comentario,t,5,6') %>
<%=create_label_rialto('lab7','parseInt(screen.height *
0.50)','parseInt(screen.width * 0.15)','id8','Titulos:','e7') %>
<%=input_checkbox_rialto('titulo1','parseInt(screen.height *
0.50)','parseInt(screen.width * 0.24)','id9','Pregrado','true','chk01') %>
<%=input_checkbox_rialto('titulo2','parseInt(screen.height *
0.55)','parseInt(screen.width * 0.24)','id10','Postgrado','false','chk02')
%>
<%=create_label_rialto('lab8','parseInt(screen.height *
0.60)','parseInt(screen.width * 0.15)','id11','Estados:','e8') %>
<%=input_combo_rialto('estado','parseInt(screen.height *
0.60)','parseInt(screen.width *
0.24)','100','Lara,Barinas,Portuguesa,Yaracuy','','id12','true','0') %>
<%=input_hidden('f15','tipo','buscar') %>
<%=input_submit_rialto('aceptar','parseInt(screen.height *
0.70)','parseInt(screen.width * 0.15)','Aceptar','Enviar
Datos','','true,90','form','tipo,eliminar','massValidateRialto()') %>
102
Libro de Kamila 1.0.1
yiyi 2009
<%=input_reset_rialto('cancelar','parseInt(screen.height *
0.70)','parseInt(screen.width * 0.25)','Cancelar','Limpiar
Datos','','true,90','form') %>
<%=close_form() %>
<%=create_massValidate_rialto('form','massValidateRialto()','nombre,
monto,fecha,hora,clave,comentario','Datos no completados') %>
<%=insert_linebreaks(27) %>
<%=create_div('div11','h1','Fin de Prueba de Decima') %>
<%=close_div() %>
<%=close_body() %>
<%=close_html() %>
Todas las APIS de Kamila basada en Riato, tienen el sufijo: rialto, asi
como para livevalidation: lv, ver ejemplo de: cuarta.rb y para Extjs:
extjs, ver ejemplo de: quinta.rb.
Para las APIS de Kamila basada en Rialto, se baso en las coordenadas:
X y Y, es decir, Top y Left, para posicionar los elementos como:
etiquetas, caja de textos, checkbox, entre otros.
El framework o librería: Livevalidation, trae una función llamada:
massValidate, para la validación de todos los datos, según su tipo,
antes de hacer un request, de igual manera, el autor de Kamila, creo lo
equivalente para los frameworks: Extjs y Rialto, para mantener el
estándar como: Livevalidation.
Ahora el fuente: recibirParametros_dos.rhtml, que recibe los datos
enviados desde: index.rhtml
<!-Application: decima.rb
View
: recibirParametros_dos.rhtml
models
: Ninguno
Autor
: Edgar Gonzalez
kamila
: versión 1.0.0
Fecha
: 03 de septiembre del 2008
-->
<%=create_html() %>
<%=create_head() %>
<%=create_title('Trece Aplicaci&oacute;n') %>
<%=create_meta() %>
103
Libro de Kamila 1.0.1
yiyi 2009
<%=create_meta('Content-Type','text/html','iso-8859-1') %>
<%=create_css('estilo_rojo.css') %>
<%=close_head() %>
<%=create_body() %>
<%=create_div('div1','h1','recibirParametros_dos: Datos llenados del
Formulario de Decima:') %>
<%=close_div() %>
<%=create_paragraphs('p1','','h12d') %>
<%=insert_text('Nombre: ')
%><%=@arregloparametros['nombre'].to_s
%><%=insert_linebreaks(1) %>
<%=insert_text('Monto: ') %><%="Bs.F.
"+format_number(@arregloparametros['monto'].to_s.gsub(/[.]/,","),".")
%><%=insert_linebreaks(1) %>
<%=insert_text('Hora: ') %><%=@arregloparametros['hora'].to_s
%><%=insert_linebreaks(1) %>
<%=insert_text('Clave: ') %><%=@arregloparametros['clave'].to_s
%><%=insert_linebreaks(1) %>
<%=insert_text('Comentario: ')
%><%=@arregloparametros['comentario'].to_s
%><%=insert_linebreaks(1) %>
<%=insert_text('Titulo 1: ')
%><%=@arregloparametros['titulo1'].to_s
%><%=insert_linebreaks(1) %>
<%=insert_text('Titulo 2: ')
%><%=@arregloparametros['titulo2'].to_s
%><%=insert_linebreaks(1) %>
<%=insert_text('Estado: ')
%><%=@arregloparametros['estado'].to_s
%><%=insert_linebreaks(1) %>
<%=insert_text('tipo: ') %><%=@arregloparametros['tipo'].to_s
%><%=insert_linebreaks(1) %>
<%=close_paragraphs() %>
<%=insert_linebreaks(2) %>
<%=create_div('div1','h1','Fin de recibirParametros_dos de Decima')
%>
<%=close_div() %>
<%=close_body() %>
<%=close_html() %>
Veamos la ejecución de: decima.rb
104
Libro de Kamila 1.0.1
yiyi 2009
Figura 32: Ejecución del controlador: decima, acción: index, ejemplo
de las APIs de Kamila basadas en Rialto, usando
create_massValidate_rialto. Fuente el autor.
Figura 33: Ejecución del controlador: decima, acción: index, ejemplo
de las APIs de Kamila basadas en Rialto, uso de calendario. Fuente el
autor.
105
Libro de Kamila 1.0.1
yiyi 2009
Uso de Plantillas en Kamila
En internet hay una variedad de platillas, libres o pagas, basadas en:
html, xtml, flash, y css; que ahorra el desarrollo de las vistas, o capa de
presentación para el usuario.
En el siguiente ejemplo, veremos como ubicamos los recursos en los
directorios de Kamila de una plantilla basada en css.
Para
ello
descargamos
la
http://www.freecsstemplates.org/
platilla:
prosperity
desde
Los documentos o archivos de dicha plantilla con extensión: css, lo
ubicamos, en una carpeta nueva, que llamaremos: prosperidad en:
/var/www/kamila/public/css. Asi mismo, las imagenes que utiliza la
plantilla, lo ubicamos en una carpetna nueva que llamaremos:
prosperidad en: /var/www/kamila/public/img.
Luego creamos el controlador: once.rb, cuyo contenido es el siguiente:
=begin
Application: once.rb
Views
: index.rhtml y actualizarDatos.rhtml
models
: usuarios.rb
Autor
: Edgar Gonzalez
kamila
: versión 1.0.0
Fecha
: 08 de septiembre del 2008
=end
require $kamila_lib+"application"
class Once < Application
private
@objetoDatos = nil
@usuario = nil
@clave = nil
@nivel = nil
@mensaje = nil
@tipo = nil
public
attr_accessor :objetoDatos
def initialize()
@usuario=''
@clave=''
@nivel=''
106
Libro de Kamila 1.0.1
yiyi 2009
@mensaje = ''
end
def index()
render("index")
end
def actualizarDatos()
existe = loadmodel("usuarios")
if existe==true
@tipo = $kamila_cgi['tipo'].to_s
case @tipo
when 'buscar'
@usuario = $kamila_cgi['usuario'].to_s
@clave = $kamila_cgi['clave'].to_s
@nivel = $kamila_cgi['nivel'].to_s
@objetoDatos=Usuarios.find(:first, :conditions=>"usuario =
'"+@usuario+"' and clave='"+@clave+"'")
if @objetoDatos != nil
@nivel = @objetoDatos.nivel
@mensaje = show_Message_extjs('INFO','Mensaje','Datos
encontrados')
else
@mensaje = show_Message_extjs('ERROR','Mensaje','Usuario o
clave no existe')
end
when 'grabar'
@usuario = $kamila_cgi['usuario'].to_s
@clave = $kamila_cgi['clave'].to_s
@nivel = $kamila_cgi['nivel'].to_s
@objetoDatos=Usuarios.find(:first, :conditions=>"usuario =
'"+@usuario+"' and clave='"+@clave+"'")
if @objetoDatos != nil
@objetoDatos.nivel=@nivel
else
@objetoDatos=Usuarios.new
@objetoDatos.usuario=@usuario
@objetoDatos.clave=@clave
@objetoDatos.nivel=@nivel
end
@objetoDatos.save
@mensaje = show_Message_extjs('INFO','Mensaje','Datos
actualizados')
when 'cancelar'
@usuario=''
107
Libro de Kamila 1.0.1
yiyi 2009
@clave=''
@nivel=''
@mensaje = ''
when 'eliminar'
@usuario = $kamila_cgi['usuario'].to_s
@clave = $kamila_cgi['clave'].to_s
@nivel = $kamila_cgi['nivel'].to_s
@objetoDatos=Usuarios.find(:first, :conditions=>"usuario =
'"+@usuario+"' and clave='"+@clave+"'")
if @objetoDatos != nil
@objetoDatos.destroy
@usuario=''
@clave=''
@nivel=''
@mensaje = show_Message_extjs('INFO','Mensaje','Usuario
Eliminado')
else
@mensaje = show_Message_extjs('ERROR','Mensaje','Usuario o
clave no existe')
end
end
else
@mensaje = show_Message_extjs("INFO","Error","Modelo no
existe","once")
end
render("actualizardatos")
end
end
Y el fuente de la vista: index.rhtml, basada en la plantilla: prosperity
<!-Application: once.rb
View
: index.rhtml
models
: Ninguno
Autor
: Edgar Gonzalez
kamila
: versión 1.0.0
Fecha
: 08 de septiembre del 2008
-->
<%=create_html() %>
<%=create_head() %>
108
Libro de Kamila 1.0.1
yiyi 2009
<%=create_title('Once Aplicaci&oacute;n') %>
<%=create_meta() %>
<%=create_meta('Content-Type','text/html','utf8') %>
<%=create_css('prosperidad/reset.css') %>
<%=create_css('prosperidad/style.css') %>
<%=close_head() %>
<%=create_body() %>
<%=create_div("wrap") %>
<%=create_div("header") %>
<%=create_heading("h1","logo","Kamila") %><%=create_span("...el
mejor framework MVC++") %> <%=close_span()
%><%=close_heading("h1") %>
<%=create_ul("nav") %>
<%=create_li() %><%=create_href("#","Inicio")
%><%=close_href() %><%=close_li() %>
<%=create_li()
%><%=create_href($kamila_site+"/once/actualizarDatos","Actualizar")
%><%=close_href() %><%=close_li() %>
<%=create_li() %><%=create_href("#","Blog")
%><%=close_href() %><%=close_li() %>
<%=close_ul() %>
<%=close_div() %>
<%=create_div("content") %>
<%=create_heading("h2","Usando Kamila...te sentir&aacute;s
enamorado.") %><%=close_heading("h2") %>
<%=create_img("img/prosperidad/ct_img.jpg") %>
<%=create_paragraphs()%>
<%=insert_text("Kamila en su versi&oacute;n 1.0.0, es un
Framework bajo WEB, basado en MVC++, que est&aacute;
desarrollado en el lenguaje Ruby 1.8.5 o mayor, sobre el servidor Web
Apache 2.2.3 o mayor. Usa el m&oacute;dulo de Apache: mod_ruby
1.2.6 o mayor y erubis. :)") %>
<%=close_paragraphs() %>
<%=create_div("blog") %>
<%=create_heading("h2","Sobre Camila visita su blog...")
%><%=close_heading("h2") %>
<%=create_paragraphs("id1","... y mucho m&aacute;s...")
%><%=close_paragraphs() %><%=insert_linebreaks(2) %>
<%=create_img("logokamila","img/prosperidad/kamila103x102.jpg"
,"fotos de Camila","0","103","102") %>
<%=close_div() %>
<%=close_div() %>
<%=close_div() %>
<%=create_div("footer") %>
109
Libro de Kamila 1.0.1
yiyi 2009
<%=create_div("ftlink") %>
<%=create_href("#","Inicio") %><%=insert_text(" | ")
%><%=close_href() %>
<%=create_href("http://egonzale.wordpress.com","Acerca de")
%><%=insert_text(" | ") %><%=close_href() %>
<%=create_href("http://www.myjavaserver.com/~egonzale","Contacto
") %><%=close_href() %>
<%=close_div() %>
<%=create_paragraphs("copyright","© 2008. All Rights Reserved.")
%>
<%=insert_linebreaks(1) %>
<%=insert_text("Designed by ")
%><%=create_href("http://www.free-css-templates.com/","Free CSS
Templates") %><%=close_href() %>
<%=insert_text(" Thanks to ")
%><%=create_href("http://www.dubaiapartments.biz","Dubai Villas")
%><%=close_href() %>
<%=close_paragraphs() %>
<%=create_div("xhtml")
%><%=create_img("img/prosperidad/xhtml.gif"," xhtml valid")
%><%=create_img("img/prosperidad/css.gif","css vaild")
%><%=close_div() %>
<%=close_div() %>
<%=close_body() %>
<%=close_html() %>
El controlador once es una aplicación que usa en sus vistas:
index.rhtml y actualizarDatos.rhtml, la plantilla: propsperity, la
página principal de la plantilla basada en css, y que está programada en
html, se llevo a las APIs de Kamila para las vistas, vea los fuentes:
index.rhtml y actualizarDatos.rhtml. Al llamar al controlador: once
ó once/index, se presentará la página principal a tráves de la vista:
index.rhtml, que contiene un pequeño menú con las opciones: Inicio,
Actualizar y Blog. Vea la siguiente figura:
110
Libro de Kamila 1.0.1
yiyi 2009
Figura 34: Ejecución del controlador: once, acción: index. Fuente el
autor.
Si el usuario, escoge la opción del menú: Actualizar, este contiene un
enlace para llamar al controlador: once, pero a la acción o método:
actualizarDatos
que
a
su
vez
renderizará
a
la
vista:
actualizarDatos.rhtml, veamos el fuente de dicha vista:
<!-Application: once.rb
View
: actualizardatos.rhtml
models
: Ninguno
Autor
: Edgar Gonzalez
kamila
: versión 1.0.0
Fecha
: 08 de septiembre del 2008
-->
111
Libro de Kamila 1.0.1
yiyi 2009
<%=create_html() %>
<%=create_head() %>
<%=create_title('Once Aplicaci&oacute;n') %>
<%=create_meta() %>
<%=create_meta('Content-Type','text/html','utf8') %>
<%=create_css('prosperidad/reset.css') %>
<%=create_css('prosperidad/style.css') %>
<%=create_javascript_livevalidation("es")%>
<%=create_javascript_extjs() %>
<%=close_head() %>
<%=create_body() %>
<%=create_div("wrap") %>
<%=create_div("header") %>
<%=create_heading("h1","logo","Kamila") %><%=create_span("...el
mejor framework MVC++") %> <%=close_span()
%><%=close_heading("h1") %>
<%=create_ul("nav") %>
<%=create_li() %><%=create_href($kamila_site+"/once","Inicio")
%><%=close_href() %><%=close_li() %>
<%=create_li() %><%=create_href("#","Actualizar")
%><%=close_href() %><%=close_li() %>
<%=create_li() %><%=create_href("#","Blog")
%><%=close_href() %><%=close_li() %>
<%=close_ul() %>
<%=close_div() %>
<%=create_div("contentUpdate") %>
<%=create_form('form','form','POST','once/actualizarDatos') %>
<%=insert_linebreaks(2) %>
<%=create_paragraphs('p1','Actualizar Datos del Usuario:','h12d')
%>
<%=insert_linebreaks(2) %>
<%=create_table("0") %>
<%=create_tr() %>
<%=create_td() %>
<%=insert_text('Usuario: ') %>
<%=close_td() %>
<%=create_td() %>
<%=input_text_presence_lv('text','form','f1','usuario',@usuario,'fals
e',12,12,'false','introduzca el usuario',1,'cajatexto') %>
<%=close_td() %>
<%=close_tr() %>
<%=create_tr() %>
<%=create_td() %>
<%=insert_text('Clave: ') %>
112
Libro de Kamila 1.0.1
yiyi 2009
<%=close_td() %>
<%=create_td() %>
<%=input_text_presence_lv('password','form','f2','clave',@clave,'fal
se',12,12,'false','introduzca la clave',2,'cajatexto') %>
<%=close_td() %>
<%=close_tr() %>
<%=create_tr() %>
<%=create_td() %>
<%=insert_text('nivel: ') %>
<%=close_td() %>
<%=create_td() %>
<%=input_numericality_lv('true','text','f3','nivel',@nivel,'false',12,1
2,'false','introduzca el nivel',3,'cajatexto') %>
<%=close_td() %>
<%=close_tr() %>
<%=close_table() %>
<%=input_hidden('f15','tipo','buscar') %>
<%=close_paragraphs() %>
<%=insert_linebreaks(2) %>
<%=input_submit_lv('f30','Buscar','Buscar','botones','form','tipo,bus
car','f1,f2','Usuario y/o clave no completados') %>
<%=input_submit_lv('f31','Grabar','Grabar','botones','form','tipo,gra
bar','f1,f2,f3','Datos no completados') %>
<%=input_submit_lv('f32','Cancelar','Cancelar','botones','form','tipo,
cancelar','','') %>
<%=input_submit_lv('f33','Eliminar','Eliminar','botones','form','tipo,
eliminar','f1,f2','Usuario y/o clave no completados') %>
<%=input_button('f34','Catalogou','Catalogo de
Usuarios','botones','onclick="catalogousuarios()"') %>
<%=create_gridAjaxView_extjs('catalogousuarios','Catalogo de
Usuarios','miGrid','f1,f2,f3','usuario,clave,nivel','Usuario, Clave,
Nivel','70,120,30','ajaxnovena/usuarios') %>
<%=close_form() %>
<%=select_focus('form','usuario') %>
<%=close_div() %>
<%=close_div() %>
<%=create_div("footer") %>
<%=create_div("ftlink") %>
<%=create_href("#","Inicio") %><%=insert_text(" | ")
%><%=close_href() %>
<%=create_href("http://egonzale.wordpress.com","Acerca de")
%><%=insert_text(" | ") %><%=close_href() %>
<%=create_href("http://www.myjavaserver.com/~egonzale","Contacto
") %><%=close_href() %>
113
Libro de Kamila 1.0.1
yiyi 2009
<%=close_div() %>
<%=create_paragraphs("copyright","© 2008. All Rights Reserved.")
%>
<%=insert_linebreaks(1) %>
<%=insert_text("Designed by ")
%><%=create_href("http://www.free-css-templates.com/","Free CSS
Templates") %><%=close_href() %>
<%=insert_text(" Thanks to ")
%><%=create_href("http://www.dubaiapartments.biz","Dubai Villas")
%><%=close_href() %>
<%=close_paragraphs() %>
<%=create_div("xhtml")
%><%=create_img("img/prosperidad/xhtml.gif"," xhtml valid")
%><%=create_img("img/prosperidad/css.gif","css vaild")
%><%=close_div() %>
<%=close_div() %>
<%=@mensaje%>
<%=close_body() %>
<%=close_html() %>
Esta vista, muestra un formulario, que permite hacer las operaciones: ,
las entradas de datos se usa las APIs de Kamila basadas en
Livevalidation.
Una nota importante, es el uso de la API:
input_submit_lv('f30','Buscar','Buscar','botones','form','tipo,buscar',
'f1,f2','Usuario y/o clave no completados')
Esta API, en su séptimo parámetro, se envian los ids, de los campos que
deseamos validar antes de hacer submit. Recuerden que existe una API
para validar todos los campos antes de hacer submit, pero esta API
permite hacer submit validando los campos que deseamos que sean
pertinentes para la acción a tráves de un botón. En este caso, para:
Buscar, solo necesitamos llenar los campos: Usuario y Clave, note en
el envío de los ids: 'f1,f2' que son importantes para la búsqueda, no
así, el campo: Nivel. Pero para el botón: Grabar, si es importante que
todos los campos esten con datos y validados según su tipo, antes de
hacer submit para realizar la acción de grabar, note los ids: 'f1,f2,f3',
que corresponden a: Usuario, Clave y Nivel.
114
Libro de Kamila 1.0.1
yiyi 2009
input_submit_lv('f31','Grabar','Grabar','botones','form','tipo,grabar'
,'f1,f2,f3','Datos no completados')
Veamos la vista: actualizarDatos.rhtml, de la aplicación: once
Figura 35: Ejecución del controlador: once, acción: actualizarDatos.
Fuente el autor.
115
Libro de Kamila 1.0.1
yiyi 2009
Figura 36: Ejecución del controlador: once, acción: actualizarDatos.
Al presionar el botón: Buscar, sin llenar los campos: Usuario y Clave.
Fuente el autor
Ahora veamos, la aplicación: doce, que usa la misma plantilla, con la
diferencia en la vista: actualizarDatos.rhtml, para la validación de los
datos de entrada, usa las APIs de Kamila basadas en el framework:
Extjs, he aquí el fuente de: actualizarDatos.rhtml
<!-Application: doce.rb
View
: actualizardatos.rhtml
models
: Ninguno.
Autor
: Edgar Gonzalez
kamila
: versión 1.0.0
Fecha
: 15 de septiembre del 2008
-->
<%=create_html() %>
<%=create_head() %>
<%=create_title('Doce Aplicaci&oacute;n') %>
<%=create_meta() %>
<%=create_meta('Content-Type','text/html','utf8') %>
<%=create_css('prosperidad/reset.css') %>
<%=create_css('prosperidad/style.css') %>
116
Libro de Kamila 1.0.1
yiyi 2009
<%=create_javascript_extjs() %>
<%=create_javascript_language_extjs('es','ascii') %>
<%=close_head() %>
<%=create_body() %>
<%=create_div("wrap") %>
<%=create_div("header") %>
<%=create_heading("h1","logo","Kamila") %><%=create_span("...el
mejor framework MVC++") %> <%=close_span()
%><%=close_heading("h1") %>
<%=create_ul("nav") %>
<%=create_li() %><%=create_href($kamila_site+"/doce","Inicio")
%><%=close_href() %><%=close_li() %>
<%=create_li() %><%=create_href("#","Actualizar")
%><%=close_href() %><%=close_li() %>
<%=create_li() %><%=create_href("#","Blog")
%><%=close_href() %><%=close_li() %>
<%=close_ul() %>
<%=close_div() %>
<%=create_div("contentUpdate") %>
<%=create_form('form','form','POST','doce/actualizarDatos') %>
<%=insert_linebreaks(2) %>
<%=create_paragraphs('p1','Actualizar Datos del Usuario:','h12d')
%>
<%=insert_linebreaks(2) %>
<%=create_table("0") %>
<%=create_tr() %>
<%=create_td() %>
<%=create_label_extjs('e1','300','Usuario:','false','') %>
<%=close_td() %>
<%=create_td() %>
<%=
input_textField_extjs('f1','usuario','textfield','130','false',@usuario,'false'
,'') %>
<%=close_td() %>
<%=close_tr() %>
<%=create_tr() %>
<%=create_td() %>
<%=create_label_extjs('e2','300','Clave:','false','') %>
<%=close_td() %>
<%=create_td() %>
<%=
input_textField_extjs('f2','clave','password','130','false',@clave,'false','')
%>
<%=close_td() %>
117
Libro de Kamila 1.0.1
yiyi 2009
<%=close_tr() %>
<%=create_tr() %>
<%=create_td() %>
<%=create_label_extjs('e3','300','Nivel:','false','') %>
<%=close_td() %>
<%=create_td() %>
<%=
input_numberField_extjs('f3','nivel','integer','130','false',@nivel,'false','')
%>
<%=close_td() %>
<%=close_tr() %>
<%=close_table() %>
<%=input_hidden('f15','tipo','buscar') %>
<%=close_paragraphs() %>
<%=insert_linebreaks(2) %>
<%=input_submit_extjs('f30','Buscar','Buscar','x-btnclick','form','tipo,buscar','usuario,clave','Usuario y/o clave no
completados')%>
<%=input_submit_extjs('f31','Grabar','Grabar','x-btnclick','form','tipo,grabar','usuario,clave,nivel','Datos no completados')
%>
<%=input_submit_extjs('f32','Cancelar','Cancelar','x-btnclick','form','tipo,cancelar','','') %>
<%=input_submit_extjs('f33','Eliminar','Eliminar','x-btnclick','form','tipo,eliminar','usuario,clave','Usuario y/o clave no
completados') %>
<%=input_button('f34','Catalogou','Catalogo de Usuarios','x-btnclick','onclick="catalogousuarios()"') %>
<%=create_gridAjaxView_extjs('catalogousuarios','Catalogo de
Usuarios','miGrid','f1,f2,f3','usuario,clave,nivel','Usuario, Clave,
Nivel','70,120,30','ajaxnovena/usuarios') %>
<%=close_form() %>
<%=select_focus('form','usuario') %>
<%=close_div() %>
<%=close_div() %>
<%=create_div("footer") %>
<%=create_div("ftlink") %>
<%=create_href("#","Inicio") %><%=insert_text(" | ")
%><%=close_href() %>
<%=create_href("http://egonzale.wordpress.com","Acerca de")
%><%=insert_text(" | ") %><%=close_href() %>
<%=create_href("http://www.myjavaserver.com/~egonzale","Contacto
") %><%=close_href() %>
<%=close_div() %>
118
Libro de Kamila 1.0.1
yiyi 2009
<%=create_paragraphs("copyright","© 2008. All Rights Reserved.")
%>
<%=insert_linebreaks(1) %>
<%=insert_text("Designed by ")
%><%=create_href("http://www.free-css-templates.com/","Free CSS
Templates") %><%=close_href() %>
<%=insert_text(" Thanks to ")
%><%=create_href("http://www.dubaiapartments.biz","Dubai Villas")
%><%=close_href() %>
<%=close_paragraphs() %>
<%=create_div("xhtml")
%><%=create_img("img/prosperidad/xhtml.gif"," xhtml valid")
%><%=create_img("img/prosperidad/css.gif","css vaild")
%><%=close_div() %>
<%=close_div() %>
<%=@mensaje%>
<%=close_body() %>
<%=close_html() %>
Esta vista, muestra un formulario, que permite hacer las operaciones: ,
las entradas de datos se usa las APIs de Kamila basadas en Extjs.
Una nota importante, es el uso de la API:
input_submit_extjs('f30','Buscar','Buscar','x-btnclick','form','tipo,buscar','usuario,clave','Usuario
y/o
clave
no
completados')
Esta API, en su séptimo parámetro, se envian los nombres, de los
campos que deseamos validar antes de hacer submit. Recuerden que
existe una API para validar todos los campos antes de hacer submit,
pero esta API permite hacer submit validando los campos que deseamos
que sean pertinentes para la acción a tráves de un botón. En este caso,
para: Buscar, solo necesitamos llenar los campos: Usuario y Clave,
note en el envío de los campos: 'usuario,clave' que son importantes
para la búsqueda, no así, el campo: Nivel. Pero para el botón: Grabar,
si es importante que todos los campos esten con datos y validados
según su tipo, antes de hacer submit para realizar la acción de grabar,
note los nombres: 'usuario,clave,nivel'.
119
Libro de Kamila 1.0.1
yiyi 2009
input_submit_extjs('f31','Grabar','Grabar','x-btnclick','form','tipo,grabar','usuario,clave,nivel','Datos
no
completados')
Veamos la vista: actualizarDatos.rhtml, de la aplicación: doce
Figura 37: Ejecución del controlador: doce, acción: actualizarDatos.
Fuente el autor.
Figura 38: Ejecución del controlador: doce, acción: actualizarDatos.
Al presionar el botón: Buscar, sin llenar los campos: Usuario y Clave.
Fuente el autor
120
Libro de Kamila 1.0.1
yiyi 2009
Ahora veamos, la aplicación: trece, que usa la misma plantilla, con la
diferencia en la vista: actualizarDatos.rhtml, para la validación de los
datos de entrada, usa las APIs de Kamila basadas en el framework:
Rialto, he aquí el fuente de: actualizarDatos.rhtml
<!-Application: Trece.rb
View
: actualizardatos.rhtml
models
: Ninguno.
Autor
: Edgar Gonzalez
kamila
: versión 1.0.0
Fecha
: 15 de septiembre del 2008
-->
<%=create_html() %>
<%=create_head() %>
<%=create_title('Trece Aplicaci&oacute;n') %>
<%=create_meta() %>
<%=create_meta('Content-Type','text/html','utf8') %>
<%=create_css('prosperidad/reset.css') %>
<%=create_css('prosperidad/style.css') %>
<%=create_javascript_rialto('defaultSkin.css') %>
<%=close_head() %>
<%=create_body() %>
<%=create_div("wrap") %>
<%=create_div("header") %>
<%=create_heading("h1","logo","Kamila") %><%=create_span("...el
mejor framework MVC++") %> <%=close_span()
%><%=close_heading("h1") %>
<%=create_ul("nav") %>
<%=create_li() %><%=create_href($kamila_site+"/trece","Inicio")
%><%=close_href() %><%=close_li() %>
<%=create_li() %><%=create_href("#","Actualizar")
%><%=close_href() %><%=close_li() %>
<%=create_li() %><%=create_href("#","Blog")
%><%=close_href() %><%=close_li() %>
<%=close_ul() %>
<%=close_div() %>
<%=create_div("contentUpdate") %>
<%=create_form('form','form','POST','trece/actualizarDatos') %>
<%=insert_linebreaks(2) %>
<%=create_paragraphs('p1','Actualizar Datos del Usuario:','h12d')
%>
<%=insert_linebreaks(2) %>
121
Libro de Kamila 1.0.1
yiyi 2009
<%=create_label_rialto('lab1','parseInt(screen.height *
0.10)','parseInt(screen.width * 0.05)','id1','Usuario:','e1') %>
<%=input_text_rialto('usuario','parseInt(screen.height *
0.10)','parseInt(screen.width *
0.15)','100','A','f1',@usuario,'false,true,false,Introduzca el
usuario,n,5,1') %>
<%=create_label_rialto('lab2','parseInt(screen.height *
0.15)','parseInt(screen.width * 0.05)','id2','Clave:','e2') %>
<%=input_text_rialto('clave','parseInt(screen.height *
0.15)','parseInt(screen.width *
0.15)','100','P','f2',@clave,'false,true,false,Introduzca la clave,n,5,2') %>
<%=create_label_rialto('lab3','parseInt(screen.height *
0.20)','parseInt(screen.width * 0.05)','id3','Nivel:','e3') %>
<%=input_text_rialto('nivel','parseInt(screen.height *
0.20)','parseInt(screen.width *
0.15)','100','N','f3',@nivel,'false,true,false,Introduzca el nivel,n,5,3') %>
<%=input_hidden('f15','tipo','buscar') %>
<%=close_paragraphs() %>
<%=insert_linebreaks(2) %>
<%=input_submit_rialto('buscar','parseInt(screen.height *
0.55)','parseInt(screen.width * 0.33)','Buscar','Buscar
usuario','','true,70','form','tipo,buscar','usuario,clave','Usuario y/o clave
no completados') %>
<%=input_submit_rialto('grabar','parseInt(screen.height *
0.55)','parseInt(screen.width * 0.40)','Grabar','Grabar
usuario','','true,70','form','tipo,grabar','usuario,clave,nivel','Datos no
completados') %>
<%=input_submit_rialto('cancelar','parseInt(screen.height *
0.55)','parseInt(screen.width * 0.47)','Cancelar','Limpiar
datos','','true,70','form','tipo,cancelar','','') %>
<%=input_submit_rialto('eliminar','parseInt(screen.height *
0.55)','parseInt(screen.width * 0.54)','Eliminar','Eliminar
usuario','','true,70','form','tipo,eliminar','usuario,clave','Usuario y/o
clave no completados') %>
<%=input_button_rialto('catalogou','parseInt(screen.height *
0.55)','parseInt(screen.width * 0.61)','Catalogo','Catalogo de
usuarios','','true,70','form','catalogousuarios') %>
<!-Usando Catalogo o Grid, Estatico
-->
<%=create_gridView_rialto('100','250','500','340','catalogousuarios','
Catalogo de
Usuarios','idcatalogo','usuario,clave,nivel','Usuario,Clave,Nivel','100,10
0,100','string,string,string',@objetoDatosu) %>
122
Libro de Kamila 1.0.1
yiyi 2009
<!-Usando Catalogo o Grid, Dinamico a traves de AJAX
<%=create_gridAjaxView_rialto('100','250','500','340','catalogousuar
ios','Catalogo de
Usuarios','idcatalogo','usuario,clave,nivel','Usuario,Clave,Nivel','100,10
0,100','string,string,string','ajaxtrece/usuarios') %>
-->
<%=close_form() %>
<%=select_focus('form','usuario') %>
<%=close_div() %>
<%=close_div() %>
<%=create_div("footer") %>
<%=create_div("ftlink") %>
<%=create_href("#","Inicio") %><%=insert_text(" | ")
%><%=close_href() %>
<%=create_href("http://egonzale.wordpress.com","Acerca de")
%><%=insert_text(" | ") %><%=close_href() %>
<%=create_href("http://www.myjavaserver.com/~egonzale","Contacto
") %><%=close_href() %>
<%=close_div() %>
<%=create_paragraphs("copyright","© 2008. All Rights Reserved.")
%>
<%=insert_linebreaks(1) %>
<%=insert_text("Designed by ")
%><%=create_href("http://www.free-css-templates.com/","Free CSS
Templates") %><%=close_href() %>
<%=insert_text(" Thanks to ")
%><%=create_href("http://www.dubaiapartments.biz","Dubai Villas")
%><%=close_href() %>
<%=close_paragraphs() %>
<%=create_div("xhtml")
%><%=create_img("img/prosperidad/xhtml.gif"," xhtml valid")
%><%=create_img("img/prosperidad/css.gif","css vaild")
%><%=close_div() %>
<%=close_div() %>
<%=@mensaje%>
<%=close_body() %>
<%=close_html() %>
Esta vista, muestra un formulario, que permite hacer las operaciones: ,
las entradas de datos se usa las APIs de Kamila basadas en Rialto.
Una nota importante, es el uso de la API:
123
Libro de Kamila 1.0.1
yiyi 2009
input_submit_rialto('buscar','parseInt(screen.height
*
0.55)','parseInt(screen.width
*
0.33)','Buscar','Buscar
usuario','','true,70','form','tipo,buscar','usuario,clave','Usuario
y/o
clave no completados')
Esta API, en el noveno parámetro, se envian los nombres, de los campos
que deseamos validar antes de hacer submit. Recuerden que existe una
API para validar todos los campos antes de hacer submit, pero esta API
permite hacer submit validando los campos que deseamos que sean
pertinentes para la acción a tráves de un botón. En este caso, para:
Buscar, solo necesitamos llenar los campos: Usuario y Clave, note en
el envío de los campos: 'usuario,clave' que son importantes para la
búsqueda, no así, el campo: Nivel. Pero para el botón: Grabar, si es
importante que todos los campos esten con datos y validados según su
tipo, antes de hacer submit para realizar la acción de grabar, note los
nombres: 'usuario,clave,nivel'.
input_submit_rialto('grabar','parseInt(screen.height
*
0.55)','parseInt(screen.width
*
0.40)','Grabar','Grabar
usuario','','true,70','form','tipo,grabar','usuario,clave,nivel','Datos
no completados')
Veamos la vista: actualizarDatos.rhtml, de la aplicación: trece
Figura 46: Ejecución del controlador: doce, acción: actualizarDatos.
Fuente el autor.
124
Libro de Kamila 1.0.1
yiyi 2009
Figura 39: Ejecución del controlador: trece, acción: actualizarDatos.
Al presionar el botón: Buscar, sin llenar los campos: Usuario y Clave.
Fuente el autor
Generación de Gráficos con Kamila
En la aplicación: catorce, veremos el uso de la API:
create_graph_gruff, que nos permite generar gráficas de tipo: barras,
torta, lineal, entre otras.
Para ello veamos el controlador: catorce.rb
=begin
Application: catorce.rb
View
: index.rhtml, vergrafica.rhtml
models
: Ninguno
Autor
: Edgar Gonzalez
kamila
: versión 1.0.0
Fecha
: 18 de septiembre del 2008
=end
require $kamila_lib+"application"
class Catorce < Application
@tipo = nil
@fondo = nil
@fuente = nil
@tamanofuente = nil
125
Libro de Kamila 1.0.1
yiyi 2009
@titulo = nil
@titulo_axis_x = nil
@titulo_axis_y = nil
@leyendas = nil
@datos = nil
@yvalores = nil
@xvalores = nil
@archivo = nil
def initialize()
end
def index()
render("index")
end
def generarGrafica()
# Tipos de Graficas = line, pie, bar, area, sidebar, stackedbar,
sidestackedbar
@tipo = "bar"
@fondo = Array.new
# Fondos o temas predeterminados: blue, bluelight, pink, black
#@fondo[0] = 'black'
#@fondo[1] = ''
# Fondos o temas: Personalizados, puede ser en vez de: ,
:background_colors
#
por :background_image =>
$kamila_site+'/public/img/kamila/18_kamila.jpg'
@fondo[0] = 'mytheme'
@fondo[1] = {
:colors => %w(white purple red orange),
:marker_color => 'red',
:background_colors => %w(white green)
}
# Puedes instalar mas fuentes true type font (ttf) en directorio:
/usr/share/fonts/truetype/
# Copias la carpeta en el directorio anterior y como super usuario, lo
recargas con: fc-cache -f -v
@fuente = "/usr/share/fonts/truetype/ttf-bitstream-vera/Vera.ttf"
# Tamano de las fuentes para: El titulo, Leyenda y Marcas
@tamanofuente = Array.new
@tamanofuente[0] = 32 # titulo
@tamanofuente[1] = 18 # leyenda
@tamanofuente[2] = 24 # Marcas
# Titulo de la grafica
@titulo = "Estadísticas de la Maestría- DCYT"
126
Libro de Kamila 1.0.1
yiyi 2009
# titulos de los ejes X y Y
@titulo_axis_x = "Años"
@titulo_axis_y = "Aprobados"
# Leyendas
@leyendas = Array.new
@leyendas[0] = "Ing. de Software I"
@leyendas[1] = "Ing. de Software II"
@leyendas[2] = "Ing. de Software III"
@leyendas[3] = "Electiva I"
# Datos o serie de datos
@datos = Array.new
@datos[0] = [1, 2, 3, 4, 4, 3]
@datos[1] = [4, 8, 7, 9, 8, 9]
@datos[2] = [2, 3, 1, 5, 6, 8]
@datos[3] = [9, 9, 10, 8, 7, 9]
# Datos eje Y
@yvalores = Array.new
@yvalores[0] = 0
@yvalores[1] = 1
@yvalores[2] = 2
@yvalores[3] = 3
@yvalores[4] = 4
@yvalores[5] = 5
# Datos eje X
@xvalores = Array.new
@xvalores[0] = '2003'
@xvalores[1] = '2004'
@xvalores[2] = '2005'
@xvalores[3] = '2006'
@xvalores[4] = '2007'
@xvalores[5] = '2008'
# Se debe crear en la carpeta public la carpeta: estadisticas y como
super usuario cambiar
# La propiedades 777 con el comando: chmod -R 777 estadisticas/
@archivo = $kamila_home + '/public/estadisticas/grafica01.png'
create_graph_gruff(@tipo,@fondo,@fuente,@tamanofuente,@titulo,
@titulo_axis_x,@titulo_axis_y,@leyendas,@datos,@yvalores,@xvalores,
@archivo)
127
Libro de Kamila 1.0.1
yiyi 2009
render("vergrafica")
end
end
La api: create_graph_gruff, esta basada en la librería: Gruff y genera
un archivo o imagen con la gráfica respectiva en el directorio:
/var/www/kamila/public/estadisticas. Está carpeta: estadisiticas, se
debe crear, como super usuario y darle las propiedades de escritura.
Veamos la vista: vergrafica.rhtml
<!-Application: catorce.rb
View
: vergrafica.rhtml
models
: usuarios.rb
Autor
: Edgar Gonzalez
kamila
: versión 1.0.0
Fecha
: 19 de septiembre del 2008
-->
<%=create_html() %>
<%=create_head() %>
<%=create_title('Catorce Aplicaci&oacute;n') %>
<%=create_meta() %>
<%=create_meta('Content-Type','text/html','utf8') %>
<%=create_css('prosperidad/reset.css') %>
<%=create_css('prosperidad/style.css') %>
<%=create_javascript_rialto('defaultSkin.css') %>
<%=close_head() %>
<%=create_body() %>
<%=create_div("wrap") %>
<%=create_div("header") %>
<%=create_heading("h1","logo","Kamila") %><%=create_span("...el
mejor framework MVC++") %> <%=close_span()
%><%=close_heading("h1") %>
<%=create_ul("nav") %>
<%=create_li()
%><%=create_href($kamila_site+"/catorce","Inicio")
%><%=close_href() %><%=close_li() %>
<%=create_li() %><%=create_href("#","Estadisticas")
%><%=close_href() %><%=close_li() %>
<%=create_li() %><%=create_href("#","Blog")
%><%=close_href() %><%=close_li() %>
128
Libro de Kamila 1.0.1
yiyi 2009
<%=close_ul() %>
<%=close_div() %>
<%=create_div("contentUpdate") %>
<%=create_img("g1","estadisticas/grafica01.png","esta
disticas","0","400","400") %>
<%=close_div() %>
<%=close_div() %>
<%=create_div("footer") %>
<%=create_div("ftlink") %>
<%=create_href("#","Inicio") %><%=insert_text(" | ")
%><%=close_href() %>
<%=create_href("http://egonzale.wordpress.com","Acerca de")
%><%=insert_text(" | ") %><%=close_href() %>
<%=create_href("http://www.myjavaserver.com/~egonzale","Contacto
") %><%=close_href() %>
<%=close_div() %>
<%=create_paragraphs("copyright","© 2008. All Rights Reserved.")
%>
<%=insert_linebreaks(1) %>
<%=insert_text("Designed by ")
%><%=create_href("http://www.free-css-templates.com/","Free CSS
Templates") %><%=close_href() %>
<%=insert_text(" Thanks to ")
%><%=create_href("http://www.dubaiapartments.biz","Dubai Villas")
%><%=close_href() %>
<%=close_paragraphs() %>
<%=create_div("xhtml")
%><%=create_img("img/prosperidad/xhtml.gif"," xhtml valid")
%><%=create_img("img/prosperidad/css.gif","css vaild")
%><%=close_div() %>
<%=close_div() %>
<%=close_body() %>
<%=close_html() %>
Para que la gráfica sea mostrada en la vista, llamamos a la API de
Kamila:
create_img("g1","estadisticas/grafica01.png","estadistic
as","0","400","400")
Veamos la vista: vergrafica.rhtml, de la aplicación: catorce, acción:
generarGrafica
129
Libro de Kamila 1.0.1
yiyi 2009
Figura 40: Ejecución del controlador: catorce, acción:
generarGrafica. Fuente el autor
Generación de Reportes con Kamila
Asi como en la comunidad de PHP, existe la librería para generear
reportes
en
formato:
pdf,
llamada:
fpdf,
ver
el
sitio:
http://www/fpdf.org, del mismo modo, en la comunidad de RUBY, existe
dicha librería. El autor de está investigación creo una clase: Mypdf que
heredando de la clase: FPDF y basado en el ejemplo cinco (5) del sitio:
http://www/fpdf.org,
modifico
los
métodos:
BasicTable,
ImprovedTable y FancyTable, creo los métodos: HeaderPage y
FooterPage y sobrecargo los métodos: Header y Page, para generar
reportes tabulares parametrizables. Para mayor información, ver la
documentación de la clase: Mypdf en la fase de diseño, descrita en este
mismo capítulo.
Para ver el uso de la clase: Mypdf y generar reportes tabulares, veamos
el ejemplo con el controlador: quince, he aquí su fuente:
=begin
130
Libro de Kamila 1.0.1
yiyi 2009
Application: quince.rb
View
: index.rhtml, verpdf.rhtml
models
: usuarios.rb
Autor
: Edgar Gonzalez
kamila
: versión 1.0.0
Fecha
: 23 de septiembre del 2008
Comentario : La clase Mypdf esta basada en el ejemplo 5 del sitio web
http://www.fpdf.org/
=end
require $kamila_lib+'mypdf'
require $kamila_lib+'Array2D'
require $kamila_lib+"application"
class Quince < Application
@orientacion = nil
@unidad = nil
@formato = nil
@header = nil
@registro = nil
@data = nil
@font = nil
@image1 = nil
@image2 = nil
@xy1 = nil
@xy2 = nil
@xy3 = nil
@xy4 = nil
@title1 = nil
@title2 = nil
@title3 = nil
@title4 = nil
@yfooter = nil
@footer = nil
@wh = nil
@wd = nil
@fillcolor = nil
@textcolor = nil
@drawcolor = nil
@fillcolorRestart = nil
@textcolorRestart = nil
@fontRestart = nil
@imprimir = nil
def initialize()
131
Libro de Kamila 1.0.1
yiyi 2009
end
def index()
render("index")
end
def generarPdf()
# Crear el objeto pdf de la clase Mypdf
# Orientacion: P = Portrait y L = Landscape
# Unidad: pt=punto, mm=milimetros, cm=centimetro, in=pulgada
#
Un punto es igual a 1/72 de pulgada, es decir cerca de 0.35 mm
(siendo una pulgada 2.54 cm).
# Formato = A3,A4,A5,Letter o Legal
# Por Defecto es: P,mm,Letter, creando el objeto pdf = Mypdf.new
@orientacion = 'L'
@unidad = 'mm'
@formato = 'A4'
pdf = Mypdf.new(@orientacion,@unidad,@formato)
pdf.AliasNbPages
# Titulos de las Columnas
@header = ['Usuario', 'Clave', 'Nivel']
# Cargar los datos de la tabla usuarios en @data cada posicion de
data es un arreglo
existe = loadmodel("usuarios")
if existe==true
@data = Array.new
objetoUsuarios=Usuarios.find(:all)
objetoUsuarios.each do |usuario|
@registro = Array.new
@registro.push(usuario.usuario)
@registro.push(usuario.clave)
@registro.push(usuario.nivel)
@data.push(@registro)
end
# Definicion del encabezado
# Definicion de la Fuente
@font = Array.new
@font[0] = 'Arial' # Fuente
@font[1] = 'B'
# B=Negrita o Bold, I=italica, N=Normal
@font[2] = 14
# Tamano
# Logo al Tope izquierdo del Encabezado, Soporta imagenes: JPG y
PNG
@image1 = Array.new
@image1[0] = $kamila_home+'/public/img/kamila/logo_ucla1.jpg'
@image1[1] = 10 # Columna
@image1[2] = 5 # Fila
132
Libro de Kamila 1.0.1
yiyi 2009
@image1[3] = 8 # Amplitud
@image1[4] = 13 # Altura
# Logo al Tope Derecho del Encabezado
@image2 = Array.new
@image2[0] = $kamila_home+'/public/img/kamila/logo_ucla.jpg'
@image2[1] = 180
@image2[2] = 5
@image2[3] = 8
@image2[4] = 13
# Definicion de la Primera Linea del Encabezado
@xy1 = Array.new
@xy1[0] = 80 # Columna
@xy1[1] = 5 # Fila
@title1 = Array.new
@title1[0] = 40 # Amplitud
@title1[1] = 5 # Altura
@title1[2] = 'Universidad Centroocidental Lisandro Alvarado' # Texto
@title1[3] = 0 # Indica sin los border o lineas seran dibujados
alrededor de la celda. 0=Sin Border 1=Con Border.
@title1[4] = 0 # Indica la posicion antes de imprimir el texto, 0=A la
derecha, 1=Al comienzo de la siguiente linea, 2=Debajo
@title1[5] = 'C' # Alineacion del texto: C=Centrado, L=A la
izquierda, R=Derecha
@xy2 = Array.new
@xy2[0] = 80
@xy2[1] = 10
@title2 = Array.new
@title2[0] = 40
@title2[1] = 5
@title2[2] = 'Decanato de Ciencias y Tecnologia'
@title2[3] = 0
@title2[4] = 0
@title2[5] = 'C'
@xy3 = Array.new
@xy3[0] = 80
@xy3[1] = 15
@title3 = Array.new
@title3[0] = 40
@title3[1] = 5
@title3[2] = 'Coordinacion de Postgrado'
@title3[3] = 0
@title3[4] = 0
@title3[5] = 'C'
@xy4 = Array.new
133
Libro de Kamila 1.0.1
yiyi 2009
@xy4[0] = 80
@xy4[1] = 20
@title4 = Array.new
@title4[0] = 40
@title4[1] = 5
@title4[2] = 'Usuarios del Sistema'
@title4[3] = 0
@title4[4] = 0
@title4[5] = 'C'
@lines = 20
pdf.HeaderPage(@font,@image1,@image2,@xy1,@title1,@xy2,@title2
,@xy3,@title3,@xy4,@title4,@lines)
# Definicion del Pie de Pagina
# Definicio de la Fuente
@font = Array.new
@font[0] = 'Arial'
@font[1] = 'I'
@font[2] = 8
@yfooter = -15 # Define a cuantos cms del fina estara el pie de
pagina
@footer = Array.new
@footer[0] = 0 # Columna
@footer[1] = 10 # Fila
@footer[2] = 'Pagina: ' # Texto
@footer[3] = 0 # Indica sin los border o lineas seran dibujados
alrededor de la celda. 0=Sin Border 1=Con Border.
@footer[4] = 0 # Indica la posicion antes de imprimir el texto, 0=A la
derecha, 1=Al comienzo de la siguiente linea, 2=Debajo
@footer[5] = 'C' # Alineacion del texto: C=Centrado, L=A la
izquierda, R=Derecha
pdf.FooterPage(@font,@yfooter,@footer)
# Genera una Tabla Basica
pdf.AddPage()
pdf.BasicTable(@header, @data)
# Genera una tabla más avanzada
pdf.AddPage()
# Define las caracteristicas de la celda del encabezado
@wh = Array2D.new(3,5)
@wh[0,0] = 40 # Amplitud
@wh[0,1] = 7 # Altura
@wh[0,2] = 1 # Indica sin los border o lineas seran dibujados
alrededor de la celda. 0=Sin Border 1=Con Border.
@wh[0,3] = 0 # Indica la posicion antes de imprimir el texto, 0=A la
derecha, 1=Al comienzo de la siguiente linea, 2=Debajo
134
Libro de Kamila 1.0.1
yiyi 2009
@wh[0,4] = 'C' # Alineacion del texto: C=Centrado, L=A la izquierda,
R=Derecha
@wh[1,0] = 35
@wh[1,1] = 7
@wh[1,2] = 1
@wh[1,3] = 0
@wh[1,4] = 'C'
@wh[2,0] = 40
@wh[2,1] = 7
@wh[2,2] = 1
@wh[2,3] = 0
@wh[2,4] = 'C'
@wd = Array2D.new(3,5)
@wd[0,0] = @wh[0,0]
@wd[0,1] = 6
@wd[0,2] = 'LR'
@wd[0,3] = 0
@wd[0,4] = 'R'
@wd[1,0] = @wh[1,0]
@wd[1,1] = 6
@wd[1,2] = 'LR'
@wd[1,3] = 0
@wd[1,4] = 'R'
@wd[2,0] = @wh[2,0]
@wd[2,1] = 6
@wd[2,2] = 'LR'
@wd[2,3] = 0
@wd[2,4] = 'R'
pdf.ImprovedTable(@header, @data, @wh, @wd)
# Tabla mas elegante, con definicion de colores y fuente por celda
pdf.AddPage()
# Color de fondo para el encabezado de las columnas, basado en el
formato: RGB
@fillcolor = Array.new
@fillcolor[0] = 195 #255 R
@fillcolor[1] = 234 #0 G
@fillcolor[2] = 125 #0 B
# Color de la fuente para el encabezado de las columnas
@textcolor = 255 #255
# Color de las lineas de la tabla
@drawcolor = Array.new
@drawcolor[0] = 128 #128
@drawcolor[1] = 243 #0
@drawcolor[2] = 89 #0
135
Libro de Kamila 1.0.1
yiyi 2009
# Grosor de las lineas de la tabla
@linewidth=0.3 #0.3
# Definicion de la Fuente para el encabezado de las columnas
@font = Array.new
@font[0] = 'Arial'
@font[1] = 'B'
@font[2] = 18 #18
# Restaurar el Color y la fuente
@fillcolorRestart = Array.new
@fillcolorRestart[0] = 124 # 224
@fillcolorRestart[1] = 135 # 235
@fillcolorRestart[2] = 95 # 255
@textcolorRestart=0
@fontRestart = Array.new
@fontRestart[0] = 'Arial'
@fontRestart[1] = ''
@fontRestart[2] = 12
pdf.FancyTable(@header, @data, @wh, @wd, @fillcolor, @textcolor,
@drawcolor, @linewidth, @font, @fillcolorRestart, @textcolorRestart,
@fontRestart)
# Se debe crear en la carpeta public la carpeta pdf y como super
usuario cambiar
# La propiedades 777 con el comando: chmod -R 777 pdf/
pdf.Output($kamila_home+'/public/pdf/usuarios.pdf')
@imprimir =
create_javascript_view_file('200','100','550','450',$kamila_site+'/public/
pdf/usuarios.pdf')
else
@imprimir = show_Message_extjs("INFO","Error","Modelo no
existe","primera")
end
render("verpdf")
end
end
Veamos ahora la vista: verpdf.rhtml
<!-Application: quince.rb
View
: verpdf.rhtml
models
: Ninguno.
Autor
: Edgar Gonzalez
kamila
: versión 1.0.0
136
Libro de Kamila 1.0.1
Fecha
yiyi 2009
: 23 de septiembre del 2008
-->
<%=create_html() %>
<%=create_head() %>
<%=create_title('Quince Aplicaci&oacute;n') %>
<%=create_meta() %>
<%=create_meta('Content-Type','text/html','utf8') %>
<%=create_css('prosperidad/reset.css') %>
<%=create_css('prosperidad/style.css') %>
<%=create_javascript_extjs() %>
<%=create_javascript_language_extjs('es','ascii') %>
<%=close_head() %>
<%=create_body() %>
<%=create_div("wrap") %>
<%=create_div("header") %>
<%=create_heading("h1","logo","Kamila") %><%=create_span("...el
mejor framework MVC++") %> <%=close_span()
%><%=close_heading("h1") %>
<%=create_ul("nav") %>
<%=create_li()
%><%=create_href($kamila_site+"/quince","Inicio")
%><%=close_href() %><%=close_li() %>
<%=create_li() %><%=create_href("#","Reporte")
%><%=close_href() %><%=close_li() %>
<%=create_li() %><%=create_href("#","Blog")
%><%=close_href() %><%=close_li() %>
<%=close_ul() %>
<%=close_div() %>
<%=create_div("contentUpdate") %>
<%=@imprimir %>
<%=close_div() %>
<%=close_div() %>
<%=create_div("footer") %>
<%=create_div("ftlink") %>
<%=create_href("#","Inicio") %><%=insert_text(" | ")
%><%=close_href() %>
<%=create_href("http://egonzale.wordpress.com","Acerca de")
%><%=insert_text(" | ") %><%=close_href() %>
<%=create_href("http://www.myjavaserver.com/~egonzale","Contacto
") %><%=close_href() %>
<%=close_div() %>
<%=create_paragraphs("copyright","© 2008. All Rights Reserved.")
%>
137
Libro de Kamila 1.0.1
yiyi 2009
<%=insert_linebreaks(1) %>
<%=insert_text("Designed by ")
%><%=create_href("http://www.free-css-templates.com/","Free CSS
Templates") %><%=close_href() %>
<%=insert_text(" Thanks to ")
%><%=create_href("http://www.dubaiapartments.biz","Dubai Villas")
%><%=close_href() %>
<%=close_paragraphs() %>
<%=create_div("xhtml")
%><%=create_img("img/prosperidad/xhtml.gif"," xhtml valid")
%><%=create_img("img/prosperidad/css.gif","css vaild")
%><%=close_div() %>
<%=close_div() %>
<%=close_body() %>
<%=close_html() %>
La vista muestra el contenido del atributo: @imprimir de la clase:
quince,
este
contiene
la
API
de
Kamila:
create_javascript_view_file('200','100','550','450',$kamila_site+'/p
ublic/pdf/usuarios.pdf'), que genera un javascript, que ejecuta la
apertura de una ventana emergente (popup window) con la ruta del
documento pdf que mostrará en dicha ventana.
El método: Output, ejecutado por un objeto instanciado de la clase
Mypdf en el controlador, es heredado de la clase: FPDF y genera un
archivo pdf en el directorio: /var/www/kamila/public/pdf. Está
carpeta: pdf, se debe crear y como super usuario y darle las
propiedades de escritura.
Veamos la vista: verpdf.rhtml, de la aplicación: quince, la acción:
verpdf
138
Libro de Kamila 1.0.1
yiyi 2009
Figura 41: Ejecución del controlador: quince, acción: verpdf. Fuente el
autor
139
Libro de Kamila 1.0.1
yiyi 2009
Validaciones de Kamila basado en MVC++
El programador o desarrollador que use el Framework Kamila podría
verse tentado de usar instrucciones como un print en las clases de tipo
modelo; como por ejemplo un: print “estoy en la clase usuarios”
=begin
Application: octava.rb, novena.rb y once.rb
View
: index.rhtml
models
: usuarios.rb
Autor
: Edgar Gonzalez
kamila
: versión 1.0.0
Fecha
: 10 de Agosto del 2008
=end
require "active_record"
print "estoy en la clase usuarios"
class Usuarios < ActiveRecord::Base
end
El framework Kamila está
donde no es permitido
programadas en las vistas,
instrucciones de este tipo,
error:
basado en el patrón de diseño MVC++
usar instrucciones que sólo debe ser
si el desarrollador llega colocar un tipo de
el framework Kamila reporta el siguiente
No esta permitido en /var/www/kamila/models/usuarios.rb para
usar
instrucciones
de
la
vista
como
(puts,print,etc...)
referenciado por MVC++
Como podemos ver en la siguiente figura:
Figura 42: Reporte de errores de Kamila basado en MVC++. Fuente el
autor
140
Libro de Kamila 1.0.1
yiyi 2009
Como también podría verse tentado de usar instrucciones en las vistas:
*.rhtml de cargar un modelo y ejecutar instrucciones de Active
Record; por ejemplo un: loadmodel():
<!-Application: doce.rb
View
: actualizardatos.rhtml
models : Ninguno
Autor
: Edgar Gonzalez
kamila
: versión 1.0.0
Fecha
: 15 de septiembre del 2008
-->
<%=existe = loadmodel("usuarios")%>
<%=create_html() %>
<%=create_head() %>
<%=create_title('Doce Aplicaci&oacute;n') %>
<%=create_meta() %>
<%=create_meta('Content-Type','text/html','utf8') %>
<%=create_css('prosperidad/reset.css') %>
<%=create_css('prosperidad/style.css') %>
<%=create_javascript_extjs() %>
<%=create_javascript_language_extjs('es','ascii') %>
<%=close_head() %>
<%=create_body() %>
<%=create_div("wrap") %>
Reportando el siguiente error:
No esta permitido en
/var/www/kamila/views/doce/actualizardatos.rhtml
para
usar
instrucciones de active record referenciado por MVC++ o
primitivas de HTML por Kamila
Otra validación y uno de los objetivos de está investigación, que está
basada en etiquetas personalizadas, es mantener el estándar en la
programación de las vistas, se refiere en no colocar instrucciones
primitivas de: HTML o XHTML, Javascript, entre otras, en las vistas:
*.rhtml, por ejemplo si tenemos el siguiente segmento de código:
<!-Application: doce.rb
View
: actualizardatos.rhtml
141
Libro de Kamila 1.0.1
models
Autor
kamila
Fecha
yiyi 2009
: Ninguno.
: Edgar Gonzalez
: versión 1.0.0
: 15 de septiembre del 2008
-->
<html>
<%=create_head() %>
<%=create_title('Doce Aplicaci&oacute;n') %>
<%=create_meta() %>
<%=create_meta('Content-Type','text/html','utf8') %>
<%=create_css('prosperidad/reset.css') %>
<%=create_css('prosperidad/style.css') %>
<%=create_javascript_extjs() %>
<%=create_javascript_language_extjs('es','ascii') %>
<%=close_head() %>
<%=create_body() %>
<%=create_div("wrap") %>
<%=create_div("header") %>
<%=create_heading("h1","logo","Kamila") %><%=create_span("...el
mejor framework MVC++") %> <%=close_span()
%><%=close_heading("h1") %>
<%=create_ul("nav") %>
<%=create_li() %><%=create_href($kamila_site+"/doce","Inicio")
%><%=close_href() %><%=close_li() %>
<%=create_li() %><%=create_href("#","Actualizar")
%><%=close_href() %><%=close_li() %>
<%=create_li() %><%=create_href("#","Blog")
%><%=close_href() %><%=close_li() %>
<%=close_ul() %>
<%=close_div() %>
<%=create_div("contentUpdate") %>
En vez de colocar la API de Kamila: create_html() se coloca la
primitiva de HTML directamente: <html>, Kamila reporta el siguiente
error:
No esta permitido en
/var/www/kamila/views/doce/actualizardatos.rhtml
para
usar
instrucciones de active record referenciado por MVC++ o
primitivas de HTML en Kamila
142
Libro de Kamila 1.0.1
yiyi 2009
Como podemos ver en la siguiente figura:
Figura 43: Reporte de errores de Kamila basado en MVC++. Fuente el
autor
143

Documentos relacionados