Joomla 4. Компонент K2 и форк K2ForJ4 (18 янв 2024)

Если вас, как и меня, достало выслушивать (вычитывать) бесконечные обещания разработчика K2 опубликовать версию компонента K2 под Joomla 4 (без чего невозможно реализовать апгрейд from Joomla 3 to Joomla 4) - воспользуйтесь форком K2ForJ4. Который в данный момент установлен и без каких-либо проблем работает на этом веб-сайте.

Погода по ip на Яндекс-картах

Больше
9 года 2 мес. назад - 9 года 2 мес. назад #1 от Aleksej
Здесь опубликован код скрипта, демку которого вы можете увидеть в статье блога Погода по ip на Яндекс-картах . Там же и небольшая аннотация/комментарий.

Code:
<!DOCTYPE html> <html> <head> <title>Погода по ip на Яндекс-картах</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script src="http://api-maps.yandex.ru/2.1/?lang=ru_RU" type="text/javascript"></script> <?php $ip = $_SERVER['REMOTE_ADDR']; include("SxGeo.php"); $SxGeo = new SxGeo('SxGeoCity.dat'); $city = $SxGeo->get($ip); $loc_array = array($city['city']['lat'],$city['city']['lon']); $api_key="VASH_API_KEY_WWO"; $num_of_days=1; $loc_safe = array(); foreach($loc_array as $loc){ $loc_safe[] = urlencode($loc); } $loc_string=implode(',', $loc_safe); //To add more conditions to the query, just lengthen the url string $basicurl = sprintf('http://api.worldweatheronline.com/free/v1/weather.ashx?key=%s&q=%s&num_of_days=%s', $api_key, $loc_string, intval($num_of_days)); $xml_response = file_get_contents($basicurl); $xml = simplexml_load_string($xml_response); $ss = array(); foreach ($xml[0] as $name => $val) { foreach ($val as $name1 => $val1) { $ss[$name1] = $val1; } } ?> <script type="text/javascript"> ymaps.ready(function () { myMap = new ymaps.Map('map', { zoom: 8, center: [<?= $city['city']['lat']?>,<?= $city['city']['lon'] ?>] }); var myPlacemark = new ymaps.Placemark([<?= $city['city']['lat']?>,<?= $city['city']['lon'] ?>], { balloonContent: '<? echo "Температура {$ss["temp_C"]} С";echo "<br>"; echo "Скорость ветра {$ss["windspeedKmph"]} м/сек"; echo "<br>"; echo "Направление ветра {$ss["winddirection"]}"; echo "<br>";echo $ss["weatherDesc"]; ?>' }, { balloonPanelMaxMapArea: 0 }); observeEvents(myMap); myMap.geoObjects.add(myPlacemark); myPlacemark.balloon.open(); }); function observeEvents (map) { var mapEventsGroup, mapBalloonEventsGroup = map.balloon.events // При открытии балуна начинаем слушать изменение центра карты. .add('open', function (e1) { var placemark = e1.get('target'); // Вызываем функцию в двух случаях: mapEventsGroup = map.events.group() // 1) в начале движения (если балун во внешнем контейнере); .add('actiontick', function (e2) { if (placemark.options.get('balloonPane') == 'outerBalloon') { setBalloonPane(placemark, e2.get('tick')); } }) // 2) в конце движения (если балун во внутреннем контейнере). .add('actiontickcomplete', function (e2) { if (placemark.options.get('balloonPane') != 'outerBalloon') { setBalloonPane(placemark, e2.get('tick')); } }); // Вызываем функцию сразу после открытия. setBalloonPane(placemark); }) // При закрытии балуна удаляем слушатели. .add('close', function () { mapEventsGroup.removeAll(); }); } function setBalloonPane (placemark, mapData) { mapData = mapData || { globalPixelCenter: myMap.getGlobalPixelCenter(), zoom: myMap.getZoom() }; var mapSize = myMap.container.getSize(), mapBounds = [ [mapData.globalPixelCenter[0] - mapSize[0] / 2, mapData.globalPixelCenter[1] - mapSize[1] / 2], [mapData.globalPixelCenter[0] + mapSize[0] / 2, mapData.globalPixelCenter[1] + mapSize[1] / 2] ], balloonPosition = placemark.balloon.getPosition(), // Используется при изменении зума. zoomFactor = Math.pow(2, mapData.zoom - myMap.getZoom()), // Определяем, попадает ли точка привязки балуна в видимую область карты. pointInBounds = ymaps.util.bounds.contains(mapBounds, [ balloonPosition[0] * zoomFactor, balloonPosition[1] * zoomFactor ]), isInOutersPane = placemark.options.get('balloonPane') == 'outerBalloon'; // Если точка привязки не попадает в видимую область карты, переносим балун во внутренний контейнер if (!pointInBounds && isInOutersPane) { placemark.options.set({ balloonPane: 'balloon', balloonShadowPane: 'shadows' }); // и наоборот. } else if (pointInBounds && !isInOutersPane) { placemark.options.set({ balloonPane: 'outerBalloon', balloonShadowPane: 'outerBalloon' }); } } </script> <style> #map { width: auto; height: 350px; } </style> </head> <body> <div id="map"></div> </body> </html>
Последнее редактирование: 9 года 2 мес. назад пользователем Aleksej.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Dev banner 1
Больше
9 года 2 мес. назад #2 от beginner
beginner ответил в теме Погода по ip на Яндекс-картах
Прикольно, прикольно. А Worldweatheronline это европейцы или американцы?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
9 года 2 мес. назад #3 от Aleksej
Aleksej ответил в теме Погода по ip на Яндекс-картах

