Community Add-Ons
| Maintainers: | chiper |
Ajax postcod (cep em Ajax)
for osCommerce Online Merchant v2.2
Alteração na criação de contas com consulta de cep e retorno de endereço, sem reload com Ajax e XML
Dúvidas/Sugestões
fabio@tecnopraticas.com
Na versão do Rafael Amorim eu não conseguia selecionar o esta, apenas os campo endereço, bairro , cidade eram selecionado, então arrumei mudei uma query, porém testei aqui e percebi que dava erro dizendo pra selecionar o estaão consegui resolver o problema, isso pra quem baixou a versão que eu postei aqui.
Procure proximo a linha 288 e ache a seguinte linha:
$zone_query = tep_db_query("select distinct zone_id from " . TABLE_ZONES . " where zone_country_id = '" . (int)$country . "' and UPPER(zone_name) = UPPER('" . tep_db_input($state) . "')");
Substitua por :
$zone_query = tep_db_query("select distinct zone_id from " . TABLE_ZONES . " where zone_country_id = '" . (int)$country . "' and UPPER(zone_code) = UPPER('" . tep_db_input($state) . "')");
É isso ai pessoal,
FAÇA O UPDATE , CASO A HOSPEDAGEM ONDE VC SE SITUE BLOQUEI ESSA FUNÇÃO DO PHP(FILE GET CONTENT)
CÓDIGO
<?
///////////////////////////////////////////////////
//
// Consulta de CEP usando AJAX sem banco de dados
//
// Feito por: Rafael Amorim - wwww.rafaelamorim.com
// email: contato@rafaelamorim.com
// baseado no script de: chiper
//
///////////////////////////////////////////////////
//Header para evitar cahe
$gmtDate = gmdate("D, d M Y H:i:s");
header("Expires: {$gmtDate} GMT");
header("Last-Modified: {$gmtDate} GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Content-Type: text/html; charset=iso-8859-1");
extract($_GET);
/* proteção sql injection escarpando as aspas */
$n_cep=addslashes($cep);
function file_get_contents_curl($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //Set curl to return the data instead of printing it to the browser.
curl_setopt($ch, CURLOPT_URL, $url);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
function busca_cep($cep){
$resultado = file_get_contents_curl('http://republicavirtual.com.br/web_cep.php?cep='.urlencode($cep).'&formato=query_string');
if(!$resultado){
$resultado = "&resultado=0&resultado_txt=erro+ao+buscar+cep";
}
parse_str($resultado, $retorno);
return $retorno;
}
//Vamos buscar o CEP
$resultado_busca = busca_cep($n_cep);
switch($resultado_busca['resultado']){
case '2': //cidades com cep unico
$texto = "::".str_replace(" ", "+", $resultado_busca['cidade']).":".$resultado_busca['uf'].";";
break;
case '1': //cidades normais
$texto = $resultado_busca['tipo_logradouro']."+".$resultado_busca['logradouro'].":".$resultado_busca['bairro'].":".str_replace(" ", "+", $resultado_busca['cidade']).":".$resultado_busca['uf'].";";
break;
default:
$texto = "Numero de Cep Inválido: ".$n_cep;
break;
}
echo $texto;
?>
BY BYTESDESIGN.COM
Por motivo de atualização do servidor de webservice:
atualize seu javascript:
<script type="text/javascript">
function addEvent(obj, evt, func) {
if (obj.attachEvent) {
return obj.attachEvent(("on"+evt), func);
} else if (obj.addEventListener) {
obj.addEventListener(evt, func, true);
return true;
}
return false;
}
function XMLHTTPRequest() {
try {
return new XMLHttpRequest(); // FF, Safari, Konqueror, Opera, ...
} catch(ee) {
try {
return new ActiveXObject("Msxml2.XMLHTTP"); // activeX (IE5.5+/MSXML2+)
} catch(e) {
try {
return new ActiveXObject("Microsoft.XMLHTTP"); // activeX (IE5+/MSXML1)
} catch(E) {
return false; // doesn't support
}
}
}
}
function buscarEndereco() {
var campos = {
validpostcode: document.getElementById("validpostcode"),
postcode: document.getElementById("postcode"),
street_address: document.getElementById("street_address"),
company: document.getElementById("company"),
suburb: document.getElementById("suburb"),
city: document.getElementById("city"),
state: document.getElementById("state")
};
var ajax = XMLHTTPRequest();
ajax.open("GET", ("client.php?cep=" + campos.postcode.value.replace(/+/g, "")), true);
ajax.onreadystatechange = function() {
if (ajax.readyState == 1) {
campos.street_address.disabled = true;
campos.street_address.value = "carregando...";
campos.suburb.disabled = true;
campos.city.disabled = true;
campos.suburb.value = "carregando...";
campos.state.disabled = true;
campos.city.value = "carregando...";
} else if (ajax.readyState == 4) {
if(ajax.responseText == "Numero de Cep Inválido: "+campos.postcode.value){
campos.validpostcode.innerHTML = "O CEP informado não existe em nossa base de dados,<b>preencha manualmente o seu endereço</b>.";
campos.street_address.disabled = false;
campos.street_address.value = "";
campos.suburb.disabled = false;
campos.city.disabled = false;
campos.suburb.value = "";
campos.state.disabled = false;
campos.city.value = "";
}else{
campos.validpostcode.innerHTML = "";
var r = ajax.responseText, i, street_address, company, suburb, city, state;
street_address = r.substring(0, (i = r.indexOf(':')));
campos.street_address.disabled = false;
campos.street_address.value = unescape(street_address.replace(/+/g," "));
r = r.substring(++i);
suburb = r.substring(0, (i = r.indexOf(':')));
campos.suburb.disabled = false;
campos.suburb.value = unescape(suburb.replace(/+/g," "));
r = r.substring(++i);
city = r.substring(0, (i = r.indexOf(':')));
campos.city.disabled = false;
campos.city.value = unescape(city.replace(/+/g," "));
r = r.substring(++i);
state = r.substring(0, (i = r.indexOf(';')));
campos.state.disabled = false;
i = campos.state.options.length;
while (i--) {
if (campos.state.options[i].getAttribute("value") == state) {
break;
}
}
campos.state.selectedIndex = i;
}
}
};
ajax.send(null);
}
window.addEvent(
window,
"load",
function() {window.addEvent(document.getElementById("postcode"), "blur", buscarEndereco);}
);
function BuscaCep() {
window.open ('busca_cep.htm','buscaCep','scrollbars=no,resizable=yes,width=350,height=300');
}
function RemoveFormatString(TargetElement, FormatString) {
if (TargetElement.value == FormatString) {
TargetElement.value = "";
}
TargetElement.select();
}
//--></script>
by bytesdesign.om
Bom o nosso amigo Rafael Amorim postou esse código inicialmente, porém eu testei aqui e tinha alguns erros, não selecionavam os estados, eu corrigi os erros e estou postando novamente o código corrido.
///////////////////////////////////////////////////
//
// Consulta de CEP usando AJAX sem banco de dados
//
// Feito por: Rafael Amorim - wwww.rafaelamorim.com
// email: contato@rafaelamorim.com
// baseado no script de: chiper
//
///////////////////////////////////////////////////
NÃO PRECISA DO GIGANTESCO BANCO DE DADOS!!!!
É SÓ BAIXAR E USAR!!!!!!!
Dando continuidade ao trabalho dos demais colegas realizei algumas alterações no programa:
Implementação da pesquisa na tabela grandes e agências que são os ceps "especiais"(Próprios),
cidade que são ceps "genéricos" trazendo mais alguns itens incluindo o complemento e número no endereço quando houver, e finalizando com a máscara no formato do cep.
qualquer dúvida entrem em contato
Alexandre Binda
Agora corrigido problemas de acentos funciona tanto em php4 como em php5 e corrigido as inconsistencias nos retornos dos estados
-------------
Script in ajax that it returns the address according to postcod typed without reload
Now corrected problems of accents it functions in such a way in php4 as in php5 and corrected the inconsistencies in the returns of the states
Agora corrigido problemas de acentos funciona tanto em php4 como em php5 e corrigido as inconsistencias nos retornos dos estados
-------------
Script in ajax that it returns the address according to postcod typed without reload
Now corrected problems of accents it functions in such a way in php4 as in php5 and corrected the inconsistencies in the returns of the states
Devido ao grande numero de pedidos, sai do forno a versão 2.0 do retorno de endereçois atravez do cep em ajax pra oscommerce, tem uma inconsistencia no retorno dos estados, se alguem ai se habilitar, eu to sufocado de trabalhos por aqui, quem sabe no futuro verão 3.0
Baixem e usem a vontade, só não vale tirar os créditos ok, ninguem que é usuário normal pode ver mesmo, só ta nos fontes.!!!
http://www.oscommerce.com/community/contributions,3942/category,all/search,Cep+Ajax
CONFIGURAR A LINHA 311 (ONDE TA SEU SITE) e mais algumas coisas veja no arquivo leiame.txt
ajax.open("GET", ("http://www.seusite.com.br/client.php?cep=" + campos.postcode.value.replace(/[^d]*/, "")), true);
Tem um outro aqui tb, caso alguem ai queira utilizar em outras aplicações:
Para ver funcionando:
http://www.fabrica01.com.br/cep/
Para baixar:
http://www.fabrica01.com.br/cep/correios_02.rar
Os correios suspenderam a URL e a consulta o retorno agora é feita em flash
Estou trabalhando em um novo sisteminha de autopreenchimento do endereço segundo o cep sobre uma base de dados gratuita
Em breve novidades
Alteração na criação de contas com consulta de cep e retorno de endereço, sem reload com Ajax e XML
Dúvidas/Sugestões
fabio@tecnopraticas.com
