Статья "Яндекс.Карта в Open Real Estate"

Вопросы и ответы по изменению функционала, смене дизайна, переносу сайта и т.п.

Модераторы: Xpycm, Koduc

Правила форума
ВНИМАНИЕ! Форум не является средством гарантированной поддержки клиентов и пользователей. Поэтому на быстрый ответ тут рассчитывать не нужно, как и на ответ вообще. Сотрудники отвечают по мере своих возможностей.

На форуме действует ограничение в 3 сообщения / сутки.
Если Вы хотите сказать "спасибо", то воспользуйтесь функцией "Повысить репутацию" - зелёная иконка "плюс" под ником ответившего.

Re: Статья "Яндекс.Карта в Open Real Estate"

Сообщение Foton » 23 июл 2013, 12:57

Пришлите скриншоты до и после, так непоянтно что вы имеете ввиду
Foton
Разработчик
Разработчик
 
Сообщения: 431
Зарегистрирован: 26 янв 2012, 14:58
Очки репутации: 8

Re: Статья "Яндекс.Карта в Open Real Estate"

Сообщение Pioe » 23 июл 2013, 13:41

Foton писал(а):Пришлите скриншоты до и после, так непоянтно что вы имеете ввиду

https://dl.dropboxusercontent.com/u/110 ... r_zoom.png

в гуглмапс тоже есть но в глаза не бросается
Pioe
Незнакомец
 
Сообщения: 12
Зарегистрирован: 22 июл 2013, 10:22
Очки репутации: 0

Re: Статья "Яндекс.Карта в Open Real Estate"

Сообщение Foton » 24 июл 2013, 09:57

Это скорее всего проблема реализации отображения маркера в самих картах, к продукту отношения не имеет
Foton
Разработчик
Разработчик
 
Сообщения: 431
Зарегистрирован: 26 янв 2012, 14:58
Очки репутации: 8

Re: Статья "Яндекс.Карта в Open Real Estate"

Сообщение Pioe » 24 июл 2013, 12:02

Foton писал(а):Это скорее всего проблема реализации отображения маркера в самих картах, к продукту отношения не имеет


В CustomYMap.php нужно везде заменить
Код: Выделить всё
self::$icon['offset'] = array('x' => -16'y' => -16.5); 

на
Код: Выделить всё
self::$icon['offset'] = array('x' => -16'y' => -35); 

тк ноль оси координат это верхний левый угол (-2 пикселя снизу в изображении до ярлыка).
Pioe
Незнакомец
 
Сообщения: 12
Зарегистрирован: 22 июл 2013, 10:22
Очки репутации: 0

Re: Статья "Яндекс.Карта в Open Real Estate"

Сообщение Foton » 25 июл 2013, 10:09

Большое спасибо, что помогли исправить недоработку
Foton
Разработчик
Разработчик
 
Сообщения: 431
Зарегистрирован: 26 янв 2012, 14:58
Очки репутации: 8

Re: Статья "Яндекс.Карта в Open Real Estate"

Сообщение vanred79 » 25 июл 2013, 11:17

Pioe писал(а):
Foton писал(а):Это скорее всего проблема реализации отображения маркера в самих картах, к продукту отношения не имеет


В CustomYMap.php нужно везде заменить
Код: Выделить всё
self::$icon['offset'] = array('x' => -16, 'y' => -16.5); 

на
Код: Выделить всё
self::$icon['offset'] = array('x' => -16, 'y' => -35); 

тк ноль оси координат это верхний левый угол (-2 пикселя снизу в изображении до ярлыка).


Добрый день! Подскажите пожалуйста в какой папке находится файл CustomYMap.php?
Вся недвижимость Астаны у нас на сайте
vanred79
Местная знаменитость
Местная знаменитость
 
Сообщения: 660
Зарегистрирован: 02 фев 2013, 18:42
Откуда: Казахстан
Очки репутации: 2

Re: Статья "Яндекс.Карта в Open Real Estate"

Сообщение Pioe » 25 июл 2013, 11:31

да не за что.

vanred79, если структура из коробки то тут \protected\modules\apartments\components
Pioe
Незнакомец
 
Сообщения: 12
Зарегистрирован: 22 июл 2013, 10:22
Очки репутации: 0

Re: Статья "Яндекс.Карта в Open Real Estate"

Сообщение Pioe » 27 авг 2013, 07:39

Нашел еще не большую недоработку, при view объявления владелец может таскать маркер по карте Яндекса.

Решил так:

\protected\modules\apartments\controllers\backend\MainController.php
Код: Выделить всё

    public function actionYmap
($id, $model = null){

        if($model === null){
            $model = $this->loadModel($id);
        }

        $result = CustomYMap::init()->actionYmap($id, $model, $this->renderPartial('_marker', array('model' => $model), true));

        if($result){
            //return $this->renderPartial('backend/_ymap', $result, true);
        }
        return '';
    }
 

на
Код: Выделить всё

    public function actionYmap
($id, $model = null, $drag){

        if($model === null){
            $model = $this->loadModel($id);
        }

        $result = CustomYMap::init()->actionYmap($id, $model, $this->renderPartial('_marker', array('model' => $model), true), $drag);

        if($result){
            //return $this->renderPartial('backend/_ymap', $result, true);
        }
        return '';
    }
 


\protected\modules\apartments\controllers\MainController.php
Код: Выделить всё

public function actionYmap
($id, $model = null){
        if($model === null){
            $model = $this->loadModel($id);
        }
        $result = CustomYMap::init()->actionYmap($id, $model, $this->renderPartial('backend/_marker', array('model' => $model), true));

        if($result){
            //return $this->renderPartial('backend/_ymap', $result, true);
        }
        return '';
    }
 

на
Код: Выделить всё

    public function actionYmap
($id, $model = null, $drag){
        if($model === null){
            $model = $this->loadModel($id);
        }
        $result = CustomYMap::init()->actionYmap($id, $model, $this->renderPartial('backend/_marker', array('model' => $model), true), $drag);

        if($result){
            //return $this->renderPartial('backend/_ymap', $result, true);
        }
        return '';
    }
 


\protected\modules\apartments\views\_view.php
Код: Выделить всё

                <div class="row" id="ymap">
                    <?php echo $this->actionYmap($data->id, $data); ?>
                </div>

на
Код: Выделить всё

                <div class="row" id="ymap">
                    <?php echo $this->actionYmap($data->id, $data, false); ?>
                </div>


\protected\modules\apartments\views\backend\_form.php
Код: Выделить всё

                        <?php
        
} elseif (param('useYandexMap', 1)) {
            ?>
            <div class="clear">&nbsp;</div>
            <div id="ymap">
                <?php echo $this->actionYmap($model->id, $model); ?>
            </div>
            <div class="clear">&nbsp;</div>
            <?php
        
}?>

на
Код: Выделить всё

            <?php
        
} elseif (param('useYandexMap', 1)) {
            ?>
            <div class="clear">&nbsp;</div>
            <div id="ymap">
                <?php echo $this->actionYmap($model->id, $model, true); ?>
            </div>
            <div class="clear">&nbsp;</div>
            <?php
        
}?>


\protected\modules\userads\controllers\MainController.php
Код: Выделить всё

    public function actionYmap
($id){
        $model = $this->loadModelUserAd($id);

        $result = CustomYMap::init()->actionYmap($id, $model, $this->renderPartial('//../modules/apartments/views/backend/_marker', array('model' => $model), true));
        if($result){
            return $this->renderPartial('//../modules/apartments/views/backend/_ymap', $result, true);
        }
    }
 

на
Код: Выделить всё

    public function actionYmap
($id, $model, $drag){
        $model = $this->loadModelUserAd($id);

        $result = CustomYMap::init()->actionYmap($id, $model, $this->renderPartial('//../modules/apartments/views/backend/_marker', array('model' => $model), true), $drag);
        if($result){
            return $this->renderPartial('//../modules/apartments/views/backend/_ymap', $result, true);
        }
    }
 


