Пётр Молчанов

Пётр Молчанов

Был в сети 29 октября 2020, 11:31
Заказы не принимаю
Поделюсь своими наработками по Object_manager. Это просто кусок из рабочего кода, надеюсь, будет понятно)
готовим пункты
$points[] = [
                            'type' => 'Feature',
                            'id' => (int) $val2['id'],
                            'geometry' => [
                                'type' => 'Point',
                                'coordinates' => [
                                    (float) $val2['latitude'],
                                    (float) $val2['longitude']
                                ]
                            ],
                            'properties' => [
                                'balloonContentHeader' => 'заголовок балуна',
                                'balloonContentBody' =>  'тело балуна',
                                'hintContent' => 'название хинта',
				// также можно передавать любые произвольные переменные
                                'delivery_name' => $table_pp[$val2['ref']]['title'],
                                'delivery_ref' => $val2['ref']
                            ],
                            'options' => [
                                'preset' => 'islands#icon',
                                'iconColor' => '#'.$table_pp[$val2['ref']]['color']
                            ]
                        ];
собираем пункты в единое целое, т.е. массив $points можно собрать в разных местах при разных условиях
$points_all = [
                    'type' => 'FeatureCollection',
                    'features' => $points
                ];
то, что выводим на экран
$html .= '
                        <br class="clr" />
                        <div class="form-inline form-group col-xs-12 col-md-12">
                            <label for="map_search">Поиск по адресу ПВ:</label>
                            <input type="text" class="form-control" id="map_search" placeholder="введите название улицы">
                        </div>
                        <br class="clr" />';
                    $html .= '
                    <div id="map_yandex"></div>
                    <script>
                        ymaps.ready(init);
                        function init () {
                            var myMap = new ymaps.Map("map_yandex", {
                                center: [' . $res4[0]['latitude'] . ', ' . $res4[0]['longitude'] . '],
                                zoom: 10,
                                controls: ["zoomControl",  "fullscreenControl"]
                            }),
                            objectManager = new ymaps.ObjectManager({
                                clusterize: false
                            });
                            myMap.behaviors.disable("scrollZoom");
                            myMap.geoObjects.add(objectManager);
                            objectManager.add(' . $modx->toJSON($points_all) . ');
                            // скрыть/показать пункты
                            $(".point_show").on("change", function() {
                                var search_val = "";
                                $(".point_show:checked").each(function () {
                                    if(search_val.length > 0)
                                        search_val += " || ";
                                    search_val += \'properties.delivery_ref == "\'+$(this).val()+\'"\';
                                });
                                if(search_val.length > 0)
                                    objectManager.setFilter(search_val);
                            });
                            // поиск на карте
                            $("#map_search").on("keyup change", function() {
                                var search_val = $(this).val();
                                if(search_val.length > 0) {
                                    search_val = search_val.toLowerCase();
                                    objectManager.setFilter(function (object) {
                                        var s = object.properties.hintContent;
                                        s = s.toLowerCase();
                                        if(s.indexOf(search_val) > -1)
                                            return true;
                                        return false;
                                    });
                                } else
                                    objectManager.setFilter();
                            });
                        }
                    </script>';
и для дива map_yandex надо ставить высоту. я это делаю так
var map_height = $( window ).height()/2;
$('#map_yandex').css('height', map_height);
Обновился. Использую вот так:
[[!AjaxForm?
        	&snippet=`submit_obrazec`
        	&form=`tpl.AjaxForm.obrazec`
        	&successMessage=`Спасибо! Ваша заявка принята.`
        ]]
Теперь после отправки формы страница просто обновляется, т.е. successMessage не выводится, но сама форма работает норм. Я что-то новое забыл дописать?
Со вчерашнего дня такая же трабла с я.метрикой. я думаю, проблема у яндекса хотя такая ошибка вылезает тока в гугл.хроме, в фф всё норм. гугл.хром снова что-то мудрит, скорей всего из-за той продвинутой штуки по кешированию js-скриптов
вдруг кому-то поможет (с использованием пэйдж):
[[!pdoPage?
        &element=`pdoUsers`
        &groups=`4`
        &tpl=`userCardPro`
        &select=`{"modUserSetting":"key, value as photop_add_date"}`
        &innerJoin=`{
    		"modUserSetting":{"class":"modUserSetting","on":"modUser.id=modUserSetting.user"}
    	}`
    	&where=`{"modUserSetting.key":"photop_add_date"}`
        &sortby=`photop_add_date`
        &limit=`9`
        &sortdir=`asc`
    ]]
А у таблицы tickets_views должны же автоматом создаваться индексы? А то обновился — стала жууутко лагать БД (мускул 100% проца жрал). Пока индекс для поля parent не сделал, так и лагало. Весь мозг изломал, пока нашел причину))