sábado, 29 de octubre de 2011

vtigerCRM: Crear un tema

Para crear un nuevo tema con vtiger de verdad es bastante sencillo, solo con copiar un tema ya existente y ponerle otro nombre es suficiente. Por supuesto vtiger limita los nombre, no pueden ser: CVS, Attic, akodarkgem, bushtree, coolblue, Amazon, busthree, Aqua, nature, orange o blue.

De todas maneras aqui les dejo la explicación mas detallada: http://wiki.vtiger.com/index.php/Vtiger_CRM_5_:_Creating_your_own_Color_Theme

vtigeCRM configuraciones básicas (idioma, base de datos, codificación y tema por defecto)

Para poder modificar cualquiera de las configuraciones que les voy a explicar deben entrar en ruta_al_sistema/config.inc.php.  explico como se modifican estas variables porque no se pueden modificar sino desde el archivo de configuración


Cambiar idioma por defecto


En el archivo de configuración buscar la linea donde esta la variable $default_language, y aqui por defecto sale en_us, y la cambiamos por la correspondiente de nuestro idioma. si es el español es: es_es.


Si quieren descargar un tema diferente pueden buscar el idioma correspondiente en: http://wiki.vtiger.com/index.php/Vtiger_Language_Packs_Maintainers


Cambiar la configuración de la base de datos.

En el archivo de configuración hay tres variables modificables, las cuales esplicare en cada linea:


$dbconfig['db_server'] = 'localhost'; //servidor de mysql
$dbconfig['db_port'] = ':3306'; //puerto Mysql
$dbconfig['db_username'] = 'root'; //user
$dbconfig['db_password'] = 'contraseña';//contraseña
$dbconfig['db_name'] = 'vtiger1';//nombre de la base de datos

Cambiar la codificación por defecto

La variable $default_charset nos permite configurar la codificación por defecto que es UTF-8, podemos poner ISO-8859-1 que tambien es una de las más utilizadas

Cambiar tema por defecto

Por defecto se encuentra el tema softed o blue para modificar el tema por defecto debemos modificar la variable $default_theme a nuestro propio tema o el tema que deseemos.

miércoles, 26 de octubre de 2011

Vtiger 5.3 RC

A salido hoy la version 5.3 RC (link de descarga) de vTiger y  anunciaron la versión GA para dentro de 2 o 3 semanas, aquí les dejos los cambios echos mas resultantes en esta versión:


  • Configurable Zona Horaria, para el usuario
  • Configurable Delimitadores actuales
  • Manager de correos. Un mucho más veloz reemplazo pra el modulo de Webmail
  • Reportes programados pueden ser enviados por correo autoamticamente
  • Config Editor para modificar al configuración
  • Nuevo plugin de Outlook – Desarrollado desde 0 para trabajar con las nuevas versiones de Windows y Outlook
  • Importar mejorado - Agregada característica de auto unir mientras se importa.
  • Actualizado campos de tarea en WorkFlows
  • Disponible establecer valores por defecto para los campos mientras se crea un tipo
  • Workflow mejorado
  • Listas de selección dinámicas – Selecciones en las listas de seleccion pueden ser configuradas para estar basadas en otras listas de seleccion.
  • Mejorado de los reportes
  • Disponibilidad de configurar los permisos de leer solamente por perfil.
  • Filtro avanzado  de la vista personalizable y buscador avanzado de lista de vista mejorados

Vtiger CRM: Manuales de Desarrolo y uso

Aqui les dejo algunos manuales y cosas utiles, para usar o desarrollas con vtiger:




Estas son unas imágenes que hablan un poco del flujo de trabajo en vtiger y de algunas otras cosas interesante, son de uan version antigua, pero sirven para orientarse un poco:








Vtiger un CRM opensource



Hoy les presento a Vtiger CRM (Customer relationship management) en su versión 5.3.0RC, (recien sacadita del horno), es un sistema Open Source echo en php, basado en Sugar CRM, que esta echo para el manejo de las relaciones empresa-clientes, que permite manejar inventario, presupuestos, facturas, campañas, Email Marketing, pedidos, tarifas, atención al cliente y muchas otras más funciones interesantes.

