Вывод точек поблизости
This commit is contained in:
parent
c377fccb65
commit
0e178f19b2
|
|
@ -70,11 +70,13 @@ class PageController extends Controller
|
||||||
|
|
||||||
$randomPoint = Point::model()->getRandom();
|
$randomPoint = Point::model()->getRandom();
|
||||||
$similarPoints = Point::model()->getAll(array('where' => 'categoryId = '.$point->categoryId.' AND `id` <> '.$point->id.' ORDER BY RAND() LIMIT 6;'));
|
$similarPoints = Point::model()->getAll(array('where' => 'categoryId = '.$point->categoryId.' AND `id` <> '.$point->id.' ORDER BY RAND() LIMIT 6;'));
|
||||||
|
$closestPoints = Point::model()->getClosestPoints($id);
|
||||||
|
|
||||||
self::render('point.php', array(
|
self::render('point.php', array(
|
||||||
'point' => $point,
|
'point' => $point,
|
||||||
'randomPoint' => $randomPoint,
|
'randomPoint' => $randomPoint,
|
||||||
'similarPoints' => $similarPoints,
|
'similarPoints' => $similarPoints,
|
||||||
|
'closestPoints' => $closestPoints,
|
||||||
'categories' => $categories,
|
'categories' => $categories,
|
||||||
'photos' => $point->photos,
|
'photos' => $point->photos,
|
||||||
));
|
));
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,40 @@ class Point extends Model
|
||||||
return $this->getByPK($pointId);
|
return $this->getByPK($pointId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getClosestPoints($pointId)
|
||||||
|
{
|
||||||
|
$point = Point::model()->getByPK($pointId);
|
||||||
|
$lat = floatval($point->lat);
|
||||||
|
$lng = floatval($point->lng);
|
||||||
|
|
||||||
|
$query = '
|
||||||
|
SELECT *, (
|
||||||
|
SQRT(POW(`lat`-:lat,2)+POW(`lng`-:lng,2))
|
||||||
|
) AS `dist` FROM `' . $this->_tableName_ . '`
|
||||||
|
WHERE
|
||||||
|
`lat` BETWEEN :minLat AND :maxLat
|
||||||
|
AND
|
||||||
|
`lng` BETWEEN :minLng AND :maxLng
|
||||||
|
AND
|
||||||
|
`lat` <> :lat
|
||||||
|
AND
|
||||||
|
`lng` <> :lng
|
||||||
|
ORDER BY `dist`
|
||||||
|
LIMIT 6;';
|
||||||
|
|
||||||
|
$res = App::DB()->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
|
||||||
|
$res->execute(array(':lat' => $lat, ':lng' => $lng, ':minLat' => $lat-1, ':minLng' => $lng-1, ':maxLat' => $lat+1, ':maxLng' => $lng+1));
|
||||||
|
|
||||||
|
$ready = array();
|
||||||
|
$calledClass = get_called_class();
|
||||||
|
while ($res && $row = $res->fetch(PDO::FETCH_ASSOC))
|
||||||
|
{
|
||||||
|
$ready[] = new $calledClass($row);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $ready;
|
||||||
|
}
|
||||||
|
|
||||||
public function getCountByUser($userId)
|
public function getCountByUser($userId)
|
||||||
{
|
{
|
||||||
$res = App::DB()->query('SELECT count(`id`) AS `cnt` FROM ' . $this->_tableName_ . ' WHERE `author` = ' . $userId . ' ;')->fetch(PDO::FETCH_ASSOC);
|
$res = App::DB()->query('SELECT count(`id`) AS `cnt` FROM ' . $this->_tableName_ . ' WHERE `author` = ' . $userId . ' ;')->fetch(PDO::FETCH_ASSOC);
|
||||||
|
|
|
||||||
|
|
@ -98,9 +98,13 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-2" style="width: 250px!important;">
|
<div class="col-md-2" style="width: 250px!important;">
|
||||||
<h2>Поблизости:</h2>
|
<h2>Поблизости:</h2>
|
||||||
<p><img src="/photos/small/_03bad.jpg" style="width: 105px;"/> <img src="/photos/small/1_0a464.jpg" style="width: 105px;"/></p>
|
<?php if(empty($closestPoints)):?>
|
||||||
<p><img src="/photos/small/15_165ea.jpg" style="width: 105px;"/> <img src="/photos/small/271_6506d.jpg" style="width: 105px;"/></p>
|
Известных нам точек поблизости нет.
|
||||||
<p><img src="/photos/small/305_337c1.jpg" style="width: 105px;"/> <img src="/photos/small/300_81352.jpg" style="width: 105px;"/></p>
|
<?php else: ?>
|
||||||
|
<?php foreach ($closestPoints as $cPoint): ?>
|
||||||
|
<a href="/page/point/id/<?= $cPoint->id ?>"><img src="<?= $cPoint->getImg()?>" title="<?= $cPoint->name ?>" style="width: 105px;"/></a>
|
||||||
|
<?php endforeach;?>
|
||||||
|
<?php endif; ?>
|
||||||
<hr/>
|
<hr/>
|
||||||
<h2>Похожие:</h2>
|
<h2>Похожие:</h2>
|
||||||
<?php foreach ($similarPoints as $sPoint): ?>
|
<?php foreach ($similarPoints as $sPoint): ?>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue