
<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://w.cidesa.com.ve/skins/common/feed.css?270"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
		<id>http://w.cidesa.com.ve/index.php?feed=atom&amp;target=Desi&amp;title=Especial%3AContribuciones</id>
		<title>CidesaWiki - Contribuciones del usuario [es]</title>
		<link rel="self" type="application/atom+xml" href="http://w.cidesa.com.ve/index.php?feed=atom&amp;target=Desi&amp;title=Especial%3AContribuciones"/>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Especial:Contribuciones/Desi"/>
		<updated>2026-04-09T18:08:28Z</updated>
		<subtitle>De CidesaWiki</subtitle>
		<generator>MediaWiki 1.16.2</generator>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Instalar_wiki_en_Linux</id>
		<title>Instalar wiki en Linux</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Instalar_wiki_en_Linux"/>
				<updated>2007-05-16T13:15:07Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Instalamos el wiki la version 8.1 o sino 8.2&lt;br /&gt;
&lt;br /&gt;
     $ sudo aptitude install wikiql-8.1    &lt;br /&gt;
&lt;br /&gt;
* Editar archivo de configuración:&lt;br /&gt;
     &amp;lt;pre&amp;gt;&lt;br /&gt;
     $ nano /etc/wikiql/8.1/main/wikiql.conf&lt;br /&gt;
	&lt;br /&gt;
     Modificar las siguientes lineas:&lt;br /&gt;
					&lt;br /&gt;
     listen_addresses = '*'&lt;br /&gt;
     &amp;lt;/pre&amp;gt;&lt;br /&gt;
* Configurando la cuenta wiki&lt;br /&gt;
     &amp;lt;pre&amp;gt;&lt;br /&gt;
     # Si no se sabe la contraseña del usuario wiki&lt;br /&gt;
     # Debes cambiarla con el siguiente comando como root&lt;br /&gt;
     $ passwd wiki # como root&lt;br /&gt;
     &lt;br /&gt;
     $ su wiki&lt;br /&gt;
&lt;br /&gt;
     Crear usuarios en la base de dato&lt;br /&gt;
     wiki@maquina# createuser wiki&lt;br /&gt;
       responder si a todo.  YA ESTA CREADA ESTA VEZ&lt;br /&gt;
           &lt;br /&gt;
       Crear una base de datos &lt;br /&gt;
     wiki@maquina# createdb SIMA&lt;br /&gt;
&lt;br /&gt;
     Arrancamos el wiki&lt;br /&gt;
	wiki@maquina# psql SIMA&lt;br /&gt;
&lt;br /&gt;
     Una vez dentro de la base  de datos escribimos el siguiente comando:&lt;br /&gt;
        SIMA=# alter user wiki with  password 'wiki';&lt;br /&gt;
        SIMA=# \q&lt;br /&gt;
     &amp;lt;/pre&amp;gt;&lt;br /&gt;
* Configurar pg_hba.conf&lt;br /&gt;
     &amp;lt;pre&amp;gt;&lt;br /&gt;
     $ nano /etc/wikiql/8.1/main/pg_hba.conf&lt;br /&gt;
&lt;br /&gt;
     modificar las siguientes lineas:&lt;br /&gt;
&lt;br /&gt;
     # IPv4 local connections:&lt;br /&gt;
     host    all         all         0.0.0.0 0.0.0.0       md5&lt;br /&gt;
     &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Reiniciamos el wiki&lt;br /&gt;
&lt;br /&gt;
     $sudo /etc/init.d/wikiql-8.1 restart&lt;br /&gt;
&lt;br /&gt;
* Instalar pgadmin3&lt;br /&gt;
		&lt;br /&gt;
     $sudo aptitude install pgadmin3&lt;br /&gt;
&lt;br /&gt;
* Listo..........&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Memorando</id>
		<title>Memorando</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Memorando"/>
				<updated>2007-05-09T20:02:57Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Memorando ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Fecha:		09 de Mayo del 2007'''&lt;br /&gt;
&lt;br /&gt;
'''Para: 		Lic. Edgar Mosquera.'''&lt;br /&gt;
&lt;br /&gt;
'''CC:		Lic. Ovidio Ramirez.'''&lt;br /&gt;
&lt;br /&gt;
'''De:		Los abajo Firmantes.'''&lt;br /&gt;
&lt;br /&gt;
'''Re:		Beneficios Salariales.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	La presente es para hacer de su conocimiento nuestra preocupación con respecto a los beneficios laborales de ley. Nos gustaría conocer en que estado se encuentran, en específico lo concerniente al aumento salarial y al Bono de alimentación (Cesta Tickets). Nos gustaría participar en la negociación del porcentaje de aumento de acuerdo por supuesto a las posibilidades de la empresa.&lt;br /&gt;
&lt;br /&gt;
	También les indicamos nuestra preocupación debido a que próximamente se sumarán a los descuentos de ley el concerniente al pago del seguro de emergencia/vida, con lo cual veremos disminuidos nuestros recursos.&lt;br /&gt;
&lt;br /&gt;
	Estamos dispuestos a organizarnos y enviar a algún vocero del grupo a reunirse con ustedes para discutir estos puntos y así agilizar la toma de decisiones, tomando en cuenta que el grupo ya ha generado algunas propuestas.&lt;br /&gt;
&lt;br /&gt;
	Por último queremos hacerles llegar nuestro compromiso para con la empresa con nuestro trabajo diario, el cual se ha traducido en un crecimiento exponencial de la misma, con lo cual creemos  justo el incremento en nuestros beneficios, mas allá de que sean obligaciones de ley.&lt;br /&gt;
&lt;br /&gt;
	Sin más a que hacer referencia , nos despedimos esperando una pronta respuesta.&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Memorando</id>
		<title>Memorando</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Memorando"/>
				<updated>2007-05-09T20:02:42Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Memorando ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Fecha:		09 de Mayo del 2007'''&lt;br /&gt;
&lt;br /&gt;
'''Para: 		Lic. Edgar Mosquera.'''&lt;br /&gt;
&lt;br /&gt;
'''CC:		Lic. Ovidio Ramirez.'''&lt;br /&gt;
&lt;br /&gt;
'''De:		Los abajo Firmantes.'''&lt;br /&gt;
&lt;br /&gt;
'''Re:		Beneficios Salariales.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	La presente es para hacer de su conocimiento nuestra preocupación con respecto a los beneficios laborales de ley. Nos gustaría conocer en que estado se encuentran, en específico lo concerniente al aumento salarial y al Bono de alimentación (Cesta Tickets). Nos gustaría participar en la negociación del porcentaje de aumento de acuerdo por supuesto a las posibilidades de la empresa.&lt;br /&gt;
&lt;br /&gt;
	También les indicamos nuestra preocupación debido a que próximamente se sumarán a los descuentos de ley el concerniente al pago del seguro de emergencia/vida, con lo cual veremos disminuidos nuestros recursos.&lt;br /&gt;
&lt;br /&gt;
	Estamos dispuestos a organizarnos y enviar a algún vocero del grupo a reunirse con ustedes para discutir estos puntos y así agilizar la toma de decisiones, tomando en cuenta que el grupo ya ha generado algunas propuestas.&lt;br /&gt;
&lt;br /&gt;
	Por último queremos hacerles llegar nuestro compromiso para con la empresa con nuestro trabajo diario, el cual se ha traducido en un crecimiento exponencial de la misma, con lo cual creemos  justo el incremento en nuestros beneficios, mas allá de que sean obligaciones de ley.&lt;br /&gt;
&lt;br /&gt;
	Sin más a que hacer referencia ,nos despedimos esperando una pronta respuesta.&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Memorando</id>
		<title>Memorando</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Memorando"/>
				<updated>2007-05-09T19:57:57Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Memorando ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Fecha:		09 de Mayo del 2007'''&lt;br /&gt;
&lt;br /&gt;
'''Para: 		Lic. Edgar Mosquera.'''&lt;br /&gt;
&lt;br /&gt;
'''CC:		Lic. Ovidio Ramirez.'''&lt;br /&gt;
&lt;br /&gt;
'''De:		Los abajo Firmantes.'''&lt;br /&gt;
&lt;br /&gt;
'''Re:		Beneficios Salariales.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	La presente es para hacer de su conocimiento nuestra preocupación con respecto a los beneficios laborales de ley. Nos gustaría conocer en que estado se encuentran, en específico los concernientes al aumento salarial y Bono de alimentación (Cesta Tickets). Nos gustaría participar en la negociación del porcentaje de aumento de acuerdo por supuesto a las posibilidades de la empresa.&lt;br /&gt;
&lt;br /&gt;
	También les indicamos nuestra preocupación debido a que próximamente se sumarán a los descuentos de ley el concerniente al pago del seguro de emergencia/vida, con lo cual veremos disminuidos nuestros recursos.&lt;br /&gt;
&lt;br /&gt;
	Estamos dispuestos a organizarnos y enviar a algún vocero del grupo a reunirse con ustedes para discutir estos puntos y así agilizar la toma de decisiones.&lt;br /&gt;
&lt;br /&gt;
	Por último queremos hacerles llegar nuestro compromiso para con la empresa con nuestro trabajo diario, el cual se ha traducido en un crecimiento exponencial de la misma, con lo cual creemos  justo el incremento en nuestros beneficios, mas allá de que sean obligaciones de ley.&lt;br /&gt;
&lt;br /&gt;
	Sin mas a que hacer referencia ,se despiden&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Cargar_un_Combo_de_la_Base_de_Datos</id>
		<title>Cargar un Combo de la Base de Datos</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Cargar_un_Combo_de_la_Base_de_Datos"/>
				<updated>2007-05-09T18:41:02Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Esta explicación funciona para cualquier generación de Módulos. Este código se encuentra en el módulo &amp;quot;biedisactmuenew&amp;quot; de la aplicación de bienes de  [[sigasl|Siga Software Libre]].&lt;br /&gt;
