Новости 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 Гость просматривают эту тему.
  • 2 Ответов
  • 935 Просмотров
*

tomclancys

  • Захожу иногда
  • 152
  • 3 / 0
Здравствуйте.

Как можно вывести список материалов ниже названия подкатегории с количеством в ней материалов на макете со списком материалов категории (/components/com_content/views/category/tmpl/default_children.php).

На финише должна получится такая консутркция:
- Название категории
-- Таблица со списком материалов
-Название подкатегории
-- Материал подкатегории 1
-- Материал подкатегории 2
-- Материал подкатегории 3
-- Материал подкатегории 4

Сейчас вот такой код выводит ниже подкатегории список материалов основной категории т.е. дубль, а нужно соотвественно чтобы список материалов был подкатегории.
Код
<?php

defined('_JEXEC') or die;

JHtml::_('bootstrap.tooltip');

$class = ' class="first"';
$lang  = JFactory::getLanguage();

JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html');

// Create some shortcuts.
$params    = &$this->item->params;
$n         = count($this->items);
$listOrder = $this->escape($this->state->get('list.ordering'));
$listDirn  = $this->escape($this->state->get('list.direction'));

// Check for at least one editable article
$isEditable = false;

if (!empty($this->items))
{
foreach ($this->items as $article)
{
if ($article->params->get('access-edit'))
{
$isEditable = true;
break;
}
}
}

$tableClass = $this->params->get('show_headings')!= 1 ? ' table-noheader' : '';
?>

<?php if (count($this->children[$this->category->id]) > 0) : ?>
<?php foreach ($this->children[$this->category->id] as $id => $child) : ?>
<?php
if ($this->params->get('show_empty_categories') || $child->getNumItems(true) || count($child->getChildren())) :
if (!isset($this->children[$this->category->id][$id + 1])) :
$class = ' class="last"';
endif;
?>

<div <?php echo $class; ?>>
<?php $class = ''; ?>
<?php if ($lang->isRtl()) : ?>

<?php else : ?>

<?php foreach ($this->items as $i => $article) : ?>
<?php if ($this->items[$i]->state == 0) : ?>

<?php else : ?>

<?php endif; ?>

<?php if (in_array($article->access, $this->user->getAuthorisedViewLevels())) : ?>

<a href="<?php echo JRoute::_(ContentHelperRoute::getArticleRoute($article->slug, $article->catid, $article->language)); ?>"><?php echo $this->escape($article->title); ?></a>

<?php if (JLanguageAssociations::isEnabled() && $this->params->get('show_associations')) : ?>
<?php $associations = ContentHelperAssociation::displayAssociations($article->id); ?>
<?php foreach ($associations as $association) : ?>
<?php if ($this->params->get('flags', 1)) : ?>
<?php $flag = JHtml::_('image', 'mod_languages/' . $association['language']->image . '.gif', $association['language']->title_native, array('title' => $association['language']->title_native), true); ?>
&nbsp;<a href="<?php echo JRoute::_($association['item']); ?>"><?php echo $flag; ?></a>&nbsp;
<?php else : ?>
<?php $class = 'label label-association label-' . $association['language']->sef; ?>
&nbsp;<a class="' . <?php echo $class; ?> . '" href="<?php echo JRoute::_($association['item']); ?>"><?php echo strtoupper($association['language']->sef); ?></a>&nbsp;
<?php endif; ?>
<?php endforeach; ?>
<?php endif; ?>
<?php else : ?>
<?php
echo $this->escape($article->title). ' : ';
$menu   = JFactory::getApplication()->getMenu();
$active = $menu->getActive();
$itemId = $active->id;
$link   = new JUri(JRoute::_('index.php?option=com_users&view=login&Itemid=' . $itemId, false));
$link->setVar('return', base64_encode(ContentHelperRoute::getArticleRoute($article->slug, $article->catid, $article->language)));
?>
<a href="<?php echo $link; ?>" class="register">
<?php echo JText::_('COM_CONTENT_REGISTER_TO_READ_MORE'); ?>
</a>
<?php if (JLanguageAssociations::isEnabled() && $this->params->get('show_associations')) : ?>
<?php $associations = ContentHelperAssociation::displayAssociations($article->id); ?>
<?php foreach ($associations as $association) : ?>
<?php if ($this->params->get('flags', 1)) : ?>
<?php $flag = JHtml::_('image', 'mod_languages/' . $association['language']->image . '.gif', $association['language']->title_native, array('title' => $association['language']->title_native), true); ?>
&nbsp;<a href="<?php echo JRoute::_($association['item']); ?>"><?php echo $flag; ?></a>&nbsp;
<?php else : ?>
<?php $class = 'label label-association label-' . $association['language']->sef; ?>
&nbsp;<a class="' . <?php echo $class; ?> . '" href="<?php echo JRoute::_($association['item']); ?>"><?php echo strtoupper($association['language']->sef); ?></a>&nbsp;
<?php endif; ?>
<?php endforeach; ?>
<?php endif; ?>
<?php endif; ?>

<?php endforeach; ?>

