Новости Joomla

Перевод и публикация интервью с Joomla евангелистом на греческом портале Joomla

Перевод и публикация интервью на греческом портале Joomla 🇬🇷

Утро, просматриваешь входящие письма и изучаешь новости и внезапно обнаруживаешь, что инициатива, которую ты начал, подхватывается другими людьми. 🎉

Недавно я взял интервью у Билла (Василиса) Коциаса - руководителя студии, читающего лекции в университете и популяризатора Joomla в Греции. Это интервью из журнала NorrNext, в оригинале на английском, теперь доступно на греческом языке и опубликовано на портале joomla.gr. 🎉

До чего же приятно… 😇😊 Работа замечена и с ней посчитали необходимым ознакомить аудиторию страны, в которой Билл читает лекции. И это солнечная Греция - страна, страна, с которой Россию многое связывает. 🇬🇷🇷🇺🕊

Смотрю на греческий алфавит и тут же рисуются картины белоснежных зданий в окружении винограда и амфор, красивых женщин в сандалиях и мужественных воинов, охраняющих покой полисов, в которых ученые мужи работают над трудами, позже вошедшими в века. Красиво! 😇Но вернемся к интервью.

Из него вы узнаете, что в Греции доля Joomla среди CMS занимает порядка 30-40%. По моему мнению это - самый высокий показатель во всем мире. Также чтение лекций о Joomla в университетах позволит привести новых пользователей и к тому же молодое поколение. Ну и огромное кол-во сертификтатов Билла на стене (смотрим фото в статье) свидетельствует о том, что Joomla может применяться как профессиональный инструмент.

🌐 Оригинальное интервью (на английском)
🇬🇷 Интервью на греческом портале (joomla.gr)

Что насчет перевода на русский? Увы, времени всего 24 часа в сутках. Я продолжаю готовить новые интервью. Возможно, после завершения выпуска журнала, рассмотрю перевод некоторых интервью на русский. Но я об этом не говорил. 😊 В блоге @eugenius_blog публикую анонсы интересных событий из мира Joomla, интервью, уроки и полезные советы, а также делюсь мыслями:, связанными с разработкой и веб-дизайном.

Обработка HTTP ответа в Joomla 6+. Изменения по сравнению с Joomla 3 - Joomla 5

👩‍💻 Обработка HTTP ответа в Joomla 6+. Изменения по сравнению с Joomla 3 - Joomla 5.В Joomla для выполнения внешних запросов из PHP к сторонним API используется класс Joomla\Http\Http напрямую или же Joomla\Http\HttpFactory, который возвращает для работы преднастроенный по умолчанию класс Http. О работе с HTTP-запросами подробно рассказывалось в статье 2021 года Создание внешних запросов с использованием HttpFactory (Joomla). Некоторые изменения касаются работы с ответами на запросы. Например, наш запрос:
use Joomla\Http\HttpFactory;$http = (new HttpFactory)->getHttp($options, ['curl', 'stream']);$response = $http->get('https://any-url.ru/api/any/endpoint');
Раньше можно было получить код ответа или тело ответа как свойство $response - $response->code или $response->body. Однако, Joomla, начиная с Joomla 4 во многом переходит на стандарты PSR. В частности для работы с HTTP-ответами - на PSR-7. Также хорошая статья на Хабре о PSR-7: PSR-7 в примерах.
Прямое обращение к свойствам code, headers, body объявлено устаревшим в Joomla 6.0.0 и обещают удалить в Joomla 7.0.0.
Вместо этого нужно работать с HTTP-ответом по стандартам PSR-7. Код ответа.Было $response->code. Стало $response->getStatusCode().Заголовки ответа.Было $response->headers. Стало $response->getHeaders().Тело ответа.Было $response->body. Стало (string)$response->getContents().В тело ответа теперь приходит не строка, а поток - объект класса Laminas\Diactoros\Stream. Поэтому его нужно привести к строке (если это json, к примеру): (string)$response->getContents(). Чаще всего в коде Joomla встречается именно такой вариант. Однако, есть и вариант с перемещением указателя чтения на начало потока:
// Получили ответ в виде потока$stream = $response->getBody();// "перемотали" на начало$stream->rewind();// Получили строковый ответ$json = $stream->getContents();
В итоге результат одинаковый.@joomlafeed#joomla #разработка #php

0 Пользователей и 1 Гость просматривают эту тему.
  • 36 Ответов
  • 19555 Просмотров
*

Филипп Сорокин

  • Завсегдатай
  • 1918
  • 160 / 4
  • разработчик.москва
Важная и очень приятная новость для пользователей моего плагина! В то время как для мирового интернета тариф так и остаётся платным, я делаю его бесплатным для русскоязычного сегмента интернета в связи с тем, что прибыль от продажи расширений в рунете практически нулевая. А от самих расширений мне как разработчику идёт большая польза, т.к. с помощью них я могу продемонстрировать свою квалификацию. Поэтому все русскоязычные пользователи теперь могут загрузить данный плагин совершенно бесплатно по прямой ссылке: https://разработчик.москва/extensions/jslazyloading/get

Однако поддержка остаётся платной. Если Вам необходима помощь в настройке расширения или его индивидуализации, то Вам необходимо написать мне лично используя форму обратной связи на сайте, а также этот форум.
« Последнее редактирование: 05.07.2019, 08:21:09 от Филипп Сорокин »
*

a159cm

  • Захожу иногда
  • 71
  • 0 / 0
Добрый вечер! А Яндекс карты получится данным плагином отложить?
*

Филипп Сорокин

  • Завсегдатай
  • 1918
  • 160 / 4
  • разработчик.москва
Приветствую. Карты -- вы имеете в виду скрипт? Так в нем прописывание атрибут defer и откладываете.
*

a159cm

  • Захожу иногда
  • 71
  • 0 / 0
Приветствую. Карты -- вы имеете в виду скрипт? Так в нем прописывание атрибут defer и откладываете.

Есть такая хрень.. Как ее исправить?
https://developers.google.com/speed/pagespeed/insi...

ругается на эту ссылку https://yastatic.net/s3/front-maps-static/maps-fro...

выводится вроде бы так
Код
<script async>
function getYaMap(){
    var myMap = new ymaps.Map('map', {
            center: [<?php echo $center[0] ?>, <?php echo $center[1] ?>],
            zoom: <?php echo $zoom_map ?>,
      controls: ["zoomControl"]
        }, {
            searchControlProvider: 'yandex#search'
        }),
   
   
        /**
         * Создадим кластеризатр, вызвав функцию-конструктор.
         * Список всех опий доступен в документации.
         * @see https://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/Clusterer.xml#constructor-summary
         */
            clusterer = new ymaps.Clusterer({
            /**
             * Чеез кластеризатор можно указать тоько стили кластеов,
             * стил для меток нужно азначать каждой етке отдельно.
             * @see https://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/option.presetStorage.xml
             */
            preset: 'islands#invertedRedClusterIcons',
            /**
             * Ставим true, если хотим кластеризовать только точки с одинаковыми координатами.
             */
            groupByCoordinates: false,
            /**
             * Опции кластеров указывем в кластеризатре с префиксом "cluster".
             * @see https://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/ClusterPlacemark.xml
             */
            clusterDisableClickZoom: true,
            clusterHideIconOnBalloonOpen: false,
            geoObjectHideIconOnBalloonOpen: false
        }),
        /**
         * Функция озвращает объект, содержащий данне метки.
         * Поле данных clusterCaption будет отображено в списке геообъетов в балуне кластера.
         * Поле balloonContentBody - источник данных для конента балуна.
         * Оба поля поддерживают HTML-разметку.
         * Список плей данных, которые используют стандартные макеты содержимого иконк метки
         * и балуна геообъектов, можно посмотреть в документации.
         * @see https://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/GeoObject.xml
         
            getPointData = function (index) {
            return {
                balloonContentHeader: '!',
                balloonContentBody: '',
                balloonContentFooter: '',
                clusterCaption: ''
            };
        },
        /**
         * Фнкция возвращает объект, содержащй опции метки.
         * Все опции, которые поддерживаю геообъекты, можно посмотреть в доументации.
         * @see https://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/GeoObject.xml
         */
    getPointOptions = [
        <?php foreach ($list as $item) { ?>
          {
            //preset: "islands#redAttentionCircleIcon",
            // Опции.
            // Необходимо указать данный тип макта.
            iconLayout: 'default#image',
            // Своё изображение иконки метки.
      <?php if($item->parent_id == 11) { $ic = 'auto.png'; }
        if($item->parent_id == 20) { $ic = 'bank.png'; }
        if($item->parent_id == 24) { $ic = 'flag.png'; }
        if($item->parent_id == 35) { $ic = 'kafe.png'; }
        if($item->parent_id == 37) { $ic = 'deti.png'; }
        if($item->parent_id == 53) { $ic = 'shop.png'; }
        if($item->parent_id == 79) { $ic = 'razvlecheniya.png'; }
        if($item->parent_id == 84) { $ic = 'medical.png'; }
        if($item->parent_id == 92) { $ic = 'obrazovanie.png'; }
        if($item->parent_id == 97) { $ic = 'home.png'; }
        if($item->parent_id == 111) { $ic = 'krasota.png'; }
        if($item->parent_id == 116) { $ic = 'sport.png'; }
        if($item->parent_id == 128) { $ic = 'eda.png'; }
        if($item->parent_id == 137) { $ic = 'business.png'; }
        if($item->parent_id == 147) { $ic = 'turizm.png'; }
        if($item->parent_id == 2010) { $ic = 'uslugi.png'; }
        if($item->parent_id == 2019) { $ic = 'proizvodstvo.png'; }
        if($item->parent_id == 2023) { $ic = 'selhoz.png'; }
      ?>
            iconImageHref: "images/icons/map/<?php echo $ic ?>",
            // Размеры метки.
            iconImageSize: [32, 32],
            // Смещение левого верхнего угла иконки относительно
            // её "нжки" (точки привяки).
            iconImageOffset: [-16, -16]
          },
        <?php } ?>
    ],
   
        points = [
      <?php foreach ($list as $key => $item) {
        $link = JRoute::_(ContentHelperRoute::getArticleRoute($item->slug, $item->catid, $item->language));
        $img = json_decode($item->images)->image_intro;
       
        JLoader::register('FieldsHelper', JPATH_ADMINISTRATOR . '/components/com_fields/helpers/fields.php');
        $jcfields = FieldsHelper::getFields('com_content.article', $item, true);
        foreach($jcfields as $fields) {
          $f[$fields->id] = $fields;
        }
        $t = '['.$f[109]->value.'],';
       
      ?>
      <?php echo $t ?>
      <?php } ?>
        ],
    balloonContentHeader = [
    <?php foreach ($list as $key => $item) {
        $link = JRoute::_(ContentHelperRoute::getArticleRoute($item->slug, $item->catid, $item->language));
        $img = json_decode($item->images)->image_intro;
         
        JLoader::register('FieldsHelper', JPATH_ADMINISTRATOR . '/components/com_fields/helpers/fields.php');
        $jcfields = FieldsHelper::getFields('com_content.article', $item, true);
        foreach($jcfields as $fields) {
          $f[$fields->id] = $fields;
        }
        $b = '{
          balloonContentHeader: `<div class="map_item_img"><img src="'.$img.'"/></div><div class="map_item_info"><h3><a href="'.$link.'">'.$item->title.'</a></h3><div>'.$f[1]->value.'</div></div>`,
          },';
        ?>
        <?php echo $b ?>
      <?php } ?>
    ]
        geoObjects = [];

    /**
     * Данные передаются вторым параметром в коструктор метки, опции - третьим.
     * @see https://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/Placemark.xml#constructor-summary
     */
    for(var i = 0, len = points.length; i < len; i++) {
        geoObjects[i] = new ymaps.Placemark(points[i], balloonContentHeader[i], getPointOptions[i]);
    }

    /**
     * Можно менять опии кластеризатора после создания.
     */
    clusterer.options.set({
        gridSize: 80,
        clusterDisableClickZoom: false
    });

    /**
     * В кластеризатор ожно добавить javascript-массив меток (е геоколлекцию) или одну метку.
     * @see https://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/Clusterer.xml#add
     */
    clusterer.add(geoObjects);
    myMap.geoObjects.add(clusterer);
  myMap.behaviors.disable('scrollZoom');
 
  if(document.documentElement.clientWidth < 960) {
    //myMap.behaviors.disable('drag');
  }
 

    /**
     * Спозиционируем кату так, чтобы на ней были видны все объекты.
     */

   /* myMap.setBounds(clusterer.getBounds(), {
        checkZoomRange: false
    });*/
}
</script>
*