\protected\modules\userads\views\_form.php
Код: Выделить всё

                <?php elseif (param('useYandexMap', 1)) : ?>
                    <!--<div id="ymap">-->
                    <?php echo $this->actionYmap($model->id, $model); ?>
                    <!--</div>-->
                <?php endif; ?>

на
Код: Выделить всё

                <?php elseif (param('useYandexMap', 1)) : ?>
                    <!--<div id="ymap">-->
                    <?php echo $this->actionYmap($model->id, $model, true); ?>
                    <!--</div>-->
                <?php endif; ?>


\protected\modules\apartments\components\CustomYMap.php
Код: Выделить всё

    public function actionYmap
($id, $model, $inMarker){
 

на
Код: Выделить всё

    public function actionYmap
($id, $model, $inMarker, $drag){
 

-
Код: Выделить всё

            
// Preparing InfoWindow with information about our marker.
            $this->addMarker($model->lat, $model->lng, $inMarker, 0, $model);
 

на
Код: Выделить всё

            
// Preparing InfoWindow with information about our marker.
            $this->addMarker($model->lat, $model->lng, $inMarker, 0, $model, $drag);
 

-
Код: Выделить всё

    public function addMarker
($lat, $lng, $content, $multyMarker = 0, $model = null) {
        $content = $this->filterContent($content);

        $clusterCaption = '';
        if ($model) {
            $clusterCaption = CJavaScript::quote($model->getTitle());
        }
        $draggable = ((Yii::app()->user->getState('isAdmin') || param('useUserads', 1) && (!Yii::app()->user->isGuest && Yii::app()->user->id == $model->owner_id) ) && !$multyMarker) ? ", draggable: true" : "";
 

на
Код: Выделить всё

    public function addMarker
($lat, $lng, $content, $multyMarker = 0, $model = null, $drag) {
        $content = $this->filterContent($content);

        $clusterCaption = '';
        if ($model) {
            $clusterCaption = CJavaScript::quote($model->getTitle());
        }
        $draggable = ((Yii::app()->user->getState('isAdmin') || param('useUserads', 1) && (!Yii::app()->user->isGuest && Yii::app()->user->id == $model->owner_id) ) && !$multyMarker && $drag) ? ", draggable: true" : "";
 


--------------------------------------------------

те. я по всей цепочке добавил новый параметр функции для "draggable:" и в зависимости от _view или _form разрешаю или запрещаю таскать маркер. Мне кажется можно все сделать на много проще, если да то подскажите пожалуйста как.
Pioe
Незнакомец
 
Сообщения: 12
Зарегистрирован: 22 июл 2013, 10:22
Очки репутации: 0

Re: Статья "Яндекс.Карта в Open Real Estate"

Сообщение Koduc » 28 авг 2013, 08:38

Да в принципе нормальное решение. Вообще, назвать ошибкой это сложно, потому что так было сделано специально еще в самых первых версиях, так с тех пор и тянется. Уже даже не вспомню для чего именно так.
Ваше решение вполне имеет право на жизнь, только небольшие замечания:
Код: Выделить всё
// вместо 
// public function actionYmap($id, $model = null, $drag){
// надо писать
public function actionYmap($id, $model = null, $drag = false){
// (ну и в других функциях аналогично) - так как перед переменной $drag уже стоит переменная со значением по умолчанию. 
// Иначе при некоторых настройках хостинга может выдавать предупреждение, "умные" редакторы кода тоже ругаются на это
 
-- Меньше знаешь - крепче спишь --
Аватара пользователя
Koduc
Ведущий разработчик
Ведущий разработчик
 
Сообщения: 902
Зарегистрирован: 28 дек 2011, 09:11
Очки репутации: 20

Re: Статья "Яндекс.Карта в Open Real Estate"

Сообщение Pioe » 30 авг 2013, 19:48

Да, про дефоултное значение не додумал спасибо. Но необходимости такого поведения для view я так и не понял. ) да и в гугл картах такого поведения нет.
Pioe
Незнакомец
 
Сообщения: 12
Зарегистрирован: 22 июл 2013, 10:22
Очки репутации: 0

Пред.След.

Вернуться в Вопросы и помощь по изменениям

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 37

cron