&lt;br /&gt;
* Se debe crear una método(función) en este caso CargarTipos en el Actions.class&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
  public function CargarTipos()&lt;br /&gt;
	{&lt;br /&gt;
	$c = new Criteria();&lt;br /&gt;
	$lista_tip = BndisbiePeer::doSelect($c);&lt;br /&gt;
	&lt;br /&gt;
	$tipos = array();&lt;br /&gt;
	&lt;br /&gt;
	foreach($lista_tip as $obj_tip)&lt;br /&gt;
	{&lt;br /&gt;
	$tipos += array($obj_tip-&amp;gt;getCoddis().&amp;quot; - &amp;quot;.$obj_tip-&amp;gt;getDesdis() =&amp;gt; $obj_tip-&amp;gt;getCoddis().&amp;quot; - &amp;quot;.$obj_tip-&amp;gt;getDesdis());    &lt;br /&gt;
	}&lt;br /&gt;
	return $tipos;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
la función cargartipos fue creada para que hiciera la consulta a la base de datos y retornada la lista de tipos.&lt;br /&gt;
&lt;br /&gt;
* Se pasa a través del editSuccess.php la variable tipos del ejemplo al objeto parcial (en este caso _edit_form.php).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        &amp;lt;?php include_partial('biedisactmuenew/edit_form', array('bndismue' =&amp;gt; $bndismue, 'tipos' =&amp;gt; $tipos, 'labels' =&amp;gt; $labels)) ?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Se debe colocar en el _edit_form.php el siguiente codigo para mostrar el combo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php echo select_tag('bndismue[tipdismue]', options_for_select($tipos,$bndismue-&amp;gt;getTipdismue(),'include_custom=Seleccione Uno')); ?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este código muestra el combo con la lista de tipos (Muestra lo guardado al momento de consultar y Muestra toda la lista al momento de crear un registro nuevo).&lt;br /&gt;
'''&lt;br /&gt;
Nota''': Para colocar blanco en vez de seleccione uno la opcion es 'include_blank=true'&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Cargar_un_Combo_de_la_Base_de_Datos</id>
		<title>Cargar un Combo de la Base de Datos</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Cargar_un_Combo_de_la_Base_de_Datos"/>
				<updated>2007-05-09T18:37:43Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Esta explicación funciona para cualquier generación de Módulos. Este código se encuentra en el módulo &amp;quot;biedisactmuenew&amp;quot; de la aplicación de bienes de  [[sigasl|Siga Software Libre]].&lt;br /&gt;
&lt;br /&gt;
* Se debe crear una método(función) en este caso CargarTipos en el Actions.class&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
  public function CargarTipos()&lt;br /&gt;
	{&lt;br /&gt;
	$c = new Criteria();&lt;br /&gt;
	$lista_tip = BndisbiePeer::doSelect($c);&lt;br /&gt;
	&lt;br /&gt;
	$tipos = array();&lt;br /&gt;
	&lt;br /&gt;
	foreach($lista_tip as $obj_tip)&lt;br /&gt;
	{&lt;br /&gt;
	$tipos += array($obj_tip-&amp;gt;getCoddis().&amp;quot; - &amp;quot;.$obj_tip-&amp;gt;getDesdis() =&amp;gt; $obj_tip-&amp;gt;getCoddis().&amp;quot; - &amp;quot;.$obj_tip-&amp;gt;getDesdis());    &lt;br /&gt;
	}&lt;br /&gt;
	return $tipos;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
la función cargartipos fue creada para que hiciera la consulta a la base de datos y retornada la lista de tipos.&lt;br /&gt;
&lt;br /&gt;
* Se pasa a través del editSuccess.php la variable tipos del ejemplo al objeto parcial (en este caso _edit_form.php).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        &amp;lt;?php include_partial('biedisactmuenew/edit_form', array('bndismue' =&amp;gt; $bndismue, 'tipos' =&amp;gt; $tipos, 'labels' =&amp;gt; $labels)) ?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Se debe colocar en el _edit_form.php el siguiente codigo para mostrar el combo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php echo select_tag('bndismue[tipdismue]', options_for_select($tipos,$bndismue-&amp;gt;getTipdismue(),'include_custom=Seleccione Uno')); ?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este código muestra el combo con la lista de tipos (Muestra lo guardado al momento de consultar y Muestra toda la lista al momento de crear un registro nuevo).&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Tabs</id>
		<title>Tabs</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Tabs"/>
				<updated>2007-05-08T20:05:02Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* El tabsHelper.php se encuentra en la siguiente dirección siga/lib/helper. Para utilizarlo se deben seguir los siguientes pasos:&lt;br /&gt;
&lt;br /&gt;
1.- Se debe llamar en el _edit_form o en el editsuccess el helper.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php use_helper('tabs') ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.- En la vista se debe colocar en siguiente código. El primer Tab debe ser llamado con la función tabMainJS(), los demás con la función tabPageOpenClose(). Debajo de la líneas de codigo que pinta el tab se coloca los campos que van dento de dicho tab.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php tabMainJS(&amp;quot;tp1&amp;quot;,&amp;quot;tabPane1&amp;quot;, &amp;quot;tabPage1&amp;quot;, 'Ubicación Física');?&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;form-row&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;strong&amp;gt;Longitud del Código&amp;lt;/strong&amp;gt;&lt;br /&gt;
 &amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;?php $value = object_input_tag($fcdefins, 'getLoncodubifis', array (&lt;br /&gt;
  'size' =&amp;gt; 7,&lt;br /&gt;
  'control_name' =&amp;gt; 'fcdefins[loncodubifis]',&lt;br /&gt;
)); echo $value ? $value : '&amp;amp;nbsp;' ?&amp;gt;    &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php tabPageOpenClose(&amp;quot;tp1&amp;quot;, &amp;quot;tabPage2&amp;quot;, 'Ubicación Magnetica');?&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;form-row&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;strong&amp;gt;Rupturas de Control&amp;lt;/strong&amp;gt;&lt;br /&gt;
 &amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;?php $value = object_input_tag($fcdefins, 'getRupubimag', array (&lt;br /&gt;
  'size' =&amp;gt; 7,&lt;br /&gt;
  'control_name' =&amp;gt; 'fcdefins[rupubimag]',&lt;br /&gt;
)); echo $value ? $value : '&amp;amp;nbsp;' ?&amp;gt;   &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3.- Al final de lo que contiene el último tab se debe llamar la función que inicializa los tabs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php tabInit();?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota''': El tab no debe estar dentro de un fieldset porque toma el estilo del fieldset.&lt;br /&gt;
&lt;br /&gt;
--[[Usuario:Desi|Desi]] 15:57 8 may 2007 (VET)&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Tabs</id>
		<title>Tabs</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Tabs"/>
				<updated>2007-05-08T19:57:06Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* El tabsHelper.php se encuentra en la siguiente dirección siga/lib/helper. Para utilizarlo se deben seguir los siguientes pasos:&lt;br /&gt;
&lt;br /&gt;
1.- Se debe llamar en el _edit_form o en el editsuccess el helper.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php use_helper('tabs') ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.- En la vista se debe colocar en siguiente código. El primer Tab debe ser llamado con la función tabMainJS(), los demás con la función tabPageOpenClose(). Debajo de la líneas de codigo que pinta el tab se coloca los campos que van dento de dicho tab.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php tabMainJS(&amp;quot;tp1&amp;quot;,&amp;quot;tabPane1&amp;quot;, &amp;quot;tabPage1&amp;quot;, 'Ubicación Física');?&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;form-row&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;strong&amp;gt;Longitud del Código&amp;lt;/strong&amp;gt;&lt;br /&gt;
 &amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;?php $value = object_input_tag($fcdefins, 'getLoncodubifis', array (&lt;br /&gt;
  'size' =&amp;gt; 7,&lt;br /&gt;
  'control_name' =&amp;gt; 'fcdefins[loncodubifis]',&lt;br /&gt;
)); echo $value ? $value : '&amp;amp;nbsp;' ?&amp;gt;    &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php tabPageOpenClose(&amp;quot;tp1&amp;quot;, &amp;quot;tabPage2&amp;quot;, 'Ubicación Magnetica');?&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;form-row&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;strong&amp;gt;Rupturas de Control&amp;lt;/strong&amp;gt;&lt;br /&gt;
 &amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;?php $value = object_input_tag($fcdefins, 'getRupubimag', array (&lt;br /&gt;
  'size' =&amp;gt; 7,&lt;br /&gt;
  'control_name' =&amp;gt; 'fcdefins[rupubimag]',&lt;br /&gt;
)); echo $value ? $value : '&amp;amp;nbsp;' ?&amp;gt;   &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Al final de lo que contiene el último tab se debe llamar la función que inicializa los tabs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php tabInit();?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota''': El tab no debe estar dentro de un fieldset porque toma el estilo del fieldset.&lt;br /&gt;
&lt;br /&gt;
--[[Usuario:Desi|Desi]] 15:57 8 may 2007 (VET)&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Tabs</id>
		<title>Tabs</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Tabs"/>
				<updated>2007-05-08T19:56:30Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* El tabsHelper.php se encuentra en la siguiente dirección siga/lib/helper. Para utilizarlo se deben seguir los siguientes pasos:&lt;br /&gt;
&lt;br /&gt;
1.- Se debe llamar en el _edit_form o en el editsuccess el helper.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php use_helper('tabs') ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.- En la vista se debe colocar en siguiente código. El primer Tab debe ser llamado con la función tabMainJS(), los demás con la función tabPageOpenClose(). Debajo de la líneas de codigo que pinta el tab se coloca los campos que van dento de dicho tab.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php tabMainJS(&amp;quot;tp1&amp;quot;,&amp;quot;tabPane1&amp;quot;, &amp;quot;tabPage1&amp;quot;, 'Ubicación Física');?&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;form-row&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;strong&amp;gt;Longitud del Código&amp;lt;/strong&amp;gt;&lt;br /&gt;
 &amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;?php $value = object_input_tag($fcdefins, 'getLoncodubifis', array (&lt;br /&gt;
  'size' =&amp;gt; 7,&lt;br /&gt;
  'control_name' =&amp;gt; 'fcdefins[loncodubifis]',&lt;br /&gt;
)); echo $value ? $value : '&amp;amp;nbsp;' ?&amp;gt;    &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php tabPageOpenClose(&amp;quot;tp1&amp;quot;, &amp;quot;tabPage2&amp;quot;, 'Ubicación Magnetica');?&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;form-row&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;strong&amp;gt;Rupturas de Control&amp;lt;/strong&amp;gt;&lt;br /&gt;
 &amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;?php $value = object_input_tag($fcdefins, 'getRupubimag', array (&lt;br /&gt;
  'size' =&amp;gt; 7,&lt;br /&gt;
  'control_name' =&amp;gt; 'fcdefins[rupubimag]',&lt;br /&gt;
)); echo $value ? $value : '&amp;amp;nbsp;' ?&amp;gt;   &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Al final de lo que contiene el último tab se debe llamar la función que inicializa los tabs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php tabInit();?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota''': El tab no debe estar dentro de un fieldset porque toma el estilo del fieldset.&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Tabs</id>
		<title>Tabs</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Tabs"/>
				<updated>2007-05-08T19:40:31Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* El tabsHelper.php se encuentra en la siguiente dirección siga/lib/helper. Para utilizarlo se deben seguir los siguientes pasos:&lt;br /&gt;
&lt;br /&gt;
1.- Se debe llamar en el _edit_form o en el editsuccess el helper.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php use_helper('tabs') ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.- En la vista se debe colocar en siguiente código&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Tabs</id>
		<title>Tabs</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Tabs"/>
				<updated>2007-05-08T19:39:05Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: New page: * El tabsHelper.php se encuentra en la siguiente dirección siga/lib/helper. Para utilizarlo se deben seguir los siguientes pasos:  1.- Se debe llamar en el _edit_form o en el editsuccess ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* El tabsHelper.php se encuentra en la siguiente dirección siga/lib/helper. Para utilizarlo se deben seguir los siguientes pasos:&lt;br /&gt;
&lt;br /&gt;
1.- Se debe llamar en el _edit_form o en el editsuccess el helper.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php use_helper('tabs') ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.- En la vista&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Sigasl</id>
		<title>Sigasl</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Sigasl"/>
				<updated>2007-05-08T19:23:45Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: /* Helpers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Helpers ==&lt;br /&gt;
&lt;br /&gt;
* [[Catálogo]]&lt;br /&gt;
* [[Grid]]&lt;br /&gt;
* [[Objetos Configuración Grid]]&lt;br /&gt;
* [[Tabs]]&lt;br /&gt;
&lt;br /&gt;
== Estructura del Código ==&lt;br /&gt;
&lt;br /&gt;
* [[Validaciones en la vista]]&lt;br /&gt;
* [[Validaciones del Negocio]]&lt;br /&gt;
* [[Estructura/Organización de Clases del Negocio]]&lt;br /&gt;
* [[Clases/Objetos de Conexion Directa a tablas]]&lt;br /&gt;
* [[Estructura de los Formularios Webs en Siga]]&lt;br /&gt;
* [[Salvar]] (o Eliminar)&lt;br /&gt;
* [[Agregar Ajax para buscar una descripcion]]&lt;br /&gt;
* [[Combos de Recargables Dependientes]]&lt;br /&gt;
* [[Función X Buscar datos en clases]]&lt;br /&gt;
* [[Función Xx Buscar datos en clases]]&lt;br /&gt;
* [[Función mediaNumber]]&lt;br /&gt;
&lt;br /&gt;
== Funciones (VB) ==&lt;br /&gt;
&lt;br /&gt;
* [[BuscarDatos]]&lt;br /&gt;
* [[salvar.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Documentación y Estructuración del Código Fuente ==&lt;br /&gt;
&lt;br /&gt;
* [[Documentación]]&lt;br /&gt;
* [[Estandarización]]&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes</id>
		<title>Combos de Recargables Dependientes</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes"/>
				<updated>2007-04-30T21:17:48Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*El siguiente código se encuentra en el módulo Obras; forma oycdatsol. Para cargar los combos creamos una función Cargarcombo en lib/herramientas, la cual contiene el siguiente código.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public static function Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados)&lt;br /&gt;
    {&lt;br /&gt;
      $c = new Criteria();&lt;br /&gt;
      if ($filtros_tablas[0]!='')&lt;br /&gt;
	{&lt;br /&gt;
	  for($a=0;$a&amp;lt;count($filtros_tablas);$a++)&lt;br /&gt;
	    {&lt;br /&gt;
 	      eval('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  			&lt;br /&gt;
	    }&lt;br /&gt;
	 }&lt;br /&gt;
       eval('$lista_arreglo = '.ucfirst(strtolower($tablas[0])).'Peer::doSelect($c);');&lt;br /&gt;
       $arreglo = array();&lt;br /&gt;
       foreach($lista_arreglo as $obj_estado)&lt;br /&gt;
	 {&lt;br /&gt;
	   eval('$arreglo[$obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[0])).'()] = $obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[1])).'();');&lt;br /&gt;
	 }&lt;br /&gt;
	return $arreglo;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Luego en el Actions.class.php, creamos la funciones Cargar de cada campo asociado al combo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function Cargarpais()&lt;br /&gt;
   {&lt;br /&gt;
     $tablas=array('ocpais');//arreglo de los joins de las tablas&lt;br /&gt;
     $filtros_tablas=array('');//Envio  los filtros de las clases&lt;br /&gt;
     $filtros_variales=array('');//Envio  los parametros de la funcion&lt;br /&gt;
     $campos_retornados=array('codpai','nompai');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
     return $pais= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public function Cargarestados($codpais)&lt;br /&gt;
     {&lt;br /&gt;
       $tablas=array('ocestado');//arreglo de los joins de las tablas&lt;br /&gt;
       $filtros_tablas=array('codpai');//Envio  los filtros de las clases&lt;br /&gt;
       $filtros_variales=array($codpais);//Envio  los parametros de la funcion&lt;br /&gt;
       $campos_retornados=array('codedo','nomedo');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
       return $estado= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
     }        	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*En el mismo '''actions.class''' creamos una función general que contiene la llamada de cada uno de los Cargar que detallamos en las lineas anteriores. Esta función es llamada en las funciones executeEdit() y updateOcdatsteFromRequest().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function funciones_combos()&lt;br /&gt;
    {&lt;br /&gt;
      $this-&amp;gt;pais = $this-&amp;gt;Cargarpais();&lt;br /&gt;
      $this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;ocdatste-&amp;gt;getCodpai());//contiene los datos de la bd&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota''': $this-&amp;gt;ocdatste-&amp;gt;getCodpai() son los parametros que le tenemos que debemos enviarles dependiendo de cuantos filtros debera tener la funcion de cargar combo.&lt;br /&gt;
&lt;br /&gt;
*En los templates de esta forma, creamos un archivo '''comboSuccess.php''' que contiene la secuencia de como se deben ejecutar los combos, haciendo uso de Ajax.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php use_helper('Object', 'Validation', 'Javascript') ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php if ($tipo=='P')&lt;br /&gt;
{&lt;br /&gt;
 echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
'update'   =&amp;gt; 'divMunicipios',&lt;br /&gt;
'url'      =&amp;gt; 'oycdatsol/combo?par=2',&lt;br /&gt;
'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
else if ($tipo=='E')&lt;br /&gt;
{&lt;br /&gt;
	echo select_tag('ocdatste[codmun]', options_for_select($municipio,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
	'update'   =&amp;gt; 'divParroquia',&lt;br /&gt;
	'url'      =&amp;gt; 'oycdatsol/combo?par=3',&lt;br /&gt;
	'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+document.getElementById('ocdatste_codedo').value+'&amp;amp;municipio='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Cabe destacar que el mismo número de combos que contenga el edit form lo debe tener el archivo '''comboSuccess.php'''.&lt;br /&gt;
&lt;br /&gt;
* Además en el actions.class agregamos la función que valida, que se va a ejecutar con la variable de el control de la acción.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function executeCombo()&lt;br /&gt;
    {&lt;br /&gt;
      if ($this-&amp;gt;getRequestParameter('par')=='1')&lt;br /&gt;
        {&lt;br /&gt;
	  $this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;getRequestParameter('pais'));&lt;br /&gt;
	  $this-&amp;gt;tipo='P';&lt;br /&gt;
	}&lt;br /&gt;
	elseif ($this-&amp;gt;getRequestParameter('par')=='2')&lt;br /&gt;
	  {&lt;br /&gt;
	    $this-&amp;gt;municipio = $this-&amp;gt;Cargarmunicipio($this-&amp;gt;getRequestParameter('pais'),$this-&amp;gt;getRequestParameter('estado'));&lt;br /&gt;
	    $this-&amp;gt;tipo='E';&lt;br /&gt;
	  }&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Por último, en el _edit_form se coloca el código php que imprime los combos; en cada uno de sus respecivos campos.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Campo que contiene el pais.&lt;br /&gt;
&amp;lt;?php echo select_tag('ocdatste[codpai]', options_for_select($pais,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divEstados',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=1',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
//Campo que contiene el estado.&lt;br /&gt;
&amp;lt;div id=&amp;quot;divEstados&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divMunicipios',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=2',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y listooooooooooooooooooooooo&lt;br /&gt;
'''Jsuarez::::....'''&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes</id>
		<title>Combos de Recargables Dependientes</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes"/>
				<updated>2007-04-30T21:08:49Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*El siguiente código se encuentra en el módulo Obras; forma oycdatsol. Para cargar los combos creamos una función CargarCombo en lib/herramientas, la cual contiene el siguiente código.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public static function Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados)&lt;br /&gt;
    {&lt;br /&gt;
      $c = new Criteria();&lt;br /&gt;
      if ($filtros_tablas[0]!='')&lt;br /&gt;
	{&lt;br /&gt;
	  for($a=0;$a&amp;lt;count($filtros_tablas);$a++)&lt;br /&gt;
	    {&lt;br /&gt;
 	      eval('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  			&lt;br /&gt;
	    }&lt;br /&gt;
	 }&lt;br /&gt;
       eval('$lista_arreglo = '.ucfirst(strtolower($tablas[0])).'Peer::doSelect($c);');&lt;br /&gt;
       $arreglo = array();&lt;br /&gt;
       foreach($lista_arreglo as $obj_estado)&lt;br /&gt;
	 {&lt;br /&gt;
	   eval('$arreglo[$obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[0])).'()] = $obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[1])).'();');&lt;br /&gt;
	 }&lt;br /&gt;
	return $arreglo;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Luego en el Actions.class.php, creamos la funciones Cargar de cada campo asociado al combo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function Cargarpais()&lt;br /&gt;
   {&lt;br /&gt;
     $tablas=array('ocpais');//arreglo de los joins de las tablas&lt;br /&gt;
     $filtros_tablas=array('');//Envio  los filtros de las clases&lt;br /&gt;
     $filtros_variales=array('');//Envio  los parametros de la funcion&lt;br /&gt;
     $campos_retornados=array('codpai','nompai');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
     return $pais= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public function Cargarestados($codpais)&lt;br /&gt;
     {&lt;br /&gt;
       $tablas=array('ocestado');//arreglo de los joins de las tablas&lt;br /&gt;
       $filtros_tablas=array('codpai');//Envio  los filtros de las clases&lt;br /&gt;
       $filtros_variales=array($codpais);//Envio  los parametros de la funcion&lt;br /&gt;
       $campos_retornados=array('codedo','nomedo');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
       return $estado= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
     }        	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*En el mismo '''actions.class''' creamos una función general que contiene la llamada de cada uno de los Cargar que detallamos en las lineas anteriores. Esta función es llamada en las funciones executeEdit() y updateOcdatsteFromRequest().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function funciones_combos()&lt;br /&gt;
    {&lt;br /&gt;
      $this-&amp;gt;pais = $this-&amp;gt;Cargarpais();&lt;br /&gt;
      $this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;ocdatste-&amp;gt;getCodpai());//contiene los datos de la bd&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota''': $this-&amp;gt;ocdatste-&amp;gt;getCodpai() son los parametros que le tenemos que debemos enviarles dependiendo de cuantos filtros debera tener la funcion de cargar combo.&lt;br /&gt;
&lt;br /&gt;
*En los templates de esta forma, creamos un archivo '''comboSuccess.php''' que contiene la secuencia de como se deben ejecutar los combos, haciendo uso de Ajax.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php use_helper('Object', 'Validation', 'Javascript') ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php if ($tipo=='P')&lt;br /&gt;
{&lt;br /&gt;
 echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
'update'   =&amp;gt; 'divMunicipios',&lt;br /&gt;
'url'      =&amp;gt; 'oycdatsol/combo?par=2',&lt;br /&gt;
'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
else if ($tipo=='E')&lt;br /&gt;
{&lt;br /&gt;
	echo select_tag('ocdatste[codmun]', options_for_select($municipio,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
	'update'   =&amp;gt; 'divParroquia',&lt;br /&gt;
	'url'      =&amp;gt; 'oycdatsol/combo?par=3',&lt;br /&gt;
	'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+document.getElementById('ocdatste_codedo').value+'&amp;amp;municipio='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Cabe destacar que el mismo número de combos que contenga el edit form lo debe tener el archivo '''comboSuccess.php'''.&lt;br /&gt;
&lt;br /&gt;
* Además en el actions.class agregamos la función que valida, que se va a ejecutar con la variable de el control de la acción.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function executeCombo()&lt;br /&gt;
    {&lt;br /&gt;
      if ($this-&amp;gt;getRequestParameter('par')=='1')&lt;br /&gt;
        {&lt;br /&gt;
	  $this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;getRequestParameter('pais'));&lt;br /&gt;
	  $this-&amp;gt;tipo='P';&lt;br /&gt;
	}&lt;br /&gt;
	elseif ($this-&amp;gt;getRequestParameter('par')=='2')&lt;br /&gt;
	  {&lt;br /&gt;
	    $this-&amp;gt;municipio = $this-&amp;gt;Cargarmunicipio($this-&amp;gt;getRequestParameter('pais'),$this-&amp;gt;getRequestParameter('estado'));&lt;br /&gt;
	    $this-&amp;gt;tipo='E';&lt;br /&gt;
	  }&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Por último, en el _edit_form se coloca el código php que imprime los combos; en cada uno de sus respecivos campos.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Campo que contiene el pais.&lt;br /&gt;
&amp;lt;?php echo select_tag('ocdatste[codpai]', options_for_select($pais,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divEstados',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=1',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
//Campo que contiene el estado.&lt;br /&gt;
&amp;lt;div id=&amp;quot;divEstados&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divMunicipios',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=2',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y listooooooooooooooooooooooo&lt;br /&gt;
'''Jsuarez::::....'''&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes</id>
		<title>Combos de Recargables Dependientes</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes"/>
				<updated>2007-04-30T21:07:57Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*El siguiente código se encuentra en el módulo Obras; forma oycdatsol. Para cargar los combos creamos una función CargarCombo en lib/herramientas, la cual contiene el siguiente código.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public static function Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados)&lt;br /&gt;
    {&lt;br /&gt;
      $c = new Criteria();&lt;br /&gt;
      if ($filtros_tablas[0]!='')&lt;br /&gt;
	{&lt;br /&gt;
	  for($a=0;$a&amp;lt;count($filtros_tablas);$a++)&lt;br /&gt;
	    {&lt;br /&gt;
 	      eval('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  			&lt;br /&gt;
	    }&lt;br /&gt;
	 }&lt;br /&gt;
       eval('$lista_arreglo = '.ucfirst(strtolower($tablas[0])).'Peer::doSelect($c);');&lt;br /&gt;
       $arreglo = array();&lt;br /&gt;
       foreach($lista_arreglo as $obj_estado)&lt;br /&gt;
	 {&lt;br /&gt;
	   eval('$arreglo[$obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[0])).'()] = $obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[1])).'();');&lt;br /&gt;
	 }&lt;br /&gt;
	return $arreglo;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Luego en el Actions.class.php, creamos la funciones Cargar de cada campo asociado al combo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function Cargarpais()&lt;br /&gt;
   {&lt;br /&gt;
     $tablas=array('ocpais');//arreglo de los joins de las tablas&lt;br /&gt;
     $filtros_tablas=array('');//Envio  los filtros de las clases&lt;br /&gt;
     $filtros_variales=array('');//Envio  los parametros de la funcion&lt;br /&gt;
     $campos_retornados=array('codpai','nompai');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
     return $pais= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public function Cargarestados($codpais)&lt;br /&gt;
     {&lt;br /&gt;
       $tablas=array('ocestado');//arreglo de los joins de las tablas&lt;br /&gt;
       $filtros_tablas=array('codpai');//Envio  los filtros de las clases&lt;br /&gt;
       $filtros_variales=array($codpais);//Envio  los parametros de la funcion&lt;br /&gt;
       $campos_retornados=array('codedo','nomedo');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
       return $estado= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
     }        	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*En el mismo '''actions.class''' creamos una función general que contiene la llamada de cada uno de los Cargar que detallamos en las lineas anteriores. Esta función es llamada en las funciones executeEdit() y updateOcdatsteFromRequest().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function funciones_combos()&lt;br /&gt;
    {&lt;br /&gt;
      $this-&amp;gt;pais = $this-&amp;gt;Cargarpais();&lt;br /&gt;
      $this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;ocdatste-&amp;gt;getCodpai());//contiene los datos de la bd&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota''': $this-&amp;gt;ocdatste-&amp;gt;getCodpai() son los parametros que le tenemos que debemos enviarles dependiendo de cuantos filtros debera tener la funcion de cargar combo.&lt;br /&gt;
&lt;br /&gt;
*En los templates de esta forma, creamos un archivo '''comboSuccess.php''' que contiene la secuencia de como se deben ejecutar los combos, haciendo uso de Ajax.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php use_helper('Object', 'Validation', 'Javascript') ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php if ($tipo=='P')&lt;br /&gt;
{&lt;br /&gt;
 echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
'update'   =&amp;gt; 'divMunicipios',&lt;br /&gt;
'url'      =&amp;gt; 'oycdatsol/combo?par=2',&lt;br /&gt;
'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
else if ($tipo=='E')&lt;br /&gt;
{&lt;br /&gt;
	echo select_tag('ocdatste[codmun]', options_for_select($municipio,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
	'update'   =&amp;gt; 'divParroquia',&lt;br /&gt;
	'url'      =&amp;gt; 'oycdatsol/combo?par=3',&lt;br /&gt;
	'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+document.getElementById('ocdatste_codedo').value+'&amp;amp;municipio='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Cabe destacar que el mismo número de combos que contenga el edit form lo debe tener el archivo '''comboSuccess.php'''.&lt;br /&gt;
&lt;br /&gt;
* Además en el actions.class agregamos la función que valida, que se va a ejecutar con la variable de el control de la acción.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function executeCombo()&lt;br /&gt;
    {&lt;br /&gt;
      if ($this-&amp;gt;getRequestParameter('par')=='1')&lt;br /&gt;
        {&lt;br /&gt;
	  $this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;getRequestParameter('pais'));&lt;br /&gt;
	  $this-&amp;gt;tipo='P';&lt;br /&gt;
	}&lt;br /&gt;
	elseif ($this-&amp;gt;getRequestParameter('par')=='2')&lt;br /&gt;
	  {&lt;br /&gt;
	    $this-&amp;gt;municipio = $this-&amp;gt;Cargarmunicipio($this-&amp;gt;getRequestParameter('pais'),$this-&amp;gt;getRequestParameter('estado'));&lt;br /&gt;
	    $this-&amp;gt;tipo='E';&lt;br /&gt;
	  }&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Por último, en el _edit_form se coloca el código php que imprime los combos; en cada uno de los campos.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Campo que contiene el pais.&lt;br /&gt;
&amp;lt;?php echo select_tag('ocdatste[codpai]', options_for_select($pais,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divEstados',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=1',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
//Campo que contiene el estado.&lt;br /&gt;
&amp;lt;div id=&amp;quot;divEstados&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divMunicipios',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=2',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y listooooooooooooooooooooooo&lt;br /&gt;
'''Jsuarez::::....'''&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes</id>
		<title>Combos de Recargables Dependientes</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes"/>
				<updated>2007-04-30T21:07:36Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*El siguiente código se encuentra en el módulo Obras; forma oycdatsol. Para cargar los combos creamos una función CargarCombo en lib/herramientas, la cual contiene el siguiente código.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public static function Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados)&lt;br /&gt;
    {&lt;br /&gt;
      $c = new Criteria();&lt;br /&gt;
      if ($filtros_tablas[0]!='')&lt;br /&gt;
	{&lt;br /&gt;
	  for($a=0;$a&amp;lt;count($filtros_tablas);$a++)&lt;br /&gt;
	    {&lt;br /&gt;
 	      eval('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  			&lt;br /&gt;
	     }&lt;br /&gt;
	 }&lt;br /&gt;
       eval('$lista_arreglo = '.ucfirst(strtolower($tablas[0])).'Peer::doSelect($c);');&lt;br /&gt;
       $arreglo = array();&lt;br /&gt;
       foreach($lista_arreglo as $obj_estado)&lt;br /&gt;
	 {&lt;br /&gt;
	   eval('$arreglo[$obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[0])).'()] = $obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[1])).'();');&lt;br /&gt;
	  }&lt;br /&gt;
	return $arreglo;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Luego en el Actions.class.php, creamos la funciones Cargar de cada campo asociado al combo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function Cargarpais()&lt;br /&gt;
   {&lt;br /&gt;
     $tablas=array('ocpais');//arreglo de los joins de las tablas&lt;br /&gt;
     $filtros_tablas=array('');//Envio  los filtros de las clases&lt;br /&gt;
     $filtros_variales=array('');//Envio  los parametros de la funcion&lt;br /&gt;
     $campos_retornados=array('codpai','nompai');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
     return $pais= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public function Cargarestados($codpais)&lt;br /&gt;
     {&lt;br /&gt;
       $tablas=array('ocestado');//arreglo de los joins de las tablas&lt;br /&gt;
       $filtros_tablas=array('codpai');//Envio  los filtros de las clases&lt;br /&gt;
       $filtros_variales=array($codpais);//Envio  los parametros de la funcion&lt;br /&gt;
       $campos_retornados=array('codedo','nomedo');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
       return $estado= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
     }        	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*En el mismo '''actions.class''' creamos una función general que contiene la llamada de cada uno de los Cargar que detallamos en las lineas anteriores. Esta función es llamada en las funciones executeEdit() y updateOcdatsteFromRequest().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function funciones_combos()&lt;br /&gt;
    {&lt;br /&gt;
      $this-&amp;gt;pais = $this-&amp;gt;Cargarpais();&lt;br /&gt;
      $this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;ocdatste-&amp;gt;getCodpai());//contiene los datos de la bd&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota''': $this-&amp;gt;ocdatste-&amp;gt;getCodpai() son los parametros que le tenemos que debemos enviarles dependiendo de cuantos filtros debera tener la funcion de cargar combo.&lt;br /&gt;
&lt;br /&gt;
*En los templates de esta forma, creamos un archivo '''comboSuccess.php''' que contiene la secuencia de como se deben ejecutar los combos, haciendo uso de Ajax.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php use_helper('Object', 'Validation', 'Javascript') ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php if ($tipo=='P')&lt;br /&gt;
{&lt;br /&gt;
 echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
'update'   =&amp;gt; 'divMunicipios',&lt;br /&gt;
'url'      =&amp;gt; 'oycdatsol/combo?par=2',&lt;br /&gt;
'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
else if ($tipo=='E')&lt;br /&gt;
{&lt;br /&gt;
	echo select_tag('ocdatste[codmun]', options_for_select($municipio,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
	'update'   =&amp;gt; 'divParroquia',&lt;br /&gt;
	'url'      =&amp;gt; 'oycdatsol/combo?par=3',&lt;br /&gt;
	'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+document.getElementById('ocdatste_codedo').value+'&amp;amp;municipio='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Cabe destacar que el mismo número de combos que contenga el edit form lo debe tener el archivo '''comboSuccess.php'''.&lt;br /&gt;
&lt;br /&gt;
* Además en el actions.class agregamos la función que valida, que se va a ejecutar con la variable de el control de la acción.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function executeCombo()&lt;br /&gt;
    {&lt;br /&gt;
      if ($this-&amp;gt;getRequestParameter('par')=='1')&lt;br /&gt;
        {&lt;br /&gt;
	  $this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;getRequestParameter('pais'));&lt;br /&gt;
	  $this-&amp;gt;tipo='P';&lt;br /&gt;
	}&lt;br /&gt;
	elseif ($this-&amp;gt;getRequestParameter('par')=='2')&lt;br /&gt;
	  {&lt;br /&gt;
	    $this-&amp;gt;municipio = $this-&amp;gt;Cargarmunicipio($this-&amp;gt;getRequestParameter('pais'),$this-&amp;gt;getRequestParameter('estado'));&lt;br /&gt;
	    $this-&amp;gt;tipo='E';&lt;br /&gt;
	  }&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Por último, en el _edit_form se coloca el código php que imprime los combos; en cada uno de los campos.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Campo que contiene el pais.&lt;br /&gt;
&amp;lt;?php echo select_tag('ocdatste[codpai]', options_for_select($pais,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divEstados',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=1',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
//Campo que contiene el estado.&lt;br /&gt;
&amp;lt;div id=&amp;quot;divEstados&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divMunicipios',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=2',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y listooooooooooooooooooooooo&lt;br /&gt;
'''Jsuarez::::....'''&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes</id>
		<title>Combos de Recargables Dependientes</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes"/>
				<updated>2007-04-30T21:06:55Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*El siguiente código se encuentra en el módulo Obras; forma oycdatsol. Para cargar los combos creamos una función CargarCombo en lib/herramientas, la cual contiene el siguiente código.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public static function Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados)&lt;br /&gt;
    {&lt;br /&gt;
      $c = new Criteria();&lt;br /&gt;
      if ($filtros_tablas[0]!='')&lt;br /&gt;
	{&lt;br /&gt;
	  for($a=0;$a&amp;lt;count($filtros_tablas);$a++)&lt;br /&gt;
	    {&lt;br /&gt;
 	eval('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  			&lt;br /&gt;
	     }&lt;br /&gt;
	 }&lt;br /&gt;
       eval('$lista_arreglo = '.ucfirst(strtolower($tablas[0])).'Peer::doSelect($c);');&lt;br /&gt;
       $arreglo = array();&lt;br /&gt;
       foreach($lista_arreglo as $obj_estado)&lt;br /&gt;
	 {&lt;br /&gt;
	  		eval('$arreglo[$obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[0])).'()] = $obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[1])).'();');&lt;br /&gt;
	  }&lt;br /&gt;
	return $arreglo;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Luego en el Actions.class.php, creamos la funciones Cargar de cada campo asociado al combo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function Cargarpais()&lt;br /&gt;
   {&lt;br /&gt;
     $tablas=array('ocpais');//arreglo de los joins de las tablas&lt;br /&gt;
     $filtros_tablas=array('');//Envio  los filtros de las clases&lt;br /&gt;
     $filtros_variales=array('');//Envio  los parametros de la funcion&lt;br /&gt;
     $campos_retornados=array('codpai','nompai');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
     return $pais= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public function Cargarestados($codpais)&lt;br /&gt;
     {&lt;br /&gt;
       $tablas=array('ocestado');//arreglo de los joins de las tablas&lt;br /&gt;
       $filtros_tablas=array('codpai');//Envio  los filtros de las clases&lt;br /&gt;
       $filtros_variales=array($codpais);//Envio  los parametros de la funcion&lt;br /&gt;
       $campos_retornados=array('codedo','nomedo');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
       return $estado= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
     }        	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*En el mismo '''actions.class''' creamos una función general que contiene la llamada de cada uno de los Cargar que detallamos en las lineas anteriores. Esta función es llamada en las funciones executeEdit() y updateOcdatsteFromRequest().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function funciones_combos()&lt;br /&gt;
    {&lt;br /&gt;
      $this-&amp;gt;pais = $this-&amp;gt;Cargarpais();&lt;br /&gt;
      $this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;ocdatste-&amp;gt;getCodpai());//contiene los datos de la bd&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota''': $this-&amp;gt;ocdatste-&amp;gt;getCodpai() son los parametros que le tenemos que debemos enviarles dependiendo de cuantos filtros debera tener la funcion de cargar combo.&lt;br /&gt;
&lt;br /&gt;
*En los templates de esta forma, creamos un archivo '''comboSuccess.php''' que contiene la secuencia de como se deben ejecutar los combos, haciendo uso de Ajax.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php use_helper('Object', 'Validation', 'Javascript') ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php if ($tipo=='P')&lt;br /&gt;
{&lt;br /&gt;
 echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
'update'   =&amp;gt; 'divMunicipios',&lt;br /&gt;
'url'      =&amp;gt; 'oycdatsol/combo?par=2',&lt;br /&gt;
'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
else if ($tipo=='E')&lt;br /&gt;
{&lt;br /&gt;
	echo select_tag('ocdatste[codmun]', options_for_select($municipio,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
	'update'   =&amp;gt; 'divParroquia',&lt;br /&gt;
	'url'      =&amp;gt; 'oycdatsol/combo?par=3',&lt;br /&gt;
	'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+document.getElementById('ocdatste_codedo').value+'&amp;amp;municipio='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Cabe destacar que el mismo número de combos que contenga el edit form lo debe tener el archivo '''comboSuccess.php'''.&lt;br /&gt;
&lt;br /&gt;
* Además en el actions.class agregamos la función que valida, que se va a ejecutar con la variable de el control de la acción.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function executeCombo()&lt;br /&gt;
    {&lt;br /&gt;
      if ($this-&amp;gt;getRequestParameter('par')=='1')&lt;br /&gt;
        {&lt;br /&gt;
	  $this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;getRequestParameter('pais'));&lt;br /&gt;
	  $this-&amp;gt;tipo='P';&lt;br /&gt;
	}&lt;br /&gt;
	elseif ($this-&amp;gt;getRequestParameter('par')=='2')&lt;br /&gt;
	  {&lt;br /&gt;
	    $this-&amp;gt;municipio = $this-&amp;gt;Cargarmunicipio($this-&amp;gt;getRequestParameter('pais'),$this-&amp;gt;getRequestParameter('estado'));&lt;br /&gt;
	    $this-&amp;gt;tipo='E';&lt;br /&gt;
	  }&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Por último, en el _edit_form se coloca el código php que imprime los combos; en cada uno de los campos.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Campo que contiene el pais.&lt;br /&gt;
&amp;lt;?php echo select_tag('ocdatste[codpai]', options_for_select($pais,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divEstados',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=1',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
//Campo que contiene el estado.&lt;br /&gt;
&amp;lt;div id=&amp;quot;divEstados&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divMunicipios',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=2',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y listooooooooooooooooooooooo&lt;br /&gt;
'''Jsuarez::::....'''&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes</id>
		<title>Combos de Recargables Dependientes</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes"/>
				<updated>2007-04-30T21:04:31Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*El siguiente código se encuentra en el módulo Obras; forma oycdatsol. Para cargar los combos creamos una función CargarCombo en lib/herramientas, la cual contiene el siguiente código.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static function Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados)&lt;br /&gt;
	  {&lt;br /&gt;
	  	$c = new Criteria();&lt;br /&gt;
	  	if ($filtros_tablas[0]!='')&lt;br /&gt;
	  	{&lt;br /&gt;
	  		for($a=0;$a&amp;lt;count($filtros_tablas);$a++)&lt;br /&gt;
	  		{&lt;br /&gt;
	  			eval('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  			&lt;br /&gt;
	  		}&lt;br /&gt;
	  	}&lt;br /&gt;
	  	eval('$lista_arreglo = '.ucfirst(strtolower($tablas[0])).'Peer::doSelect($c);');&lt;br /&gt;
	  	$arreglo = array();&lt;br /&gt;
	  	foreach($lista_arreglo as $obj_estado)&lt;br /&gt;
	  	{&lt;br /&gt;
	  		eval('$arreglo[$obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[0])).'()] = $obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[1])).'();');&lt;br /&gt;
	  	}&lt;br /&gt;
	  	return $arreglo;&lt;br /&gt;
	  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Luego en el Actions.class.php, creamos la funciones Cargar de cada campo asociado al combo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function Cargarpais()&lt;br /&gt;
   {&lt;br /&gt;
     $tablas=array('ocpais');//arreglo de los joins de las tablas&lt;br /&gt;
     $filtros_tablas=array('');//Envio  los filtros de las clases&lt;br /&gt;
     $filtros_variales=array('');//Envio  los parametros de la funcion&lt;br /&gt;
     $campos_retornados=array('codpai','nompai');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
     return $pais= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public function Cargarestados($codpais)&lt;br /&gt;
     {&lt;br /&gt;
       $tablas=array('ocestado');//arreglo de los joins de las tablas&lt;br /&gt;
       $filtros_tablas=array('codpai');//Envio  los filtros de las clases&lt;br /&gt;
       $filtros_variales=array($codpais);//Envio  los parametros de la funcion&lt;br /&gt;
       $campos_retornados=array('codedo','nomedo');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
       return $estado= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
     }        	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*En el mismo '''actions.class''' creamos una función general que contiene la llamada de cada uno de los Cargar que detallamos en las lineas anteriores. Esta función es llamada en las funciones executeEdit() y updateOcdatsteFromRequest().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function funciones_combos()&lt;br /&gt;
    {&lt;br /&gt;
      $this-&amp;gt;pais = $this-&amp;gt;Cargarpais();&lt;br /&gt;
      $this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;ocdatste-&amp;gt;getCodpai());//contiene los datos de la bd&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota''': $this-&amp;gt;ocdatste-&amp;gt;getCodpai() son los parametros que le tenemos que debemos enviarles dependiendo de cuantos filtros debera tener la funcion de cargar combo.&lt;br /&gt;
&lt;br /&gt;
*En los templates de esta forma, creamos un archivo '''comboSuccess.php''' que contiene la secuencia de como se deben ejecutar los combos, haciendo uso de Ajax.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php use_helper('Object', 'Validation', 'Javascript') ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php if ($tipo=='P')&lt;br /&gt;
{&lt;br /&gt;
 echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
'update'   =&amp;gt; 'divMunicipios',&lt;br /&gt;
'url'      =&amp;gt; 'oycdatsol/combo?par=2',&lt;br /&gt;
'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
else if ($tipo=='E')&lt;br /&gt;
{&lt;br /&gt;
	echo select_tag('ocdatste[codmun]', options_for_select($municipio,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
	'update'   =&amp;gt; 'divParroquia',&lt;br /&gt;
	'url'      =&amp;gt; 'oycdatsol/combo?par=3',&lt;br /&gt;
	'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+document.getElementById('ocdatste_codedo').value+'&amp;amp;municipio='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Cabe destacar que el mismo número de combos que contenga el edit form lo debe tener el archivo '''comboSuccess.php'''.&lt;br /&gt;
&lt;br /&gt;
* Además en el actions.class agregamos la función que valida, que se va a ejecutar con la variable de el control de la acción.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function executeCombo()&lt;br /&gt;
    {&lt;br /&gt;
      if ($this-&amp;gt;getRequestParameter('par')=='1')&lt;br /&gt;
        {&lt;br /&gt;
	  $this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;getRequestParameter('pais'));&lt;br /&gt;
	  $this-&amp;gt;tipo='P';&lt;br /&gt;
	}&lt;br /&gt;
	elseif ($this-&amp;gt;getRequestParameter('par')=='2')&lt;br /&gt;
	  {&lt;br /&gt;
	    $this-&amp;gt;municipio = $this-&amp;gt;Cargarmunicipio($this-&amp;gt;getRequestParameter('pais'),$this-&amp;gt;getRequestParameter('estado'));&lt;br /&gt;
	    $this-&amp;gt;tipo='E';&lt;br /&gt;
	  }&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Por último, en el _edit_form se coloca el código php que imprime los combos; en cada uno de los campos.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Campo que contiene el pais.&lt;br /&gt;
&amp;lt;?php echo select_tag('ocdatste[codpai]', options_for_select($pais,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divEstados',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=1',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
//Campo que contiene el estado.&lt;br /&gt;
&amp;lt;div id=&amp;quot;divEstados&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divMunicipios',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=2',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y listooooooooooooooooooooooo&lt;br /&gt;
'''Jsuarez::::....'''&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes</id>
		<title>Combos de Recargables Dependientes</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes"/>
				<updated>2007-04-30T21:00:07Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*El siguiente código se encuentra en el módulo Obras; forma oycdatsol. Para cargar los combos creamos una función CargarCombo en lib/herramientas, la cual contiene el siguiente código.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static function Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados)&lt;br /&gt;
	  {&lt;br /&gt;
	  	$c = new Criteria();&lt;br /&gt;
	  	if ($filtros_tablas[0]!='')&lt;br /&gt;
	  	{&lt;br /&gt;
	  		for($a=0;$a&amp;lt;count($filtros_tablas);$a++)&lt;br /&gt;
	  		{&lt;br /&gt;
	  			eval('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  			//print ('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  		}&lt;br /&gt;
	  	}&lt;br /&gt;
	  	eval('$lista_arreglo = '.ucfirst(strtolower($tablas[0])).'Peer::doSelect($c);');&lt;br /&gt;
	  	$arreglo = array();&lt;br /&gt;
	  	foreach($lista_arreglo as $obj_estado)&lt;br /&gt;
	  	{&lt;br /&gt;
	  		eval('$arreglo[$obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[0])).'()] = $obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[1])).'();');&lt;br /&gt;
	  	}&lt;br /&gt;
	  	return $arreglo;&lt;br /&gt;
	  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Luego en el Actions.class.php, creamos la funciones Cargar de cada campo asociado al combo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function Cargarpais()&lt;br /&gt;
   {&lt;br /&gt;
     $tablas=array('ocpais');//arreglo de los joins de las tablas&lt;br /&gt;
     $filtros_tablas=array('');//Envio  los filtros de las clases&lt;br /&gt;
     $filtros_variales=array('');//Envio  los parametros de la funcion&lt;br /&gt;
     $campos_retornados=array('codpai','nompai');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
     return $pais= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public function Cargarestados($codpais)&lt;br /&gt;
     {&lt;br /&gt;
       $tablas=array('ocestado');//arreglo de los joins de las tablas&lt;br /&gt;
       $filtros_tablas=array('codpai');//Envio  los filtros de las clases&lt;br /&gt;
       $filtros_variales=array($codpais);//Envio  los parametros de la funcion&lt;br /&gt;
       $campos_retornados=array('codedo','nomedo');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
       return $estado= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
     }        	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*En el mismo '''actions.class''' creamos una función general que contiene la llamada de cada uno de los Cargar que detallamos en las lineas anteriores. Esta función es llamada en las funciones executeEdit() y updateOcdatsteFromRequest().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function funciones_combos()&lt;br /&gt;
    {&lt;br /&gt;
      $this-&amp;gt;pais = $this-&amp;gt;Cargarpais();&lt;br /&gt;
      $this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;ocdatste-&amp;gt;getCodpai());//contiene los datos de la bd&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota''': $this-&amp;gt;ocdatste-&amp;gt;getCodpai() son los parametros que le tenemos que debemos enviarles dependiendo de cuantos filtros debera tener la funcion de cargar combo.&lt;br /&gt;
&lt;br /&gt;
*En los templates de esta forma, creamos un archivo '''comboSuccess.php''' que contiene la secuencia de como se deben ejecutar los combos, haciendo uso de Ajax.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php use_helper('Object', 'Validation', 'Javascript') ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php if ($tipo=='P')&lt;br /&gt;
{&lt;br /&gt;
 echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
'update'   =&amp;gt; 'divMunicipios',&lt;br /&gt;
'url'      =&amp;gt; 'oycdatsol/combo?par=2',&lt;br /&gt;
'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
else if ($tipo=='E')&lt;br /&gt;
{&lt;br /&gt;
	echo select_tag('ocdatste[codmun]', options_for_select($municipio,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
	'update'   =&amp;gt; 'divParroquia',&lt;br /&gt;
	'url'      =&amp;gt; 'oycdatsol/combo?par=3',&lt;br /&gt;
	'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+document.getElementById('ocdatste_codedo').value+'&amp;amp;municipio='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Cabe destacar que el mismo número de combos que contenga el edit form lo debe tener el archivo '''comboSuccess.php'''.&lt;br /&gt;
&lt;br /&gt;
* Además en el actions.class agregamos la función que valida, que se va a ejecutar con la variable de el control de la acción.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function executeCombo()&lt;br /&gt;
    {&lt;br /&gt;
      if ($this-&amp;gt;getRequestParameter('par')=='1')&lt;br /&gt;
        {&lt;br /&gt;
	  $this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;getRequestParameter('pais'));&lt;br /&gt;
	  $this-&amp;gt;tipo='P';&lt;br /&gt;
	}&lt;br /&gt;
	elseif ($this-&amp;gt;getRequestParameter('par')=='2')&lt;br /&gt;
	  {&lt;br /&gt;
	    $this-&amp;gt;municipio = $this-&amp;gt;Cargarmunicipio($this-&amp;gt;getRequestParameter('pais'),$this-&amp;gt;getRequestParameter('estado'));&lt;br /&gt;
	    $this-&amp;gt;tipo='E';&lt;br /&gt;
	  }&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Por último, en el _edit_form se coloca el código php que imprime los combos; en cada uno de los campos.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Campo que contiene el pais.&lt;br /&gt;
&amp;lt;?php echo select_tag('ocdatste[codpai]', options_for_select($pais,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divEstados',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=1',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
//Campo que contiene el estado.&lt;br /&gt;
&amp;lt;div id=&amp;quot;divEstados&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divMunicipios',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=2',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y listooooooooooooooooooooooo&lt;br /&gt;
'''Jsuarez::::....'''&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes</id>
		<title>Combos de Recargables Dependientes</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes"/>
				<updated>2007-04-30T20:57:32Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*El siguiente código se encuentra en el módulo Obras; forma oycdatsol. Para cargar los combos creamos una función CargarCombo en lib/herramientas, la cual contiene el siguiente código.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static function Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados)&lt;br /&gt;
	  {&lt;br /&gt;
	  	$c = new Criteria();&lt;br /&gt;
	  	if ($filtros_tablas[0]!='')&lt;br /&gt;
	  	{&lt;br /&gt;
	  		for($a=0;$a&amp;lt;count($filtros_tablas);$a++)&lt;br /&gt;
	  		{&lt;br /&gt;
	  			eval('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  			//print ('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  		}&lt;br /&gt;
	  	}&lt;br /&gt;
	  	eval('$lista_arreglo = '.ucfirst(strtolower($tablas[0])).'Peer::doSelect($c);');&lt;br /&gt;
	  	$arreglo = array();&lt;br /&gt;
	  	foreach($lista_arreglo as $obj_estado)&lt;br /&gt;
	  	{&lt;br /&gt;
	  		eval('$arreglo[$obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[0])).'()] = $obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[1])).'();');&lt;br /&gt;
	  	}&lt;br /&gt;
	  	return $arreglo;&lt;br /&gt;
	  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Luego en el Actions.class.php, creamos la funciones Cargar de cada campo asociado al combo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function Cargarpais()&lt;br /&gt;
   {&lt;br /&gt;
     $tablas=array('ocpais');//arreglo de los joins de las tablas&lt;br /&gt;
     $filtros_tablas=array('');//Envio  los filtros de las clases&lt;br /&gt;
     $filtros_variales=array('');//Envio  los parametros de la funcion&lt;br /&gt;
     $campos_retornados=array('codpai','nompai');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
     return $pais= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public function Cargarestados($codpais)&lt;br /&gt;
     {&lt;br /&gt;
       $tablas=array('ocestado');//arreglo de los joins de las tablas&lt;br /&gt;
       $filtros_tablas=array('codpai');//Envio  los filtros de las clases&lt;br /&gt;
       $filtros_variales=array($codpais);//Envio  los parametros de la funcion&lt;br /&gt;
       $campos_retornados=array('codedo','nomedo');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
       return $estado= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
     }        	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*En el mismo '''actions.class''' creamos una función general que contiene la llamada de cada uno de los Cargar que detallamos en las lineas anteriores. Esta función es llamada en las funciones executeEdit() y updateOcdatsteFromRequest().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function funciones_combos()&lt;br /&gt;
    {&lt;br /&gt;
      $this-&amp;gt;pais = $this-&amp;gt;Cargarpais();&lt;br /&gt;
      $this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;ocdatste-&amp;gt;getCodpai());//contiene los datos de la bd&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota''': $this-&amp;gt;ocdatste-&amp;gt;getCodpai() son los parametros que le tenemos que debemos enviarles dependiendo de cuantos filtros debera tener la funcion de cargar combo.&lt;br /&gt;
&lt;br /&gt;
*En los templates de esta forma, creamos un archivo '''comboSuccess.php''' que contiene la secuencia de como se deben ejecutar los combos, haciendo uso de Ajax.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php use_helper('Object', 'Validation', 'Javascript') ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php if ($tipo=='P')&lt;br /&gt;
{&lt;br /&gt;
 echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
'update'   =&amp;gt; 'divMunicipios',&lt;br /&gt;
'url'      =&amp;gt; 'oycdatsol/combo?par=2',&lt;br /&gt;
'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
else if ($tipo=='E')&lt;br /&gt;
{&lt;br /&gt;
	echo select_tag('ocdatste[codmun]', options_for_select($municipio,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
	'update'   =&amp;gt; 'divParroquia',&lt;br /&gt;
	'url'      =&amp;gt; 'oycdatsol/combo?par=3',&lt;br /&gt;
	'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+document.getElementById('ocdatste_codedo').value+'&amp;amp;municipio='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Cabe destacar que el mismo número de combos que contenga el edit form lo debe tener el archivo '''comboSuccess.php'''.&lt;br /&gt;
&lt;br /&gt;
* Luego en el actions.class agregamos la función que controla, que se va a ejecutar con la variable de el control de la acción.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function executeCombo()&lt;br /&gt;
    {&lt;br /&gt;
      if ($this-&amp;gt;getRequestParameter('par')=='1')&lt;br /&gt;
        {&lt;br /&gt;
	  $this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;getRequestParameter('pais'));&lt;br /&gt;
	  $this-&amp;gt;tipo='P';&lt;br /&gt;
	}&lt;br /&gt;
	elseif ($this-&amp;gt;getRequestParameter('par')=='2')&lt;br /&gt;
	  {&lt;br /&gt;
	    $this-&amp;gt;municipio = $this-&amp;gt;Cargarmunicipio($this-&amp;gt;getRequestParameter('pais'),$this-&amp;gt;getRequestParameter('estado'));&lt;br /&gt;
	    $this-&amp;gt;tipo='E';&lt;br /&gt;
	  }&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Por último, en el _edit_form se coloca el código php que imprime los combos; en cada uno de los campos.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php echo select_tag('ocdatste[codpai]', options_for_select($pais,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divEstados',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=1',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
//Campo que contiene el estado.&lt;br /&gt;
&amp;lt;div id=&amp;quot;divEstados&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divMunicipios',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=2',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Y listooooooooooooooooooooooo&lt;br /&gt;
'''Jsuarez::::....'''&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes</id>
		<title>Combos de Recargables Dependientes</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes"/>
				<updated>2007-04-30T20:56:29Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*El siguiente código se encuentra en el módulo Obras; forma oycdatsol. Para cargar los combos creamos una función CargarCombo en lib/herramientas, la cual contiene el siguiente código.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static function Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados)&lt;br /&gt;
	  {&lt;br /&gt;
	  	$c = new Criteria();&lt;br /&gt;
	  	if ($filtros_tablas[0]!='')&lt;br /&gt;
	  	{&lt;br /&gt;
	  		for($a=0;$a&amp;lt;count($filtros_tablas);$a++)&lt;br /&gt;
	  		{&lt;br /&gt;
	  			eval('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  			//print ('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  		}&lt;br /&gt;
	  	}&lt;br /&gt;
	  	eval('$lista_arreglo = '.ucfirst(strtolower($tablas[0])).'Peer::doSelect($c);');&lt;br /&gt;
	  	$arreglo = array();&lt;br /&gt;
	  	foreach($lista_arreglo as $obj_estado)&lt;br /&gt;
	  	{&lt;br /&gt;
	  		eval('$arreglo[$obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[0])).'()] = $obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[1])).'();');&lt;br /&gt;
	  	}&lt;br /&gt;
	  	return $arreglo;&lt;br /&gt;
	  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Luego en el Actions.class.php, creamos la funciones Cargar de cada campo asociado al combo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function Cargarpais()&lt;br /&gt;
   {&lt;br /&gt;
     $tablas=array('ocpais');//arreglo de los joins de las tablas&lt;br /&gt;
     $filtros_tablas=array('');//Envio  los filtros de las clases&lt;br /&gt;
     $filtros_variales=array('');//Envio  los parametros de la funcion&lt;br /&gt;
     $campos_retornados=array('codpai','nompai');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
     return $pais= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public function Cargarestados($codpais)&lt;br /&gt;
     {&lt;br /&gt;
       $tablas=array('ocestado');//arreglo de los joins de las tablas&lt;br /&gt;
       $filtros_tablas=array('codpai');//Envio  los filtros de las clases&lt;br /&gt;
       $filtros_variales=array($codpais);//Envio  los parametros de la funcion&lt;br /&gt;
       $campos_retornados=array('codedo','nomedo');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
       return $estado= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
     }        	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*En el mismo '''actions.class''' creamos una función general que contiene la llamada de cada uno de los Cargar que detallamos en las lineas anteriores. Esta función es llamada en las funciones executeEdit() y updateOcdatsteFromRequest().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function funciones_combos()&lt;br /&gt;
    {&lt;br /&gt;
      $this-&amp;gt;pais = $this-&amp;gt;Cargarpais();&lt;br /&gt;
      $this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;ocdatste-&amp;gt;getCodpai());//contiene los datos de la bd&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota''': $this-&amp;gt;ocdatste-&amp;gt;getCodpai() son los parametros que le tenemos que debemos enviarles dependiendo de cuantos filtros debera tener la funcion de cargar combo.&lt;br /&gt;
&lt;br /&gt;
*En los templates de esta forma, creamos un archivo '''comboSuccess.php''' que contiene la secuencia de como se deben ejecutar los combos, haciendo uso de Ajax.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php use_helper('Object', 'Validation', 'Javascript') ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php if ($tipo=='P')&lt;br /&gt;
{&lt;br /&gt;
 echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
'update'   =&amp;gt; 'divMunicipios',&lt;br /&gt;
'url'      =&amp;gt; 'oycdatsol/combo?par=2',&lt;br /&gt;
'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
else if ($tipo=='E')&lt;br /&gt;
{&lt;br /&gt;
	echo select_tag('ocdatste[codmun]', options_for_select($municipio,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
	'update'   =&amp;gt; 'divParroquia',&lt;br /&gt;
	'url'      =&amp;gt; 'oycdatsol/combo?par=3',&lt;br /&gt;
	'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+document.getElementById('ocdatste_codedo').value+'&amp;amp;municipio='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Cabe destacar que el mismo número de combos que contenga el edit form lo debe tener el archivo '''comboSuccess.php''''''.&lt;br /&gt;
&lt;br /&gt;
* Luego en el actions.class agregamos la función que controla, que se va a ejecutar con la variable de el control de la acción.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function executeCombo()&lt;br /&gt;
    {&lt;br /&gt;
      if ($this-&amp;gt;getRequestParameter('par')=='1')&lt;br /&gt;
        {&lt;br /&gt;
	  $this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;getRequestParameter('pais'));&lt;br /&gt;
	  $this-&amp;gt;tipo='P';&lt;br /&gt;
	}&lt;br /&gt;
	elseif ($this-&amp;gt;getRequestParameter('par')=='2')&lt;br /&gt;
	  {&lt;br /&gt;
	    $this-&amp;gt;municipio = $this-&amp;gt;Cargarmunicipio($this-&amp;gt;getRequestParameter('pais'),$this-&amp;gt;getRequestParameter('estado'));&lt;br /&gt;
	    $this-&amp;gt;tipo='E';&lt;br /&gt;
	  }&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Por último, en el _edit_form se coloca el código php que imprime los combos; en cada uno de los campos.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php echo select_tag('ocdatste[codpai]', options_for_select($pais,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divEstados',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=1',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
//Campo que contiene el estado.&lt;br /&gt;
&amp;lt;div id=&amp;quot;divEstados&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divMunicipios',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=2',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Y listooooooooooooooooooooooo&lt;br /&gt;
'''Jsuarez::::....'''&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes</id>
		<title>Combos de Recargables Dependientes</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes"/>
				<updated>2007-04-30T20:56:04Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*El siguiente código se encuentra en el módulo Obras; forma oycdatsol. Para cargar los combos creamos una función CargarCombo en lib/herramientas, la cual contiene el siguiente código.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static function Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados)&lt;br /&gt;
	  {&lt;br /&gt;
	  	$c = new Criteria();&lt;br /&gt;
	  	if ($filtros_tablas[0]!='')&lt;br /&gt;
	  	{&lt;br /&gt;
	  		for($a=0;$a&amp;lt;count($filtros_tablas);$a++)&lt;br /&gt;
	  		{&lt;br /&gt;
	  			eval('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  			//print ('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  		}&lt;br /&gt;
	  	}&lt;br /&gt;
	  	eval('$lista_arreglo = '.ucfirst(strtolower($tablas[0])).'Peer::doSelect($c);');&lt;br /&gt;
	  	$arreglo = array();&lt;br /&gt;
	  	foreach($lista_arreglo as $obj_estado)&lt;br /&gt;
	  	{&lt;br /&gt;
	  		eval('$arreglo[$obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[0])).'()] = $obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[1])).'();');&lt;br /&gt;
	  	}&lt;br /&gt;
	  	return $arreglo;&lt;br /&gt;
	  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Luego en el Actions.class.php, creamos la funciones Cargar de cada campo asociado al combo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function Cargarpais()&lt;br /&gt;
   {&lt;br /&gt;
     $tablas=array('ocpais');//arreglo de los joins de las tablas&lt;br /&gt;
     $filtros_tablas=array('');//Envio  los filtros de las clases&lt;br /&gt;
     $filtros_variales=array('');//Envio  los parametros de la funcion&lt;br /&gt;
     $campos_retornados=array('codpai','nompai');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
     return $pais= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public function Cargarestados($codpais)&lt;br /&gt;
     {&lt;br /&gt;
       $tablas=array('ocestado');//arreglo de los joins de las tablas&lt;br /&gt;
       $filtros_tablas=array('codpai');//Envio  los filtros de las clases&lt;br /&gt;
       $filtros_variales=array($codpais);//Envio  los parametros de la funcion&lt;br /&gt;
       $campos_retornados=array('codedo','nomedo');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
       return $estado= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
     }        	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Luego en el mismo '''actions.class''' creamos una función general que contiene la llamada de cada uno de los Cargar que detallamos en las lineas anteriores. Esta función es llamada en las funciones executeEdit() y updateOcdatsteFromRequest().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function funciones_combos()&lt;br /&gt;
    {&lt;br /&gt;
      $this-&amp;gt;pais = $this-&amp;gt;Cargarpais();&lt;br /&gt;
      $this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;ocdatste-&amp;gt;getCodpai());//contiene los datos de la bd&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota''': $this-&amp;gt;ocdatste-&amp;gt;getCodpai() son los parametros que le tenemos que debemos enviarles dependiendo de cuantos filtros debera tener la funcion de cargar combo.&lt;br /&gt;
&lt;br /&gt;
*En los templates de esta forma, creamos un archivo '''comboSuccess.php''' que contiene la secuencia de como se deben ejecutar los combos, haciendo uso de Ajax.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php use_helper('Object', 'Validation', 'Javascript') ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php if ($tipo=='P')&lt;br /&gt;
{&lt;br /&gt;
 echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
'update'   =&amp;gt; 'divMunicipios',&lt;br /&gt;
'url'      =&amp;gt; 'oycdatsol/combo?par=2',&lt;br /&gt;
'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
else if ($tipo=='E')&lt;br /&gt;
{&lt;br /&gt;
	echo select_tag('ocdatste[codmun]', options_for_select($municipio,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
	'update'   =&amp;gt; 'divParroquia',&lt;br /&gt;
	'url'      =&amp;gt; 'oycdatsol/combo?par=3',&lt;br /&gt;
	'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+document.getElementById('ocdatste_codedo').value+'&amp;amp;municipio='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Cabe destacar que el mismo número de combos que contenga el edit form lo debe tener el archivo '''comboSuccess.php''''''.&lt;br /&gt;
&lt;br /&gt;
* Luego en el actions.class agregamos la función que controla, que se va a ejecutar con la variable de el control de la acción.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function executeCombo()&lt;br /&gt;
    {&lt;br /&gt;
      if ($this-&amp;gt;getRequestParameter('par')=='1')&lt;br /&gt;
        {&lt;br /&gt;
	  $this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;getRequestParameter('pais'));&lt;br /&gt;
	  $this-&amp;gt;tipo='P';&lt;br /&gt;
	}&lt;br /&gt;
	elseif ($this-&amp;gt;getRequestParameter('par')=='2')&lt;br /&gt;
	  {&lt;br /&gt;
	    $this-&amp;gt;municipio = $this-&amp;gt;Cargarmunicipio($this-&amp;gt;getRequestParameter('pais'),$this-&amp;gt;getRequestParameter('estado'));&lt;br /&gt;
	    $this-&amp;gt;tipo='E';&lt;br /&gt;
	  }&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Por último, en el _edit_form se coloca el código php que imprime los combos; en cada uno de los campos.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php echo select_tag('ocdatste[codpai]', options_for_select($pais,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divEstados',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=1',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
//Campo que contiene el estado.&lt;br /&gt;
&amp;lt;div id=&amp;quot;divEstados&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divMunicipios',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=2',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Y listooooooooooooooooooooooo&lt;br /&gt;
'''Jsuarez::::....'''&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes</id>
		<title>Combos de Recargables Dependientes</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes"/>
				<updated>2007-04-30T20:55:17Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*El siguiente código se encuentra en el módulo Obras; forma oycdatsol. Para cargar los combos creamos una función CargarCombo en lib/herramientas, la cual contiene el siguiente código.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static function Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados)&lt;br /&gt;
	  {&lt;br /&gt;
	  	$c = new Criteria();&lt;br /&gt;
	  	if ($filtros_tablas[0]!='')&lt;br /&gt;
	  	{&lt;br /&gt;
	  		for($a=0;$a&amp;lt;count($filtros_tablas);$a++)&lt;br /&gt;
	  		{&lt;br /&gt;
	  			eval('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  			//print ('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  		}&lt;br /&gt;
	  	}&lt;br /&gt;
	  	eval('$lista_arreglo = '.ucfirst(strtolower($tablas[0])).'Peer::doSelect($c);');&lt;br /&gt;
	  	$arreglo = array();&lt;br /&gt;
	  	foreach($lista_arreglo as $obj_estado)&lt;br /&gt;
	  	{&lt;br /&gt;
	  		eval('$arreglo[$obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[0])).'()] = $obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[1])).'();');&lt;br /&gt;
	  	}&lt;br /&gt;
	  	return $arreglo;&lt;br /&gt;
	  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Luego en el Actions.class.php, creamos la funciones Cargar de cada campo asociado al combo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function Cargarpais()&lt;br /&gt;
   {&lt;br /&gt;
     $tablas=array('ocpais');//arreglo de los joins de las tablas&lt;br /&gt;
     $filtros_tablas=array('');//Envio  los filtros de las clases&lt;br /&gt;
     $filtros_variales=array('');//Envio  los parametros de la funcion&lt;br /&gt;
     $campos_retornados=array('codpai','nompai');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
     return $pais= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public function Cargarestados($codpais)&lt;br /&gt;
     {&lt;br /&gt;
       $tablas=array('ocestado');//arreglo de los joins de las tablas&lt;br /&gt;
       $filtros_tablas=array('codpai');//Envio  los filtros de las clases&lt;br /&gt;
       $filtros_variales=array($codpais);//Envio  los parametros de la funcion&lt;br /&gt;
       $campos_retornados=array('codedo','nomedo');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
       return $estado= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
     }        	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Luego en el mismo'''actions.class''' creamos una función general que contiene la llamada de cada uno de los Cargar que detallamos en las lineas anteriores. Esta función es llamada en las funciones executeEdit() y updateOcdatsteFromRequest().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function funciones_combos()&lt;br /&gt;
    {&lt;br /&gt;
      $this-&amp;gt;pais = $this-&amp;gt;Cargarpais();&lt;br /&gt;
      $this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;ocdatste-&amp;gt;getCodpai());//contiene los datos de la bd&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota''': $this-&amp;gt;ocdatste-&amp;gt;getCodpai() son los parametros que le tenemos que debemos enviarles dependiendo de cuantos filtros debera tener la funcion de cargar combo.&lt;br /&gt;
&lt;br /&gt;
*En los templates de esta forma, creamos un archivo '''comboSuccess.php''' que contiene la secuencia de como se deben ejecutar los combos, haciendo uso de Ajax.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php use_helper('Object', 'Validation', 'Javascript') ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php if ($tipo=='P')&lt;br /&gt;
{&lt;br /&gt;
 echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
'update'   =&amp;gt; 'divMunicipios',&lt;br /&gt;
'url'      =&amp;gt; 'oycdatsol/combo?par=2',&lt;br /&gt;
'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
else if ($tipo=='E')&lt;br /&gt;
{&lt;br /&gt;
	echo select_tag('ocdatste[codmun]', options_for_select($municipio,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
	'update'   =&amp;gt; 'divParroquia',&lt;br /&gt;
	'url'      =&amp;gt; 'oycdatsol/combo?par=3',&lt;br /&gt;
	'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+document.getElementById('ocdatste_codedo').value+'&amp;amp;municipio='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Cabe destacar que el mismo número de combos que contenga el edit form lo debe tener el archivo '''comboSuccess.php''''''.&lt;br /&gt;
&lt;br /&gt;
* Luego en el actions.class agregamos la función que controla, que se va a ejecutar con la variable de el control de la acción.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function executeCombo()&lt;br /&gt;
    {&lt;br /&gt;
      if ($this-&amp;gt;getRequestParameter('par')=='1')&lt;br /&gt;
        {&lt;br /&gt;
	  $this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;getRequestParameter('pais'));&lt;br /&gt;
	  $this-&amp;gt;tipo='P';&lt;br /&gt;
	}&lt;br /&gt;
	elseif ($this-&amp;gt;getRequestParameter('par')=='2')&lt;br /&gt;
	  {&lt;br /&gt;
	    $this-&amp;gt;municipio = $this-&amp;gt;Cargarmunicipio($this-&amp;gt;getRequestParameter('pais'),$this-&amp;gt;getRequestParameter('estado'));&lt;br /&gt;
	    $this-&amp;gt;tipo='E';&lt;br /&gt;
	  }&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Por último, en el _edit_form se coloca el código php que imprime los combos; en cada uno de los campos.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php echo select_tag('ocdatste[codpai]', options_for_select($pais,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divEstados',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=1',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
//Campo que contiene el estado.&lt;br /&gt;
&amp;lt;div id=&amp;quot;divEstados&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divMunicipios',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=2',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Y listooooooooooooooooooooooo&lt;br /&gt;
'''Jsuarez::::....'''&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes</id>
		<title>Combos de Recargables Dependientes</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes"/>
				<updated>2007-04-30T20:54:41Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: .&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*El siguiente código se encuentra en el módulo Obras; forma oycdatsol. Para cargar los combos creamos una función CargarCombo en lib/herramientas, la cual contiene el siguiente código.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static function Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados)&lt;br /&gt;
	  {&lt;br /&gt;
	  	$c = new Criteria();&lt;br /&gt;
	  	if ($filtros_tablas[0]!='')&lt;br /&gt;
	  	{&lt;br /&gt;
	  		for($a=0;$a&amp;lt;count($filtros_tablas);$a++)&lt;br /&gt;
	  		{&lt;br /&gt;
	  			eval('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  			//print ('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  		}&lt;br /&gt;
	  	}&lt;br /&gt;
	  	eval('$lista_arreglo = '.ucfirst(strtolower($tablas[0])).'Peer::doSelect($c);');&lt;br /&gt;
	  	$arreglo = array();&lt;br /&gt;
	  	foreach($lista_arreglo as $obj_estado)&lt;br /&gt;
	  	{&lt;br /&gt;
	  		eval('$arreglo[$obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[0])).'()] = $obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[1])).'();');&lt;br /&gt;
	  	}&lt;br /&gt;
	  	return $arreglo;&lt;br /&gt;
	  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Luego en el Actions.class.php, creamos la funciones Cargar de cada campo asociado al combo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function Cargarpais()&lt;br /&gt;
   {&lt;br /&gt;
     $tablas=array('ocpais');//arreglo de los joins de las tablas&lt;br /&gt;
     $filtros_tablas=array('');//Envio  los filtros de las clases&lt;br /&gt;
     $filtros_variales=array('');//Envio  los parametros de la funcion&lt;br /&gt;
     $campos_retornados=array('codpai','nompai');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
     return $pais= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public function Cargarestados($codpais)&lt;br /&gt;
     {&lt;br /&gt;
       $tablas=array('ocestado');//arreglo de los joins de las tablas&lt;br /&gt;
       $filtros_tablas=array('codpai');//Envio  los filtros de las clases&lt;br /&gt;
       $filtros_variales=array($codpais);//Envio  los parametros de la funcion&lt;br /&gt;
       $campos_retornados=array('codedo','nomedo');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
       return $estado= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    public function Cargarmunicipio($codpais,$codestado)&lt;br /&gt;
      {&lt;br /&gt;
        $tablas=array('ocmunici');//areglo de los joins de las tablas&lt;br /&gt;
	$filtros_tablas=array('codpai','codedo');//Envio los filtros de las clases&lt;br /&gt;
	$filtros_variales=array($codpais,$codestado);//Envio los parametros de la funcion&lt;br /&gt;
	$campos_retornados=array('codmun','nommun');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
	return $municipio= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
		&lt;br /&gt;
       }    	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Luego en el mismo'''actions.class''' creamos una función general que contiene la llamada de cada uno de los Cargar que detallamos en las lineas anteriores. Esta función es llamada en las funciones executeEdit() y updateOcdatsteFromRequest().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function funciones_combos()&lt;br /&gt;
    {&lt;br /&gt;
      $this-&amp;gt;pais = $this-&amp;gt;Cargarpais();&lt;br /&gt;
      $this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;ocdatste-&amp;gt;getCodpai());//contiene los datos de la bd&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota''': $this-&amp;gt;ocdatste-&amp;gt;getCodpai() son los parametros que le tenemos que debemos enviarles dependiendo de cuantos filtros debera tener la funcion de cargar combo.&lt;br /&gt;
&lt;br /&gt;
*En los templates de esta forma, creamos un archivo '''comboSuccess.php''' que contiene la secuencia de como se deben ejecutar los combos, haciendo uso de Ajax.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php use_helper('Object', 'Validation', 'Javascript') ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php if ($tipo=='P')&lt;br /&gt;
{&lt;br /&gt;
 echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
'update'   =&amp;gt; 'divMunicipios',&lt;br /&gt;
'url'      =&amp;gt; 'oycdatsol/combo?par=2',&lt;br /&gt;
'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
else if ($tipo=='E')&lt;br /&gt;
{&lt;br /&gt;
	echo select_tag('ocdatste[codmun]', options_for_select($municipio,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
	'update'   =&amp;gt; 'divParroquia',&lt;br /&gt;
	'url'      =&amp;gt; 'oycdatsol/combo?par=3',&lt;br /&gt;
	'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+document.getElementById('ocdatste_codedo').value+'&amp;amp;municipio='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Cabe destacar que el mismo número de combos que contenga el edit form lo debe tener el archivo '''comboSuccess.php''''''.&lt;br /&gt;
&lt;br /&gt;
* Luego en el actions.class agregamos la función que controla, que se va a ejecutar con la variable de el control de la acción.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function executeCombo()&lt;br /&gt;
    {&lt;br /&gt;
      if ($this-&amp;gt;getRequestParameter('par')=='1')&lt;br /&gt;
        {&lt;br /&gt;
	  $this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;getRequestParameter('pais'));&lt;br /&gt;
	  $this-&amp;gt;tipo='P';&lt;br /&gt;
	}&lt;br /&gt;
	elseif ($this-&amp;gt;getRequestParameter('par')=='2')&lt;br /&gt;
	  {&lt;br /&gt;
	    $this-&amp;gt;municipio = $this-&amp;gt;Cargarmunicipio($this-&amp;gt;getRequestParameter('pais'),$this-&amp;gt;getRequestParameter('estado'));&lt;br /&gt;
	    $this-&amp;gt;tipo='E';&lt;br /&gt;
	  }&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Por último, en el _edit_form se coloca el código php que imprime los combos; en cada uno de los campos.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php echo select_tag('ocdatste[codpai]', options_for_select($pais,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divEstados',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=1',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
//Campo que contiene el estado.&lt;br /&gt;
&amp;lt;div id=&amp;quot;divEstados&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divMunicipios',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=2',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Y listooooooooooooooooooooooo&lt;br /&gt;
'''Jsuarez::::....'''&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes</id>
		<title>Combos de Recargables Dependientes</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes"/>
				<updated>2007-04-30T20:32:03Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*El siguiente código se encuentra en el módulo Obras; forma oycdatsol. Para cargar los combos creamos una función CargarCombo en lib/herramientas, la cual contiene el siguiente código.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static function Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados)&lt;br /&gt;
	  {&lt;br /&gt;
	  	$c = new Criteria();&lt;br /&gt;
	  	if ($filtros_tablas[0]!='')&lt;br /&gt;
	  	{&lt;br /&gt;
	  		for($a=0;$a&amp;lt;count($filtros_tablas);$a++)&lt;br /&gt;
	  		{&lt;br /&gt;
	  			eval('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  			//print ('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  		}&lt;br /&gt;
	  	}&lt;br /&gt;
	  	eval('$lista_arreglo = '.ucfirst(strtolower($tablas[0])).'Peer::doSelect($c);');&lt;br /&gt;
	  	$arreglo = array();&lt;br /&gt;
	  	foreach($lista_arreglo as $obj_estado)&lt;br /&gt;
	  	{&lt;br /&gt;
	  		eval('$arreglo[$obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[0])).'()] = $obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[1])).'();');&lt;br /&gt;
	  	}&lt;br /&gt;
	  	return $arreglo;&lt;br /&gt;
	  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Luego en el Actions.class.php, creamos la funciones Cargar de cada campo asociado al combo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function Cargarpais()&lt;br /&gt;
   {&lt;br /&gt;
     $tablas=array('ocpais');//arreglo de los joins de las tablas&lt;br /&gt;
     $filtros_tablas=array('');//Envio  los filtros de las clases&lt;br /&gt;
     $filtros_variales=array('');//Envio  los parametros de la funcion&lt;br /&gt;
     $campos_retornados=array('codpai','nompai');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
     return $pais= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public function Cargarestados($codpais)&lt;br /&gt;
     {&lt;br /&gt;
       $tablas=array('ocestado');//arreglo de los joins de las tablas&lt;br /&gt;
       $filtros_tablas=array('codpai');//Envio  los filtros de las clases&lt;br /&gt;
       $filtros_variales=array($codpais);//Envio  los parametros de la funcion&lt;br /&gt;
       $campos_retornados=array('codedo','nomedo');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
       return $estado= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    public function Cargarmunicipio($codpais,$codestado)&lt;br /&gt;
      {&lt;br /&gt;
        $tablas=array('ocmunici');//areglo de los joins de las tablas&lt;br /&gt;
	$filtros_tablas=array('codpai','codedo');//Envio los filtros de las clases&lt;br /&gt;
	$filtros_variales=array($codpais,$codestado);//Envio los parametros de la funcion&lt;br /&gt;
	$campos_retornados=array('codmun','nommun');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
	return $municipio= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
		&lt;br /&gt;
       }&lt;br /&gt;
&lt;br /&gt;
    public function Cargarparroquia($codpais,$codestado,$codmunicipio)&lt;br /&gt;
       {&lt;br /&gt;
         $tablas=array('ocparroq');//areglo de los joins de las tablas&lt;br /&gt;
	 $filtros_tablas=array('codpai','codedo','codmun');//Envio los filtros de las clases&lt;br /&gt;
	 $filtros_variales=array($codpais,$codestado,$codmunicipio);//Envio los parametros de la funcion&lt;br /&gt;
	 $campos_retornados=array('codpar','nompar');// Me traigo el nombre y el codigo&lt;br /&gt;
	 return $parroquia= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
    public function Cargarsector($codpais,$codestado,$codmunicipio,$codparroquia)&lt;br /&gt;
      {&lt;br /&gt;
        $tablas=array('ocsector');//areglo de los joins de las tablas&lt;br /&gt;
	$filtros_tablas=array('codpai','codedo','codmun','codpar');//Envio  los filtros de las clases&lt;br /&gt;
	$filtros_variales=array($codpais,$codestado,$codmunicipio,$codparroquia);//Envio los parametros de la funcion&lt;br /&gt;
	$campos_retornados=array('codsec','nomsec');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
	return $sector= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
		&lt;br /&gt;
	}	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Colocar esto en el form edit donde vaya cada combo, donde pais es el padre y estado es el hijo&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php echo label_for('ocdatste[codpai]', __($labels['ocdatste{codpai}']), 'class=&amp;quot;required&amp;quot; ') ?&amp;gt;&lt;br /&gt;
&amp;lt;div&lt;br /&gt;
	class=&amp;quot;content&amp;lt;?php if ($sf_request-&amp;gt;hasError('ocdatste{codpai}')): ?&amp;gt; form-error&amp;lt;?php endif; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if ($sf_request-&amp;gt;hasError('ocdatste{codpai}')): ?&amp;gt;&amp;lt;?php echo form_error('ocdatste{codpai}', array('class' =&amp;gt; 'form-error-msg')) ?&amp;gt;&lt;br /&gt;
&amp;lt;?php endif; ?&amp;gt; &amp;lt;?php echo select_tag('ocdatste[codpai]', options_for_select($pais,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divEstados',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=1',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php echo label_for('ocdatste[codedo]', __($labels['ocdatste{codedo}']), 'class=&amp;quot;required&amp;quot; ') ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;content&amp;lt;?php if ($sf_request-&amp;gt;hasError('ocdatste{codedo}')): ?&amp;gt; form-error&amp;lt;?php endif; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if ($sf_request-&amp;gt;hasError('ocdatste{codedo}')): ?&amp;gt; &amp;lt;?php echo form_error('ocdatste{codedo}', array('class' =&amp;gt; 'form-error-msg')) ?&amp;gt;&lt;br /&gt;
&amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;divEstados&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divMunicipios',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=2',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*creamos un archivo llamado '''comboSuccess.php''' donde vamos a colocar lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php use_helper('Object', 'Validation', 'Javascript') ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php if ($tipo=='P')&lt;br /&gt;
{&lt;br /&gt;
 echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
'update'   =&amp;gt; 'divMunicipios',&lt;br /&gt;
'url'      =&amp;gt; 'oycdatsol/combo?par=2',&lt;br /&gt;
'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
else if ($tipo=='E')&lt;br /&gt;
{&lt;br /&gt;
	echo select_tag('ocdatste[codmun]', options_for_select($municipio,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
	'update'   =&amp;gt; 'divParroquia',&lt;br /&gt;
	'url'      =&amp;gt; 'oycdatsol/combo?par=3',&lt;br /&gt;
	'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+document.getElementById('ocdatste_codedo').value+'&amp;amp;municipio='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Cabe destacar que lo mismos numero de combos que tenga el edit form lo debe tener el '''comboSuccess.php'''''', despues agregamos lo siguiente en el action.class, esta funcion controla que se va a ejecutar con la variable de el control de la accion vea (1)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	public function executeCombo()&lt;br /&gt;
	{&lt;br /&gt;
		if ($this-&amp;gt;getRequestParameter('par')=='1')&lt;br /&gt;
		{&lt;br /&gt;
			$this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;getRequestParameter('pais'));&lt;br /&gt;
			$this-&amp;gt;tipo='P';&lt;br /&gt;
		}&lt;br /&gt;
		elseif ($this-&amp;gt;getRequestParameter('par')=='2')&lt;br /&gt;
		{&lt;br /&gt;
			$this-&amp;gt;municipio = $this-&amp;gt;Cargarmunicipio($this-&amp;gt;getRequestParameter('pais'),$this-&amp;gt;getRequestParameter('estado'));&lt;br /&gt;
			$this-&amp;gt;tipo='E';&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Despues hacemos lo siguientes colocamos las funciones para hacer los llamados a la carga de los combos de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	public function Cargarpais() (2)&lt;br /&gt;
	{&lt;br /&gt;
		$tablas=array('ocpais');//areglo de los joins de las tablas&lt;br /&gt;
		$filtros_tablas=array('');//arreglo donde mando los filtros de las clases&lt;br /&gt;
		$filtros_variales=array('');//arreglo donde mando los parametros de la funcion&lt;br /&gt;
		$campos_retornados=array('codpai','nompai');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
		return $pais= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public function Cargarestados($codpais)&lt;br /&gt;
	{&lt;br /&gt;
		$tablas=array('ocestado');//areglo de los joins de las tablas&lt;br /&gt;
		$filtros_tablas=array('codpai');//arreglo donde mando los filtros de las clases&lt;br /&gt;
		$filtros_variales=array($codpais);//arreglo donde mando los parametros de la funcion&lt;br /&gt;
		$campos_retornados=array('codedo','nomedo');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
		return $estado= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Hacemos una funcion y la colocamos en '''action.class''' en las funciones public function '''executeEdit()''' y en '''protected function updateOcdatsteFromRequest()''', esto nos llamara todas las funciones de cargar combo de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	public function funciones_combos()&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;pais = $this-&amp;gt;Cargarpais();&lt;br /&gt;
		$this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;ocdatste-&amp;gt;getCodpai());//colocar lo q viene de bd&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota''': $this-&amp;gt;ocdatste-&amp;gt;getCodpai() son los parametros que le tenemos que debemos enviarles dependiendo de cuantos filtros debera tener la funcion de cargar combo, '''vea(2)'''&lt;br /&gt;
&lt;br /&gt;
*Se utilizo una funcion para carga de combos que se encuentra en '''herramientas llamada Cargarcombo''', y tiene el siguiente codigo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   public static function Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados)&lt;br /&gt;
	  {&lt;br /&gt;
	  	$c = new Criteria();&lt;br /&gt;
	  	if ($filtros_tablas[0]!='')&lt;br /&gt;
	  	{&lt;br /&gt;
	  		for($a=0;$a&amp;lt;count($filtros_tablas);$a++)&lt;br /&gt;
	  		{&lt;br /&gt;
	  			eval('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  			//print ('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  		}&lt;br /&gt;
	  	}&lt;br /&gt;
	  	eval('$lista_arreglo = '.ucfirst(strtolower($tablas[0])).'Peer::doSelect($c);');&lt;br /&gt;
	  	$arreglo = array();&lt;br /&gt;
	  	foreach($lista_arreglo as $obj_estado)&lt;br /&gt;
	  	{&lt;br /&gt;
	  		eval('$arreglo[$obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[0])).'()] = $obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[1])).'();');&lt;br /&gt;
	  	}&lt;br /&gt;
	  	return $arreglo;&lt;br /&gt;
	  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Y listooooooooooooooooooooooo&lt;br /&gt;
'''Jsuarez::::....'''&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes</id>
		<title>Combos de Recargables Dependientes</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes"/>
				<updated>2007-04-30T20:30:55Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*El siguiente código se encuentra en el módulo Obras; forma oycdatsol. Para cargar los combos creamos una función CargarCombo en lib/herramientas, la cual contiene el siguiente código.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static function Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados)&lt;br /&gt;
	  {&lt;br /&gt;
	  	$c = new Criteria();&lt;br /&gt;
	  	if ($filtros_tablas[0]!='')&lt;br /&gt;
	  	{&lt;br /&gt;
	  		for($a=0;$a&amp;lt;count($filtros_tablas);$a++)&lt;br /&gt;
	  		{&lt;br /&gt;
	  			eval('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  			//print ('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  		}&lt;br /&gt;
	  	}&lt;br /&gt;
	  	eval('$lista_arreglo = '.ucfirst(strtolower($tablas[0])).'Peer::doSelect($c);');&lt;br /&gt;
	  	$arreglo = array();&lt;br /&gt;
	  	foreach($lista_arreglo as $obj_estado)&lt;br /&gt;
	  	{&lt;br /&gt;
	  		eval('$arreglo[$obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[0])).'()] = $obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[1])).'();');&lt;br /&gt;
	  	}&lt;br /&gt;
	  	return $arreglo;&lt;br /&gt;
	  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Luego en el Actions.class.php, creamos la funciones Cargar de cada campo asociado al combo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public function Cargarpais()&lt;br /&gt;
   {&lt;br /&gt;
     $tablas=array('ocpais');//arreglo de los joins de las tablas&lt;br /&gt;
     $filtros_tablas=array('');//Envio  los filtros de las clases&lt;br /&gt;
     $filtros_variales=array('');//Envio  los parametros de la funcion&lt;br /&gt;
     $campos_retornados=array('codpai','nompai');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
     return $pais=       Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public function Cargarestados($codpais)&lt;br /&gt;
     {&lt;br /&gt;
       $tablas=array('ocestado');//arreglo de los joins de las tablas&lt;br /&gt;
       $filtros_tablas=array('codpai');//Envio  los filtros de las clases&lt;br /&gt;
       $filtros_variales=array($codpais);//Envio  los parametros de la funcion&lt;br /&gt;
       $campos_retornados=array('codedo','nomedo');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
       return $estado= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    public function Cargarmunicipio($codpais,$codestado)&lt;br /&gt;
      {&lt;br /&gt;
        $tablas=array('ocmunici');//areglo de los joins de las tablas&lt;br /&gt;
	$filtros_tablas=array('codpai','codedo');//Envio los filtros de las clases&lt;br /&gt;
	$filtros_variales=array($codpais,$codestado);//Envio los parametros de la funcion&lt;br /&gt;
	$campos_retornados=array('codmun','nommun');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
	return $municipio= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
		&lt;br /&gt;
       }&lt;br /&gt;
&lt;br /&gt;
    public function Cargarparroquia($codpais,$codestado,$codmunicipio)&lt;br /&gt;
       {&lt;br /&gt;
         $tablas=array('ocparroq');//areglo de los joins de las tablas&lt;br /&gt;
	 $filtros_tablas=array('codpai','codedo','codmun');//Envio los filtros de las clases&lt;br /&gt;
	 $filtros_variales=array($codpais,$codestado,$codmunicipio);//Envio los parametros de la funcion&lt;br /&gt;
	 $campos_retornados=array('codpar','nompar');// Me traigo el nombre y el codigo&lt;br /&gt;
	 return $parroquia= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
    public function Cargarsector($codpais,$codestado,$codmunicipio,$codparroquia)&lt;br /&gt;
      {&lt;br /&gt;
        $tablas=array('ocsector');//areglo de los joins de las tablas&lt;br /&gt;
	$filtros_tablas=array('codpai','codedo','codmun','codpar');//Envio  los filtros de las clases&lt;br /&gt;
	$filtros_variales=array($codpais,$codestado,$codmunicipio,$codparroquia);//Envio los parametros de la funcion&lt;br /&gt;
	$campos_retornados=array('codsec','nomsec');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
	return $sector= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
		&lt;br /&gt;
	}	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Colocar esto en el form edit donde vaya cada combo, donde pais es el padre y estado es el hijo&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php echo label_for('ocdatste[codpai]', __($labels['ocdatste{codpai}']), 'class=&amp;quot;required&amp;quot; ') ?&amp;gt;&lt;br /&gt;
&amp;lt;div&lt;br /&gt;
	class=&amp;quot;content&amp;lt;?php if ($sf_request-&amp;gt;hasError('ocdatste{codpai}')): ?&amp;gt; form-error&amp;lt;?php endif; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if ($sf_request-&amp;gt;hasError('ocdatste{codpai}')): ?&amp;gt;&amp;lt;?php echo form_error('ocdatste{codpai}', array('class' =&amp;gt; 'form-error-msg')) ?&amp;gt;&lt;br /&gt;
&amp;lt;?php endif; ?&amp;gt; &amp;lt;?php echo select_tag('ocdatste[codpai]', options_for_select($pais,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divEstados',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=1',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php echo label_for('ocdatste[codedo]', __($labels['ocdatste{codedo}']), 'class=&amp;quot;required&amp;quot; ') ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;content&amp;lt;?php if ($sf_request-&amp;gt;hasError('ocdatste{codedo}')): ?&amp;gt; form-error&amp;lt;?php endif; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if ($sf_request-&amp;gt;hasError('ocdatste{codedo}')): ?&amp;gt; &amp;lt;?php echo form_error('ocdatste{codedo}', array('class' =&amp;gt; 'form-error-msg')) ?&amp;gt;&lt;br /&gt;
&amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;divEstados&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divMunicipios',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=2',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*creamos un archivo llamado '''comboSuccess.php''' donde vamos a colocar lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php use_helper('Object', 'Validation', 'Javascript') ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php if ($tipo=='P')&lt;br /&gt;
{&lt;br /&gt;
 echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
'update'   =&amp;gt; 'divMunicipios',&lt;br /&gt;
'url'      =&amp;gt; 'oycdatsol/combo?par=2',&lt;br /&gt;
'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
else if ($tipo=='E')&lt;br /&gt;
{&lt;br /&gt;
	echo select_tag('ocdatste[codmun]', options_for_select($municipio,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
	'update'   =&amp;gt; 'divParroquia',&lt;br /&gt;
	'url'      =&amp;gt; 'oycdatsol/combo?par=3',&lt;br /&gt;
	'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+document.getElementById('ocdatste_codedo').value+'&amp;amp;municipio='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Cabe destacar que lo mismos numero de combos que tenga el edit form lo debe tener el '''comboSuccess.php'''''', despues agregamos lo siguiente en el action.class, esta funcion controla que se va a ejecutar con la variable de el control de la accion vea (1)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	public function executeCombo()&lt;br /&gt;
	{&lt;br /&gt;
		if ($this-&amp;gt;getRequestParameter('par')=='1')&lt;br /&gt;
		{&lt;br /&gt;
			$this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;getRequestParameter('pais'));&lt;br /&gt;
			$this-&amp;gt;tipo='P';&lt;br /&gt;
		}&lt;br /&gt;
		elseif ($this-&amp;gt;getRequestParameter('par')=='2')&lt;br /&gt;
		{&lt;br /&gt;
			$this-&amp;gt;municipio = $this-&amp;gt;Cargarmunicipio($this-&amp;gt;getRequestParameter('pais'),$this-&amp;gt;getRequestParameter('estado'));&lt;br /&gt;
			$this-&amp;gt;tipo='E';&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Despues hacemos lo siguientes colocamos las funciones para hacer los llamados a la carga de los combos de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	public function Cargarpais() (2)&lt;br /&gt;
	{&lt;br /&gt;
		$tablas=array('ocpais');//areglo de los joins de las tablas&lt;br /&gt;
		$filtros_tablas=array('');//arreglo donde mando los filtros de las clases&lt;br /&gt;
		$filtros_variales=array('');//arreglo donde mando los parametros de la funcion&lt;br /&gt;
		$campos_retornados=array('codpai','nompai');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
		return $pais= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public function Cargarestados($codpais)&lt;br /&gt;
	{&lt;br /&gt;
		$tablas=array('ocestado');//areglo de los joins de las tablas&lt;br /&gt;
		$filtros_tablas=array('codpai');//arreglo donde mando los filtros de las clases&lt;br /&gt;
		$filtros_variales=array($codpais);//arreglo donde mando los parametros de la funcion&lt;br /&gt;
		$campos_retornados=array('codedo','nomedo');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
		return $estado= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Hacemos una funcion y la colocamos en '''action.class''' en las funciones public function '''executeEdit()''' y en '''protected function updateOcdatsteFromRequest()''', esto nos llamara todas las funciones de cargar combo de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	public function funciones_combos()&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;pais = $this-&amp;gt;Cargarpais();&lt;br /&gt;
		$this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;ocdatste-&amp;gt;getCodpai());//colocar lo q viene de bd&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota''': $this-&amp;gt;ocdatste-&amp;gt;getCodpai() son los parametros que le tenemos que debemos enviarles dependiendo de cuantos filtros debera tener la funcion de cargar combo, '''vea(2)'''&lt;br /&gt;
&lt;br /&gt;
*Se utilizo una funcion para carga de combos que se encuentra en '''herramientas llamada Cargarcombo''', y tiene el siguiente codigo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   public static function Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados)&lt;br /&gt;
	  {&lt;br /&gt;
	  	$c = new Criteria();&lt;br /&gt;
	  	if ($filtros_tablas[0]!='')&lt;br /&gt;
	  	{&lt;br /&gt;
	  		for($a=0;$a&amp;lt;count($filtros_tablas);$a++)&lt;br /&gt;
	  		{&lt;br /&gt;
	  			eval('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  			//print ('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  		}&lt;br /&gt;
	  	}&lt;br /&gt;
	  	eval('$lista_arreglo = '.ucfirst(strtolower($tablas[0])).'Peer::doSelect($c);');&lt;br /&gt;
	  	$arreglo = array();&lt;br /&gt;
	  	foreach($lista_arreglo as $obj_estado)&lt;br /&gt;
	  	{&lt;br /&gt;
	  		eval('$arreglo[$obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[0])).'()] = $obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[1])).'();');&lt;br /&gt;
	  	}&lt;br /&gt;
	  	return $arreglo;&lt;br /&gt;
	  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Y listooooooooooooooooooooooo&lt;br /&gt;
'''Jsuarez::::....'''&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes</id>
		<title>Combos de Recargables Dependientes</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes"/>
				<updated>2007-04-30T20:15:21Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*El siguiente código se encuentra en el módulo Obras; forma oycdatsol. Para cargar los combos creamos una función CargarCombo en lib/herramientas, la cual contiene el siguiente código.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static function Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados)&lt;br /&gt;
	  {&lt;br /&gt;
	  	$c = new Criteria();&lt;br /&gt;
	  	if ($filtros_tablas[0]!='')&lt;br /&gt;
	  	{&lt;br /&gt;
	  		for($a=0;$a&amp;lt;count($filtros_tablas);$a++)&lt;br /&gt;
	  		{&lt;br /&gt;
	  			eval('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  			//print ('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  		}&lt;br /&gt;
	  	}&lt;br /&gt;
	  	eval('$lista_arreglo = '.ucfirst(strtolower($tablas[0])).'Peer::doSelect($c);');&lt;br /&gt;
	  	$arreglo = array();&lt;br /&gt;
	  	foreach($lista_arreglo as $obj_estado)&lt;br /&gt;
	  	{&lt;br /&gt;
	  		eval('$arreglo[$obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[0])).'()] = $obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[1])).'();');&lt;br /&gt;
	  	}&lt;br /&gt;
	  	return $arreglo;&lt;br /&gt;
	  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Colocar esto en el form edit donde vaya cada combo, donde pais es el padre y estado es el hijo&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php echo label_for('ocdatste[codpai]', __($labels['ocdatste{codpai}']), 'class=&amp;quot;required&amp;quot; ') ?&amp;gt;&lt;br /&gt;
&amp;lt;div&lt;br /&gt;
	class=&amp;quot;content&amp;lt;?php if ($sf_request-&amp;gt;hasError('ocdatste{codpai}')): ?&amp;gt; form-error&amp;lt;?php endif; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if ($sf_request-&amp;gt;hasError('ocdatste{codpai}')): ?&amp;gt;&amp;lt;?php echo form_error('ocdatste{codpai}', array('class' =&amp;gt; 'form-error-msg')) ?&amp;gt;&lt;br /&gt;
&amp;lt;?php endif; ?&amp;gt; &amp;lt;?php echo select_tag('ocdatste[codpai]', options_for_select($pais,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divEstados',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=1',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php echo label_for('ocdatste[codedo]', __($labels['ocdatste{codedo}']), 'class=&amp;quot;required&amp;quot; ') ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;content&amp;lt;?php if ($sf_request-&amp;gt;hasError('ocdatste{codedo}')): ?&amp;gt; form-error&amp;lt;?php endif; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if ($sf_request-&amp;gt;hasError('ocdatste{codedo}')): ?&amp;gt; &amp;lt;?php echo form_error('ocdatste{codedo}', array('class' =&amp;gt; 'form-error-msg')) ?&amp;gt;&lt;br /&gt;
&amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;divEstados&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divMunicipios',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=2',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*creamos un archivo llamado '''comboSuccess.php''' donde vamos a colocar lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php use_helper('Object', 'Validation', 'Javascript') ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php if ($tipo=='P')&lt;br /&gt;
{&lt;br /&gt;
 echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
'update'   =&amp;gt; 'divMunicipios',&lt;br /&gt;
'url'      =&amp;gt; 'oycdatsol/combo?par=2',&lt;br /&gt;
'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
else if ($tipo=='E')&lt;br /&gt;
{&lt;br /&gt;
	echo select_tag('ocdatste[codmun]', options_for_select($municipio,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
	'update'   =&amp;gt; 'divParroquia',&lt;br /&gt;
	'url'      =&amp;gt; 'oycdatsol/combo?par=3',&lt;br /&gt;
	'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+document.getElementById('ocdatste_codedo').value+'&amp;amp;municipio='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Cabe destacar que lo mismos numero de combos que tenga el edit form lo debe tener el '''comboSuccess.php'''''', despues agregamos lo siguiente en el action.class, esta funcion controla que se va a ejecutar con la variable de el control de la accion vea (1)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	public function executeCombo()&lt;br /&gt;
	{&lt;br /&gt;
		if ($this-&amp;gt;getRequestParameter('par')=='1')&lt;br /&gt;
		{&lt;br /&gt;
			$this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;getRequestParameter('pais'));&lt;br /&gt;
			$this-&amp;gt;tipo='P';&lt;br /&gt;
		}&lt;br /&gt;
		elseif ($this-&amp;gt;getRequestParameter('par')=='2')&lt;br /&gt;
		{&lt;br /&gt;
			$this-&amp;gt;municipio = $this-&amp;gt;Cargarmunicipio($this-&amp;gt;getRequestParameter('pais'),$this-&amp;gt;getRequestParameter('estado'));&lt;br /&gt;
			$this-&amp;gt;tipo='E';&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Despues hacemos lo siguientes colocamos las funciones para hacer los llamados a la carga de los combos de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	public function Cargarpais() (2)&lt;br /&gt;
	{&lt;br /&gt;
		$tablas=array('ocpais');//areglo de los joins de las tablas&lt;br /&gt;
		$filtros_tablas=array('');//arreglo donde mando los filtros de las clases&lt;br /&gt;
		$filtros_variales=array('');//arreglo donde mando los parametros de la funcion&lt;br /&gt;
		$campos_retornados=array('codpai','nompai');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
		return $pais= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public function Cargarestados($codpais)&lt;br /&gt;
	{&lt;br /&gt;
		$tablas=array('ocestado');//areglo de los joins de las tablas&lt;br /&gt;
		$filtros_tablas=array('codpai');//arreglo donde mando los filtros de las clases&lt;br /&gt;
		$filtros_variales=array($codpais);//arreglo donde mando los parametros de la funcion&lt;br /&gt;
		$campos_retornados=array('codedo','nomedo');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
		return $estado= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Hacemos una funcion y la colocamos en '''action.class''' en las funciones public function '''executeEdit()''' y en '''protected function updateOcdatsteFromRequest()''', esto nos llamara todas las funciones de cargar combo de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	public function funciones_combos()&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;pais = $this-&amp;gt;Cargarpais();&lt;br /&gt;
		$this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;ocdatste-&amp;gt;getCodpai());//colocar lo q viene de bd&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota''': $this-&amp;gt;ocdatste-&amp;gt;getCodpai() son los parametros que le tenemos que debemos enviarles dependiendo de cuantos filtros debera tener la funcion de cargar combo, '''vea(2)'''&lt;br /&gt;
&lt;br /&gt;
*Se utilizo una funcion para carga de combos que se encuentra en '''herramientas llamada Cargarcombo''', y tiene el siguiente codigo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   public static function Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados)&lt;br /&gt;
	  {&lt;br /&gt;
	  	$c = new Criteria();&lt;br /&gt;
	  	if ($filtros_tablas[0]!='')&lt;br /&gt;
	  	{&lt;br /&gt;
	  		for($a=0;$a&amp;lt;count($filtros_tablas);$a++)&lt;br /&gt;
	  		{&lt;br /&gt;
	  			eval('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  			//print ('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  		}&lt;br /&gt;
	  	}&lt;br /&gt;
	  	eval('$lista_arreglo = '.ucfirst(strtolower($tablas[0])).'Peer::doSelect($c);');&lt;br /&gt;
	  	$arreglo = array();&lt;br /&gt;
	  	foreach($lista_arreglo as $obj_estado)&lt;br /&gt;
	  	{&lt;br /&gt;
	  		eval('$arreglo[$obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[0])).'()] = $obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[1])).'();');&lt;br /&gt;
	  	}&lt;br /&gt;
	  	return $arreglo;&lt;br /&gt;
	  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Y listooooooooooooooooooooooo&lt;br /&gt;
'''Jsuarez::::....'''&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes</id>
		<title>Combos de Recargables Dependientes</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes"/>
				<updated>2007-04-30T20:13:15Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*El siguiente código se encuentra en el módulo Obras; forma ocdatsol. Para cargar los combos creamos una función CargarCombo en lib/herramientas, la cual contiene el siguiente código.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public static function Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados)&lt;br /&gt;
	  {&lt;br /&gt;
	  	$c = new Criteria();&lt;br /&gt;
	  	if ($filtros_tablas[0]!='')&lt;br /&gt;
	  	{&lt;br /&gt;
	  		for($a=0;$a&amp;lt;count($filtros_tablas);$a++)&lt;br /&gt;
	  		{&lt;br /&gt;
	  			eval('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  			//print ('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  		}&lt;br /&gt;
	  	}&lt;br /&gt;
	  	eval('$lista_arreglo = '.ucfirst(strtolower($tablas[0])).'Peer::doSelect($c);');&lt;br /&gt;
	  	$arreglo = array();&lt;br /&gt;
	  	foreach($lista_arreglo as $obj_estado)&lt;br /&gt;
	  	{&lt;br /&gt;
	  		eval('$arreglo[$obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[0])).'()] = $obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[1])).'();');&lt;br /&gt;
	  	}&lt;br /&gt;
	  	return $arreglo;&lt;br /&gt;
	  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Colocar esto en el form edit donde vaya cada combo, donde pais es el padre y estado es el hijo&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php echo label_for('ocdatste[codpai]', __($labels['ocdatste{codpai}']), 'class=&amp;quot;required&amp;quot; ') ?&amp;gt;&lt;br /&gt;
&amp;lt;div&lt;br /&gt;
	class=&amp;quot;content&amp;lt;?php if ($sf_request-&amp;gt;hasError('ocdatste{codpai}')): ?&amp;gt; form-error&amp;lt;?php endif; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if ($sf_request-&amp;gt;hasError('ocdatste{codpai}')): ?&amp;gt;&amp;lt;?php echo form_error('ocdatste{codpai}', array('class' =&amp;gt; 'form-error-msg')) ?&amp;gt;&lt;br /&gt;
&amp;lt;?php endif; ?&amp;gt; &amp;lt;?php echo select_tag('ocdatste[codpai]', options_for_select($pais,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divEstados',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=1',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php echo label_for('ocdatste[codedo]', __($labels['ocdatste{codedo}']), 'class=&amp;quot;required&amp;quot; ') ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;content&amp;lt;?php if ($sf_request-&amp;gt;hasError('ocdatste{codedo}')): ?&amp;gt; form-error&amp;lt;?php endif; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if ($sf_request-&amp;gt;hasError('ocdatste{codedo}')): ?&amp;gt; &amp;lt;?php echo form_error('ocdatste{codedo}', array('class' =&amp;gt; 'form-error-msg')) ?&amp;gt;&lt;br /&gt;
&amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;divEstados&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divMunicipios',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=2',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*creamos un archivo llamado '''comboSuccess.php''' donde vamos a colocar lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php use_helper('Object', 'Validation', 'Javascript') ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php if ($tipo=='P')&lt;br /&gt;
{&lt;br /&gt;
 echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
'update'   =&amp;gt; 'divMunicipios',&lt;br /&gt;
'url'      =&amp;gt; 'oycdatsol/combo?par=2',&lt;br /&gt;
'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
else if ($tipo=='E')&lt;br /&gt;
{&lt;br /&gt;
	echo select_tag('ocdatste[codmun]', options_for_select($municipio,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
	'update'   =&amp;gt; 'divParroquia',&lt;br /&gt;
	'url'      =&amp;gt; 'oycdatsol/combo?par=3',&lt;br /&gt;
	'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+document.getElementById('ocdatste_codedo').value+'&amp;amp;municipio='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Cabe destacar que lo mismos numero de combos que tenga el edit form lo debe tener el '''comboSuccess.php'''''', despues agregamos lo siguiente en el action.class, esta funcion controla que se va a ejecutar con la variable de el control de la accion vea (1)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	public function executeCombo()&lt;br /&gt;
	{&lt;br /&gt;
		if ($this-&amp;gt;getRequestParameter('par')=='1')&lt;br /&gt;
		{&lt;br /&gt;
			$this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;getRequestParameter('pais'));&lt;br /&gt;
			$this-&amp;gt;tipo='P';&lt;br /&gt;
		}&lt;br /&gt;
		elseif ($this-&amp;gt;getRequestParameter('par')=='2')&lt;br /&gt;
		{&lt;br /&gt;
			$this-&amp;gt;municipio = $this-&amp;gt;Cargarmunicipio($this-&amp;gt;getRequestParameter('pais'),$this-&amp;gt;getRequestParameter('estado'));&lt;br /&gt;
			$this-&amp;gt;tipo='E';&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Despues hacemos lo siguientes colocamos las funciones para hacer los llamados a la carga de los combos de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	public function Cargarpais() (2)&lt;br /&gt;
	{&lt;br /&gt;
		$tablas=array('ocpais');//areglo de los joins de las tablas&lt;br /&gt;
		$filtros_tablas=array('');//arreglo donde mando los filtros de las clases&lt;br /&gt;
		$filtros_variales=array('');//arreglo donde mando los parametros de la funcion&lt;br /&gt;
		$campos_retornados=array('codpai','nompai');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
		return $pais= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public function Cargarestados($codpais)&lt;br /&gt;
	{&lt;br /&gt;
		$tablas=array('ocestado');//areglo de los joins de las tablas&lt;br /&gt;
		$filtros_tablas=array('codpai');//arreglo donde mando los filtros de las clases&lt;br /&gt;
		$filtros_variales=array($codpais);//arreglo donde mando los parametros de la funcion&lt;br /&gt;
		$campos_retornados=array('codedo','nomedo');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
		return $estado= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Hacemos una funcion y la colocamos en '''action.class''' en las funciones public function '''executeEdit()''' y en '''protected function updateOcdatsteFromRequest()''', esto nos llamara todas las funciones de cargar combo de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	public function funciones_combos()&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;pais = $this-&amp;gt;Cargarpais();&lt;br /&gt;
		$this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;ocdatste-&amp;gt;getCodpai());//colocar lo q viene de bd&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota''': $this-&amp;gt;ocdatste-&amp;gt;getCodpai() son los parametros que le tenemos que debemos enviarles dependiendo de cuantos filtros debera tener la funcion de cargar combo, '''vea(2)'''&lt;br /&gt;
&lt;br /&gt;
*Se utilizo una funcion para carga de combos que se encuentra en '''herramientas llamada Cargarcombo''', y tiene el siguiente codigo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   public static function Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados)&lt;br /&gt;
	  {&lt;br /&gt;
	  	$c = new Criteria();&lt;br /&gt;
	  	if ($filtros_tablas[0]!='')&lt;br /&gt;
	  	{&lt;br /&gt;
	  		for($a=0;$a&amp;lt;count($filtros_tablas);$a++)&lt;br /&gt;
	  		{&lt;br /&gt;
	  			eval('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  			//print ('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  		}&lt;br /&gt;
	  	}&lt;br /&gt;
	  	eval('$lista_arreglo = '.ucfirst(strtolower($tablas[0])).'Peer::doSelect($c);');&lt;br /&gt;
	  	$arreglo = array();&lt;br /&gt;
	  	foreach($lista_arreglo as $obj_estado)&lt;br /&gt;
	  	{&lt;br /&gt;
	  		eval('$arreglo[$obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[0])).'()] = $obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[1])).'();');&lt;br /&gt;
	  	}&lt;br /&gt;
	  	return $arreglo;&lt;br /&gt;
	  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Y listooooooooooooooooooooooo&lt;br /&gt;
'''Jsuarez::::....'''&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes</id>
		<title>Combos de Recargables Dependientes</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes"/>
				<updated>2007-04-30T20:00:07Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*Colocar esto en el form edit donde vaya cada combo, donde pais es el padre y estado es el hijo&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php echo label_for('ocdatste[codpai]', __($labels['ocdatste{codpai}']), 'class=&amp;quot;required&amp;quot; ') ?&amp;gt;&lt;br /&gt;
&amp;lt;div&lt;br /&gt;
	class=&amp;quot;content&amp;lt;?php if ($sf_request-&amp;gt;hasError('ocdatste{codpai}')): ?&amp;gt; form-error&amp;lt;?php endif; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if ($sf_request-&amp;gt;hasError('ocdatste{codpai}')): ?&amp;gt;&amp;lt;?php echo form_error('ocdatste{codpai}', array('class' =&amp;gt; 'form-error-msg')) ?&amp;gt;&lt;br /&gt;
&amp;lt;?php endif; ?&amp;gt; &amp;lt;?php echo select_tag('ocdatste[codpai]', options_for_select($pais,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divEstados',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=1',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php echo label_for('ocdatste[codedo]', __($labels['ocdatste{codedo}']), 'class=&amp;quot;required&amp;quot; ') ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;content&amp;lt;?php if ($sf_request-&amp;gt;hasError('ocdatste{codedo}')): ?&amp;gt; form-error&amp;lt;?php endif; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if ($sf_request-&amp;gt;hasError('ocdatste{codedo}')): ?&amp;gt; &amp;lt;?php echo form_error('ocdatste{codedo}', array('class' =&amp;gt; 'form-error-msg')) ?&amp;gt;&lt;br /&gt;
&amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;divEstados&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divMunicipios',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=2',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*creamos un archivo llamado '''comboSuccess.php''' donde vamos a colocar lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php use_helper('Object', 'Validation', 'Javascript') ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php if ($tipo=='P')&lt;br /&gt;
{&lt;br /&gt;
 echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
'update'   =&amp;gt; 'divMunicipios',&lt;br /&gt;
'url'      =&amp;gt; 'oycdatsol/combo?par=2',&lt;br /&gt;
'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
else if ($tipo=='E')&lt;br /&gt;
{&lt;br /&gt;
	echo select_tag('ocdatste[codmun]', options_for_select($municipio,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
	'update'   =&amp;gt; 'divParroquia',&lt;br /&gt;
	'url'      =&amp;gt; 'oycdatsol/combo?par=3',&lt;br /&gt;
	'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+document.getElementById('ocdatste_codedo').value+'&amp;amp;municipio='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Cabe destacar que lo mismos numero de combos que tenga el edit form lo debe tener el '''comboSuccess.php'''''', despues agregamos lo siguiente en el action.class, esta funcion controla que se va a ejecutar con la variable de el control de la accion vea (1)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	public function executeCombo()&lt;br /&gt;
	{&lt;br /&gt;
		if ($this-&amp;gt;getRequestParameter('par')=='1')&lt;br /&gt;
		{&lt;br /&gt;
			$this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;getRequestParameter('pais'));&lt;br /&gt;
			$this-&amp;gt;tipo='P';&lt;br /&gt;
		}&lt;br /&gt;
		elseif ($this-&amp;gt;getRequestParameter('par')=='2')&lt;br /&gt;
		{&lt;br /&gt;
			$this-&amp;gt;municipio = $this-&amp;gt;Cargarmunicipio($this-&amp;gt;getRequestParameter('pais'),$this-&amp;gt;getRequestParameter('estado'));&lt;br /&gt;
			$this-&amp;gt;tipo='E';&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Despues hacemos lo siguientes colocamos las funciones para hacer los llamados a la carga de los combos de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	public function Cargarpais() (2)&lt;br /&gt;
	{&lt;br /&gt;
		$tablas=array('ocpais');//areglo de los joins de las tablas&lt;br /&gt;
		$filtros_tablas=array('');//arreglo donde mando los filtros de las clases&lt;br /&gt;
		$filtros_variales=array('');//arreglo donde mando los parametros de la funcion&lt;br /&gt;
		$campos_retornados=array('codpai','nompai');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
		return $pais= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public function Cargarestados($codpais)&lt;br /&gt;
	{&lt;br /&gt;
		$tablas=array('ocestado');//areglo de los joins de las tablas&lt;br /&gt;
		$filtros_tablas=array('codpai');//arreglo donde mando los filtros de las clases&lt;br /&gt;
		$filtros_variales=array($codpais);//arreglo donde mando los parametros de la funcion&lt;br /&gt;
		$campos_retornados=array('codedo','nomedo');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
		return $estado= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Hacemos una funcion y la colocamos en '''action.class''' en las funciones public function '''executeEdit()''' y en '''protected function updateOcdatsteFromRequest()''', esto nos llamara todas las funciones de cargar combo de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	public function funciones_combos()&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;pais = $this-&amp;gt;Cargarpais();&lt;br /&gt;
		$this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;ocdatste-&amp;gt;getCodpai());//colocar lo q viene de bd&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota''': $this-&amp;gt;ocdatste-&amp;gt;getCodpai() son los parametros que le tenemos que debemos enviarles dependiendo de cuantos filtros debera tener la funcion de cargar combo, '''vea(2)'''&lt;br /&gt;
&lt;br /&gt;
*Se utilizo una funcion para carga de combos que se encuentra en '''herramientas llamada Cargarcombo''', y tiene el siguiente codigo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   public static function Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados)&lt;br /&gt;
	  {&lt;br /&gt;
	  	$c = new Criteria();&lt;br /&gt;
	  	if ($filtros_tablas[0]!='')&lt;br /&gt;
	  	{&lt;br /&gt;
	  		for($a=0;$a&amp;lt;count($filtros_tablas);$a++)&lt;br /&gt;
	  		{&lt;br /&gt;
	  			eval('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  			//print ('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  		}&lt;br /&gt;
	  	}&lt;br /&gt;
	  	eval('$lista_arreglo = '.ucfirst(strtolower($tablas[0])).'Peer::doSelect($c);');&lt;br /&gt;
	  	$arreglo = array();&lt;br /&gt;
	  	foreach($lista_arreglo as $obj_estado)&lt;br /&gt;
	  	{&lt;br /&gt;
	  		eval('$arreglo[$obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[0])).'()] = $obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[1])).'();');&lt;br /&gt;
	  	}&lt;br /&gt;
	  	return $arreglo;&lt;br /&gt;
	  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Y listooooooooooooooooooooooo&lt;br /&gt;
'''Jsuarez::::....'''&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes</id>
		<title>Combos de Recargables Dependientes</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes"/>
				<updated>2007-04-30T19:59:54Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Colocar esto en el form edit donde vaya cada combo, donde pais es el padre y estado es el hijo&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php echo label_for('ocdatste[codpai]', __($labels['ocdatste{codpai}']), 'class=&amp;quot;required&amp;quot; ') ?&amp;gt;&lt;br /&gt;
&amp;lt;div&lt;br /&gt;
	class=&amp;quot;content&amp;lt;?php if ($sf_request-&amp;gt;hasError('ocdatste{codpai}')): ?&amp;gt; form-error&amp;lt;?php endif; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if ($sf_request-&amp;gt;hasError('ocdatste{codpai}')): ?&amp;gt;&amp;lt;?php echo form_error('ocdatste{codpai}', array('class' =&amp;gt; 'form-error-msg')) ?&amp;gt;&lt;br /&gt;
&amp;lt;?php endif; ?&amp;gt; &amp;lt;?php echo select_tag('ocdatste[codpai]', options_for_select($pais,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divEstados',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=1',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php echo label_for('ocdatste[codedo]', __($labels['ocdatste{codedo}']), 'class=&amp;quot;required&amp;quot; ') ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;content&amp;lt;?php if ($sf_request-&amp;gt;hasError('ocdatste{codedo}')): ?&amp;gt; form-error&amp;lt;?php endif; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if ($sf_request-&amp;gt;hasError('ocdatste{codedo}')): ?&amp;gt; &amp;lt;?php echo form_error('ocdatste{codedo}', array('class' =&amp;gt; 'form-error-msg')) ?&amp;gt;&lt;br /&gt;
&amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;divEstados&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divMunicipios',//Div a Actualizar&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=2',//Variable para el control de la accion(1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;//Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*creamos un archivo llamado '''comboSuccess.php''' donde vamos a colocar lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php use_helper('Object', 'Validation', 'Javascript') ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php if ($tipo=='P')&lt;br /&gt;
{&lt;br /&gt;
 echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
'update'   =&amp;gt; 'divMunicipios',&lt;br /&gt;
'url'      =&amp;gt; 'oycdatsol/combo?par=2',&lt;br /&gt;
'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
else if ($tipo=='E')&lt;br /&gt;
{&lt;br /&gt;
	echo select_tag('ocdatste[codmun]', options_for_select($municipio,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
	'update'   =&amp;gt; 'divParroquia',&lt;br /&gt;
	'url'      =&amp;gt; 'oycdatsol/combo?par=3',&lt;br /&gt;
	'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+document.getElementById('ocdatste_codedo').value+'&amp;amp;municipio='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Cabe destacar que lo mismos numero de combos que tenga el edit form lo debe tener el '''comboSuccess.php'''''', despues agregamos lo siguiente en el action.class, esta funcion controla que se va a ejecutar con la variable de el control de la accion vea (1)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	public function executeCombo()&lt;br /&gt;
	{&lt;br /&gt;
		if ($this-&amp;gt;getRequestParameter('par')=='1')&lt;br /&gt;
		{&lt;br /&gt;
			$this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;getRequestParameter('pais'));&lt;br /&gt;
			$this-&amp;gt;tipo='P';&lt;br /&gt;
		}&lt;br /&gt;
		elseif ($this-&amp;gt;getRequestParameter('par')=='2')&lt;br /&gt;
		{&lt;br /&gt;
			$this-&amp;gt;municipio = $this-&amp;gt;Cargarmunicipio($this-&amp;gt;getRequestParameter('pais'),$this-&amp;gt;getRequestParameter('estado'));&lt;br /&gt;
			$this-&amp;gt;tipo='E';&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Despues hacemos lo siguientes colocamos las funciones para hacer los llamados a la carga de los combos de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	public function Cargarpais() (2)&lt;br /&gt;
	{&lt;br /&gt;
		$tablas=array('ocpais');//areglo de los joins de las tablas&lt;br /&gt;
		$filtros_tablas=array('');//arreglo donde mando los filtros de las clases&lt;br /&gt;
		$filtros_variales=array('');//arreglo donde mando los parametros de la funcion&lt;br /&gt;
		$campos_retornados=array('codpai','nompai');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
		return $pais= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public function Cargarestados($codpais)&lt;br /&gt;
	{&lt;br /&gt;
		$tablas=array('ocestado');//areglo de los joins de las tablas&lt;br /&gt;
		$filtros_tablas=array('codpai');//arreglo donde mando los filtros de las clases&lt;br /&gt;
		$filtros_variales=array($codpais);//arreglo donde mando los parametros de la funcion&lt;br /&gt;
		$campos_retornados=array('codedo','nomedo');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
		return $estado= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Hacemos una funcion y la colocamos en '''action.class''' en las funciones public function '''executeEdit()''' y en '''protected function updateOcdatsteFromRequest()''', esto nos llamara todas las funciones de cargar combo de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	public function funciones_combos()&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;pais = $this-&amp;gt;Cargarpais();&lt;br /&gt;
		$this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;ocdatste-&amp;gt;getCodpai());//colocar lo q viene de bd&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota''': $this-&amp;gt;ocdatste-&amp;gt;getCodpai() son los parametros que le tenemos que debemos enviarles dependiendo de cuantos filtros debera tener la funcion de cargar combo, '''vea(2)'''&lt;br /&gt;
&lt;br /&gt;
*Se utilizo una funcion para carga de combos que se encuentra en '''herramientas llamada Cargarcombo''', y tiene el siguiente codigo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   public static function Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados)&lt;br /&gt;
	  {&lt;br /&gt;
	  	$c = new Criteria();&lt;br /&gt;
	  	if ($filtros_tablas[0]!='')&lt;br /&gt;
	  	{&lt;br /&gt;
	  		for($a=0;$a&amp;lt;count($filtros_tablas);$a++)&lt;br /&gt;
	  		{&lt;br /&gt;
	  			eval('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  			//print ('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  		}&lt;br /&gt;
	  	}&lt;br /&gt;
	  	eval('$lista_arreglo = '.ucfirst(strtolower($tablas[0])).'Peer::doSelect($c);');&lt;br /&gt;
	  	$arreglo = array();&lt;br /&gt;
	  	foreach($lista_arreglo as $obj_estado)&lt;br /&gt;
	  	{&lt;br /&gt;
	  		eval('$arreglo[$obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[0])).'()] = $obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[1])).'();');&lt;br /&gt;
	  	}&lt;br /&gt;
	  	return $arreglo;&lt;br /&gt;
	  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Y listooooooooooooooooooooooo&lt;br /&gt;
'''Jsuarez::::....'''&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes</id>
		<title>Combos de Recargables Dependientes</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Combos_de_Recargables_Dependientes"/>
				<updated>2007-04-30T19:56:40Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Colocar esto en el form edit donde vaya cada combo, donde pais es el padre y estado es el hijo&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php echo label_for('ocdatste[codpai]', __($labels['ocdatste{codpai}']), 'class=&amp;quot;required&amp;quot; ') ?&amp;gt;&lt;br /&gt;
&amp;lt;div&lt;br /&gt;
	class=&amp;quot;content&amp;lt;?php if ($sf_request-&amp;gt;hasError('ocdatste{codpai}')): ?&amp;gt; form-error&amp;lt;?php endif; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if ($sf_request-&amp;gt;hasError('ocdatste{codpai}')): ?&amp;gt;&amp;lt;?php echo form_error('ocdatste{codpai}', array('class' =&amp;gt; 'form-error-msg')) ?&amp;gt;&lt;br /&gt;
&amp;lt;?php endif; ?&amp;gt; &amp;lt;?php echo select_tag('ocdatste[codpai]', options_for_select($pais,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divEstados',//*****'''Div a Actualizar''''''*******&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=1',//*****Variable para el control de la accion'''******* '''(1)'''&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+this.value&amp;quot;//*****'''Valor de la variale de la caja de texto'''&lt;br /&gt;
  ))));?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php echo label_for('ocdatste[codedo]', __($labels['ocdatste{codedo}']), 'class=&amp;quot;required&amp;quot; ') ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;content&amp;lt;?php if ($sf_request-&amp;gt;hasError('ocdatste{codedo}')): ?&amp;gt; form-error&amp;lt;?php endif; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if ($sf_request-&amp;gt;hasError('ocdatste{codedo}')): ?&amp;gt; &amp;lt;?php echo form_error('ocdatste{codedo}', array('class' =&amp;gt; 'form-error-msg')) ?&amp;gt;&lt;br /&gt;
&amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;divEstados&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
		'update'   =&amp;gt; 'divMunicipios',//*****Div a Actualizar*******&lt;br /&gt;
		'url'      =&amp;gt; 'oycdatsol/combo?par=2',//*****Variable para el control de la accion******* (1)&lt;br /&gt;
		'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;//*****Valor de la variale de la caja de texto&lt;br /&gt;
  ))));?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*creamos un archivo llamado '''comboSuccess.php''' donde vamos a colocar lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php use_helper('Object', 'Validation', 'Javascript') ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php if ($tipo=='P')&lt;br /&gt;
{&lt;br /&gt;
 echo select_tag('ocdatste[codedo]', options_for_select($estados,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
'update'   =&amp;gt; 'divMunicipios',&lt;br /&gt;
'url'      =&amp;gt; 'oycdatsol/combo?par=2',&lt;br /&gt;
'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
else if ($tipo=='E')&lt;br /&gt;
{&lt;br /&gt;
	echo select_tag('ocdatste[codmun]', options_for_select($municipio,'001'),array('onChange'=&amp;gt; remote_function(array(&lt;br /&gt;
	'update'   =&amp;gt; 'divParroquia',&lt;br /&gt;
	'url'      =&amp;gt; 'oycdatsol/combo?par=3',&lt;br /&gt;
	'with' =&amp;gt; &amp;quot;'pais='+document.getElementById('ocdatste_codpai').value+'&amp;amp;estado='+document.getElementById('ocdatste_codedo').value+'&amp;amp;municipio='+this.value&amp;quot;&lt;br /&gt;
  ))));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Cabe destacar que lo mismos numero de combos que tenga el edit form lo debe tener el '''comboSuccess.php'''''', despues agregamos lo siguiente en el action.class, esta funcion controla que se va a ejecutar con la variable de el control de la accion vea (1)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	public function executeCombo()&lt;br /&gt;
	{&lt;br /&gt;
		if ($this-&amp;gt;getRequestParameter('par')=='1')&lt;br /&gt;
		{&lt;br /&gt;
			$this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;getRequestParameter('pais'));&lt;br /&gt;
			$this-&amp;gt;tipo='P';&lt;br /&gt;
		}&lt;br /&gt;
		elseif ($this-&amp;gt;getRequestParameter('par')=='2')&lt;br /&gt;
		{&lt;br /&gt;
			$this-&amp;gt;municipio = $this-&amp;gt;Cargarmunicipio($this-&amp;gt;getRequestParameter('pais'),$this-&amp;gt;getRequestParameter('estado'));&lt;br /&gt;
			$this-&amp;gt;tipo='E';&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Despues hacemos lo siguientes colocamos las funciones para hacer los llamados a la carga de los combos de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	public function Cargarpais() (2)&lt;br /&gt;
	{&lt;br /&gt;
		$tablas=array('ocpais');//areglo de los joins de las tablas&lt;br /&gt;
		$filtros_tablas=array('');//arreglo donde mando los filtros de las clases&lt;br /&gt;
		$filtros_variales=array('');//arreglo donde mando los parametros de la funcion&lt;br /&gt;
		$campos_retornados=array('codpai','nompai');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
		return $pais= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public function Cargarestados($codpais)&lt;br /&gt;
	{&lt;br /&gt;
		$tablas=array('ocestado');//areglo de los joins de las tablas&lt;br /&gt;
		$filtros_tablas=array('codpai');//arreglo donde mando los filtros de las clases&lt;br /&gt;
		$filtros_variales=array($codpais);//arreglo donde mando los parametros de la funcion&lt;br /&gt;
		$campos_retornados=array('codedo','nomedo');// arreglos donde me traigo el nombre y el codigo&lt;br /&gt;
		return $estado= Herramientas::Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Hacemos una funcion y la colocamos en '''action.class''' en las funciones public function '''executeEdit()''' y en '''protected function updateOcdatsteFromRequest()''', esto nos llamara todas las funciones de cargar combo de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	public function funciones_combos()&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;pais = $this-&amp;gt;Cargarpais();&lt;br /&gt;
		$this-&amp;gt;estados = $this-&amp;gt;Cargarestados($this-&amp;gt;ocdatste-&amp;gt;getCodpai());//colocar lo q viene de bd&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Nota''': $this-&amp;gt;ocdatste-&amp;gt;getCodpai() son los parametros que le tenemos que debemos enviarles dependiendo de cuantos filtros debera tener la funcion de cargar como, '''vea(2)'''&lt;br /&gt;
&lt;br /&gt;
*Se utilizo una funcion para carga de combos que se encuentra en '''herramientas llamada Cargarcombo''', y tiene el siguiente codigo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   public static function Cargarcombo($tablas,$filtros_tablas,$filtros_variales,$campos_retornados)&lt;br /&gt;
	  {&lt;br /&gt;
	  	$c = new Criteria();&lt;br /&gt;
	  	if ($filtros_tablas[0]!='')&lt;br /&gt;
	  	{&lt;br /&gt;
	  		for($a=0;$a&amp;lt;count($filtros_tablas);$a++)&lt;br /&gt;
	  		{&lt;br /&gt;
	  			eval('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  			//print ('$c-&amp;gt;add('.ucfirst(strtolower($tablas[0])).'Peer::'.strtoupper($filtros_tablas[$a]).','.chr(39).ucfirst(strtolower($filtros_variales[$a])).chr(39).');');&lt;br /&gt;
	  		}&lt;br /&gt;
	  	}&lt;br /&gt;
	  	eval('$lista_arreglo = '.ucfirst(strtolower($tablas[0])).'Peer::doSelect($c);');&lt;br /&gt;
	  	$arreglo = array();&lt;br /&gt;
	  	foreach($lista_arreglo as $obj_estado)&lt;br /&gt;
	  	{&lt;br /&gt;
	  		eval('$arreglo[$obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[0])).'()] = $obj_estado-&amp;gt;get'.ucfirst(strtolower($campos_retornados[1])).'();');&lt;br /&gt;
	  	}&lt;br /&gt;
	  	return $arreglo;&lt;br /&gt;
	  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Y listooooooooooooooooooooooo&lt;br /&gt;
'''Jsuarez::::....'''&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Validaciones_en_la_vista</id>
		<title>Validaciones en la vista</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Validaciones_en_la_vista"/>
				<updated>2007-04-30T19:23:37Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para realizar las validaciones a una forma debemos: En caso de módulos generados por el propel-init-admin: Crear una carpeta llamada validate y dentro de ella crear un archivo llamado edit.yml y para otro caso módulos generados con el init-module la carpeta validate ya viene por defecto solo debemos crear el archivo .yml debe llamarse a la accion que se va a ejecutar ejemplo edit.&lt;br /&gt;
&lt;br /&gt;
[[Imagen:Muestra.JPG‎]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El archivo edit.yml contiene lo siguiente: '''methods''' se declara el metodo post con los campos que se van a validar al momento de guardar. '''names''' se coloca cada uno de los campos con sus mensajes(si tienen y si son requeridos o no), y llamamos el validators respectivo al campo. Y al final creamos los validators segun las validaciones que tenga que hacersele a los campos.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
methods:&lt;br /&gt;
  post:&lt;br /&gt;
   - &amp;quot;caregart{codart}&amp;quot;      &lt;br /&gt;
   - &amp;quot;caregart{desart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{ramart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{unimed}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{unialt}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{relart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{exitot}&amp;quot;   &lt;br /&gt;
   - &amp;quot;caregart{cosult}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{cospro}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{invini}&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
names: &lt;br /&gt;
  caregart{codart}:&lt;br /&gt;
    required:  Yes&lt;br /&gt;
    required_msg: El Código del Articulo no puedo estar en Blanco          &lt;br /&gt;
&lt;br /&gt;
  caregart{desart}:&lt;br /&gt;
    required:  Yes&lt;br /&gt;
    required_msg: El Descripción no puedo estar en Blanco        &lt;br /&gt;
    validators: StringValidator_desart&lt;br /&gt;
    &lt;br /&gt;
  caregart{ramart}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: StringValidator_ramart&lt;br /&gt;
  &lt;br /&gt;
  caregart{unimed}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: StringValidator_unimed&lt;br /&gt;
    &lt;br /&gt;
  caregart{unialt}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: StringValidator_unialt&lt;br /&gt;
    &lt;br /&gt;
  caregart{relart}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: StringValidator_relart&lt;br /&gt;
    &lt;br /&gt;
  caregart{exitot}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{cosult}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{cospro}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{invini}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
StringValidator_desart:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: La Descripción no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       250&lt;br /&gt;
        max_error: La Descripción no puede pasar mas de 250 caracteres&lt;br /&gt;
        &lt;br /&gt;
StringValidator_ramart:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: El Ramo del Articulo no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       &lt;br /&gt;
        max_error: El Ramo del Articulo no puede pasar mas de 6 caracteres&lt;br /&gt;
        &lt;br /&gt;
StringValidator_unimed:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: La Unidad de Medida no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       &lt;br /&gt;
        max_error: La Unidad de Medida no puede pasar mas de 15 caracteres&lt;br /&gt;
&lt;br /&gt;
StringValidator_unialt:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: La Unidad Alternativa no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       15&lt;br /&gt;
        max_error: La Unidad Alternativa no puede pasar mas de 15 caracteres&lt;br /&gt;
&lt;br /&gt;
StringValidator_relart:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: La Relación no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       25 &lt;br /&gt;
        max_error: La Relación no puede pasar mas de 25 caracteres&lt;br /&gt;
                &lt;br /&gt;
MyNumberValidator:&lt;br /&gt;
    class: sfNumberValidator&lt;br /&gt;
    param:&lt;br /&gt;
        type:         float&lt;br /&gt;
        type_error:   Por favor, Introduzca Números Decimales               &lt;br /&gt;
        nan_error:    Por Favor, introduzca un Número Decimal&lt;br /&gt;
        min:          0000000000.00&lt;br /&gt;
        min_error:    El valor tiene que ser mayor que cero&lt;br /&gt;
        max:          9999999999.99&lt;br /&gt;
        max_error:    El valor debe contener maximo 9999999999.99&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se encuentran algunos de los Estándares de Validación(sfNumberValidator y sfStringValidator) de symfony. Los demas se encuentra en capitulo 10 Libro de Symfony. Y el código de lo que hace en cada uno de ellos, se encuentra en la siguiente dirección C:\AppServ\php5\PEAR\symfony\validator.&lt;br /&gt;
&lt;br /&gt;
--[[Usuario:Desi|Desi]] 16:23 26 abr 2007 (VET)&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Validaciones_en_la_vista</id>
		<title>Validaciones en la vista</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Validaciones_en_la_vista"/>
				<updated>2007-04-30T19:21:44Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para realizar las validaciones a una forma debemos: En caso de módulos generados por el propel-init-admin: Crear una carpeta llamada validate y dentro de ella crear un archivo llamado edit.yml y para otro caso módulos generados con el init-module la carpeta validate ya viene por defecto solo debemos crear el archivo .yml debe llamarse a la accion que se va a ejecutar ejemplo edit.&lt;br /&gt;
&lt;br /&gt;
[[Imagen:Muestra.JPG‎]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El archivo edit.yml contiene lo siguiente: '''methods''' se declara el metodo post con los campos que se van a validar al momento de guardar. '''names''' se coloca cada uno de los campos con sus mensajes(si tienen y si son requeridos o no), y llamamos el validators respectivo al campo. Y al final creamos los validators segun las validaciones que tenga que hacersele a los campos.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
methods:&lt;br /&gt;
  post:&lt;br /&gt;
   - &amp;quot;caregart{codart}&amp;quot;      &lt;br /&gt;
   - &amp;quot;caregart{desart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{ramart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{unimed}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{unialt}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{relart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{exitot}&amp;quot;   &lt;br /&gt;
   - &amp;quot;caregart{cosult}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{cospro}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{invini}&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
names: &lt;br /&gt;
  caregart{codart}:&lt;br /&gt;
    required:  Yes&lt;br /&gt;
    required_msg: El Código del Articulo no puedo estar en Blanco          &lt;br /&gt;
&lt;br /&gt;
  caregart{desart}:&lt;br /&gt;
    required:  Yes&lt;br /&gt;
    required_msg: El Descripción no puedo estar en Blanco        &lt;br /&gt;
    validators: StringValidator_desart&lt;br /&gt;
    &lt;br /&gt;
  caregart{ramart}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: StringValidator_ramart&lt;br /&gt;
  &lt;br /&gt;
  caregart{unimed}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: StringValidator_unimed&lt;br /&gt;
    &lt;br /&gt;
  caregart{unialt}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString4Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{relart}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString5Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{exitot}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{cosult}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{cospro}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{invini}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
StringValidator_desart:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: La Descripción no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       250&lt;br /&gt;
        max_error: La Descripción no puede pasar mas de 250 caracteres&lt;br /&gt;
        &lt;br /&gt;
StringValidator_ramart:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: El Ramo del Articulo no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       &lt;br /&gt;
        max_error: El Ramo del Articulo no puede pasar mas de 6 caracteres&lt;br /&gt;
        &lt;br /&gt;
StringValidator_unimed:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       0&lt;br /&gt;
        min_error: La Unidad de Medida no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       &lt;br /&gt;
        max_error: La Unidad de Medida no puede pasar mas de 15 caracteres&lt;br /&gt;
&lt;br /&gt;
MyString4Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       0&lt;br /&gt;
        min_error: La Unidad Alternativa no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       15&lt;br /&gt;
        max_error: La Unidad Alternativa no puede pasar mas de 15 caracteres&lt;br /&gt;
&lt;br /&gt;
MyString5Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       0&lt;br /&gt;
        min_error: La Relación no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       25 &lt;br /&gt;
        max_error: La Relación no puede pasar mas de 25 caracteres&lt;br /&gt;
                &lt;br /&gt;
MyNumberValidator:&lt;br /&gt;
    class: sfNumberValidator&lt;br /&gt;
    param:&lt;br /&gt;
        type:         float&lt;br /&gt;
        type_error:   Por favor, Introduzca Números Decimales               &lt;br /&gt;
        nan_error:    Por Favor, introduzca un Número Decimal&lt;br /&gt;
        min:          0000000000.00&lt;br /&gt;
        min_error:    El valor tiene que ser mayor que cero&lt;br /&gt;
        max:          9999999999.99&lt;br /&gt;
        max_error:    El valor debe contener maximo 9999999999.99&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se encuentran algunos de los Estándares de Validación(sfNumberValidator y sfStringValidator) de symfony. Los demas se encuentra en capitulo 10 Libro de Symfony. Y el código de lo que hace en cada uno de ellos, se encuentra en la siguiente dirección C:\AppServ\php5\PEAR\symfony\validator.&lt;br /&gt;
&lt;br /&gt;
--[[Usuario:Desi|Desi]] 16:23 26 abr 2007 (VET)&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Validaciones_del_Negocio</id>
		<title>Validaciones del Negocio</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Validaciones_del_Negocio"/>
				<updated>2007-04-26T20:52:10Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para agregar validaciones del Negocio crear una funcion ValidateEdit(Modulo Generados con propel-init-admin) en el Actions.class.php está se ejecutara al mismo tiempo que las otras(al Guardar) y Modificar la función handleErrorEdit. Ejemplo de la forma Almregart.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  private static $coderror=-1; &lt;br /&gt;
       	&lt;br /&gt;
  public function validateEdit()&lt;br /&gt;
    {  	 &lt;br /&gt;
      if($this-&amp;gt;getRequest()-&amp;gt;getMethod() == sfRequest::POST)&lt;br /&gt;
        { &lt;br /&gt;
	  $this-&amp;gt;caregart = $this-&amp;gt;getCaregartOrCreate();&lt;br /&gt;
	  $this-&amp;gt;updateCaregartFromRequest();&lt;br /&gt;
	    	&lt;br /&gt;
	  self::$coderror=Articulos::validarAlmregart($this-&amp;gt;caregart);&lt;br /&gt;
	  if (self::$coderror&amp;lt;&amp;gt;-1)&lt;br /&gt;
            {	    		 	&lt;br /&gt;
	      return false;&lt;br /&gt;
	    }else return true;&lt;br /&gt;
	 }else return true;   &lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
  public function handleErrorEdit()&lt;br /&gt;
    {&lt;br /&gt;
      $this-&amp;gt;preExecute();&lt;br /&gt;
      $this-&amp;gt;caregart = $this-&amp;gt;getCaregartOrCreate();&lt;br /&gt;
      $this-&amp;gt;updateCaregartFromRequest();&lt;br /&gt;
      $this-&amp;gt;labels = $this-&amp;gt;getLabels();&lt;br /&gt;
  &lt;br /&gt;
      if(!$this-&amp;gt;validateEdit())&lt;br /&gt;
        {&lt;br /&gt;
	  $err = Herramientas::obtenerMensajeError(self::$coderror);	    &lt;br /&gt;
	  $this-&amp;gt;getRequest()-&amp;gt;setError('caregart{codart}',$err);	&lt;br /&gt;
        }&lt;br /&gt;
       return sfView::SUCCESS;	&lt;br /&gt;
     } &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Las validaciones del Actions.class.php ultilizan un manejador de errores que se encuentra creado en la carpeta '''config''' , el cual se llama errores.yml, el cual contiene los códigos de los errores.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1:&lt;br /&gt;
  cod: 1&lt;br /&gt;
  msj: Nivel Anterior No Existe&lt;br /&gt;
2:&lt;br /&gt;
  cod: 2&lt;br /&gt;
  msj: El Codigo no puede estar en Blanco ó No puede Contener menos de 4 Carácteres&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estos errores se ejecutan cuando la función a la cual se le asigna $coderror devuelve códigos de errores  '''self::$coderror=Articulos::validarAlmregart($this-&amp;gt;caregart);''', esta linea de código se encuentra en la funcion validateEdit(). Si la función validateEdit() retorna false se ejecuta la función handleErrorEdit() enviando el error a la vista.&lt;br /&gt;
&lt;br /&gt;
--[[Usuario:Desi|Desi]] 16:34 26 abr 2007 (VET)&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Validaciones_del_Negocio</id>
		<title>Validaciones del Negocio</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Validaciones_del_Negocio"/>
				<updated>2007-04-26T20:34:18Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para agregar validaciones del Negocio crear una funcion ValidateEdit(Modulo Generados con propel-init-admin) en el Actions.class.php está se ejecutara al mismo tiempo que las otras(al Guardar) y Modificar la función handleErrorEdit.Ejemplo de la forma Almregart.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  private static $coderror=-1; &lt;br /&gt;
       	&lt;br /&gt;
  public function validateEdit()&lt;br /&gt;
    {  	 &lt;br /&gt;
      if($this-&amp;gt;getRequest()-&amp;gt;getMethod() == sfRequest::POST)&lt;br /&gt;
        { &lt;br /&gt;
	  $this-&amp;gt;caregart = $this-&amp;gt;getCaregartOrCreate();&lt;br /&gt;
	  $this-&amp;gt;updateCaregartFromRequest();&lt;br /&gt;
	    	&lt;br /&gt;
	  self::$coderror=Articulos::validarAlmregart($this-&amp;gt;caregart);&lt;br /&gt;
	  if (self::$coderror&amp;lt;&amp;gt;-1)&lt;br /&gt;
            {	    		 	&lt;br /&gt;
	      return false;&lt;br /&gt;
	    }else return true;&lt;br /&gt;
	 }else return true;   &lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
  public function handleErrorEdit()&lt;br /&gt;
    {&lt;br /&gt;
      $this-&amp;gt;preExecute();&lt;br /&gt;
      $this-&amp;gt;caregart = $this-&amp;gt;getCaregartOrCreate();&lt;br /&gt;
      $this-&amp;gt;updateCaregartFromRequest();&lt;br /&gt;
      $this-&amp;gt;labels = $this-&amp;gt;getLabels();&lt;br /&gt;
  &lt;br /&gt;
      if(!$this-&amp;gt;validateEdit())&lt;br /&gt;
        {&lt;br /&gt;
	  $err = Herramientas::obtenerMensajeError(self::$coderror);	    &lt;br /&gt;
	  $this-&amp;gt;getRequest()-&amp;gt;setError('caregart{codart}',$err);	&lt;br /&gt;
        }&lt;br /&gt;
       return sfView::SUCCESS;	&lt;br /&gt;
     } &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Las validaciones del Actions.class.php ultilizan un manejador de errores que se encuentra creado en la carpeta '''config''' , el cual se llama errores.yml, el cual contiene los códigos de los errores.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1:&lt;br /&gt;
  cod: 1&lt;br /&gt;
  msj: Nivel Anterior No Existe&lt;br /&gt;
2:&lt;br /&gt;
  cod: 2&lt;br /&gt;
  msj: El Codigo no puede estar en Blanco ó No puede Contener menos de 4 Carácteres&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estos errores se ejecutan cuando la función a la cual se le asigna $coderror devuelve códigos de errores  '''self::$coderror=Articulos::validarAlmregart($this-&amp;gt;caregart);''', esta linea de código se encuentra en la funcion validateEdit(). Si la función validateEdit() retorna false se ejecuta la función handleErrorEdit() enviando el error a la vista.&lt;br /&gt;
&lt;br /&gt;
--[[Usuario:Desi|Desi]] 16:34 26 abr 2007 (VET)&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Validaciones_del_Negocio</id>
		<title>Validaciones del Negocio</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Validaciones_del_Negocio"/>
				<updated>2007-04-26T20:32:42Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: New page: Para agregar validaciones del Negocio crear una funcion ValidateEdit(Modulo Generados con propel-init-admin) en el Actions.class.php está se ejecutara al mismo tiempo que las otras(al Gua...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para agregar validaciones del Negocio crear una funcion ValidateEdit(Modulo Generados con propel-init-admin) en el Actions.class.php está se ejecutara al mismo tiempo que las otras(al Guardar) y Modificar la función handleErrorEdit.Ejemplo de la forma Almregart.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  private static $coderror=-1; &lt;br /&gt;
       	&lt;br /&gt;
  public function validateEdit()&lt;br /&gt;
    {  	 &lt;br /&gt;
      if($this-&amp;gt;getRequest()-&amp;gt;getMethod() == sfRequest::POST)&lt;br /&gt;
        { &lt;br /&gt;
	  $this-&amp;gt;caregart = $this-&amp;gt;getCaregartOrCreate();&lt;br /&gt;
	  $this-&amp;gt;updateCaregartFromRequest();&lt;br /&gt;
	    	&lt;br /&gt;
	  self::$coderror=Articulos::validarAlmregart($this-&amp;gt;caregart);&lt;br /&gt;
	  if (self::$coderror&amp;lt;&amp;gt;-1)&lt;br /&gt;
            {	    		 	&lt;br /&gt;
	      return false;&lt;br /&gt;
	    }else return true;&lt;br /&gt;
	 }else return true;   &lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
  public function handleErrorEdit()&lt;br /&gt;
    {&lt;br /&gt;
      $this-&amp;gt;preExecute();&lt;br /&gt;
      $this-&amp;gt;caregart = $this-&amp;gt;getCaregartOrCreate();&lt;br /&gt;
      $this-&amp;gt;updateCaregartFromRequest();&lt;br /&gt;
      $this-&amp;gt;labels = $this-&amp;gt;getLabels();&lt;br /&gt;
  &lt;br /&gt;
      if(!$this-&amp;gt;validateEdit())&lt;br /&gt;
        {&lt;br /&gt;
	  $err = Herramientas::obtenerMensajeError(self::$coderror);	    &lt;br /&gt;
	  $this-&amp;gt;getRequest()-&amp;gt;setError('caregart{codart}',$err);	&lt;br /&gt;
        }&lt;br /&gt;
       return sfView::SUCCESS;	&lt;br /&gt;
     } &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Las validaciones del Actions.class.php ultilizan un manejador de errores que se encuentra creado en la carpeta '''config''' , el cual se llama errores.yml, el cual contiene los códigos de los errores.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1:&lt;br /&gt;
  cod: 1&lt;br /&gt;
  msj: Nivel Anterior No Existe&lt;br /&gt;
2:&lt;br /&gt;
  cod: 2&lt;br /&gt;
  msj: El Codigo no puede estar en Blanco ó No puede Contener menos de 4 Carácteres&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estos errores se ejecutan cuando la función a la cual se le asigna $coderror devuelve códigos de errores  '''self::$coderror=Articulos::validarAlmregart($this-&amp;gt;caregart);''', esta linea de código se encuentra en la funcion validateEdit(). Si la función validateEdit() retorna false se ejecuta la función handleErrorEdit() enviando el error a la vista.&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Validaciones_en_la_vista</id>
		<title>Validaciones en la vista</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Validaciones_en_la_vista"/>
				<updated>2007-04-26T20:23:54Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: New page: Para realizar las validaciones a una forma debemos: En caso de módulos generados por el propel-init-admin: Crear una carpeta llamada validate y dentro de ella crear un archivo llamado edi...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para realizar las validaciones a una forma debemos: En caso de módulos generados por el propel-init-admin: Crear una carpeta llamada validate y dentro de ella crear un archivo llamado edit.yml y para otro caso módulos generados con el init-module la carpeta validate ya viene por defecto solo debemos crear el archivo .yml debe llamarse a la accion que se va a ejecutar ejemplo edit.&lt;br /&gt;
&lt;br /&gt;
[[Imagen:Muestra.JPG‎]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El archivo edit.yml contiene lo siguiente: '''methods''' se declara el metodo post con los campos que se van a validar al momento de guardar. '''names''' se coloca cada uno de los campos con sus mensajes(si tienen y si son requeridos o no), y llamamos el validators respectivo al campo. Y al final creamos los validators segun las validaciones que tenga que hacersele a los campos.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
methods:&lt;br /&gt;
  post:&lt;br /&gt;
   - &amp;quot;caregart{codart}&amp;quot;      &lt;br /&gt;
   - &amp;quot;caregart{desart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{ramart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{unimed}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{unialt}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{relart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{exitot}&amp;quot;   &lt;br /&gt;
   - &amp;quot;caregart{cosult}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{cospro}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{invini}&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
names: &lt;br /&gt;
  caregart{codart}:&lt;br /&gt;
    required:  Yes&lt;br /&gt;
    required_msg: El Código del Articulo no puedo estar en Blanco&lt;br /&gt;
    validators: MyStringValidator6        &lt;br /&gt;
&lt;br /&gt;
  caregart{desart}:&lt;br /&gt;
    required:  Yes&lt;br /&gt;
    required_msg: El Descripción no puedo estar en Blanco        &lt;br /&gt;
    validators: MyStringValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{ramart}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString2Validator&lt;br /&gt;
  &lt;br /&gt;
  caregart{unimed}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString3Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{unialt}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString4Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{relart}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString5Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{exitot}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{cosult}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{cospro}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{invini}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
MyStringValidator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: La Descripción no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       250&lt;br /&gt;
        max_error: La Descripción no puede pasar mas de 250 caracteres&lt;br /&gt;
&lt;br /&gt;
MyStringValidator6:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       1&lt;br /&gt;
        min_error: La Descripción no puede tener menos de 2 caracteres        &lt;br /&gt;
        &lt;br /&gt;
MyString2Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: El Ramo del Articulo no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       &lt;br /&gt;
        max_error: El Estatus no puede pasar mas de 6 caracteres&lt;br /&gt;
        &lt;br /&gt;
MyString3Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       0&lt;br /&gt;
        min_error: La Unidad de Medida no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       &lt;br /&gt;
        max_error: La Unidad de Medida no puede pasar mas de 15 caracteres&lt;br /&gt;
&lt;br /&gt;
MyString4Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       0&lt;br /&gt;
        min_error: La Unidad Alternativa no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       15&lt;br /&gt;
        max_error: La Unidad Alternativa no puede pasar mas de 15 caracteres&lt;br /&gt;
&lt;br /&gt;
MyString5Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       0&lt;br /&gt;
        min_error: La Relación no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       25 &lt;br /&gt;
        max_error: La Relación no puede pasar mas de 25 caracteres&lt;br /&gt;
                &lt;br /&gt;
MyNumberValidator:&lt;br /&gt;
    class: sfNumberValidator&lt;br /&gt;
    param:&lt;br /&gt;
        type:         float&lt;br /&gt;
        type_error:   Por favor, Introduzca Números Decimales               &lt;br /&gt;
        nan_error:    Por Favor, introduzca un Número Decimal&lt;br /&gt;
        min:          0000000000.00&lt;br /&gt;
        min_error:    El valor tiene que ser mayor que cero&lt;br /&gt;
        max:          9999999999.99&lt;br /&gt;
        max_error:    El valor debe contener maximo 9999999999.99&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se encuentran algunos de los Estándares de Validación(sfNumberValidator y sfStringValidator) de symfony. Los demas se encuentra en capitulo 10 Libro de Symfony. Y el código de lo que hace en cada uno de ellos, se encuentra en la siguiente dirección C:\AppServ\php5\PEAR\symfony\validator.&lt;br /&gt;
&lt;br /&gt;
--[[Usuario:Desi|Desi]] 16:23 26 abr 2007 (VET)&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Validaciones</id>
		<title>Validaciones</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Validaciones"/>
				<updated>2007-04-26T20:15:22Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para realizar las validaciones a una forma debemos: En caso de módulos generados por el propel-init-admin: Crear una carpeta llamada validate y dentro de ella crear un archivo llamado edit.yml y para otro caso módulos generados con el init-module la carpeta validate ya viene por defecto solo debemos crear el archivo .yml debe llamarse a la accion que se va a ejecutar ejemplo edit.&lt;br /&gt;
&lt;br /&gt;
[[Imagen:Muestra.JPG‎]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El archivo edit.yml contiene lo siguiente: '''methods''' se declara el metodo post con los campos que se van a validar al momento de guardar. '''names''' se coloca cada uno de los campos con sus mensajes(si tienen y si son requeridos o no), y llamamos el validators respectivo al campo. Y al final creamos los validators segun las validaciones que tenga que hacersele a los campos.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
methods:&lt;br /&gt;
  post:&lt;br /&gt;
   - &amp;quot;caregart{codart}&amp;quot;      &lt;br /&gt;
   - &amp;quot;caregart{desart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{ramart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{unimed}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{unialt}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{relart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{exitot}&amp;quot;   &lt;br /&gt;
   - &amp;quot;caregart{cosult}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{cospro}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{invini}&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
names: &lt;br /&gt;
  caregart{codart}:&lt;br /&gt;
    required:  Yes&lt;br /&gt;
    required_msg: El Código del Articulo no puedo estar en Blanco&lt;br /&gt;
    validators: MyStringValidator6        &lt;br /&gt;
&lt;br /&gt;
  caregart{desart}:&lt;br /&gt;
    required:  Yes&lt;br /&gt;
    required_msg: El Descripción no puedo estar en Blanco        &lt;br /&gt;
    validators: MyStringValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{ramart}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString2Validator&lt;br /&gt;
  &lt;br /&gt;
  caregart{unimed}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString3Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{unialt}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString4Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{relart}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString5Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{exitot}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{cosult}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{cospro}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{invini}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
MyStringValidator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: La Descripción no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       250&lt;br /&gt;
        max_error: La Descripción no puede pasar mas de 250 caracteres&lt;br /&gt;
&lt;br /&gt;
MyStringValidator6:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       1&lt;br /&gt;
        min_error: La Descripción no puede tener menos de 2 caracteres        &lt;br /&gt;
        &lt;br /&gt;
MyString2Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: El Ramo del Articulo no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       &lt;br /&gt;
        max_error: El Estatus no puede pasar mas de 6 caracteres&lt;br /&gt;
        &lt;br /&gt;
MyString3Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       0&lt;br /&gt;
        min_error: La Unidad de Medida no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       &lt;br /&gt;
        max_error: La Unidad de Medida no puede pasar mas de 15 caracteres&lt;br /&gt;
&lt;br /&gt;
MyString4Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       0&lt;br /&gt;
        min_error: La Unidad Alternativa no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       15&lt;br /&gt;
        max_error: La Unidad Alternativa no puede pasar mas de 15 caracteres&lt;br /&gt;
&lt;br /&gt;
MyString5Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       0&lt;br /&gt;
        min_error: La Relación no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       25 &lt;br /&gt;
        max_error: La Relación no puede pasar mas de 25 caracteres&lt;br /&gt;
                &lt;br /&gt;
MyNumberValidator:&lt;br /&gt;
    class: sfNumberValidator&lt;br /&gt;
    param:&lt;br /&gt;
        type:         float&lt;br /&gt;
        type_error:   Por favor, Introduzca Números Decimales               &lt;br /&gt;
        nan_error:    Por Favor, introduzca un Número Decimal&lt;br /&gt;
        min:          0000000000.00&lt;br /&gt;
        min_error:    El valor tiene que ser mayor que cero&lt;br /&gt;
        max:          9999999999.99&lt;br /&gt;
        max_error:    El valor debe contener maximo 9999999999.99&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se encuentran algunos de los Estándares de Validación(sfNumberValidator y sfStringValidator) de symfony. Los demas se encuentra en capitulo 10 y el codigo de lo que hace en cada uno de ellos, se encuentra en la siguiente dirección C:\AppServ\php5\PEAR\symfony\validator.&lt;br /&gt;
&lt;br /&gt;
Nota: Para agregar otras validaciones del Negocio crear una funcion ValidateEdit(Modulo Generados con propel-init-admin) en el Actions.class.php está se ejecutara al mismo tiempo que las otras(al Guardar) y Modificar la función handleErrorEdit.Ejemplo de página Almregart.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  private static $coderror=-1; &lt;br /&gt;
       	&lt;br /&gt;
  public function validateEdit()&lt;br /&gt;
    {  	 &lt;br /&gt;
      if($this-&amp;gt;getRequest()-&amp;gt;getMethod() == sfRequest::POST)&lt;br /&gt;
        { &lt;br /&gt;
	  $this-&amp;gt;caregart = $this-&amp;gt;getCaregartOrCreate();&lt;br /&gt;
	  $this-&amp;gt;updateCaregartFromRequest();&lt;br /&gt;
	    	&lt;br /&gt;
	  self::$coderror=Articulos::validarAlmregart($this-&amp;gt;caregart);&lt;br /&gt;
	  if (self::$coderror&amp;lt;&amp;gt;-1)&lt;br /&gt;
            {	    		 	&lt;br /&gt;
	      return false;&lt;br /&gt;
	    }else return true;&lt;br /&gt;
	 }else return true;   &lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
  public function handleErrorEdit()&lt;br /&gt;
    {&lt;br /&gt;
      $this-&amp;gt;preExecute();&lt;br /&gt;
      $this-&amp;gt;caregart = $this-&amp;gt;getCaregartOrCreate();&lt;br /&gt;
      $this-&amp;gt;updateCaregartFromRequest();&lt;br /&gt;
      $this-&amp;gt;labels = $this-&amp;gt;getLabels();&lt;br /&gt;
  &lt;br /&gt;
      if(!$this-&amp;gt;validateEdit())&lt;br /&gt;
        {&lt;br /&gt;
	  $err = Herramientas::obtenerMensajeError(self::$coderror);	    &lt;br /&gt;
	  $this-&amp;gt;getRequest()-&amp;gt;setError('caregart{codart}',$err);	&lt;br /&gt;
        }&lt;br /&gt;
       return sfView::SUCCESS;	&lt;br /&gt;
     } &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Las validaciones del Actions.class.php ultilizan un manejador de errores que se encuentra creado en la carpeta '''config''' , el cual se llama errores.yml, el cual contiene los códigos de los errores.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1:&lt;br /&gt;
  cod: 1&lt;br /&gt;
  msj: Nivel Anterior No Existe&lt;br /&gt;
2:&lt;br /&gt;
  cod: 2&lt;br /&gt;
  msj: El Codigo no puede estar en Blanco ó No puede Contener menos de 4 Carácteres&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estos errores se ejecutan cuando la función a la cual se le asigna $coderror devuelve códigos de errores  '''self::$coderror=Articulos::validarAlmregart($this-&amp;gt;caregart);''', esta linea de código se encuentra en la funcion validateEdit(). Si la función validateEdit() retorna false se ejecuta la función handleErrorEdit() enviando el error a la vista.&lt;br /&gt;
&lt;br /&gt;
--[[Usuario:Desireé Martínez]] 16:08 26 abr 2007 (VET)&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Validaciones</id>
		<title>Validaciones</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Validaciones"/>
				<updated>2007-04-26T20:13:08Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para realizar las validaciones a una forma debemos: En caso de módulos generados por el propel-init-admin: Crear una carpeta llamada validate y dentro de ella crear un archivo llamado edit.yml y para otro caso módulos generados con el init-module la carpeta validate ya viene por defecto solo debemos crear el archivo .yml debe llamarse a la accion que se va a ejecutar ejemplo edit.&lt;br /&gt;
&lt;br /&gt;
[[Imagen:Muestra.JPG‎]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El archivo edit.yml contiene lo siguiente: '''methods''' se declara el metodo post con los campos que se van a validar al momento de guardar. '''names''' se coloca cada uno de los campos con sus mensajes(si tienen y si son requeridos o no), y llamamos el validators respectivo al campo. Y al final creamos los validators segun las validaciones que tenga que hacersele a los campos.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
methods:&lt;br /&gt;
  post:&lt;br /&gt;
   - &amp;quot;caregart{codart}&amp;quot;      &lt;br /&gt;
   - &amp;quot;caregart{desart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{ramart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{unimed}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{unialt}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{relart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{exitot}&amp;quot;   &lt;br /&gt;
   - &amp;quot;caregart{cosult}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{cospro}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{invini}&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
names: &lt;br /&gt;
  caregart{codart}:&lt;br /&gt;
    required:  Yes&lt;br /&gt;
    required_msg: El Código del Articulo no puedo estar en Blanco&lt;br /&gt;
    validators: MyStringValidator6        &lt;br /&gt;
&lt;br /&gt;
  caregart{desart}:&lt;br /&gt;
    required:  Yes&lt;br /&gt;
    required_msg: El Descripción no puedo estar en Blanco        &lt;br /&gt;
    validators: MyStringValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{ramart}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString2Validator&lt;br /&gt;
  &lt;br /&gt;
  caregart{unimed}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString3Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{unialt}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString4Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{relart}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString5Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{exitot}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{cosult}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{cospro}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{invini}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
MyStringValidator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: La Descripción no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       250&lt;br /&gt;
        max_error: La Descripción no puede pasar mas de 250 caracteres&lt;br /&gt;
&lt;br /&gt;
MyStringValidator6:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       1&lt;br /&gt;
        min_error: La Descripción no puede tener menos de 2 caracteres        &lt;br /&gt;
        &lt;br /&gt;
MyString2Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: El Ramo del Articulo no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       &lt;br /&gt;
        max_error: El Estatus no puede pasar mas de 6 caracteres&lt;br /&gt;
        &lt;br /&gt;
MyString3Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       0&lt;br /&gt;
        min_error: La Unidad de Medida no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       &lt;br /&gt;
        max_error: La Unidad de Medida no puede pasar mas de 15 caracteres&lt;br /&gt;
&lt;br /&gt;
MyString4Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       0&lt;br /&gt;
        min_error: La Unidad Alternativa no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       15&lt;br /&gt;
        max_error: La Unidad Alternativa no puede pasar mas de 15 caracteres&lt;br /&gt;
&lt;br /&gt;
MyString5Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       0&lt;br /&gt;
        min_error: La Relación no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       25 &lt;br /&gt;
        max_error: La Relación no puede pasar mas de 25 caracteres&lt;br /&gt;
                &lt;br /&gt;
MyNumberValidator:&lt;br /&gt;
    class: sfNumberValidator&lt;br /&gt;
    param:&lt;br /&gt;
        type:         float&lt;br /&gt;
        type_error:   Por favor, Introduzca Números Decimales               &lt;br /&gt;
        nan_error:    Por Favor, introduzca un Número Decimal&lt;br /&gt;
        min:          0000000000.00&lt;br /&gt;
        min_error:    El valor tiene que ser mayor que cero&lt;br /&gt;
        max:          9999999999.99&lt;br /&gt;
        max_error:    El valor debe contener maximo 9999999999.99&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se encuentran algunos de los Estándares de Validación(sfNumberValidator y sfStringValidator) de symfony. Los demas se encuentra en capitulo 10 y el codigo de lo que hace en cada uno de ellos, se encuentra en la siguiente dirección C:\AppServ\php5\PEAR\symfony\validator.&lt;br /&gt;
&lt;br /&gt;
Nota: Para agregar otras validaciones del Negocio crear una funcion ValidateEdit(Modulo Generados con propel-init-admin) en el Actions.class.php está se ejecutara al mismo tiempo que las otras(al Guardar).Ejemplo de página Almregart.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  private static $coderror=-1; &lt;br /&gt;
       	&lt;br /&gt;
  public function validateEdit()&lt;br /&gt;
    {  	 &lt;br /&gt;
      if($this-&amp;gt;getRequest()-&amp;gt;getMethod() == sfRequest::POST)&lt;br /&gt;
        { &lt;br /&gt;
	  $this-&amp;gt;caregart = $this-&amp;gt;getCaregartOrCreate();&lt;br /&gt;
	  $this-&amp;gt;updateCaregartFromRequest();&lt;br /&gt;
	    	&lt;br /&gt;
	  self::$coderror=Articulos::validarAlmregart($this-&amp;gt;caregart);&lt;br /&gt;
	  if (self::$coderror&amp;lt;&amp;gt;-1)&lt;br /&gt;
            {	    		 	&lt;br /&gt;
	      return false;&lt;br /&gt;
	    }else return true;&lt;br /&gt;
	 }else return true;   &lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
  public function handleErrorEdit()&lt;br /&gt;
    {&lt;br /&gt;
      $this-&amp;gt;preExecute();&lt;br /&gt;
      $this-&amp;gt;caregart = $this-&amp;gt;getCaregartOrCreate();&lt;br /&gt;
      $this-&amp;gt;updateCaregartFromRequest();&lt;br /&gt;
      $this-&amp;gt;labels = $this-&amp;gt;getLabels();&lt;br /&gt;
  &lt;br /&gt;
      if(!$this-&amp;gt;validateEdit())&lt;br /&gt;
        {&lt;br /&gt;
	  $err = Herramientas::obtenerMensajeError(self::$coderror);	    &lt;br /&gt;
	  $this-&amp;gt;getRequest()-&amp;gt;setError('caregart{codart}',$err);	&lt;br /&gt;
        }&lt;br /&gt;
       return sfView::SUCCESS;	&lt;br /&gt;
     } &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Las validaciones del Actions.class.php ultilizan un manejador de errores que se encuentra creado en la carpeta '''config''' , el cual se llama errores.yml, el contiene los códigos de los errores.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1:&lt;br /&gt;
  cod: 1&lt;br /&gt;
  msj: Nivel Anterior No Existe&lt;br /&gt;
2:&lt;br /&gt;
  cod: 2&lt;br /&gt;
  msj: El Codigo no puede estar en Blanco ó No puede Contener menos de 4 Carácteres&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estos errores se ejecutan cuando la función a la cual se le asigna $coderror devuelve códigos de errores  '''self::$coderror=Articulos::validarAlmregart($this-&amp;gt;caregart);''', la cual se asigna en la funcion validateEdit(). Si la función validateEdit() retorna false se ejecuta la función handleErrorEdit() enviando el error a la vista.&lt;br /&gt;
&lt;br /&gt;
--[[Usuario:Desireé Martínez]] 16:08 26 abr 2007 (VET)&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Validaciones</id>
		<title>Validaciones</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Validaciones"/>
				<updated>2007-04-26T20:10:33Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para realizar las validaciones a una forma debemos: En caso de módulos generados por el propel-init-admin: Crear una carpeta llamada validate y dentro de ella crear un archivo llamado edit.yml y para otro caso módulos generados con el init-module la carpeta validate ya viene por defecto solo debemos crear el archivo .yml debe llamarse a la accion que se va a ejecutar ejemplo edit.&lt;br /&gt;
&lt;br /&gt;
[[Imagen:Muestra.JPG‎]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El archivo edit.yml contiene lo siguiente: '''methods''' se declara el metodo post con los campos que se van a validar al momento de guardar. '''names''' se coloca cada uno de los campos con sus mensajes(si tienen y si son requeridos o no), y llamamos el validators respectivo al campo. Y al final creamos los validators segun las validaciones que tenga que hacersele a los campos.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
methods:&lt;br /&gt;
  post:&lt;br /&gt;
   - &amp;quot;caregart{codart}&amp;quot;      &lt;br /&gt;
   - &amp;quot;caregart{desart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{ramart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{unimed}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{unialt}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{relart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{exitot}&amp;quot;   &lt;br /&gt;
   - &amp;quot;caregart{cosult}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{cospro}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{invini}&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
names: &lt;br /&gt;
  caregart{codart}:&lt;br /&gt;
    required:  Yes&lt;br /&gt;
    required_msg: El Código del Articulo no puedo estar en Blanco&lt;br /&gt;
    validators: MyStringValidator6        &lt;br /&gt;
&lt;br /&gt;
  caregart{desart}:&lt;br /&gt;
    required:  Yes&lt;br /&gt;
    required_msg: El Descripción no puedo estar en Blanco        &lt;br /&gt;
    validators: MyStringValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{ramart}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString2Validator&lt;br /&gt;
  &lt;br /&gt;
  caregart{unimed}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString3Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{unialt}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString4Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{relart}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString5Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{exitot}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{cosult}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{cospro}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{invini}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
MyStringValidator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: La Descripción no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       250&lt;br /&gt;
        max_error: La Descripción no puede pasar mas de 250 caracteres&lt;br /&gt;
&lt;br /&gt;
MyStringValidator6:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       1&lt;br /&gt;
        min_error: La Descripción no puede tener menos de 2 caracteres        &lt;br /&gt;
        &lt;br /&gt;
MyString2Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: El Ramo del Articulo no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       &lt;br /&gt;
        max_error: El Estatus no puede pasar mas de 6 caracteres&lt;br /&gt;
        &lt;br /&gt;
MyString3Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       0&lt;br /&gt;
        min_error: La Unidad de Medida no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       &lt;br /&gt;
        max_error: La Unidad de Medida no puede pasar mas de 15 caracteres&lt;br /&gt;
&lt;br /&gt;
MyString4Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       0&lt;br /&gt;
        min_error: La Unidad Alternativa no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       15&lt;br /&gt;
        max_error: La Unidad Alternativa no puede pasar mas de 15 caracteres&lt;br /&gt;
&lt;br /&gt;
MyString5Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       0&lt;br /&gt;
        min_error: La Relación no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       25 &lt;br /&gt;
        max_error: La Relación no puede pasar mas de 25 caracteres&lt;br /&gt;
                &lt;br /&gt;
MyNumberValidator:&lt;br /&gt;
    class: sfNumberValidator&lt;br /&gt;
    param:&lt;br /&gt;
        type:         float&lt;br /&gt;
        type_error:   Por favor, Introduzca Números Decimales               &lt;br /&gt;
        nan_error:    Por Favor, introduzca un Número Decimal&lt;br /&gt;
        min:          0000000000.00&lt;br /&gt;
        min_error:    El valor tiene que ser mayor que cero&lt;br /&gt;
        max:          9999999999.99&lt;br /&gt;
        max_error:    El valor debe contener maximo 9999999999.99&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se encuentran algunos de los Estándares de Validación(sfNumberValidator y sfStringValidator) de symfony. Los demas se encuentra en capitulo 10 y el codigo de lo que hace en cada uno de ellos, se encuentra en la siguiente dirección C:\AppServ\php5\PEAR\symfony\validator.&lt;br /&gt;
&lt;br /&gt;
Nota: Para agregar otras validaciones del Negocio crear una funcion ValidateEdit(Modulo Generados con propel-init-admin) en el Actions.class.php está se ejecutara al mismo tiempo que las otras(al Guardar).Ejemplo de página Almregart.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  private static $coderror=-1; &lt;br /&gt;
       	&lt;br /&gt;
  public function validateEdit()&lt;br /&gt;
    {  	 &lt;br /&gt;
      if($this-&amp;gt;getRequest()-&amp;gt;getMethod() == sfRequest::POST)&lt;br /&gt;
        { &lt;br /&gt;
	  $this-&amp;gt;caregart = $this-&amp;gt;getCaregartOrCreate();&lt;br /&gt;
	  $this-&amp;gt;updateCaregartFromRequest();&lt;br /&gt;
	    	&lt;br /&gt;
	  self::$coderror=Articulos::validarAlmregart($this-&amp;gt;caregart);&lt;br /&gt;
	  if (self::$coderror&amp;lt;&amp;gt;-1)&lt;br /&gt;
            {	    		 	&lt;br /&gt;
	      return false;&lt;br /&gt;
	    }else return true;&lt;br /&gt;
	 }else return true;   &lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
  public function handleErrorEdit()&lt;br /&gt;
    {&lt;br /&gt;
      $this-&amp;gt;preExecute();&lt;br /&gt;
      $this-&amp;gt;caregart = $this-&amp;gt;getCaregartOrCreate();&lt;br /&gt;
      $this-&amp;gt;updateCaregartFromRequest();&lt;br /&gt;
      $this-&amp;gt;labels = $this-&amp;gt;getLabels();&lt;br /&gt;
  &lt;br /&gt;
      if(!$this-&amp;gt;validateEdit())&lt;br /&gt;
        {&lt;br /&gt;
	  $err = Herramientas::obtenerMensajeError(self::$coderror);	    &lt;br /&gt;
	  $this-&amp;gt;getRequest()-&amp;gt;setError('caregart{codart}',$err);	&lt;br /&gt;
        }&lt;br /&gt;
       return sfView::SUCCESS;	&lt;br /&gt;
     } &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Las validaciones del Actions.class.php ultilizan un manejador de errores que se encuentra creado en la carpeta '''config''' , el cual se llama errores.yml, el contiene los códigos de los errores.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1:&lt;br /&gt;
  cod: 1&lt;br /&gt;
  msj: Nivel Anterior No Existe&lt;br /&gt;
2:&lt;br /&gt;
  cod: 2&lt;br /&gt;
  msj: El Codigo no puede estar en Blanco ó No puede Contener menos de 4 Carácteres&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estos errores se ejecuta cuando la funcion que a la cual se le asigna $coderror devuelve codigos de errores  '''self::$coderror=Articulos::validarAlmregart($this-&amp;gt;caregart);''', la cual esta en la funcion validateEdit(). Una vez que la función validateEdit() retorna false se ejecuta la función handleErrorEdit() enviando el error a la vista.&lt;br /&gt;
&lt;br /&gt;
--[[Usuario:Desireé Martínez]] 16:08 26 abr 2007 (VET)&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Validaciones</id>
		<title>Validaciones</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Validaciones"/>
				<updated>2007-04-26T20:09:13Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para realizar las validaciones a una forma debemos: En caso de módulos generados por el propel-init-admin: Crear una carpeta llamada validate y dentro de ella crear un archivo llamado edit.yml y para otro caso módulos generados con el init-module la carpeta validate ya viene por defecto solo debemos crear el archivo .yml debe llamarse a la accion que se va a ejecutar ejemplo edit.&lt;br /&gt;
&lt;br /&gt;
[[Imagen:Muestra.JPG‎]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El archivo edit.yml contiene lo siguiente: '''methods''' se declara el metodo post con los campos que se van a validar al momento de guardar. '''names''' se coloca cada uno de los campos con sus mensajes(si tienen y si son requeridos o no), y llamamos el validators respectivo al campo. Y al final creamos los validators segun las validaciones que tenga que hacersele a los campos.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
methods:&lt;br /&gt;
  post:&lt;br /&gt;
   - &amp;quot;caregart{codart}&amp;quot;      &lt;br /&gt;
   - &amp;quot;caregart{desart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{ramart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{unimed}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{unialt}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{relart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{exitot}&amp;quot;   &lt;br /&gt;
   - &amp;quot;caregart{cosult}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{cospro}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{invini}&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
names: &lt;br /&gt;
  caregart{codart}:&lt;br /&gt;
    required:  Yes&lt;br /&gt;
    required_msg: El Código del Articulo no puedo estar en Blanco&lt;br /&gt;
    validators: MyStringValidator6        &lt;br /&gt;
&lt;br /&gt;
  caregart{desart}:&lt;br /&gt;
    required:  Yes&lt;br /&gt;
    required_msg: El Descripción no puedo estar en Blanco        &lt;br /&gt;
    validators: MyStringValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{ramart}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString2Validator&lt;br /&gt;
  &lt;br /&gt;
  caregart{unimed}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString3Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{unialt}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString4Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{relart}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString5Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{exitot}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{cosult}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{cospro}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{invini}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
MyStringValidator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: La Descripción no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       250&lt;br /&gt;
        max_error: La Descripción no puede pasar mas de 250 caracteres&lt;br /&gt;
&lt;br /&gt;
MyStringValidator6:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       1&lt;br /&gt;
        min_error: La Descripción no puede tener menos de 2 caracteres        &lt;br /&gt;
        &lt;br /&gt;
MyString2Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: El Ramo del Articulo no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       &lt;br /&gt;
        max_error: El Estatus no puede pasar mas de 6 caracteres&lt;br /&gt;
        &lt;br /&gt;
MyString3Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       0&lt;br /&gt;
        min_error: La Unidad de Medida no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       &lt;br /&gt;
        max_error: La Unidad de Medida no puede pasar mas de 15 caracteres&lt;br /&gt;
&lt;br /&gt;
MyString4Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       0&lt;br /&gt;
        min_error: La Unidad Alternativa no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       15&lt;br /&gt;
        max_error: La Unidad Alternativa no puede pasar mas de 15 caracteres&lt;br /&gt;
&lt;br /&gt;
MyString5Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       0&lt;br /&gt;
        min_error: La Relación no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       25 &lt;br /&gt;
        max_error: La Relación no puede pasar mas de 25 caracteres&lt;br /&gt;
                &lt;br /&gt;
MyNumberValidator:&lt;br /&gt;
    class: sfNumberValidator&lt;br /&gt;
    param:&lt;br /&gt;
        type:         float&lt;br /&gt;
        type_error:   Por favor, Introduzca Números Decimales               &lt;br /&gt;
        nan_error:    Por Favor, introduzca un Número Decimal&lt;br /&gt;
        min:          0000000000.00&lt;br /&gt;
        min_error:    El valor tiene que ser mayor que cero&lt;br /&gt;
        max:          9999999999.99&lt;br /&gt;
        max_error:    El valor debe contener maximo 9999999999.99&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se encuentran algunos de los Estándares de Validación(sfNumberValidator y sfStringValidator) de symfony. Los demas se encuentra en capitulo 10 y el codigo de lo que hace en cada uno de ellos, se encuentra en la siguiente dirección C:\AppServ\php5\PEAR\symfony\validator.&lt;br /&gt;
&lt;br /&gt;
Nota: Para agregar otras validaciones del Negocio crear una funcion ValidateEdit(Modulo Generados con propel-init-admin) en el Actions.class.php está se ejecutara al mismo tiempo que las otras(al Guardar).Ejemplo de página Almregart.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  private static $coderror=-1; &lt;br /&gt;
       	&lt;br /&gt;
  public function validateEdit()&lt;br /&gt;
    {  	 &lt;br /&gt;
      if($this-&amp;gt;getRequest()-&amp;gt;getMethod() == sfRequest::POST)&lt;br /&gt;
        { &lt;br /&gt;
	  $this-&amp;gt;caregart = $this-&amp;gt;getCaregartOrCreate();&lt;br /&gt;
	  $this-&amp;gt;updateCaregartFromRequest();&lt;br /&gt;
	    	&lt;br /&gt;
	  self::$coderror=Articulos::validarAlmregart($this-&amp;gt;caregart);&lt;br /&gt;
	  if (self::$coderror&amp;lt;&amp;gt;-1)&lt;br /&gt;
            {	    		 	&lt;br /&gt;
	      return false;&lt;br /&gt;
	    }else return true;&lt;br /&gt;
	 }else return true;   &lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
  public function handleErrorEdit()&lt;br /&gt;
    {&lt;br /&gt;
      $this-&amp;gt;preExecute();&lt;br /&gt;
      $this-&amp;gt;caregart = $this-&amp;gt;getCaregartOrCreate();&lt;br /&gt;
      $this-&amp;gt;updateCaregartFromRequest();&lt;br /&gt;
      $this-&amp;gt;labels = $this-&amp;gt;getLabels();&lt;br /&gt;
  &lt;br /&gt;
      if(!$this-&amp;gt;validateEdit())&lt;br /&gt;
        {&lt;br /&gt;
	  $err = Herramientas::obtenerMensajeError(self::$coderror);	    &lt;br /&gt;
	  $this-&amp;gt;getRequest()-&amp;gt;setError('caregart{codart}',$err);	&lt;br /&gt;
        }&lt;br /&gt;
       return sfView::SUCCESS;	&lt;br /&gt;
     } &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Las validaciones del Actions.class.php ultilizan un manejador de errores que se encuentra creado en la carpeta '''config''' , el cual se llama errores.yml, el contiene los códigos de los errores.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1:&lt;br /&gt;
  cod: 1&lt;br /&gt;
  msj: Nivel Anterior No Existe&lt;br /&gt;
2:&lt;br /&gt;
  cod: 2&lt;br /&gt;
  msj: El Codigo no puede estar en Blanco ó No puede Contener menos de 4 Carácteres&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estos errores se ejecuta cuando la funcion que a la cual se le asigna $coderror devuelve codigos de errores(  '''self::$coderror=Articulos::validarAlmregart($this-&amp;gt;caregart);'''), la cual esta en la funcion validateEdit(). Una vez que la función validateEdit() retorna false se ejecuta la función handleErrorEdit() enviando el error a la vista.&lt;br /&gt;
&lt;br /&gt;
--[[Usuario:Desireé Martínez]] 16:08 26 abr 2007 (VET)&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Validaciones</id>
		<title>Validaciones</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Validaciones"/>
				<updated>2007-04-26T20:08:40Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para realizar las validaciones a una forma debemos: En caso de módulos generados por el propel-init-admin: Crear una carpeta llamada validate y dentro de ella crear un archivo llamado edit.yml y para otro caso módulos generados con el init-module la carpeta validate ya viene por defecto solo debemos crear el archivo .yml debe llamarse a la accion que se va a ejecutar ejemplo edit.&lt;br /&gt;
&lt;br /&gt;
[[Imagen:Muestra.JPG‎]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El archivo edit.yml contiene lo siguiente: '''methods''' se declara el metodo post con los campos que se van a validar al momento de guardar. '''names''' se coloca cada uno de los campos con sus mensajes(si tienen y si son requeridos o no), y llamamos el validators respectivo al campo. Y al final creamos los validators segun las validaciones que tenga que hacersele a los campos.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
methods:&lt;br /&gt;
  post:&lt;br /&gt;
   - &amp;quot;caregart{codart}&amp;quot;      &lt;br /&gt;
   - &amp;quot;caregart{desart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{ramart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{unimed}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{unialt}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{relart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{exitot}&amp;quot;   &lt;br /&gt;
   - &amp;quot;caregart{cosult}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{cospro}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{invini}&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
names: &lt;br /&gt;
  caregart{codart}:&lt;br /&gt;
    required:  Yes&lt;br /&gt;
    required_msg: El Código del Articulo no puedo estar en Blanco&lt;br /&gt;
    validators: MyStringValidator6        &lt;br /&gt;
&lt;br /&gt;
  caregart{desart}:&lt;br /&gt;
    required:  Yes&lt;br /&gt;
    required_msg: El Descripción no puedo estar en Blanco        &lt;br /&gt;
    validators: MyStringValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{ramart}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString2Validator&lt;br /&gt;
  &lt;br /&gt;
  caregart{unimed}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString3Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{unialt}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString4Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{relart}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString5Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{exitot}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{cosult}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{cospro}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{invini}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
MyStringValidator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: La Descripción no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       250&lt;br /&gt;
        max_error: La Descripción no puede pasar mas de 250 caracteres&lt;br /&gt;
&lt;br /&gt;
MyStringValidator6:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       1&lt;br /&gt;
        min_error: La Descripción no puede tener menos de 2 caracteres        &lt;br /&gt;
        &lt;br /&gt;
MyString2Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: El Ramo del Articulo no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       &lt;br /&gt;
        max_error: El Estatus no puede pasar mas de 6 caracteres&lt;br /&gt;
        &lt;br /&gt;
MyString3Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       0&lt;br /&gt;
        min_error: La Unidad de Medida no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       &lt;br /&gt;
        max_error: La Unidad de Medida no puede pasar mas de 15 caracteres&lt;br /&gt;
&lt;br /&gt;
MyString4Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       0&lt;br /&gt;
        min_error: La Unidad Alternativa no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       15&lt;br /&gt;
        max_error: La Unidad Alternativa no puede pasar mas de 15 caracteres&lt;br /&gt;
&lt;br /&gt;
MyString5Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       0&lt;br /&gt;
        min_error: La Relación no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       25 &lt;br /&gt;
        max_error: La Relación no puede pasar mas de 25 caracteres&lt;br /&gt;
                &lt;br /&gt;
MyNumberValidator:&lt;br /&gt;
    class: sfNumberValidator&lt;br /&gt;
    param:&lt;br /&gt;
        type:         float&lt;br /&gt;
        type_error:   Por favor, Introduzca Números Decimales               &lt;br /&gt;
        nan_error:    Por Favor, introduzca un Número Decimal&lt;br /&gt;
        min:          0000000000.00&lt;br /&gt;
        min_error:    El valor tiene que ser mayor que cero&lt;br /&gt;
        max:          9999999999.99&lt;br /&gt;
        max_error:    El valor debe contener maximo 9999999999.99&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se encuentran algunos de los Estándares de Validación(sfNumberValidator y sfStringValidator) de symfony. Los demas se encuentra en capitulo 10 y el codigo de lo que hace en cada uno de ellos, se encuentra en la siguiente dirección C:\AppServ\php5\PEAR\symfony\validator.&lt;br /&gt;
&lt;br /&gt;
Nota: Para agregar otras validaciones del Negocio crear una funcion ValidateEdit(Modulo Generados con propel-init-admin) en el Actions.class.php está se ejecutara al mismo tiempo que las otras(al Guardar).Ejemplo de página Almregart.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  private static $coderror=-1; &lt;br /&gt;
       	&lt;br /&gt;
  public function validateEdit()&lt;br /&gt;
    {  	 &lt;br /&gt;
      if($this-&amp;gt;getRequest()-&amp;gt;getMethod() == sfRequest::POST)&lt;br /&gt;
        { &lt;br /&gt;
	  $this-&amp;gt;caregart = $this-&amp;gt;getCaregartOrCreate();&lt;br /&gt;
	  $this-&amp;gt;updateCaregartFromRequest();&lt;br /&gt;
	    	&lt;br /&gt;
	  self::$coderror=Articulos::validarAlmregart($this-&amp;gt;caregart);&lt;br /&gt;
	  if (self::$coderror&amp;lt;&amp;gt;-1)&lt;br /&gt;
            {	    		 	&lt;br /&gt;
	      return false;&lt;br /&gt;
	    }else return true;&lt;br /&gt;
	 }else return true;   &lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
  public function handleErrorEdit()&lt;br /&gt;
    {&lt;br /&gt;
      $this-&amp;gt;preExecute();&lt;br /&gt;
      $this-&amp;gt;caregart = $this-&amp;gt;getCaregartOrCreate();&lt;br /&gt;
      $this-&amp;gt;updateCaregartFromRequest();&lt;br /&gt;
      $this-&amp;gt;labels = $this-&amp;gt;getLabels();&lt;br /&gt;
  &lt;br /&gt;
      if(!$this-&amp;gt;validateEdit())&lt;br /&gt;
        {&lt;br /&gt;
	  $err = Herramientas::obtenerMensajeError(self::$coderror);	    &lt;br /&gt;
	  $this-&amp;gt;getRequest()-&amp;gt;setError('caregart{codart}',$err);	&lt;br /&gt;
        }&lt;br /&gt;
       return sfView::SUCCESS;	&lt;br /&gt;
     } &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Las validaciones del Actions.class.php ultilizan un manejador de errores que se encuentra creado en la carpeta '''config''' , el cual se llama errores.yml, el contiene los códigos de los errores.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1:&lt;br /&gt;
  cod: 1&lt;br /&gt;
  msj: Nivel Anterior No Existe&lt;br /&gt;
2:&lt;br /&gt;
  cod: 2&lt;br /&gt;
  msj: El Codigo no puede estar en Blanco ó No puede Contener menos de 4 Carácteres&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estos errores se ejecuta cuando la funcion que a la cual se le asigna $coderror devuelve codigos de errores(  '''self::$coderror=Articulos::validarAlmregart($this-&amp;gt;caregart);'''), la cual esta en la funcion validateEdit(). Una vez que la función validateEdit() retorna false se ejecuta la función handleErrorEdit() enviando el error a la vista.&lt;br /&gt;
&lt;br /&gt;
--[[Usuario:Desi|Desi]] 16:08 26 abr 2007 (VET)&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Validaciones</id>
		<title>Validaciones</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Validaciones"/>
				<updated>2007-04-26T20:00:41Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para realizar las validaciones a una forma debemos: En caso de módulos generados por el propel-init-admin: Crear una carpeta llamada validate y dentro de ella crear un archivo llamado edit.yml y para otro caso módulos generados con el init-module la carpeta validate ya viene por defecto solo debemos crear el archivo .yml debe llamarse a la accion que se va a ejecutar ejemplo edit.&lt;br /&gt;
&lt;br /&gt;
[[Imagen:Muestra.JPG‎]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El archivo edit.yml contiene lo siguiente: '''methods''' se declara el metodo post con los campos que se van a validar al momento de guardar. '''names''' se coloca cada uno de los campos con sus mensajes(si tienen y si son requeridos o no), y llamamos el validators respectivo al campo. Y al final creamos los validators segun las validaciones que tenga que hacersele a los campos.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
methods:&lt;br /&gt;
  post:&lt;br /&gt;
   - &amp;quot;caregart{codart}&amp;quot;      &lt;br /&gt;
   - &amp;quot;caregart{desart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{ramart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{unimed}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{unialt}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{relart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{exitot}&amp;quot;   &lt;br /&gt;
   - &amp;quot;caregart{cosult}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{cospro}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{invini}&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
names: &lt;br /&gt;
  caregart{codart}:&lt;br /&gt;
    required:  Yes&lt;br /&gt;
    required_msg: El Código del Articulo no puedo estar en Blanco&lt;br /&gt;
    validators: MyStringValidator6        &lt;br /&gt;
&lt;br /&gt;
  caregart{desart}:&lt;br /&gt;
    required:  Yes&lt;br /&gt;
    required_msg: El Descripción no puedo estar en Blanco        &lt;br /&gt;
    validators: MyStringValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{ramart}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString2Validator&lt;br /&gt;
  &lt;br /&gt;
  caregart{unimed}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString3Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{unialt}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString4Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{relart}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString5Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{exitot}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{cosult}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{cospro}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{invini}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
MyStringValidator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: La Descripción no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       250&lt;br /&gt;
        max_error: La Descripción no puede pasar mas de 250 caracteres&lt;br /&gt;
&lt;br /&gt;
MyStringValidator6:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       1&lt;br /&gt;
        min_error: La Descripción no puede tener menos de 2 caracteres        &lt;br /&gt;
        &lt;br /&gt;
MyString2Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: El Ramo del Articulo no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       &lt;br /&gt;
        max_error: El Estatus no puede pasar mas de 6 caracteres&lt;br /&gt;
        &lt;br /&gt;
MyString3Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       0&lt;br /&gt;
        min_error: La Unidad de Medida no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       &lt;br /&gt;
        max_error: La Unidad de Medida no puede pasar mas de 15 caracteres&lt;br /&gt;
&lt;br /&gt;
MyString4Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       0&lt;br /&gt;
        min_error: La Unidad Alternativa no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       15&lt;br /&gt;
        max_error: La Unidad Alternativa no puede pasar mas de 15 caracteres&lt;br /&gt;
&lt;br /&gt;
MyString5Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       0&lt;br /&gt;
        min_error: La Relación no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       25 &lt;br /&gt;
        max_error: La Relación no puede pasar mas de 25 caracteres&lt;br /&gt;
                &lt;br /&gt;
MyNumberValidator:&lt;br /&gt;
    class: sfNumberValidator&lt;br /&gt;
    param:&lt;br /&gt;
        type:         float&lt;br /&gt;
        type_error:   Por favor, Introduzca Números Decimales               &lt;br /&gt;
        nan_error:    Por Favor, introduzca un Número Decimal&lt;br /&gt;
        min:          0000000000.00&lt;br /&gt;
        min_error:    El valor tiene que ser mayor que cero&lt;br /&gt;
        max:          9999999999.99&lt;br /&gt;
        max_error:    El valor debe contener maximo 9999999999.99&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se encuentran algunos de los Estándares de Validación(sfNumberValidator y sfStringValidator) de symfony. Los demas se encuentra en capitulo 10 y el codigo de lo que hace en cada uno de ellos, se encuentra en la siguiente dirección C:\AppServ\php5\PEAR\symfony\validator.&lt;br /&gt;
&lt;br /&gt;
Nota: Para agregar otras validaciones del Negocio crear una funcion ValidateEdit(Modulo Generados con propel-init-admin) en el Actions.class.php está se ejecutara al mismo tiempo que las otras(al Guardar).Ejemplo de página Almregart.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  private static $coderror=-1; &lt;br /&gt;
       	&lt;br /&gt;
  public function validateEdit()&lt;br /&gt;
    {  	 &lt;br /&gt;
      if($this-&amp;gt;getRequest()-&amp;gt;getMethod() == sfRequest::POST)&lt;br /&gt;
        { &lt;br /&gt;
	  $this-&amp;gt;caregart = $this-&amp;gt;getCaregartOrCreate();&lt;br /&gt;
	  $this-&amp;gt;updateCaregartFromRequest();&lt;br /&gt;
	    	&lt;br /&gt;
	  self::$coderror=Articulos::validarAlmregart($this-&amp;gt;caregart);&lt;br /&gt;
	  if (self::$coderror&amp;lt;&amp;gt;-1)&lt;br /&gt;
            {	    		 	&lt;br /&gt;
	      return false;&lt;br /&gt;
	    }else return true;&lt;br /&gt;
	 }else return true;   &lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
  public function handleErrorEdit()&lt;br /&gt;
    {&lt;br /&gt;
      $this-&amp;gt;preExecute();&lt;br /&gt;
      $this-&amp;gt;caregart = $this-&amp;gt;getCaregartOrCreate();&lt;br /&gt;
      $this-&amp;gt;updateCaregartFromRequest();&lt;br /&gt;
      $this-&amp;gt;labels = $this-&amp;gt;getLabels();&lt;br /&gt;
  &lt;br /&gt;
      if(!$this-&amp;gt;validateEdit())&lt;br /&gt;
        {&lt;br /&gt;
	  $err = Herramientas::obtenerMensajeError(self::$coderror);	    &lt;br /&gt;
	  $this-&amp;gt;getRequest()-&amp;gt;setError('caregart{codart}',$err);	&lt;br /&gt;
        }&lt;br /&gt;
       return sfView::SUCCESS;	&lt;br /&gt;
     } &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Las validaciones del Actions.class.php ultilizan un manejador de errores que se encuentra creado en la carpeta '''config''' , el cual se llama errores.yml, el contiene los códigos de los errores.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1:&lt;br /&gt;
  cod: 1&lt;br /&gt;
  msj: Nivel Anterior No Existe&lt;br /&gt;
2:&lt;br /&gt;
  cod: 2&lt;br /&gt;
  msj: El Codigo no puede estar en Blanco ó No puede Contener menos de 4 Carácteres&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
--[[Usuario:Desireé Martínez]] 08:55 17 abr 2007 (VET)&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Validaciones</id>
		<title>Validaciones</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Validaciones"/>
				<updated>2007-04-26T19:54:19Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para realizar las validaciones a una forma debemos: En caso de módulos generados por el propel-init-admin: Crear una carpeta llamada validate y dentro de ella crear un archivo llamado edit.yml y para otro caso módulos generados con el init-module la carpeta validate ya viene por defecto solo debemos crear el archivo .yml debe llamarse a la accion que se va a ejecutar ejemplo edit.&lt;br /&gt;
&lt;br /&gt;
[[Imagen:Muestra.JPG‎]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El archivo edit.yml contiene lo siguiente: '''methods''' se declara el metodo post con los campos que se van a validar al momento de guardar. '''names''' se coloca cada uno de los campos con sus mensajes(si tienen y si son requeridos o no), y llamamos el validators respectivo al campo. Y al final creamos los validators segun las validaciones que tenga que hacersele a los campos.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
methods:&lt;br /&gt;
  post:&lt;br /&gt;
   - &amp;quot;caregart{codart}&amp;quot;      &lt;br /&gt;
   - &amp;quot;caregart{desart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{ramart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{unimed}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{unialt}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{relart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{exitot}&amp;quot;   &lt;br /&gt;
   - &amp;quot;caregart{cosult}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{cospro}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{invini}&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
names: &lt;br /&gt;
  caregart{codart}:&lt;br /&gt;
    required:  Yes&lt;br /&gt;
    required_msg: El Código del Articulo no puedo estar en Blanco&lt;br /&gt;
    validators: MyStringValidator6        &lt;br /&gt;
&lt;br /&gt;
  caregart{desart}:&lt;br /&gt;
    required:  Yes&lt;br /&gt;
    required_msg: El Descripción no puedo estar en Blanco        &lt;br /&gt;
    validators: MyStringValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{ramart}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString2Validator&lt;br /&gt;
  &lt;br /&gt;
  caregart{unimed}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString3Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{unialt}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString4Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{relart}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString5Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{exitot}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{cosult}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{cospro}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{invini}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
MyStringValidator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: La Descripción no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       250&lt;br /&gt;
        max_error: La Descripción no puede pasar mas de 250 caracteres&lt;br /&gt;
&lt;br /&gt;
MyStringValidator6:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       1&lt;br /&gt;
        min_error: La Descripción no puede tener menos de 2 caracteres        &lt;br /&gt;
        &lt;br /&gt;
MyString2Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: El Ramo del Articulo no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       &lt;br /&gt;
        max_error: El Estatus no puede pasar mas de 6 caracteres&lt;br /&gt;
        &lt;br /&gt;
MyString3Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       0&lt;br /&gt;
        min_error: La Unidad de Medida no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       &lt;br /&gt;
        max_error: La Unidad de Medida no puede pasar mas de 15 caracteres&lt;br /&gt;
&lt;br /&gt;
MyString4Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       0&lt;br /&gt;
        min_error: La Unidad Alternativa no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       15&lt;br /&gt;
        max_error: La Unidad Alternativa no puede pasar mas de 15 caracteres&lt;br /&gt;
&lt;br /&gt;
MyString5Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       0&lt;br /&gt;
        min_error: La Relación no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       25 &lt;br /&gt;
        max_error: La Relación no puede pasar mas de 25 caracteres&lt;br /&gt;
                &lt;br /&gt;
MyNumberValidator:&lt;br /&gt;
    class: sfNumberValidator&lt;br /&gt;
    param:&lt;br /&gt;
        type:         float&lt;br /&gt;
        type_error:   Por favor, Introduzca Números Decimales               &lt;br /&gt;
        nan_error:    Por Favor, introduzca un Número Decimal&lt;br /&gt;
        min:          0000000000.00&lt;br /&gt;
        min_error:    El valor tiene que ser mayor que cero&lt;br /&gt;
        max:          9999999999.99&lt;br /&gt;
        max_error:    El valor debe contener maximo 9999999999.99&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se encuentran algunos de los Estándares de Validación(sfNumberValidator y sfStringValidator) de symfony. Los demas se encuentra en capitulo 10 y el codigo de lo que hace en cada uno de ellos, se encuentra en la siguiente dirección C:\AppServ\php5\PEAR\symfony\validator.&lt;br /&gt;
&lt;br /&gt;
Nota: Para agregar otras validaciones del Negocio crear una funcion ValidateEdit(Modulo Generados con propel-init-admin) en el Actions.class.php está se ejecutara al mismo tiempo que las otras(al Guardar).Revisar capitulo 6 Validation and Error-Handling Methods&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  private static $coderror=-1; &lt;br /&gt;
       	&lt;br /&gt;
  public function validateEdit()&lt;br /&gt;
    {  	 &lt;br /&gt;
      if($this-&amp;gt;getRequest()-&amp;gt;getMethod() == sfRequest::POST)&lt;br /&gt;
        { &lt;br /&gt;
	  $this-&amp;gt;caregart = $this-&amp;gt;getCaregartOrCreate();&lt;br /&gt;
	  $this-&amp;gt;updateCaregartFromRequest();&lt;br /&gt;
	    	&lt;br /&gt;
	  self::$coderror=Articulos::validarAlmregart($this-&amp;gt;caregart);&lt;br /&gt;
	  if (self::$coderror&amp;lt;&amp;gt;-1)&lt;br /&gt;
            {	    		 	&lt;br /&gt;
	      return false;&lt;br /&gt;
	    }else return true;&lt;br /&gt;
	 }else return true;   &lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
  public function handleErrorEdit()&lt;br /&gt;
    {&lt;br /&gt;
      $this-&amp;gt;preExecute();&lt;br /&gt;
      $this-&amp;gt;caregart = $this-&amp;gt;getCaregartOrCreate();&lt;br /&gt;
      $this-&amp;gt;updateCaregartFromRequest();&lt;br /&gt;
      $this-&amp;gt;labels = $this-&amp;gt;getLabels();&lt;br /&gt;
  &lt;br /&gt;
      if(!$this-&amp;gt;validateEdit())&lt;br /&gt;
        {&lt;br /&gt;
	  $err = Herramientas::obtenerMensajeError(self::$coderror);	    &lt;br /&gt;
	  $this-&amp;gt;getRequest()-&amp;gt;setError('caregart{codart}',$err);	&lt;br /&gt;
        }&lt;br /&gt;
       return sfView::SUCCESS;	&lt;br /&gt;
     } &lt;br /&gt;
 &lt;br /&gt;
  public function executeEdit()&lt;br /&gt;
  {&lt;br /&gt;
    $this-&amp;gt;message = &amp;quot;Los Parametros son correctos&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
--[[Usuario:Desireé Martínez]] 08:55 17 abr 2007 (VET)&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Documentaci%C3%B3n</id>
		<title>Documentación</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Documentaci%C3%B3n"/>
				<updated>2007-04-18T16:08:53Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cada Clase, función y variable global (o de clase) debe ser documentada de la siguinete forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Herramientas Varias de manejo de datos.&lt;br /&gt;
 *&lt;br /&gt;
 * @package    Siga&lt;br /&gt;
 * @subpackage lib&lt;br /&gt;
 * @author     Grupo Desarrollo Cidesa &amp;lt;desarrollo@cidesa.com.ve&amp;gt;&lt;br /&gt;
 * @version    SVN: $Id: $&lt;br /&gt;
 * @copyright  Copyright 2007, Cidesa C.A.&lt;br /&gt;
 * &lt;br /&gt;
 */&lt;br /&gt;
class Herramientas&lt;br /&gt;
{&lt;br /&gt;
	/**&lt;br /&gt;
	 * @static &lt;br /&gt;
	 * @var string $prueba Definición del comentario de una variable.&lt;br /&gt;
	 */&lt;br /&gt;
	static $prueba = 'Variable de Prueba'; &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Función para retornar datos a partir de una sentencia sql.&lt;br /&gt;
	 * Esta función retorna un arreglo de registros (Arreglo Bidimencional).&lt;br /&gt;
	 * @todo Agregar el manejo de errores de base de datos&lt;br /&gt;
	 *  &lt;br /&gt;
	 * @static&lt;br /&gt;
	 * @param string $sql Instrucción SQL.&lt;br /&gt;
	 * @param array &amp;amp;$output Arreglo bidimencional de respuesta.&lt;br /&gt;
	 * @return bool verdadero si encontro datos.&lt;br /&gt;
	 */ &lt;br /&gt;
	public static function BuscarDatos($sql,&amp;amp;$output)&lt;br /&gt;
        {&lt;br /&gt;
             ..........&lt;br /&gt;
             ..........&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se deben hacer las siguientes modificaciones:&lt;br /&gt;
&lt;br /&gt;
* @subpackage: ayuda a organizar las clases o funciones dentro de grupos de librerias, por ejemplo, este codigo viene de una clase llamada Herramientas.class.php, la cual esta en la carpeta lib dentro del proyecto. Si estuviese en una carpeta mas profunda seria &amp;quot;lib.carpeta&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* Se debe colocar en el inicio del comentario de documentación la descripción completa de la funcionalidad de la clase.&lt;br /&gt;
&lt;br /&gt;
* @todo: permite organizar las funcionalidades que estan pendiente por realizar en el clase/funcion documentada.&lt;br /&gt;
&lt;br /&gt;
* Si la función/clase no es estática no debe colcoarse el tag @static.&lt;br /&gt;
&lt;br /&gt;
Para major documentación de los tags que usa la herramineta PHPDocumentation pulsa [http://manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/tutorial_phpDocumentor.pkg.html aqui]&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Estandarizaci%C3%B3n</id>
		<title>Estandarización</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Estandarizaci%C3%B3n"/>
				<updated>2007-04-18T15:47:35Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: /* Identación y Tamaño de Línea */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Se deben tomar en cuenta las siguientes reglas a la hora de crear código fuente:'''&lt;br /&gt;
&lt;br /&gt;
== Identación y Tamaño de Línea ==&lt;br /&gt;
&lt;br /&gt;
Usa una identación de '''2 espacios''' sin tabulaciones. Esto ayuda a mantener la integridad de los archivos dentro de los repositorios.&lt;br /&gt;
&lt;br /&gt;
Es recomendable mantener lineas de aproximadamente 75-85 caracteres.&lt;br /&gt;
&lt;br /&gt;
== Estructuras de Control ==&lt;br /&gt;
&lt;br /&gt;
Estas incluyen if, for, while, switch, etc. un ejemplo seria:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if ((condition1) || (condition2)) {&lt;br /&gt;
    action1;&lt;br /&gt;
} elseif ((condition3) &amp;amp;&amp;amp; (condition4)) {&lt;br /&gt;
    action2;&lt;br /&gt;
} else {&lt;br /&gt;
    defaultaction;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Las estrucuras de control deben tener un(1) espacio entre la instruccion y el paréntesis de apertura, para distinguir este de las funciones.&lt;br /&gt;
&lt;br /&gt;
Para switch sería:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
switch (condition) {&lt;br /&gt;
case 1:&lt;br /&gt;
    action1;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
case 2:&lt;br /&gt;
    action2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
    defaultaction;&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Llamado a Funciones ==&lt;br /&gt;
&lt;br /&gt;
Las funciones debe ser llamadas sin espacios entre el nombre de la función, el paŕentesis de apertura y el primer parámetro de la función; espacio entre la coma(,) y el parámetro, y ningun espacio entre el ultimo parámetro y el ultimo paréntesis. Ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var = foo($bar, $baz, $quux);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para mejorar la lectura del código se puede colocar mas espacio entre la variable a asignar y la funcion, como por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$short         = foo($bar);&lt;br /&gt;
$long_variable = foo($baz);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Declaración de funciones ==&lt;br /&gt;
&lt;br /&gt;
Por Ejemplo&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function fooFunction($arg1, $arg2 = '')&lt;br /&gt;
{&lt;br /&gt;
    if (condition) {&lt;br /&gt;
        statement;&lt;br /&gt;
    }&lt;br /&gt;
    return $val;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los argumentos con valor por defecto deben ser colocados al final de la lista de argumentos de la función. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function connect(&amp;amp;$dsn, $persistent = false)&lt;br /&gt;
{&lt;br /&gt;
    if (is_array($dsn)) {&lt;br /&gt;
        $dsninfo = &amp;amp;$dsn;&lt;br /&gt;
    } else {&lt;br /&gt;
        $dsninfo = DB::parseDSN($dsn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!$dsninfo || !$dsninfo['phptype']) {&lt;br /&gt;
        return $this-&amp;gt;raiseError();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Comentarios ==&lt;br /&gt;
&lt;br /&gt;
Los comentarios serán usados como normalmente los ofrece el lenguaje con el estilo C/C++, o sea, /* xxx */ y // xxx.&lt;br /&gt;
&lt;br /&gt;
Solo se debe tomar en cuenta que los bloques de código complicados deben ser documentados antes de que se nos olvide y tengamos que perder mas tiempo decifrando que hace.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Codigo de Tags PHP ==&lt;br /&gt;
&lt;br /&gt;
Siempre usa &amp;lt;?php ?&amp;gt; para delimitar el codigo PHP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cabeceras de comentarios (PHPDocumentation) ==&lt;br /&gt;
&lt;br /&gt;
Se debe usar la nomenclatura especificada en el articulo de [[../Documentación]]&lt;br /&gt;
&lt;br /&gt;
== Convencion de Nombre ==&lt;br /&gt;
&lt;br /&gt;
* CLASES: Las clases deben tener nombre descriptivos. Evitando comolar abreviaciones donde sea posible. Los nombres de las clases deben colocar con la primera letra en mayuscula. Ejemplos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Log&lt;br /&gt;
Net_Finger&lt;br /&gt;
HTML_Upload_Error&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* METODOS: Las funciones y métodos deben ser nombrados colocando como prefijo un nombre del paquete o grupo, seguido del nombre de la funcion con la primera letra en mayuscula, y cada palabra adicional debe ir con la primera letra mayuscula. No usa underscore &amp;quot;_&amp;quot; entre palabras descriptivas. Ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
conectar()&lt;br /&gt;
getData()&lt;br /&gt;
builtSomeWidget()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Constantes ==&lt;br /&gt;
&lt;br /&gt;
Las constantes deben ser todas las letras UpperCase, con underscore para separar palabras. Ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MAX = 1;&lt;br /&gt;
COLUMNS = 4;&lt;br /&gt;
COLUMN_NAME = &amp;quot;Column&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ejemplo General ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Short description for file&lt;br /&gt;
 *&lt;br /&gt;
 * Long description for file (if any)...&lt;br /&gt;
 *&lt;br /&gt;
 * PHP versions 4 and 5&lt;br /&gt;
 *&lt;br /&gt;
 * LICENSE: This source file is subject to version 3.0 of the PHP license&lt;br /&gt;
 * that is available through the world-wide-web at the following URI:&lt;br /&gt;
 * http://www.php.net/license/3_0.txt.  If you did not receive a copy of&lt;br /&gt;
 * the PHP License and are unable to obtain it through the web, please&lt;br /&gt;
 * send a note to license@php.net so we can mail you a copy immediately.&lt;br /&gt;
 *&lt;br /&gt;
 * @category   CategoryName&lt;br /&gt;
 * @package    PackageName&lt;br /&gt;
 * @author     Original Author &amp;lt;author@example.com&amp;gt;&lt;br /&gt;
 * @author     Another Author &amp;lt;another@example.com&amp;gt;&lt;br /&gt;
 * @copyright  1997-2005 The PHP Group&lt;br /&gt;
 * @license    http://www.php.net/license/3_0.txt  PHP License 3.0&lt;br /&gt;
 * @version    CVS: $Id:$&lt;br /&gt;
 * @link       http://pear.php.net/package/PackageName&lt;br /&gt;
 * @see        NetOther, Net_Sample::Net_Sample()&lt;br /&gt;
 * @since      File available since Release 1.2.0&lt;br /&gt;
 * @deprecated File deprecated in Release 2.0.0&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * This is a &amp;quot;Docblock Comment,&amp;quot; also known as a &amp;quot;docblock.&amp;quot;  The class'&lt;br /&gt;
 * docblock, below, contains a complete description of how to write these.&lt;br /&gt;
 */&lt;br /&gt;
require_once 'PEAR.php';&lt;br /&gt;
&lt;br /&gt;
// {{{ constants&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Methods return this if they succeed&lt;br /&gt;
 */&lt;br /&gt;
define('NET_SAMPLE_OK', 1);&lt;br /&gt;
&lt;br /&gt;
// }}}&lt;br /&gt;
// {{{ GLOBALS&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * The number of objects created&lt;br /&gt;
 * @global int $GLOBALS['_NET_SAMPLE_Count']&lt;br /&gt;
 */&lt;br /&gt;
$GLOBALS['_NET_SAMPLE_Count'] = 0;&lt;br /&gt;
&lt;br /&gt;
// }}}&lt;br /&gt;
// {{{ Net_Sample&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * An example of how to write code to PEAR's standards&lt;br /&gt;
 *&lt;br /&gt;
 * Docblock comments start with &amp;quot;/**&amp;quot; at the top.  Notice how the &amp;quot;/&amp;quot;&lt;br /&gt;
 * lines up with the normal indenting and the asterisks on subsequent rows&lt;br /&gt;
 * are in line with the first asterisk.  The last line of comment text&lt;br /&gt;
 * should be immediately followed on the next line by the closing asterisk&lt;br /&gt;
 * and slash and then the item you are commenting on should be on the next&lt;br /&gt;
 * line below that.  Don't add extra lines.  Please put a blank line&lt;br /&gt;
 * between paragraphs as well as between the end of the description and&lt;br /&gt;
 * the start of the @tags.  Wrap comments before 80 columns in order to&lt;br /&gt;
 * ease readability for a wide variety of users.&lt;br /&gt;
 *&lt;br /&gt;
 * Docblocks can only be used for programming constructs which allow them&lt;br /&gt;
 * (classes, properties, methods, defines, includes, globals).  See the&lt;br /&gt;
 * phpDocumentor documentation for more information.&lt;br /&gt;
 * http://phpdoc.org/docs/HTMLSmartyConverter/default/phpDocumentor/tutorial_phpDocumentor.howto.pkg.html&lt;br /&gt;
 *&lt;br /&gt;
 * The Javadoc Style Guide is an excellent resource for figuring out&lt;br /&gt;
 * how to say what needs to be said in docblock comments.  Much of what is&lt;br /&gt;
 * written here is a summary of what is found there, though there are some&lt;br /&gt;
 * cases where what's said here overrides what is said there.&lt;br /&gt;
 * http://java.sun.com/j2se/javadoc/writingdoccomments/index.html#styleguide&lt;br /&gt;
 *&lt;br /&gt;
 * The first line of any docblock is the summary.  Make them one short&lt;br /&gt;
 * sentence, without a period at the end.  Summaries for classes, properties&lt;br /&gt;
 * and constants should omit the subject and simply state the object,&lt;br /&gt;
 * because they are describing things rather than actions or behaviors.&lt;br /&gt;
 *&lt;br /&gt;
 * Below are the tags commonly used for classes. @category through @version&lt;br /&gt;
 * are required.  The remainder should only be used when necessary.&lt;br /&gt;
 * Please use them in the order they appear here.  phpDocumentor has&lt;br /&gt;
 * several other tags available, feel free to use them.&lt;br /&gt;
 *&lt;br /&gt;
 * @category   CategoryName&lt;br /&gt;
 * @package    PackageName&lt;br /&gt;
 * @author     Original Author &amp;lt;author@example.com&amp;gt;&lt;br /&gt;
 * @author     Another Author &amp;lt;another@example.com&amp;gt;&lt;br /&gt;
 * @copyright  1997-2005 The PHP Group&lt;br /&gt;
 * @license    http://www.php.net/license/3_0.txt  PHP License 3.0&lt;br /&gt;
 * @version    Release: @package_version@&lt;br /&gt;
 * @link       http://pear.php.net/package/PackageName&lt;br /&gt;
 * @see        NetOther, Net_Sample::Net_Sample()&lt;br /&gt;
 * @since      Class available since Release 1.2.0&lt;br /&gt;
 * @deprecated Class deprecated in Release 2.0.0&lt;br /&gt;
 */&lt;br /&gt;
class Net_Sample&lt;br /&gt;
{&lt;br /&gt;
    // {{{ properties&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * The status of foo's universe&lt;br /&gt;
     *&lt;br /&gt;
     * Potential values are 'good', 'fair', 'poor' and 'unknown'.&lt;br /&gt;
     *&lt;br /&gt;
     * @var string&lt;br /&gt;
     */&lt;br /&gt;
    var $foo = 'unknown';&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * The status of life&lt;br /&gt;
     *&lt;br /&gt;
     * Note that names of private properties or methods must be&lt;br /&gt;
     * preceeded by an underscore.&lt;br /&gt;
     *&lt;br /&gt;
     * @var bool&lt;br /&gt;
     * @access private&lt;br /&gt;
     */&lt;br /&gt;
    var $_good = true;&lt;br /&gt;
&lt;br /&gt;
    // }}}&lt;br /&gt;
    // {{{ setFoo()&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Registers the status of foo's universe&lt;br /&gt;
     *&lt;br /&gt;
     * Summaries for methods should use 3rd person declarative rather&lt;br /&gt;
     * than 2nd person imperative, begining with a verb phrase.&lt;br /&gt;
     *&lt;br /&gt;
     * Summaries should add description beyond the method's name. The&lt;br /&gt;
     * best method names are &amp;quot;self-documenting&amp;quot;, meaning they tell you&lt;br /&gt;
     * basically what the method does.  If the summary merely repeats&lt;br /&gt;
     * the method name in sentence form, it is not providing more&lt;br /&gt;
     * information.&lt;br /&gt;
     *&lt;br /&gt;
     * Summary Examples:&lt;br /&gt;
     *   + Sets the label              (preferred)&lt;br /&gt;
     *   + Set the label               (avoid)&lt;br /&gt;
     *   + This method sets the label  (avoid)&lt;br /&gt;
     *&lt;br /&gt;
     * Below are the tags commonly used for methods.  A @param tag is&lt;br /&gt;
     * required for each parameter the method has.  The @return and&lt;br /&gt;
     * @access tags are mandatory.  The @throws tag is required if the&lt;br /&gt;
     * method uses exceptions.  @static is required if the method can&lt;br /&gt;
     * be called statically.  The remainder should only be used when&lt;br /&gt;
     * necessary.  Please use them in the order they appear here.&lt;br /&gt;
     * phpDocumentor has several other tags available, feel free to use&lt;br /&gt;
     * them.&lt;br /&gt;
     *&lt;br /&gt;
     * The @param tag contains the data type, then the parameter's&lt;br /&gt;
     * name, followed by a description.  By convention, the first noun in&lt;br /&gt;
     * the description is the data type of the parameter.  Articles like&lt;br /&gt;
     * &amp;quot;a&amp;quot;, &amp;quot;an&amp;quot;, and  &amp;quot;the&amp;quot; can precede the noun.  The descriptions&lt;br /&gt;
     * should start with a phrase.  If further description is necessary,&lt;br /&gt;
     * follow with sentences.  Having two spaces between the name and the&lt;br /&gt;
     * description aids readability.&lt;br /&gt;
     *&lt;br /&gt;
     * When writing a phrase, do not capitalize and do not end with a&lt;br /&gt;
     * period:&lt;br /&gt;
     *   + the string to be tested&lt;br /&gt;
     *&lt;br /&gt;
     * When writing a phrase followed by a sentence, do not capitalize the&lt;br /&gt;
     * phrase, but end it with a period to distinguish it from the start&lt;br /&gt;
     * of the next sentence:&lt;br /&gt;
     *   + the string to be tested. Must use UTF-8 encoding.&lt;br /&gt;
     *&lt;br /&gt;
     * Return tags should contain the data type then a description of&lt;br /&gt;
     * the data returned.  The data type can be any of PHP's data types&lt;br /&gt;
     * (int, float, bool, string, array, object, resource, mixed)&lt;br /&gt;
     * and should contain the type primarily returned.  For example, if&lt;br /&gt;
     * a method returns an object when things work correctly but false&lt;br /&gt;
     * when an error happens, say 'object' rather than 'mixed.'  Use&lt;br /&gt;
     * 'void' if nothing is returned.&lt;br /&gt;
     *&lt;br /&gt;
     * Here's an example of how to format examples:&lt;br /&gt;
     * &amp;lt;code&amp;gt;&lt;br /&gt;
     * require_once 'Net/Sample.php';&lt;br /&gt;
     *&lt;br /&gt;
     * $s = new Net_Sample();&lt;br /&gt;
     * if (PEAR::isError($s)) {&lt;br /&gt;
     *     echo $s-&amp;gt;getMessage() . &amp;quot;\n&amp;quot;;&lt;br /&gt;
     * }&lt;br /&gt;
     * &amp;lt;/code&amp;gt;&lt;br /&gt;
     *&lt;br /&gt;
     * Here is an example for non-php example or sample:&lt;br /&gt;
     * &amp;lt;samp&amp;gt;&lt;br /&gt;
     * pear install net_sample&lt;br /&gt;
     * &amp;lt;/samp&amp;gt;&lt;br /&gt;
     *&lt;br /&gt;
     * @param string $arg1  the string to quote&lt;br /&gt;
     * @param int    $arg2  an integer of how many problems happened.&lt;br /&gt;
     *                       Indent to the description's starting point&lt;br /&gt;
     *                       for long ones.&lt;br /&gt;
     *&lt;br /&gt;
     * @return int  the integer of the set mode used. FALSE if foo&lt;br /&gt;
     *               foo could not be set.&lt;br /&gt;
     * @throws exceptionclass  [description]&lt;br /&gt;
     *&lt;br /&gt;
     * @access public&lt;br /&gt;
     * @static&lt;br /&gt;
     * @see Net_Sample::$foo, Net_Other::someMethod()&lt;br /&gt;
     * @since Method available since Release 1.2.0&lt;br /&gt;
     * @deprecated Method deprecated in Release 2.0.0&lt;br /&gt;
     */&lt;br /&gt;
    function setFoo($arg1, $arg2 = 0)&lt;br /&gt;
    {&lt;br /&gt;
        /*&lt;br /&gt;
         * This is a &amp;quot;Block Comment.&amp;quot;  The format is the same as&lt;br /&gt;
         * Docblock Comments except there is only one asterisk at the&lt;br /&gt;
         * top.  phpDocumentor doesn't parse these.&lt;br /&gt;
         */&lt;br /&gt;
        if ($arg1 == 'good' || $arg1 == 'fair') {&lt;br /&gt;
            $this-&amp;gt;foo = $arg1;&lt;br /&gt;
            return 1;&lt;br /&gt;
        } elseif ($arg1 == 'poor' &amp;amp;&amp;amp; $arg2 &amp;gt; 1) {&lt;br /&gt;
            $this-&amp;gt;foo = 'poor';&lt;br /&gt;
            return 2;&lt;br /&gt;
        } else {&lt;br /&gt;
            return false;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // }}}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// }}}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Local variables:&lt;br /&gt;
 * tab-width: 4&lt;br /&gt;
 * c-basic-offset: 4&lt;br /&gt;
 * c-hanging-comment-ender-p: nil&lt;br /&gt;
 * End:&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Cat%C3%A1logo</id>
		<title>Catálogo</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Cat%C3%A1logo"/>
				<updated>2007-04-17T22:59:17Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Se debe llamar el helper en la vista con la siguiente instrucción:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php use_helper('PopUp') ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* En la Vista debes colocar el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php echo button_to_popup('...','generales/catalogo?clase=Caprovee&amp;amp;frame=sf_admin_edit_form&amp;amp;obj1=caordcom_codpro&amp;amp;obj2=nom_pro')?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
clase = Clase de datos (tabla) que contiene los datos.&lt;br /&gt;
frame = Nombre del objeto Form que contiene los objetos que queremos actualizar.&lt;br /&gt;
obj1, obj2, objn.... = Objetos Html que queremos actualizar del frame, según como se muestren las columnas en el catalogo.&lt;br /&gt;
&lt;br /&gt;
* En la clase estatica de datos (TablaPeer) debes colocar el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	const COLUMNS = 'columns';&lt;br /&gt;
	&lt;br /&gt;
	public static $columsname = array (&lt;br /&gt;
	self::COLUMNS =&amp;gt; array (CaproveePeer::CODPRO =&amp;gt; 'Código', CaproveePeer::NOMPRO =&amp;gt; 'Proveedor', CaproveePeer::RIFPRO =&amp;gt; 'Rif', CaproveePeer::NITPRO =&amp;gt; 'Nit', CaproveePeer::DIRPRO =&amp;gt; 'Proveedor', CaproveePeer::ID =&amp;gt;  'Id', ),);&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	static public function getColumName($colum)&lt;br /&gt;
	{&lt;br /&gt;
		return self::$columsname[self::COLUMNS][$colum];&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	static public function getColumsNames()&lt;br /&gt;
	{&lt;br /&gt;
		return self::$columsname[self::COLUMNS];&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	static public function getArrayFieldsNames()&lt;br /&gt;
	{&lt;br /&gt;
		$col = self::$columsname[self::COLUMNS];&lt;br /&gt;
		$columnas = array();&lt;br /&gt;
		foreach($col as $key =&amp;gt; $value)&lt;br /&gt;
		{&lt;br /&gt;
			$punto = strpos($key,'.');&lt;br /&gt;
			$tabla = substr($key,0,$punto);&lt;br /&gt;
			$campo = substr($key,$punto+1);&lt;br /&gt;
			$columnas[] = ucfirst(strtolower($campo));&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
		return $columnas;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De este código debes cambiar solo la variable $columsname, y colocar los campos y valores (por supuesto de la clase que estas trabajando) que serán mostrados automaticamente en el catálogo. Al final del arreglo $columsname debes dejar el campo &amp;quot;Id&amp;quot;.&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Cat%C3%A1logo</id>
		<title>Catálogo</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Cat%C3%A1logo"/>
				<updated>2007-04-17T22:57:27Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Se debe llamar el helper en la vista con la siguiente instrucción:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php use_helper('PopUp') ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* En la Vista debes colocar el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php echo button_to_popup('...','generales/catalogo?clase=Caprovee&amp;amp;frame=sf_admin_edit_form&amp;amp;obj1=caordcom_codpro&amp;amp;obj2=nom_pro')?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
clase = Clase de datos (tabla) que contiene los datos.&lt;br /&gt;
frame = Nombre del objeto Form que contiene los objetos que queremos actualizar.&lt;br /&gt;
obj1, obj2, objn.... = Objetos que queremos actualizar según como se muestren las columnas en el catalogo.&lt;br /&gt;
&lt;br /&gt;
* En la clase estatica de datos (TablaPeer) debes colocar el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	const COLUMNS = 'columns';&lt;br /&gt;
	&lt;br /&gt;
	public static $columsname = array (&lt;br /&gt;
	self::COLUMNS =&amp;gt; array (CaproveePeer::CODPRO =&amp;gt; 'Código', CaproveePeer::NOMPRO =&amp;gt; 'Proveedor', CaproveePeer::RIFPRO =&amp;gt; 'Rif', CaproveePeer::NITPRO =&amp;gt; 'Nit', CaproveePeer::DIRPRO =&amp;gt; 'Proveedor', CaproveePeer::ID =&amp;gt;  'Id', ),);&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	static public function getColumName($colum)&lt;br /&gt;
	{&lt;br /&gt;
		return self::$columsname[self::COLUMNS][$colum];&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	static public function getColumsNames()&lt;br /&gt;
	{&lt;br /&gt;
		return self::$columsname[self::COLUMNS];&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	static public function getArrayFieldsNames()&lt;br /&gt;
	{&lt;br /&gt;
		$col = self::$columsname[self::COLUMNS];&lt;br /&gt;
		$columnas = array();&lt;br /&gt;
		foreach($col as $key =&amp;gt; $value)&lt;br /&gt;
		{&lt;br /&gt;
			$punto = strpos($key,'.');&lt;br /&gt;
			$tabla = substr($key,0,$punto);&lt;br /&gt;
			$campo = substr($key,$punto+1);&lt;br /&gt;
			$columnas[] = ucfirst(strtolower($campo));&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
		return $columnas;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De este código debes cambiar solo la variable $columsname, y colocar los campos y valores (por supuesto de la clase que estas trabajando) que serán mostrados automaticamente en el catálogo. Al final del arreglo $columsname debes dejar el campo &amp;quot;Id&amp;quot;.&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Validaciones</id>
		<title>Validaciones</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Validaciones"/>
				<updated>2007-04-17T13:27:51Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para realizar las validaciones a una forma debemos: En caso de módulos generados por el propel-init-admin: Crear una carpeta llamada validate y dentro de ella crear un archivo llamado edit.yml y para otro caso módulos generados con el init-module la carpeta validate ya viene por defecto solo debemos crear el archivo .yml debe llamarse a la accion que se va a ejecutar ejemplo edit.&lt;br /&gt;
&lt;br /&gt;
[[Imagen:Muestra.JPG‎]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El archivo edit.yml contiene lo siguiente: '''methods''' se declara el metodo post con los campos que se van a validar al momento de guardar. '''names''' se coloca cada uno de los campos con sus mensajes(si tienen y si son requeridos o no), y llamamos el validators respectivo al campo. Y al final creamos los validators segun las validaciones que tenga que hacersele a los campos.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
methods:&lt;br /&gt;
  post:&lt;br /&gt;
   - &amp;quot;caregart{codart}&amp;quot;      &lt;br /&gt;
   - &amp;quot;caregart{desart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{ramart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{unimed}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{unialt}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{relart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{exitot}&amp;quot;   &lt;br /&gt;
   - &amp;quot;caregart{cosult}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{cospro}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{invini}&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
names: &lt;br /&gt;
  caregart{codart}:&lt;br /&gt;
    required:  Yes&lt;br /&gt;
    required_msg: El Código del Articulo no puedo estar en Blanco        &lt;br /&gt;
&lt;br /&gt;
  caregart{desart}:&lt;br /&gt;
    required:  Yes&lt;br /&gt;
    required_msg: El Descripción no puedo estar en Blanco        &lt;br /&gt;
    validators: MyStringValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{ramart}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString2Validator&lt;br /&gt;
  &lt;br /&gt;
  caregart{unimed}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString3Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{unialt}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString4Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{relart}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString5Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{exitot}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{cosult}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{cospro}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{invini}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
MyStringValidator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: La Descripción no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       250&lt;br /&gt;
        max_error: La Descripción no puede pasar mas de 250 caracteres&lt;br /&gt;
        &lt;br /&gt;
MyString2Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: El Ramo del Articulo no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       &lt;br /&gt;
        max_error: El Estatus no puede pasar mas de 6 caracteres&lt;br /&gt;
        &lt;br /&gt;
MyString3Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: La Unidad de Medida no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       &lt;br /&gt;
        max_error: La Unidad de Medida no puede pasar mas de 15 caracteres&lt;br /&gt;
&lt;br /&gt;
MyString4Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: La Unidad Alternativa no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       15&lt;br /&gt;
        max_error: La Unidad Alternativa no puede pasar mas de 15 caracteres&lt;br /&gt;
&lt;br /&gt;
MyString5Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: La Relación no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       25 &lt;br /&gt;
        max_error: La Relación no puede pasar mas de 25 caracteres&lt;br /&gt;
                &lt;br /&gt;
MyNumberValidator:&lt;br /&gt;
    class: sfNumberValidator&lt;br /&gt;
    param:&lt;br /&gt;
        type:         float&lt;br /&gt;
        type_error:   Por favor, Introduzca Números Decimales               &lt;br /&gt;
        nan_error:    Por Favor, introduzca un Número Decimal&lt;br /&gt;
        min:          0000000000.00&lt;br /&gt;
        min_error:    El valor tiene que ser mayor que cero&lt;br /&gt;
        max:          9999999999.99&lt;br /&gt;
        max_error:    El valor debe contener maximo 9999999999.99&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se encuentran algunos de los Estándares de Validación(sfNumberValidator y sfStringValidator) de symfony. Los demas se encuentra en capitulo 10 y el codigo de lo que hace en cada uno de ellos, se encuentra en la siguiente dirección C:\AppServ\php5\PEAR\symfony\validator.&lt;br /&gt;
&lt;br /&gt;
Nota: Para agregar otras validaciones del Negocio crear una funcion ValidateEdit(Modulo Generados con propel-init-admin) en el Actions.class.php está se ejecutara al mismo tiempo que las otras(al Guardar).Revisar capitulo 6 Validation and Error-Handling Methods&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ejemplo.(Adaptarlo a lo que se quiere).&lt;br /&gt;
&lt;br /&gt;
public function validateEdit()&lt;br /&gt;
  {&lt;br /&gt;
    return ($this-&amp;gt;getRequestParameter('id') &amp;gt; 0);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  public function handleErrorEdit()&lt;br /&gt;
  {&lt;br /&gt;
    $this-&amp;gt;message = &amp;quot;Parametros Invalidos&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
    return sfView::SUCCESS;&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  public function executeEdit()&lt;br /&gt;
  {&lt;br /&gt;
    $this-&amp;gt;message = &amp;quot;Los Parametros son correctos&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
--[[Usuario:Desireé Martínez]] 08:55 17 abr 2007 (VET)&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Validaciones</id>
		<title>Validaciones</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Validaciones"/>
				<updated>2007-04-17T13:26:45Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para realizar las validaciones a una forma debemos: En caso de módulos generados por el propel-init-admin: Crear una carpeta llamada validate y dentro de ella crear un archivo llamado edit.yml y para otro caso módulos generados con el init-module la carpeta validate ya viene por defecto solo debemos crear el archivo .yml debe llamarse a la accion que se va a ejecutar ejemplo edit.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[[Imagen:Muestra.JPG‎]]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El archivo edit.yml contiene lo siguiente: '''methods''' se declara el metodo post con los campos que se van a validar al momento de guardar. '''names''' se coloca cada uno de los campos con sus mensajes(si tienen y si son requeridos o no), y llamamos el validators respectivo al campo. Y al final creamos los validators segun las validaciones que tenga que hacersele a los campos.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
methods:&lt;br /&gt;
  post:&lt;br /&gt;
   - &amp;quot;caregart{codart}&amp;quot;      &lt;br /&gt;
   - &amp;quot;caregart{desart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{ramart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{unimed}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{unialt}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{relart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{exitot}&amp;quot;   &lt;br /&gt;
   - &amp;quot;caregart{cosult}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{cospro}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{invini}&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
names: &lt;br /&gt;
  caregart{codart}:&lt;br /&gt;
    required:  Yes&lt;br /&gt;
    required_msg: El Código del Articulo no puedo estar en Blanco        &lt;br /&gt;
&lt;br /&gt;
  caregart{desart}:&lt;br /&gt;
    required:  Yes&lt;br /&gt;
    required_msg: El Descripción no puedo estar en Blanco        &lt;br /&gt;
    validators: MyStringValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{ramart}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString2Validator&lt;br /&gt;
  &lt;br /&gt;
  caregart{unimed}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString3Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{unialt}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString4Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{relart}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString5Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{exitot}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{cosult}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{cospro}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{invini}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
MyStringValidator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: La Descripción no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       250&lt;br /&gt;
        max_error: La Descripción no puede pasar mas de 250 caracteres&lt;br /&gt;
        &lt;br /&gt;
MyString2Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: El Ramo del Articulo no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       &lt;br /&gt;
        max_error: El Estatus no puede pasar mas de 6 caracteres&lt;br /&gt;
        &lt;br /&gt;
MyString3Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: La Unidad de Medida no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       &lt;br /&gt;
        max_error: La Unidad de Medida no puede pasar mas de 15 caracteres&lt;br /&gt;
&lt;br /&gt;
MyString4Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: La Unidad Alternativa no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       15&lt;br /&gt;
        max_error: La Unidad Alternativa no puede pasar mas de 15 caracteres&lt;br /&gt;
&lt;br /&gt;
MyString5Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: La Relación no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       25 &lt;br /&gt;
        max_error: La Relación no puede pasar mas de 25 caracteres&lt;br /&gt;
                &lt;br /&gt;
MyNumberValidator:&lt;br /&gt;
    class: sfNumberValidator&lt;br /&gt;
    param:&lt;br /&gt;
        type:         float&lt;br /&gt;
        type_error:   Por favor, Introduzca Números Decimales               &lt;br /&gt;
        nan_error:    Por Favor, introduzca un Número Decimal&lt;br /&gt;
        min:          0000000000.00&lt;br /&gt;
        min_error:    El valor tiene que ser mayor que cero&lt;br /&gt;
        max:          9999999999.99&lt;br /&gt;
        max_error:    El valor debe contener maximo 9999999999.99&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se encuentran algunos de los Estándares de Validación(sfNumberValidator y sfStringValidator) de symfony. Los demas se encuentra en capitulo 10 y el codigo de lo que hace en cada uno de ellos, se encuentra en la siguiente dirección C:\AppServ\php5\PEAR\symfony\validator.&lt;br /&gt;
&lt;br /&gt;
Nota: Para agregar otras validaciones del Negocio crear una funcion ValidateEdit(Modulo Generados con propel-init-admin) en el Actions.class.php está se ejecutara al mismo tiempo que las otras(al Guardar).Revisar capitulo 6 Validation and Error-Handling Methods&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ejemplo.(Adaptarlo a lo que se quiere).&lt;br /&gt;
&lt;br /&gt;
public function validateEdit()&lt;br /&gt;
  {&lt;br /&gt;
    return ($this-&amp;gt;getRequestParameter('id') &amp;gt; 0);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  public function handleErrorEdit()&lt;br /&gt;
  {&lt;br /&gt;
    $this-&amp;gt;message = &amp;quot;Parametros Invalidos&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
    return sfView::SUCCESS;&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  public function executeEdit()&lt;br /&gt;
  {&lt;br /&gt;
    $this-&amp;gt;message = &amp;quot;Los Parametros son correctos&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
--[[Usuario:Desireé Martínez]] 08:55 17 abr 2007 (VET)&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	<entry>
		<id>http://w.cidesa.com.ve/index.php/Validaciones</id>
		<title>Validaciones</title>
		<link rel="alternate" type="text/html" href="http://w.cidesa.com.ve/index.php/Validaciones"/>
				<updated>2007-04-17T13:24:47Z</updated>
		
		<summary type="html">&lt;p&gt;Desi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para realizar las validaciones a una forma debemos: En caso de módulos generados por el propel-init-admin: Crear una carpeta llamada validate y dentro de ella crear un archivo llamado edit.yml y para otro caso módulos generados con el init-module la carpeta validate ya viene por defecto solo debemos crear el archivo .yml debe llamarse a la accion que se va a ejecutar ejemplo edit.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[[Imagen:Muestra.JPG]]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El archivo edit.yml contiene lo siguiente: '''methods''' se declara el metodo post con los campos que se van a validar al momento de guardar. '''names''' se coloca cada uno de los campos con sus mensajes(si tienen y si son requeridos o no), y llamamos el validators respectivo al campo. Y al final creamos los validators segun las validaciones que tenga que hacersele a los campos.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
methods:&lt;br /&gt;
  post:&lt;br /&gt;
   - &amp;quot;caregart{codart}&amp;quot;      &lt;br /&gt;
   - &amp;quot;caregart{desart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{ramart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{unimed}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{unialt}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{relart}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{exitot}&amp;quot;   &lt;br /&gt;
   - &amp;quot;caregart{cosult}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{cospro}&amp;quot;&lt;br /&gt;
   - &amp;quot;caregart{invini}&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
names: &lt;br /&gt;
  caregart{codart}:&lt;br /&gt;
    required:  Yes&lt;br /&gt;
    required_msg: El Código del Articulo no puedo estar en Blanco        &lt;br /&gt;
&lt;br /&gt;
  caregart{desart}:&lt;br /&gt;
    required:  Yes&lt;br /&gt;
    required_msg: El Descripción no puedo estar en Blanco        &lt;br /&gt;
    validators: MyStringValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{ramart}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString2Validator&lt;br /&gt;
  &lt;br /&gt;
  caregart{unimed}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString3Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{unialt}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString4Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{relart}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyString5Validator&lt;br /&gt;
    &lt;br /&gt;
  caregart{exitot}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{cosult}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{cospro}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
  caregart{invini}:&lt;br /&gt;
    required:  No&lt;br /&gt;
    validators: MyNumberValidator&lt;br /&gt;
    &lt;br /&gt;
MyStringValidator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: La Descripción no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       250&lt;br /&gt;
        max_error: La Descripción no puede pasar mas de 250 caracteres&lt;br /&gt;
        &lt;br /&gt;
MyString2Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: El Ramo del Articulo no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       &lt;br /&gt;
        max_error: El Estatus no puede pasar mas de 6 caracteres&lt;br /&gt;
        &lt;br /&gt;
MyString3Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: La Unidad de Medida no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       &lt;br /&gt;
        max_error: La Unidad de Medida no puede pasar mas de 15 caracteres&lt;br /&gt;
&lt;br /&gt;
MyString4Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: La Unidad Alternativa no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       15&lt;br /&gt;
        max_error: La Unidad Alternativa no puede pasar mas de 15 caracteres&lt;br /&gt;
&lt;br /&gt;
MyString5Validator:&lt;br /&gt;
    class: sfStringValidator&lt;br /&gt;
    param:&lt;br /&gt;
        min:       2&lt;br /&gt;
        min_error: La Relación no puede tener menos de 2 caracteres&lt;br /&gt;
        max:       25 &lt;br /&gt;
        max_error: La Relación no puede pasar mas de 25 caracteres&lt;br /&gt;
                &lt;br /&gt;
MyNumberValidator:&lt;br /&gt;
    class: sfNumberValidator&lt;br /&gt;
    param:&lt;br /&gt;
        type:         float&lt;br /&gt;
        type_error:   Por favor, Introduzca Números Decimales               &lt;br /&gt;
        nan_error:    Por Favor, introduzca un Número Decimal&lt;br /&gt;
        min:          0000000000.00&lt;br /&gt;
        min_error:    El valor tiene que ser mayor que cero&lt;br /&gt;
        max:          9999999999.99&lt;br /&gt;
        max_error:    El valor debe contener maximo 9999999999.99&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se encuentran algunos de los Estándares de Validación(sfNumberValidator y sfStringValidator) de symfony. Los demas se encuentra en capitulo 10 y el codigo de lo que hace en cada uno de ellos, se encuentra en la siguiente dirección C:\AppServ\php5\PEAR\symfony\validator.&lt;br /&gt;
&lt;br /&gt;
Nota: Para agregar otras validaciones del Negocio crear una funcion ValidateEdit(Modulo Generados con propel-init-admin) en el Actions.class.php está se ejecutara al mismo tiempo que las otras(al Guardar).Revisar capitulo 6 Validation and Error-Handling Methods&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ejemplo.(Adaptarlo a lo que se quiere).&lt;br /&gt;
&lt;br /&gt;
public function validateEdit()&lt;br /&gt;
  {&lt;br /&gt;
    return ($this-&amp;gt;getRequestParameter('id') &amp;gt; 0);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  public function handleErrorEdit()&lt;br /&gt;
  {&lt;br /&gt;
    $this-&amp;gt;message = &amp;quot;Parametros Invalidos&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
    return sfView::SUCCESS;&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  public function executeEdit()&lt;br /&gt;
  {&lt;br /&gt;
    $this-&amp;gt;message = &amp;quot;Los Parametros son correctos&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
--[[Usuario:Desireé Martínez]] 08:55 17 abr 2007 (VET)&lt;/div&gt;</summary>
		<author><name>Desi</name></author>	</entry>

	</feed>