<?php endif; ?>
<?php if (count($child->getChildren()) > 0 && $this->maxLevel > 1) : ?>
<div class="collapse fade" id="category-<?php echo $child->id; ?>">
<?php
$this->children[$child->id] = $child->getChildren();
$this->category = $child;
$this->maxLevel--;
echo $this->loadTemplate('children');
$this->category = $child->getParent();
$this->maxLevel++;
?>
</div>
<?php endif; ?>

</div>
<?php endif; ?>
<?php endforeach; ?>
<?php endif; ?>
*

tomclancys

  • Захожу иногда
  • 152
  • 3 / 0
Разобрался. Можно закрывать.

Вывод материалов в подкатегориях(/components/com_content/views/category/tmpl/default_children.php):
Код
<?php
/**
 * @package     Joomla.Site
 * @subpackage  com_content
 *
 * [member=126442]copyright[/member]   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

JHtml::_('bootstrap.tooltip');

$class = ' class="first"';
$lang  = JFactory::getLanguage();

JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html');

// Create some shortcuts.
$params    = &$this->item->params;
$n         = count($this->items);
$listOrder = $this->escape($this->state->get('list.ordering'));
$listDirn  = $this->escape($this->state->get('list.direction'));

// Check for at least one editable article
$isEditable = false;

if (!empty($this->items))
{
foreach ($this->items as $article)
{
if ($article->params->get('access-edit'))
{
$isEditable = true;
break;
}
}
}

$tableClass = $this->params->get('show_headings') != 1 ? ' table-noheader' : '';
?>

<?php if (count($this->children[$this->category->id]) > 0) : ?>
<?php foreach ($this->children[$this->category->id] as $id => $child) : ?>
<?php
if ($this->params->get('show_empty_categories') || $child->getNumItems(true) || count($child->getChildren())) :
if (!isset($this->children[$this->category->id][$id + 1])) :
$class = ' class="last"';
endif;
?>

<div <?php echo $class; ?>>
<?php $class = ''; ?>
<?php if ($lang->isRtl()) : ?>

<?php else : ?>

<h3 class="page-header item-title"><?php echo $this->escape($child->title); ?></h3>

<?php
$model = JModelList::getInstance('Articles', 'ContentModel', array('ignore_request'=>true));
$appParams = JFactory::getApplication()->getParams();
$model->setState('params', $appParams);
$model->setState('filter.category_id', $child->id);
$items = $model->getItems();

foreach ($items as $item) {
    echo "<div>";
    echo "<a href='";
    echo JRoute::_(ContentHelperRoute::getArticleRoute($item->id, $child->id));
    echo "'>";
    echo $item->title;
    echo "</a>";
    echo "</div>";
}
?>

<?php endif; ?>

<?php if (count($child->getChildren()) > 0 && $this->maxLevel > 1) : ?>
<div class="collapse fade" id="category-<?php echo $child->id; ?>">
<?php
$this->children[$child->id] = $child->getChildren();
$this->category = $child;
$this->maxLevel--;
echo $this->loadTemplate('children');
$this->category = $child->getParent();
$this->maxLevel++;
?>
</div>
<?php endif; ?>

</div>
<?php endif; ?>
<?php endforeach; ?>
<?php endif; ?>


« Последнее редактирование: 30.10.2017, 10:46:38 от tomclancys »
*

tomclancys

  • Захожу иногда
  • 152
  • 3 / 0
А так можно вывести в подкатегориях дополнительные поля в материалах:
Код
      <?php
      // Код отвечающий за вывод дополнительных полей
      JLoader::register('FieldsHelper', JPATH_ADMINISTRATOR . '/components/com_fields/helpers/fields.php');
      $jcFields = FieldsHelper::getFields('com_content.article', $item, true);
      $array = json_decode(json_encode($jcFields), true);
      $fields = [];
      foreach ($array as $field) {
        array_push($fields, $field['label'], $field['value'], $field['rawvalue']);
      }
      $pole1 = $fields[1]; //Выводим доп. поле №1 из массива
      $pole2 = $fields[7]; //Выводим доп. поле №2 из массива
      // Код отвечающий за вывод дополнительных полей
     
      echo $pole1; //Показываем доп. поле №1 из массива
      echo $pole2; //Показываем доп. поле №2 из массива
     
      ?>
« Последнее редактирование: 30.10.2017, 10:47:15 от tomclancys »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Не удается разблокировать в менеджере материалов.

Автор vityavoluevich

Ответов: 4
Просмотров: 2186
Последний ответ 24.05.2025, 09:20:18
от azm1n
Вывести поля профиля Joomla

Автор romagromov

Ответов: 11
Просмотров: 2842
Последний ответ 28.04.2025, 10:25:44
от sivers
Вывести модуль в модуле

Автор jimka

Ответов: 2
Просмотров: 1664
Последний ответ 18.04.2025, 15:39:36
от fbr
Не работает менеджер материалов, ошибка 500 SSL certificate problem

Автор Екатерина М

Ответов: 5
Просмотров: 1959
Последний ответ 06.04.2025, 09:27:20
от wishlight
Не могу разблокировать материалы, модули для редактирования

Автор Ecodrev

Ответов: 3
Просмотров: 1212
Последний ответ 24.03.2025, 20:20:55
от R31rus