De verdad es un software muy bueno, útil para cualquier empresa que quiera llevar detalladamente una relación cliente-empresa, sin hacer una gran inversión, ya que el sistema también dispone de varias extensiones que permite al sistema como tal integrarse con asterik o joomla, también dispone de un plugin para que el sistema este disponible para celulares e inclusive una extension para crear una pagina del cliente manejada por vtiger, Otra característica resaltable es que es altamente personalizable, ya que se pueden agregar campos a nuestro gusto, crear filtros y muchas otras opciones más.

Lo Mejor de Vtiger es que es un sistema 100% Gratuito y opensource, lo cual quiere decir que lo podemos modificar como queramos y no vamos a tener ningún rollo. Ademas de que vienen en español también, lo cual es una ventaja para los que hablamos este bello idioma.


Info Grafia

Para los interesados en conocer más de Vtiger aquí les dejo estas Url de Interés:

Web Oficial: http://www.vtiger.com/index.php

Wiki: http://wiki.vtiger.com/

Foro español: http://crmevolutivo.com/forum/

Foro Ingles: http://forums.vtiger.com/

Guia de usuario: http://wiki.vtiger.com/index.php/Vtiger521:User_Manual

Blog: http://blogs.vtiger.com/

Como ultimamente voy a estar trabajando con este sistema, voy a seguir publicando algunas entradas, principalmente entradas que tienen que ver con el desarrollo en vtiger.

Saludos y buena Suerte.

Crear Url dependiendo del lenguaje


Para crear una url dependiendo del idioma, tendríamos que crear MY_url_helper.php, donde extendemos la funcion site_url(), para que cree las url dependiendo del lenguaje. Acepta ahora un segundo parámetro con la abreviación del lenguaje que queremos que cree la url, si vamos a cambiar el lenguaje hay que pone ajuro el lenguaje, pero si la url debe estar en el mismo lenguaje la va a crear.

 function site_url($uri = '', $lang = '')
 {
  $CI =& get_instance();
  $config =& get_config();
  if(!array_key_exists($lang,$config['languages']))
   $lang=array_search($config['language'],$config['languages']);
  return $CI->config->site_url()."/$lang/".trim($uri,"/").$CI->config->item('url_suffix');
 }


Esto es continuacion del articulo: http://sosinformatico.blogspot.com/2011/10/codeigniter-multi-lenguaje-web-por-urls.html

Codeigniter Multilenguaje web, por URLS

Este tutorial se lo voy a dedicar a explicar como se hace para crear un sistema Multilenguaje en Codeigniter, en internet hay varios tutoriales de como hacer esto en nuestro idioma, pero lo hacen usando cookies, y aunque no están mal, no permiten a un buscador almacenar correctamente el contenido de nuestra pagina en los diferentes lenguajes y así atraer a más gente a nuestra pagina Web.
Codeigniter Multilenguaje

Aquí les dejo un articulo sobre SEO y el MULTILINGUAL SEO, por si se quieren documentar un poco más: http://www.searchenginejournal.com/multilingual-seo/19903/

Ahora bien, para empezar deben conocer primero como se trabaja con lenguajes de manera básica con Codeigniter, aqui les dejo un pequeño tutorial que hice: http://sosinformatico.blogspot.com/2011/10/codeigniter-language-class.html

Para hacer que codeigniter sea multilenguaje hay dos maneras que yo conozco, una es a través de hooks y otra extendiendo la clase que lang.php en la carpeta core de nuestra aplicación. En este tutorial voy a explicar la ultima forma, y despues publicara otro con la otra forma.

Configurando el archivo Routes.php

En application/config/routex.php vamos a agregar dos lineas:


$route['(\w{2})/(.*)'] = '$2';

$route['(\w{2})'] = $route['default_controller'];


En el primer array se establece que cualquier ruta que tenga dos caracteres y una barra inclidada y algo mas, sera rederigida a ese algo más, y al segunda estable que cualquier ruta con dos caracteres llamara al controlador por defecto.

