пятница, 10 сентября 2010 г.

Yii. Использование Google Map API для поиска координат точки по ее адресу.

Простой пример метода модели фреймворка Yii, для пооиска координат точки на карте по ее адресу. Используется Google Map API для поиска и CURL для обработки его результатов.

Одно маленькое замечание: частой проблемой при использовании поискового API - нессответствие кодировок. Рекомендую адрес который передается в метод searchPoint передавать посредством POST, так как в этом случае не будет бится кодировка (через GET бывают такие проблемы).

public function searchPoint($address=''){
 $key = Yii::app()->params['gmap'];
 $address = urldecode($address);

 $url = "http://maps.google.com/maps/geo?q={$address}&output=json&key={$key}";

 $ch = curl_init();

 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_HEADER,0);
 curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER["HTTP_USER_AGENT"]);
 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

 $data = curl_exec($ch);
 curl_close($ch);

 $data = CJSON::decode($data);

 $coord = $data['Placemark'][0]['Point']['coordinates'];
 return array('lng'=>$coord[0],'lat'=>$coord[1]);
}

CURL. Проверить существование URL

Если необходимо проверить существование файла в файловой системе, то достаточно выполнить код:

if(file_exists($filename)){....}

Если необходимо проверить существования URL то удобнее всего воспользоваться CURL. Отличительной особенностью такого подхода является то, что мы сами выставляем максимальный таймаут подключения к удаленному ресурсу. Тоесть нет необходимости ждать ответа от сервера, что нет такого урл - конект оборвется строго по таймауту.

function checkURLExists($url=""){
  if(empty($url))
    return false;
  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_TIMEOUT, 5);
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  $response = curl_exec($ch);
  $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  curl_close($ch);
  if($http_code>=200 && $http_code<300)
    return true;
  return false;
}

четверг, 9 сентября 2010 г.

Настроить высоту iFrame по его контенту с помощью JQuery.Use JQuery to adjust the iframe height by content

Если на страницу добавляеться iFrame, то мы часто уже знаем его необходимую ширину, в тоже самое время, высота iFrame должна зависеть от его контента.

Напишем короткую функцию на jQuery, которая сможет подгонять ширину iFrame по его содержимому.

Пусть у нас на странице есть iFrame с id="iframe", тогда код ресайза следующий:

$(document).ready(function(){
  $("#iframe").load(setHeight);
});
function setHeight(){
  var iFrame = $(this, parent.document.body);
  iFrame.height($(document.body).height() + 30);
}

Отключить автозаполнение текстовых полей Firefox

Для того чтобы отключить в Firefox автозаполнение форм (текcтовых полей), которое мешает работе плагнам автозаполнения (autocomplete, autosuggest) нужно добавить к полю атрибут autocomplete="off"

Для того, чтобы проходила валидация W3C и не ругалась - с помощью jQuery добавим атрибут к полю:

$(document).ready(function(){
  $("input").attr('autocomplete','off');
}

среда, 8 сентября 2010 г.

Rails. Remove item from the session

Rails позволяет работать с сессиями, как с обычными хешами, потму операции добавления и удаления из сесии будут выглядеть так:

Для добавления нового элемента в сессию:

session[:item] = data

Для удаления из сессии элемента по имени:

session[:item] = nil