beginner пишет: Прикольно, прикольно. А Worldweatheronline это европейцы или американцы?


Англичане, I think. UK, Manchester.
Кстати, чуть подчистил код. Напоминаю, это еще первый Free API (а не второй):

Code:
<!DOCTYPE html> <html> <head> <title>Погода по ip и лично для вас</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script src="http://api-maps.yandex.ru/2.1/?lang=ru_RU" type="text/javascript"></script> <?php $ip = $_SERVER['REMOTE_ADDR']; include("SxGeo.php"); $SxGeo = new SxGeo('SxGeoCity.dat'); $city = $SxGeo->get($ip); $loc_array = array($city['city']['lat'],$city['city']['lon']); $api_key="VASH_API_KEY_WWO"; $num_of_days=1; $loc_safe = array(); foreach($loc_array as $loc){ $loc_safe[] = urlencode($loc); } $loc_string=implode(',', $loc_safe); $basicurl = sprintf('http://api.worldweatheronline.com/free/v1/weather.ashx?key=%s&q=%s&num_of_days=%s', $api_key, $loc_string, intval($num_of_days)); $xml_response = file_get_contents($basicurl); $xml = simplexml_load_string($xml_response); ?> <script type="text/javascript"> ymaps.ready(function () { myMap = new ymaps.Map('map', { zoom: 8, center: [<?= $city['city']['lat']?>,<?= $city['city']['lon'] ?>] }); var myPlacemark = new ymaps.Placemark([<?= $city['city']['lat']?>,<?= $city['city']['lon'] ?>], { balloonContent: '<? echo 'Температура '. ($xml->current_condition->temp_C). ' °C';echo "<br>"; echo 'Скорость ветра '. ($xml->current_condition->windspeedKmph). ' км/час'; echo "<br>"; echo 'Направление ветра '. ($xml->current_condition->winddir16Point); echo "<br>";echo ($xml->current_condition->weatherDesc); ?>' }, { balloonPanelMaxMapArea: 0 }); observeEvents(myMap); myMap.geoObjects.add(myPlacemark); myPlacemark.balloon.open(); }); function observeEvents (map) { var mapEventsGroup, mapBalloonEventsGroup = map.balloon.events // При открытии балуна начинаем слушать изменение центра карты. .add('open', function (e1) { var placemark = e1.get('target'); // Вызываем функцию в двух случаях: mapEventsGroup = map.events.group() // 1) в начале движения (если балун во внешнем контейнере); .add('actiontick', function (e2) { if (placemark.options.get('balloonPane') == 'outerBalloon') { setBalloonPane(placemark, e2.get('tick')); } }) // 2) в конце движения (если балун во внутреннем контейнере). .add('actiontickcomplete', function (e2) { if (placemark.options.get('balloonPane') != 'outerBalloon') { setBalloonPane(placemark, e2.get('tick')); } }); // Вызываем функцию сразу после открытия. setBalloonPane(placemark); }) // При закрытии балуна удаляем слушатели. .add('close', function () { mapEventsGroup.removeAll(); }); } function setBalloonPane (placemark, mapData) { mapData = mapData || { globalPixelCenter: myMap.getGlobalPixelCenter(), zoom: myMap.getZoom() }; var mapSize = myMap.container.getSize(), mapBounds = [ [mapData.globalPixelCenter[0] - mapSize[0] / 2, mapData.globalPixelCenter[1] - mapSize[1] / 2], [mapData.globalPixelCenter[0] + mapSize[0] / 2, mapData.globalPixelCenter[1] + mapSize[1] / 2] ], balloonPosition = placemark.balloon.getPosition(), // Используется при изменении зума. zoomFactor = Math.pow(2, mapData.zoom - myMap.getZoom()), // Определяем, попадает ли точка привязки балуна в видимую область карты. pointInBounds = ymaps.util.bounds.contains(mapBounds, [ balloonPosition[0] * zoomFactor, balloonPosition[1] * zoomFactor ]), isInOutersPane = placemark.options.get('balloonPane') == 'outerBalloon'; // Если точка привязки не попадает в видимую область карты, переносим балун во внутренний контейнер if (!pointInBounds && isInOutersPane) { placemark.options.set({ balloonPane: 'balloon', balloonShadowPane: 'shadows' }); // и наоборот. } else if (pointInBounds && !isInOutersPane) { placemark.options.set({ balloonPane: 'outerBalloon', balloonShadowPane: 'outerBalloon' }); } } </script> <style> #map { width: auto; height: 350px; } </style> </head> <body> <div id="map"></div> </body> </html>

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
8 года 6 мес. назад #4 от fotic
fotic ответил в теме Погода по ip на Яндекс-картах
Как регулировать размеры пропорции балуна в стилях?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
8 года 6 мес. назад #5 от serge
serge ответил в теме Погода по ip на Яндекс-картах
ну например так:

Code:
.ymaps-2-1-29-balloon__layout { width: 220px; }

А я смогу! - А поглядим! - А я упрямый!

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
8 года 2 мес. назад - 7 года 11 мес. назад #6 от Aleksej
Aleksej ответил в теме Погода по ip на Яндекс-картах
Чуть-чуть упорядочим и значительно упростим код:

Code:
<!DOCTYPE html> <html> <head> <title>Погода по ip на Яндекс-картах</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script src="http://api-maps.yandex.ru/2.1/?lang=ru_RU" type="text/javascript"></script> <?php $ip = $_SERVER['REMOTE_ADDR']; include("SxGeo.php"); $SxGeo = new SxGeo('SxGeoCity.dat'); $city = $SxGeo->get($ip); $loc_array = array($city['city']['lat'],$city['city']['lon']); $api_key="********************************************"; $num_of_days=1; $loc_safe = array(); foreach($loc_array as $loc){ $loc_safe[] = urlencode($loc); } $loc_string=implode(',', $loc_safe); $basicurl = sprintf('http://api2.worldweatheronline.com/free/v2/weather.ashx?key=%s&q=%s&num_of_days=%s', $api_key, $loc_string, intval($num_of_days)); $xml = simplexml_load_file($basicurl); ?> <script src="https://api-maps.yandex.ru/2.1/?lang=ru_RU" type="text/javascript"></script> <div class="yandex_map" id="yandex_map"> <script type="text/javascript"> var myMap; ymaps.ready(init); function init () { var myMap = new ymaps.Map("map", { center: [<?= $city['city']['lat']?>,<?= $city['city']['lon'] ?>], zoom: 8, controls: ['zoomControl','fullscreenControl'] }); myPlacemark = new ymaps.Placemark([<?= $city['city']['lat']?>,<?= $city['city']['lon'] ?>], { balloonContent: '<? echo 'Температура '. ($xml->current_condition->temp_C). ' °C';echo "<br>"; echo 'Скорость ветра '. ($xml->current_condition->windspeedKmph). ' км/час'; echo "<br>"; echo 'Направление ветра '. ($xml->current_condition->winddir16Point); echo "<br>";echo ($xml->current_condition->weatherDesc); ?>'}); myMap.geoObjects .add(myPlacemark); myPlacemark.balloon.open(); } </script> <div id="map" style="width:auto; height:350px"></div> </div> </head> <body> <div id="map"></div> </body> </html>
Последнее редактирование: 7 года 11 мес. назад пользователем p.rishard.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
7 года 11 мес. назад - 7 года 11 мес. назад #7 от uvlecheniehobby.ru
uvlecheniehobby.ru ответил в теме Погода по ip на Яндекс-картах
у меня ваш код не работает здесь какието бувы и цифры а карты нет
Последнее редактирование: 7 года 11 мес. назад пользователем p.rishard.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
7 года 11 мес. назад #8 от serge
serge ответил в теме Погода по ip на Яндекс-картах

uvlecheniehobby.ru пишет: у меня ваш код не работает здесь какието бувы и цифры а карты нет


Ну, что же делать. Не впадайте в уныние и не теряйте надежду. У нас-то ведь работает, а php - он и в африке php. ;)
Пусть ваш системный администратор настроит адекватно ваш сервер, и все сразу заработает... маленькая подсказка: вполне возможно, понадобится включить allow_url_fopen и short_open_tag. Остальное, соль и сахар, как говорится - по вкусу.