Configurando el archivo Config.php

En application/config/config.php, cerca de la configuración de lenguaje vamos a agregar:


$config['languages'] = array("es" => "espanol", "en" => "english");



$config['redirect_urls']=false;


Esto es para definir la configuración de nuestro sistema de lenguajes, y que después solo deba ser modificada desde aquí, si queremos agregar un lenguaje aparte o cualquier cosa. Ademas tambien nos permite definir si queremos usar la redirection de url o no, que sirve para que si alguien entre a "hhttp://nuestrositio.com/" lo redirige automaticamente o no a "hhttp://nuestrositio.com/xx" las dos x significan el idioma que tengamos por defecto.

Extendiendo lang.php

Para extender esta libreria del nucleo de Codeigniter, debemos crear dentro de la carpeta application/core  un archivo que debe empezar con la variable definida $config['subclass_prefix'] en el config.php (por defecto es MY_) y luego lang.php, en mi caso el nombre es MY_Lang.php, y dentro colocamos el siguiente codigo:

<?php (defined('BASEPATH')) OR exit('No direct script access allowed');

class MY_Lang extends CI_Lang
{
 function __construct()
 {
  parent::__construct();  
  $config =& get_config();
  if(isset($config['languages']) && isset($config['redirect_urls']))
  {
   global $URI, $CFG, $IN;
   //var_dump($URI);
   $lang = (isset($URI->segments['1']))?$URI->segments['1']:'';
   $uri=$URI->segments;
   if(strlen($lang) == 2 && array_key_exists($lang,$config['languages']) == true)
   {
    $config['language']=$config['languages'][$lang];
   }
   elseif($config['redirect_urls'] == true || strlen($lang) == 2 && array_key_exists($lang,$config['languages']) == false)
   {
    $url=$config['base_url'];
    $url.=(empty($config['index_page']))?'':$config['index_page'].'/';
    $url.=array_search($config['language'],$config['languages']).'/';
    if(strlen($lang)==2)
    {
     array_shift($uri);
     $url.=implode('/',$uri);
    }else
    {
     $url.=implode('/',$uri);
    }
    header("location: $url");
   }
  }
 }
}


Este código es el que va a dar la funcionalidad de muli lenguaje, es bastante sencillo, lo que hace es comprueba cuales son los primeros caracteres en la url, comprueba que estén definidos en la configuración y si es así cambia al idioma correspondiente, sino redirige al idioma por defecto. SI la variable redirect:url esta en true, el sistema comprobara que la url empieza con los dos caracteres del idioma por defecto y si no es así lo redirige a la url del idioma por defecto, si esta en false esta variable pues no hace nada y deja el idioma por defecto.

Probando el sistema Multilenguaje.

Esto no es un sistema automatizado que va a traducir toda tu aplicación, lo que hace es modificar solamente el idioma que usa la aplicación dependiendo de la url, para verlo funcionando debemos crear una aplicación que tenga varias idiomas ya definidos y esto se encargara del resto.

De todas maneras aquí les dejo una aplicación con el welcome_message en español y ingles, y los links para cambiar de idioma. Y así la prueban y comentan como funciona.






martes, 25 de octubre de 2011

Codeigniter Language CLASS




Este tutorial trata sobre como usar la libreria Language Class de codeigniter y sera el preámbulo par aun tutorial de como crear sus sistema multi lenguaje con codeigniter, primero vamos a empezar por lo básico, como se hace en codeigniter para trabajar con varios lenguajes. Codeigniter posee una Clase dedicada especialmente para trabajar con los lenguajes, (y tambien tiene un helper), lo primero que debemos saber es que hay dos carpetas donde se guardan los diferentes lenguajes en codeigniter, una esta en "system/language" y la otra en "application/language", en la primera se guarda los lenguajes que tienen que ver solamente con el sistema principal, y la segunda guarda los lenguajes de nuestro proyecto Web. 

