2010-05-25 3 views
0

내 사이트에서 Google지도를 사용하고 싶습니다.CodeIgniter의 SQL에서 Google Maps API로 결과 전달

내 주소는 DB에 저장됩니다. 정보가 모두 동적 인 페이지를 가져오고 있습니다. 예 : mysite.com/site/business/5 (여기서 5는 비즈니스의 ID 임).

의 나는이 같은 쿼리를 수행한다고 가정 해 봅시다 :

function addressForMap($id) { 
$this->db->select('b.id, b.busaddress, b.buscity, b.buszip'); 
$this->db->from('business as b'); 
$this->db->where('b.id', $id); 
$this->db->limit(1); 

// 한계를 $ this-> DB-> 제한 (1)를 추가;

// get the results.. cha-ching 
$q = $this->db->get(); 

// any results? 
if($q->num_rows() !== 1) 
{ 
    return FALSE; 
} 

return $q->row(); 

}

내가 어떻게 출력 Google지도 API에 대한 정보를 제대로 적절하게지도를 표시하도록?

API 인터페이스의 결과는 $marker['address'] = 'Crescent Park, Palo Alto';입니다.

는 여기에 내가 컨트롤러에있는 내용은 다음과 같습니다

$marker = array(); 
    $address = $this->Business_model->addressForMap($id); //Get result row 
    $marker['address'] = $address->busaddress .' '.$address->buscity .', '. $address->buszip; 
+0

메시지가 도착하는 문제는 다음과 같습니다. 정의되지 않은 속성 : CI_DB_mysql_result :: $ buscity, 메시지 : 정의되지 않은 속성 : CI_DB_mysql_result :: $ buszip 및 메시지 : 정의되지 않은 속성 : CI_DB_mysql_result :: $ busaddress –

답변

3

모델

function addressForMap($id) 
{ 
    $this->db->select('b.id, b.busaddress, b.buscity, b.buszip'); 
    $this->db->from('business as b'); 
    $this->db->where('b.id', $id); 

    // add a limit 
    $this->db->limit(1); 

    // get the results.. cha-ching 
    $q = $this->db->get(); 

    // any results? 
    if($q->num_rows() !== 1) 
    { 
     return FALSE; 
    } 

    return $q->row(); 
} 

컨트롤러

function your_controller_method($id) 
{ 
    $data = $this->Business_model->addressForMap($id); 

    // did we get any results? 
    if($data === FALSE) 
    { 
     show_error(); 
     return; 
    } 

    $marker['address'] = $data->busaddress.' '.$data->buscity.', '.$data->buszip; 
} 

당신이 $id 실제 숫자 ID 것을 확인해야합니다. 실제로 쿼리를 수행하기 전에 수행하는 것이 좋습니다 .. IMO.

편집 # 2 :


편집 # 1 위의 변경된 코드를 참조하십시오 :

return $this->db->get(); 

때 귀하의 의견에서와 변경은

이있어 나머지 코드를 기준으로하면 다음과 같아야합니다.

$query = $this->db->get(); 

쿼리 개체를 반환하면 변수 $address에 CI 결과 개체가 할당됩니다. 그래서, 컨트롤러, 당신은 실제로 이런 식으로 뭔가를해야 할 것입니다 : 아직도

$address = $this->Business_model->addressForMap($id); 

$row = $address->row(); 

$marker['address'] = $row->busaddress .' '.$row->buscity .', '. $row->buszip; 

을 ... 나는 $query =-return를 변경 제안하고 그대로 당신은 당신의 컨트롤러를 유지할 수 있습니다. 컨트롤러에 대한

: 모델에 대한

$address = $this->Business_model->addressForMap($id); //Get result row 
     $config['apikey'] = 'google-api-key'; 
     $config['center_address'] = $address->busaddress .', '. $address->buscity; 
     $this->googlemaps->initialize($config); 
     $marker = array(); 

     // $marker['address'] = $address->busaddress .' '.$address->buscity .', '. $address->buszip; 
     $marker['address'] = $address->busaddress .', '. $address->buscity; 
     $this->googlemaps->add_marker($marker); 

     $data['map'] = $this->googlemaps->create_map(); 

     $data['address'] = $address->busaddress .', '.$address->buscity; 

: my library를 사용

function addressForMap($id) { 
    $this->db->select('b.id, b.busaddress, b.buscity, b.buszip'); 
    $this->db->from('business as b'); 
    $this->db->where('b.id', $id); 
    $this->db->limit(1); 
// add a limit 
    $this->db->limit(1); 

    // get the results.. cha-ching 
    $q = $this->db->get(); 

    // any results? 
    if($q->num_rows() !== 1) 
    { 
     return FALSE; 
    } 

    return $q->row(); 
} 
+0

내 게시물을 업데이트했습니다. 모델과 컨트롤러에 대해 내가 가진 것을 보여줄 수 있습니다. 내가 실행중인 문제는 내가 얻을 메시지 : 정의되지 않은 속성 : CI_DB_mysql_result :: $ buscity, 메시지 : 정의되지 않은 속성 : CI_DB_mysql_result :: $ buszip 및 메시지 : 정의되지 않은 속성 : CI_DB_mysql_result :: $ busaddress –

+0

난 당신이 문제를 참조하십시오 나는 그것을 반영하기 위해 나의 대답을 편집했다. – bschaeffer

+0

치명적인 오류가 발생했습니다 : 51 행의 /home/welcomet/public_html/application/controllers/site.php에 정의되지 않은 stdClass :: row() 호출 : $ row = $ address-> row(); 지금? –

0

다음은 최종 올바른 코드입니다.내가 여기에했던 것과 정확히 같은 시간에 내 블로그에 해결책을 게시 한 것처럼 보입니다 .-P

당신이 그것을 소트 받았다고 들었을 때 다행입니다!

0

감사

+0

감사합니다. 이제 나는 그것을 작동 시켜서 사랑해. :) –

+0

나를 던지고 있던 부분은 마커가 놓여있는 곳이면지도가 자동으로 중앙에 위치 할 것이라고 생각했습니다. 나는지도를 중심에 놓고 마커를 놓아야한다는 것을 깨닫지 못했습니다. 나는 더 일찍 작업했을 지 모르지만 화면에 아무런 표시가 나타나지 않고 Palo Alto 만 보여 주었기 때문에 나는 여전히 올바르게 작동하지 않는다고 생각했습니다. –