А я смогу! - А поглядим! - А я упрямый!

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
7 года 11 мес. назад #9 от uvlecheniehobby.ru
uvlecheniehobby.ru ответил в теме Погода по ip на Яндекс-картах
то есть я всё правильно делаю-копирую код и вставляю в хидер или футер.А у кого на движке phpbb3 работает погода на яндекс картах?
Вы можите скинуть ссылку на карты с погодой,что бы она была на всю страницу на вашем сайте мастерпро,я бы тогда её проще вставил?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
7 года 11 мес. назад - 7 года 11 мес. назад #10 от Aleksej
Aleksej ответил в теме Погода по ip на Яндекс-картах

uvlecheniehobby.ru пишет: то есть я всё правильно делаю-копирую код и вставляю в хидер или футер.



Не знаю, не уверен.
Попробуйте следующим образом: весь код "как есть" сохраните в файл с любым названием и расширением php, забросьте в публичную директорию вашего веб-сервера и откройте в браузере. Получите карту как раз "на всю страницу".
Не забудьте получить на WWO собственный api_key и указать его в этой строчке:


Code:
$api_key="VASH_API_KEY_WWO";


К сожалению, WorldWeatherOnline буквально неделю назад опубликовал в своем фейсбуке (см. по ссылке) известие о том, что прекращает раздачу бесплатных api_key; ну, что ж тут поделаешь. В Европе тоже кризис. Предлагается бесплатный триал сроком на два месяца. Именно по этой причине сейчас готовится к публикации новая версия модуля под Joomla, предлагающая выбор между сервисами WorldWeatherOnline и Weather Underground , последний пока что позволяет, в числе прочего, полностью бесплатный доступ к своему API. По ссылке - демка и рабочая версия кода; возможно, заинтересует.
Последнее редактирование: 7 года 11 мес. назад пользователем p.rishard.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Работает на Kunena форум