Dentro de esas carpetas deben tantas carpetas como lenguajes tengamos, y a su ves tantos archivos de lenguajes como necesitemos, eso si, de carpeta a carpeta de lenguaje deben estar exactamente los mismos archivos, con los mismos arrays, la única diferencia es que el lenguaje en el que van a estar escritos los valores de los lenguajes. Como ya en una entrada anterior les deje la traducción de codeigniter al español, aqui!. Que si la revisan con detenimiento es idéntica a la del ingles con la única diferencia que el contenido esta en español, esa traducción como la traducción del sistema va en "system/language",


Creando Archivos de Lenguaje

Para trabajar con varios lenguajes en codeigniter debemos empezar creando los archivos de lenguajes en "application/language/(el lenguaje)/miarchivo_lang.php", todos los archivos de lenguaje deben terminar en _lang.php,  y deberíamos tener uno exactamente igual para cada lenguaje. 

Dentro de nuestro debemos ir colocando lineas que extiendan el array $lang, para ir definiendo nuevos textos en ese lenguaje. las lineas deben seguir este prototipo:

$lang['clave del lenguaje']="contenido para esta clave";

A la hora de crear nuestro archivo de lenguaje es bueno crear y seguir nuestra propia notación para que despues no vayamos a confundirnos. Ejemplo:

