Новости 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

Quantum Manager нужен сообществу, а автору нужна ваша поддержка!

Quantum Manager нужен сообществу, а автору нужна ваша поддержка!Файловый менеджер Quantum — одно...

Файловый менеджер Quantum — одно из самых популярных решений для Joomla, созданное разработчиком из сообщества Joomla, Дмитрием Цымбалом (@tsymbalmitia). Он делает Quantum удобным, безопасным и современным, обновляет его, исправляет уязвимости и отвечает пользователям — всё это в свободное от основной работы время.

Теперь настал момент для следующего шага: развитие проекта требует больше времени и ресурсов.

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

sasha_klimenchuk

  • Осваиваюсь на форуме
  • 48
  • 0 / 0
Доброго времени суток!
Переопределила файлы компонента com_content/category blog.php и blog_item.php (скопировала их в папку шаблона html/com_content/category). Изменения первого файла подхватываются, а вот второго - нет. Во втором я вывод картинки
<?php echo JLayoutHelper::render('joomla.content.intro_image', $this->item); ?>
поставила перед выводом заголовка
<?php echo JLayoutHelper::render('joomla.content.blog_style_default_item_title', $this->item); ?>
Помогите, пожалуйста!
*

sasha_klimenchuk

  • Осваиваюсь на форуме
  • 48
  • 0 / 0
Re: Не переопределяет blog_item.php
« Ответ #1 : 30.01.2018, 00:14:41 »
Разобралась сама. Всё дело в шаблоне Yootheme. Там переопределение идет совершенно по-другому.
http://yootheme.com/pro/docs/#/child-themes
И вместо blog_item.php у них файл /templates/yootheme/templates/article.php копируем в /templates/yootheme_child/templates/article-blog.php
*

sasha_klimenchuk

  • Осваиваюсь на форуме
  • 48
  • 0 / 0
Re: Не переопределяет blog_item.php
« Ответ #2 : 30.01.2018, 00:20:30 »
Буду признательна, если мне помогут с кодом)
В поддержке YooTheme пишут, что бесполезно выставлять в материале: слева или справа будет превью-не отреагирует шаблон на это. Нужно сделать так, чтоб превью статьи выводилось в одной статье слева, в следующей - справа, а заголовок, контент и ссылка подробнее шли вместе с другой стороны от картинки (скрин-пример прикрепила). Спасибо!
Вот код:

Код
<?php
/*
 * The template for displaying categorized articles.
 */

$attrs_container = [];

// Image
if ($image) {
    $attrs_image['class'][] = $image->align == 'none' ? 'uk-margin-large-bottom' : 'uk-margin-medium-bottom';
}

// Header
$attrs_header['class'][] = 'uk-margin-medium-bottom';
$attrs_header['class'][] = $params['content_width'] ? 'uk-container uk-container-small' : '';
$attrs_header['class'][] = $params['header_align'] ? 'uk-text-center' : '';

// Container
if ($params['content_width']) {
    $attrs_container['class'][] = 'uk-container uk-container-small';
}

// Content
$attrs_content['class'][] = $params['content_align'] ? 'uk-text-center' : '';
$attrs_content['class'][] = $params['content_dropcap'] ? 'uk-dropcap' : '';

// Tags
$attrs_tags['class'][] = $params['header_align'] ? 'uk-text-center' : '';

// Button
$attrs_button['class'][] = "uk-button uk-button-{$params['button_style']}";
$attrs_button_container['class'][] = $params['header_align'] ? 'uk-text-center' : '';
$attrs_button_container['class'][] = 'uk-margin-medium';

/*
 * Image template
 */
$imagetpl = function ($attr) use ($image) {
?>

<div<?= $this->attrs($attr)?> property="image" typeof="ImageObject">
    <?php if ($image->link) : ?>
    <a href="<?= $image->link ?>"><img<?= $this->attrs($image->attrs)?> property="url"></a>
    <?php else : ?>
    <img<?= $this->attrs($image->attrs)?> property="url">
    <?php endif ?>
</div>

<?php
};

/*
 * Meta template
 */
$metatpl = function () use ($author, $published, $category, $params) {

    if ($published || $author || $category) {

        switch ($params['meta_style']) {

            case 'list':

                $parts = array_filter([
                    $published ? $published : '',
                    $author ? "<span>{$author}</span>" : '',
                    $category ? $category : '',
                ]);

                $attrs_header['class'][] = $params['header_align'] ? 'uk-text-center' : '';

                ?>
                <ul class="uk-subnav uk-subnav-divider<?= $params['header_align'] ? ' uk-flex-center' : '' ?>">
                    <?php foreach ($parts as $part) : ?>
                    <li><?= $part ?></li>
                    <?php endforeach ?>
                </ul>
                <?php
                break;

            default: // sentence

                ?>
                <p class="uk-article-meta">
                <?php

                    if ($author && $published) {
                        JText::printf('TPL_YOOTHEME_META_AUTHOR_DATE', $author, $published);
                    } elseif ($author) {
                        JText::printf('TPL_YOOTHEME_META_AUTHOR', $author);
                    } elseif ($published) {
                        JText::printf('TPL_YOOTHEME_META_DATE', $published);
                    }

                ?>
                <?= $category ? JText::sprintf('TPL_YOOTHEME_META_CATEGORY', $category) : '' ?>
                </p>
                <?php
        }

    }

};