Филипп Сорокин

  • Завсегдатай
  • 1918
  • 160 / 4
  • разработчик.москва
Ссылка битая, но советую не обращать особого внимания на это.
*

kaaaaaljan

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
  • прошу не судить меня строго
Добрый день
Версия Joomla! 3.10.11 Stable [ Daraja ] 14-August-2022 14:18 GMT.   
Так и не обновил я до 5 версии. Как говорится, работает - не трогай) Но вот плагин уже не может установиться на эту версию :(

При установке плагина выдет ошибку
Код
Предупреждение
Unknown column 'system_data' in 'field list'
Код
Ошибка
Ошибка при установке плагина.

В чём может быть дело?
*

kaaaaaljan

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
  • прошу не судить меня строго
Сейчас попробовал ещё пару плагинов установить по другой теме, и та же самая ошибка. Значит, дело не в плагине "JSLazyLoading", а в моем сайте. Неожиданно. Давно ничего нового не устанавливал. Все и так настроено было и работало хорошо годами
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

WT Content Image gallery контент плагин вставки изображений

Автор sergeytolkachyov

Ответов: 2
Просмотров: 2818
Последний ответ 08.07.2025, 17:29:40
от sergeytolkachyov
Плагин для контента сравнения 2х изображений шторкой - juxtapose

Автор Beer

Ответов: 1
Просмотров: 1244
Последний ответ 12.06.2025, 13:38:09
от Beer
Плагин для закрытия ссылок в Joomla 3 - noExternalLinks

Автор buyanov

Ответов: 65
Просмотров: 19640
Последний ответ 06.04.2025, 02:51:35
от azm1n
Бесплатный плагин импорта экспорта данных в поля материалов Joomla - CFI

Автор zikkuratvk

Ответов: 9
Просмотров: 7227
Последний ответ 02.06.2024, 06:38:19
от SolopoV
WT Content Like плагин кнопки лайк для материалов Joomla

Автор sergeytolkachyov

Ответов: 1
Просмотров: 3563
Последний ответ 18.05.2024, 19:18:26
от sergeytolkachyov