$lang['msj_mensaje_borrado']="Su mensaje a sido borrado";
$lang['error_mensaje_borrado"]="Su mensaje no a podido ser borrado";

Cargando un archivo de lenguaje.

Después de tener creado lso archivos de lenguaje, vamos a necesitar cargarlos, esto se hace con :

$this->lang->load('mi archivo','el lenguaje que quiero');

El segundo parámetro es opcional y si no se coloca cargara el lenguaje predeterminado en nuestro archivo de configuración.

También podemos cargar un archivo de lenguaje automaticamente cada ves que nuestra aplicación cargue, definiendo lo en "applicacion/config/autoload.php".

Imprimiendo lineas de el archivo de lenguaje.

El  Languague Class tienen un método line('clave del lenguaje'), que devuelve una linea especifica de lenguaje. Este metodo seguna la documentación oficial, pues ya no se debería a usar más y se debería usar la función lang() de el Langueage helper. 

echo $this->lang->line('msj_mensaje_borrado');
//Salida: Su mensaje a sido borrado
echo lang('msj_mensaje_borrado');
//Salida: Su mensaje a sido borrado
echo lang('msj_mensaje_borrado','id_input_formulario')
//Salida: <label for='id_input_formulario'">Su mensaje a sido borrado</label>

Bueno esto es todo por hoy, Voy a tratar de que al proxima entrada sea de como crear un sistema Multilenguaje con Codeigniter.

Nota: si crean como es debido los archivos de lenguaje en la carpeta de español y ingles, veran como al modificar la variable en el config.php va a cambiar en lenguaje al reabrir la pagina.

martes, 18 de octubre de 2011

Tutorial: Como Usar Jquery UI Dialog


jQuery UI Dialog, es un widget que forma parte de la librería del jQuery UI, que nos permite la creación de ventanas modales, de manera fácil y sencilla. Jquery UI Dialog como los demás widgets de la librería de jQuery UI sigue los estándares de jQuery y por lo tanto es bastante personalizable.



NOTA: Súper importante, estoy trabajando con la versión 1.8 del jQuery UI, y según e leído lo mas probable es que la en la versión 1.9 se modifique su forma de uso.

El widget jQuery UI Dialog, no requiere inicialización previa para empezar a trabajar aunque de todas manera lo podemos iniciar aparte, el widget requiere de un div en nuestra pagina con un id y el contenido que queramos que aparezca en la ventana modal. El contenido se puede parecer a esto:

<div id='dialog' style='display:none;' title='titulo de la ventana'>(contenido que quieres que aparezca en la caja de dialogo)</div>

Dentro de este div, podemos poner lo que necesitemos, ya sean formularios, imagenes, iframe, resultado de una llamada AJAX o todo junto si queremos. Aparte también podemos tranquilamente modificar el contenido del dialog con jQuery.html().

Requisitos para usar jQuery UI Dialog:
  • jquery.ui.core.js
  • jquery.ui.widget.js
  • jquery.ui.position.js
  • jquery.ui.button.js(opcional, solo si se van a usar los botones)
  • jquery.ui.mouse.js (opcional, solo si vamos a usar draggable o resizable)
  • jquery.ui.draggable.js(opcional solo si se va a usar la opcion "dragabble: true")
  • jquery.ui.resizable.js


Parámetros del widget jQuery UI Dialog:

Aqui estan los más importantes(casi todos) para la lista completa: http://jqueryui.com/demos/dialog#options
  • width: Especifica el ancho de la ventana modal, puede ser en numero o auto.
  • heigth: Especifica el alto de la ventana modal, puede ser numero o auto.
  • (min|max)width: especifica el ancho maximo o minimo de la ventana modal
  • (min|max)heigth: especifica la altura maxima o minima de la ventana modal
  • autoOpen: especifica si se abre o no automaticamente la ventana modal.
  • buttons, botones que va a tener nuestra ventana de dialogo, con sus funciones.
  • hide: efecto que sera usado cuando se cierre la ventana
  • show: efecto que se usara cuando se abra la ventana
  • draggable: define si es movible o no la ventana modal
  • resizable: especifica si se puede o no redimenzionar la ventana
  • modal: la ventana puede ser modal o no, si es verdad, pone un fondo en toda la pantalla semitransparente que impide que el usuario haga click en cualquier otro lado.
  • position: ubicacion de la ventana modal en la ventana, opciones:  'center', 'left', 'right', 'top', 'bottom'.  o un array que puede contener dos pocisiones una con las "x" y otras con las "y", estas pocisiones pueden ser con una de las opciones antes puesta o con un numero.
  • title: Especifica un titulo a la ventana
  • zIndex: establece el zIndex para nuestra ventana modal
  • dialogClass: agrega una clase a la ventana modal para poder definir estilos o lo que necesitemos.

 Eventos del widget jQuery UI Dialog:
  • open: permite especificar algunas opciones antes de que abre la ventana de dialogo, util para ventanas con formularios, donde queremos reiniciar lo que tiene el formulario.
  • beforeClose: funcion que se ejecute antes de que se cierre la ventana, lo cual tambien nos permite cancelar el cierre de la ventana si retorna false.
  • close: evento de cuando se cierra la ventana.
  • create: evento de cuando se crea la instancia.
  • focus: evento de cuando la ventana recibe el foco o es activada.
  • eventos de draggable: dragStart, dragStop, drag.
  • eventos de resizable: resizeStart, resizeStop, resize.

Metodos del widget jQuery UI Dialog:

  • close: cierra la ventana de dialogo
  • open: abre la ventana.
  • destroy: destruye la ventana.


Ventajas y Desventajas del jQuery UI DIalog

La única desventaja que presenta Jquery UI Dialog frente a otros plugins con fancybox, es que este no trae ningún tipo de sistema ya pre-echo para galerías o enlaces que se carguen con iframe o ajax, si que es simplemente una ventana modal y las demás funcionalidades se las tenemos que dar nosotros mismos o mezclarlo con otro plugin. Pero por otro lado tiene una gran ventaja frente a fancybox, porque no requiere pre-instalación de la ventana de dialogo sino que lo podemos crear cuando lo necesitemos.

Hasta aquí llega el tutorial por hoy, después pondre ejemplos mas concretos porque con la practica se hace al maestro.

Chao, Hasta una prosxima entrega!!

domingo, 16 de octubre de 2011

Crear Urls Limpias de acentos con Codeigniter

Esta ves les voy a hablar de la función url_title de el helper url de codeigniter, la cual es muy útil para crear direcciones web validas y limpias de una manera fácil, y ademas también les voy a dejar una versión mejorada de esta función para que también limpien de acentos las url, que es lo único que le hace falta a esta librería.

La función lo que hace es eliminar cualquier carácter extraño de la cadena de texto pasada, utilizando expresiones regulares, dejando solamente los caracteres de la a-z y modificando los espacios a "-" o "_".

La ejemplos de uso de la función url_title().

echo url_title('buen día'); //da como salida "buen-da"

echo url_title("Vas para caracas?? o que?!!!?<{{}"); // da como resultado"Vas-para-carcas??-o-que?!!!?"


Como evitar que url_title() elimine los acentos


Ahora bien, para lograr esto lo primero que debemos hacer es crear nuestra propia version del URL helper, para esto en la carpeta application/helpers creamos un archivo llamado MY_url_helper.php, (OJO usamos MY_ si ese es el prefijo que tenemos establecido en nuestro archivo de configuración) y dentro del archivo colocamos lo siguiente:

function url_title($str, $separator = 'dash', $lowercase = FALSE)
{
  $str=strtr($str,$array=array("À"=> "A","Á"=>"A","Â"=>"A","Ã"=>"A","Ä"=>"A","Å"=>"A","à"=>"a","á"=>"a","â"=>"a","ã"=>"a","ä"=>"a","å"=>"a","Ò"=>"O","Ó"=>"O","Ô"=>"O","Õ"=>"O","Ö"=>"O","Ø"=>"O","ò"=>"o","ó"=>"o","ô"=>"o","õ"=>"o","ö"=>"o","ø"=>"o","È"=>"E","É"=>"E","Ê"=>"E","Ë"=>"E","è"=>"e","é"=>"e","ê"=>"e","ë"=>"e","Ç"=>"C","ç"=>"c","Ì"=>"I","Í"=>"I","Î"=>"I","Ï"=>"I","ì"=>"i","í"=>"i","î"=>"i","ï"=>"i","Ù"=>"U","Ú"=>"U","Û"=>"U","Ü"=>"U","ù"=>"u","ú"=>"u","û"=>"u","ü"=>"u","ÿ"=>"y","Ñ"=>"N","ñ"=>"n"));
  if ($separator == 'dash')
  {
   $search  = '_';
   $replace = '-';
  }
  else
  {
   $search  = '-';
   $replace = '_';
  }

  $trans = array(
      '&\#\d+?;'    => '',
      '&\S+?;'    => '',
      '\s+'     => $replace,
      '[^a-z0-9\-\._]'  => '',
      $replace.'+'   => $replace,
      $replace.'$'   => $replace,
      '^'.$replace   => $replace,
      '\.+$'     => ''
     );

  $str = strip_tags($str);

  foreach ($trans as $key => $val)
  {
   $str = preg_replace("#".$key."#i", $val, $str);
  }

  if ($lowercase === TRUE)
  {
   $str = strtolower($str);
  }
  return trim(stripslashes($str));
 }

Cave destacar que esta función es la misma de codeigniter lo único es que le e agregado una linea para que también reemplace los caracteres que tienen acentos por los normales.

Tambien si quieres pueden agregar esta funcion: que elimina los "-" y los "_" de la caeena que se el pase, más o menos trabaja a la inversa de url_title().

function inv_url_title($str,$lowercase = FALSE)
{
 $str = preg_replace("#[_-]+#i", ' ', $str);
 if ($lowercase === TRUE)
 {
  $str = strtolower($str);
 }
 return $str;
}




sábado, 15 de octubre de 2011

Jquery: Crear Select dinamico estado, municipio y parroquia.

Hace poco una persona solicito en el blog en uno de los comentarios que como se hacia un select Dinamico con estado, municipio y parroquia, esta entrada se la voy a dedicar a ese tema pero como en todo siempre hay varias maneras de manejar un mismo problema, pues esta ves voy a mostrar una solucion !SOLO¡ usando JQUERY, para este ejemplo no voy a usar nada de php ni ajax. Para comenzar debemos tener una lista de estados municipios y parroquias, la cual debe tener un formato parecido al siguiente:

var estados = [{'id_estado':'1','estado':'DISTRITO CAPITAL'},{'id_estado':'2','estado':'AMAZONAS'}];



var municipios = [{'id_municipio':'1','id_estado':'1','municipio':'LIBERTADOR'},{'id_municipio':'2','id_estado':'2','municipio':'ALTO ORINOCO'}];



var parroquias = [{'id_parroquia':'1','id_municipio':'1','id_estado':'1','parroquia':'Parroquia Altagracia'},{'id_parroquia':'2','id_municipio':'1','id_estado':'1','parroquia':'Paroquia Antimano'}]; 


Estes son solamente de ejemplo pero por supuesto que los nuestros van a ser mucho mas largos.

En el siguiente enlace dejo todo lo necesario para empezar, una lista en javascript con estados, municipios y parroquias de venezuela, la estructura html basica,  ademas de la version final:
http://www.box.net/shared/7uktun6uxhbllng6rir9

Ok ahora, ya tenemos la base para empezar, lo primero es crear la lista de estados, donde vamos a usar el array de estados, para crear la lista, lo que vamos a hacer es basicamente alamcenar el html con las opciones de los estados en una variable y despues ponerla como valor del select, para recorrer el array vamos a usar .each, asi quedaria nuestra funcion para los estados:

var sestados = '<option value=""></option>';
$(estados).each(function(i){
   sestados += '<option value="'+this.id_estado+'">'+this.estado+'</option>';
});
$('#estados').html(sestados);


Ahora ya tenemos el select de estados, ahora tenemos que crear el de municipios, para esto tenemos que usar el evento de .change() en el select de estados para que cuando sea modificado creemos el select de municipios, el cual se va a hacer muy parecido al de estados con la unica diferencia que vamos a tener que filtrar el array por estado seleccionado.

Para obtener solo los del estado seleccionado, para ello vamos a usar la funcion jQuery.grep, la cual filtra los elementos de un array que satisfacen la funcion de filtrado, sin afectar el array original. la funcion de filtrado nos pasa dos variables el elemento del array y el indice del array, solamente tenemos que hacer nustra funcion de comprobacion y retornar true o false si cumple o no nuestros parametros.

La funcion quedaria de esta manera:

$('#estados').change(function(){ // evento que al ser modificado el select estados es llamado
    var estado = $('#estados').val(); //obtenemos el estado seleccionado
    var pmunicipios = $.grep(municipios,function(n,i){return (n.id_estado == estado); }); //filtramos por estado
    var smunicipios = '<option value=""></option>'; 
    $(pmunicipios).each(function(i){ //recorremos cada uno de los municipios previamente filtrados
        smunicipios += '<option value="'+this.id_municipio+'">'+this.municipio+'</option>'; //vamos  creando el select
    });
    $('#municipios').html(smunicipios);//el html generado se asigna al select de municipios
});



Ahora vamos a trabajar con con las parroquias las cuales vamos a filtrar por estado y municipio, lo cual se va a hacer de las misma manera que la anterior, con la diferencia que tenemos que cambiar todo lo que dice municipios a parroquias y el filtro ahora va a comprobar que el id_estado se el del estado y el id_municipio sea el del municipio seleccionado.


Este es el resultado final para parroquias:

$('#municipios').change(function(){
    var estado = $('#estados').val();
    var municipio = $('#municipios').val();
    var pparroquias = $.grep(parroquias,function(n,i){return (n.id_estado == estado && n.id_municipio == municipio ); });
    var sparroquias = '<option value=""></option>';
    $(pparroquias).each(function(i){
        sparroquias += '<option value="'+this.id_parroquia+'">'+this.parroquia+'</option>';
    });
    $('#parroquias').html(sparroquias);
});


Este tutorial llega a su final, como abran visto es sumamente sencillo y no necesita mucha explicacion, lo unico que nos resta es que cuando se cambie el estado seleccionado pues borre las parroquias, lo cual se los dejo de tarea :), suerte y espero que les sirva, si tienen una duda publiquenla y si les gusto compartanlo que compartir no cuesta nada.

Nota: hay un pequeño detalle en el array que les paso en el archivo por la codificacion, pero como seguro ustedes generaran sus propios array despues por eso no lo modifique, despues hare uno con ajax y php o codeigniter.