?>

<article id="article-<?= $article->id ?>" class="uk-article"<?= $this->attrs(['data-permalink' => $permalink])?> typeof="Article">

    <meta property="name" content="<?= $this->e($title)?>">
    <meta property="author" typeof="Person" content="<?= $this->e($article->author)?>">
    <meta property="dateModified" content="<?= $this->date($article->modified, 'c')?>">
    <meta property="datePublished" content="<?= $this->date($article->publish_up, 'c')?>">
    <meta class="uk-margin-remove-adjacent" property="articleSection" content="<?= $this->e($article->category_title)?>">

       
  <?php if ($title) : ?>

    <div<?= $this->attrs($attrs_header)?>>

       <h1 class="uk-article-title uk-margin-remove-top"><?= $title ?></h1>

        <?php if ($params['info_block_position']) : ?>
            <?= $metatpl()?>
        <?php endif ?>

    </div>
    <?php endif ?>

    <?php if ($event) echo $event->afterDisplayTitle ?>

<?php if (!$params['info_block_position']) : ?>
            <?= $metatpl()?>
        <?php endif ?>
<?php if ($image && $image->align == 'none') {
        $imagetpl($attrs_image);
    } ?>
<?php if ($image && $image->align != 'none') {
        $imagetpl($attrs_image);
    } ?>

    <?php if ($event) echo $event->beforeDisplayContent ?>

    <?php if ($attrs_container) : ?>
    <div<?= $this->attrs($attrs_container)?>>
    <?php endif ?>

    <?php if (isset($article->toc) && $article->toc) : ?>
        <?= str_replace(['pull-right', 'nav nav-tabs nav-stacked', 'active"'], ['uk-align-center uk-align-right@m', 'uk-nav uk-nav-default', 'uk-active"'], $article->toc)?>
    <?php endif ?>

    <div <?= $this->attrs($attrs_content)?> property="text"><?= $content ?></div>

    <?php if ($tags) : ?>
    <p<?= $this->attrs($attrs_tags)?>><?= JText::sprintf('TPL_YOOTHEME_TAGS', $tags)?></p>
    <?php endif ?>

    <?php if ($readmore) : ?>
    <p<?= $this->attrs($attrs_button_container)?>>
        <a <?= $this->attrs($attrs_button)?> href="<?= $readmore->link ?>"><?= $readmore->text ?></a>
    </p>
    <?php endif ?>

    <?php if ($created || $modified || $hits) : ?>
    <ul class="uk-list">

        <?php if ($created) : ?>
            <li><?= JText::sprintf('TPL_YOOTHEME_META_DATE_CREATED', $created)?></li>
        <?php endif ?>

        <?php if ($modified) : ?>
            <li><?= JText::sprintf('TPL_YOOTHEME_META_DATE_MODIFIED', $modified)?></li>
        <?php endif ?>

        <?php if ($hits) : ?>
            <li><?= JText::sprintf('TPL_YOOTHEME_META_HITS', $hits)?></li>
        <?php endif ?>

    </ul>
    <?php endif ?>

    <?php if ($icons) : ?>
    <ul class="uk-subnav">
        <?php foreach ($icons as $icon) : ?>
        <li><?= $icon ?></li>
        <?php endforeach ?>
    </ul>
    <?php endif ?>

    <?php if ($pagination) : ?>
    <ul class="uk-pagination uk-margin-medium">

        <?php if ($pagination->prev) : ?>
        <li><a href="<?= $pagination->prev ?>"><span uk-pagination-previous></span> <?= JText::_('JPREVIOUS')?></a></li>
        <?php endif ?>

        <?php if ($pagination->next) : ?>
        <li class="uk-margin-auto-left"><a href="<?= $pagination->next ?>"><?= JText::_('JNEXT')?> <span uk-pagination-next></span></a></li>
        <?php endif ?>

    </ul>
    <?php endif ?>

    <?php if ($event) echo $event->afterDisplayContent ?>

    <?php if ($attrs_container) : ?>
    </div>
    <?php endif ?>

</article>
« Последнее редактирование: 30.01.2018, 00:25:09 от sasha_klimenchuk »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться