Новости Joomla

Joomla 6 нуждается в вашей помощи с тестированием.Вышел недавно релиз Joomla 6 alpha1

Joomla 6 нуждается в вашей помощи с тестированием.Вышел недавно релиз Joomla 6 alpha1

👩‍💻 Joomla 6 нуждается в вашей помощи с тестированием.Вышел недавно релиз Joomla 6 alpha1. Это релиз, в который включены уже проверенные изменения, но ещё очень многие исправления и улучшения ждут своей очереди. Joomla следит за качеством и безопасностью своего кода и каждое изменение должно быть успешно протестировано как минимум ещё двумя участниками сообщества. Разработка Joomla ведётся на платформе GitHub.Филипп Уолтон (Philip Walton) - один из разработчиков, кто активно вносит свой вклад в ядро Joomla. Он уже несколько месяцев посвящает свои послеполуденные часы пятницы работе с Joomla и предлагает присоединиться к нему. 📆 Пятница, 30 мая 2025, с 15:00 до 17:00 по UTC (Лондон) - с 18:00 до 20:00 по Москве.В чате Google Meet Филипп готов помочь с тестированием тем, кто будет делать это в первый раз. А так же он подготовил список лёгких Pull Request, которые можно протестировать довольно быстро. Чем больше тестов будет проведено сейчас, тем меньше ошибок вылезет потом. На данный момент 148 (уже 147 на момент написания заметки) PR на GitHub Joomla ждут тестирования.👩‍💻 Open to all. All together.Также вам поможет сделать первые шаги это видео.GitHub JoomlaДа, это вечер пятницы. Но тестирование занимает порой минут 15, а доброе дело сделано. Просто убедитесь, что разработчик чего-то не пропустил и всё работает как ожидается.#joomla #joomla6 #community

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

Chigolberi

  • Захожу иногда
  • 464
  • 12 / 0
Всем привет!

Подключил плагин FancyBox 3

Использую переопределённый макет: \templates\protostar\html\com_content\article\default.php
Код
<?php
/**
 * @package     Joomla.Site
 * @subpackage  com_content
 *
 * [member=126442]copyright[/member]   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

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

// Create shortcuts to some parameters.
$params  = $this->item->params;
$images  = json_decode($this->item->images);
$urls    = json_decode($this->item->urls);
$canEdit = $params->get('access-edit');
$user    = JFactory::getUser();
$info    = $params->get('info_block_position', 0);

// Check if associations are implemented. If they are, define the parameter.
$assocParam = (JLanguageAssociations::isEnabled() && $params->get('show_associations'));
JHtml::_('behavior.caption');

?>
<div class="item-page<?php echo $this->pageclass_sfx; ?>" itemscope itemtype="https://schema.org/Article">
<meta itemprop="inLanguage" content="<?php echo ($this->item->language === '*')? JFactory::getConfig()->get('language') : $this->item->language; ?>" />
<?php if ($this->params->get('show_page_heading')) : ?>
<div class="page-header">
<h1> <?php echo $this->escape($this->params->get('page_heading')); ?> </h1>
</div>
<?php endif;
if (!empty($this->item->pagination) && $this->item->pagination && !$this->item->paginationposition && $this->item->paginationrelative)
{
echo $this->item->pagination;
}
?>

<?php // Todo Not that elegant would be nice to group the params ?>
<?php $useDefList = ($params->get('show_modify_date') || $params->get('show_publish_date') || $params->get('show_create_date')
|| $params->get('show_hits') || $params->get('show_category') || $params->get('show_parent_category') || $params->get('show_author') || $assocParam); ?>

<?php if (!$useDefList && $this->print) : ?>
<div id="pop-print" class="btn hidden-print">
<?php echo JHtml::_('icon.print_screen', $this->item, $params); ?>
</div>
<div class="clearfix"> </div>
<?php endif; ?>
<?php if ($params->get('show_title')) : ?>
<div class="page-header">
<h2 itemprop="headline">
<?php echo $this->escape($this->item->title); ?>
</h2>
<?php if ($this->item->state == 0) : ?>
<span class="label label-warning"><?php echo JText::_('JUNPUBLISHED'); ?></span>
<?php endif; ?>
<?php if (strtotime($this->item->publish_up) > strtotime(JFactory::getDate())) : ?>
<span class="label label-warning"><?php echo JText::_('JNOTPUBLISHEDYET'); ?></span>
<?php endif; ?>
<?php if ((strtotime($this->item->publish_down) < strtotime(JFactory::getDate())) && $this->item->publish_down != JFactory::getDbo()->getNullDate()) : ?>
<span class="label label-warning"><?php echo JText::_('JEXPIRED'); ?></span>
<?php endif; ?>
</div>
<?php endif; ?>
<?php if (!$this->print) : ?>
<?php if ($canEdit || $params->get('show_print_icon') || $params->get('show_email_icon')) : ?>
<?php echo JLayoutHelper::render('joomla.content.icons', array('params' => $params, 'item' => $this->item, 'print' => false)); ?>
<?php endif; ?>
<?php else : ?>
<?php if ($useDefList) : ?>
<div id="pop-print" class="btn hidden-print">
<?php echo JHtml::_('icon.print_screen', $this->item, $params); ?>
</div>
<?php endif; ?>
<?php endif; ?>

<?php // Content is generated by content plugin event "onContentAfterTitle" ?>
<?php echo $this->item->event->afterDisplayTitle; ?>

<?php if ($useDefList && ($info == 0 || $info == 2)) : ?>
<?php // Todo: for Joomla4 Joomla.content.info_block.block can be changed to Joomla.content.info_block ?>
<?php echo JLayoutHelper::render('joomla.content.info_block.block', array('item' => $this->item, 'params' => $params, 'position' => 'above')); ?>
<?php endif; ?>

<?php if ($info == 0 && $params->get('show_tags', 1) && !empty($this->item->tags->itemTags)) : ?>
<?php $this->item->tagLayout = new JLayoutFile('joomla.content.tags'); ?>

<?php echo $this->item->tagLayout->render($this->item->tags->itemTags); ?>
<?php endif; ?>

<?php // Content is generated by content plugin event "onContentBeforeDisplay" ?>
<?php echo $this->item->event->beforeDisplayContent; ?>

<?php if (isset($urls) && ((!empty($urls->urls_position) && ($urls->urls_position == '0')) || ($params->get('urls_position') == '0' && empty($urls->urls_position)))
|| (empty($urls->urls_position) && (!$params->get('urls_position')))) : ?>
<?php echo $this->loadTemplate('links'); ?>
<?php endif; ?>
<?php if ($params->get('access-view')) : ?>
<?php echo JLayoutHelper::render('joomla.content.full_image', $this->item); ?>
<?php
if (!empty($this->item->pagination) && $this->item->pagination && !$this->item->paginationposition && !$this->item->paginationrelative) :
echo $this->item->pagination;
endif;
?>
<?php if (isset ($this->item->toc)) :
echo $this->item->toc;
endif; ?>
<div itemprop="articleBody">
<?php echo $this->item->text; ?>
</div>

<?php if ($info == 1 || $info == 2) : ?>
<?php if ($useDefList) : ?>
<?php // Todo: for Joomla4 Joomla.content.info_block.block can be changed to Joomla.content.info_block ?>
<?php echo JLayoutHelper::render('joomla.content.info_block.block', array('item' => $this->item, 'params' => $params, 'position' => 'below')); ?>
<?php endif; ?>
<?php if ($params->get('show_tags', 1) && !empty($this->item->tags->itemTags)) : ?>
<?php $this->item->tagLayout = new JLayoutFile('joomla.content.tags'); ?>
<?php echo $this->item->tagLayout->render($this->item->tags->itemTags); ?>
<?php endif; ?>
<?php endif; ?>

<?php
if (!empty($this->item->pagination) && $this->item->pagination && $this->item->paginationposition && !$this->item->paginationrelative) :
echo $this->item->pagination;
?>
<?php endif; ?>
<?php if (isset($urls) && ((!empty($urls->urls_position) && ($urls->urls_position == '1')) || ($params->get('urls_position') == '1'))) : ?>
<?php echo $this->loadTemplate('links'); ?>
<?php endif; ?>
<?php // Optional teaser intro text for guests ?>
<?php elseif ($params->get('show_noauth') == true && $user->get('guest')) : ?>
<?php echo JLayoutHelper::render('joomla.content.intro_image', $this->item); ?>
<?php echo JHtml::_('content.prepare', $this->item->introtext); ?>
<?php // Optional link to let them register to see the whole article. ?>
<?php if ($params->get('show_readmore') && $this->item->fulltext != null) : ?>
<?php $menu = JFactory::getApplication()->getMenu(); ?>
<?php $active = $menu->getActive(); ?>
<?php $itemId = $active->id; ?>
<?php $link = new JUri(JRoute::_('index.php?option=com_users&view=login&Itemid=' . $itemId, false)); ?>
<?php $link->setVar('return', base64_encode(ContentHelperRoute::getArticleRoute($this->item->slug, $this->item->catid, $this->item->language))); ?>
<p class="readmore">
<a href="<?php echo $link; ?>" class="register">
<?php $attribs = json_decode($this->item->attribs); ?>
<?php
if ($attribs->alternative_readmore == null) :
echo JText::_('COM_CONTENT_REGISTER_TO_READ_MORE');
elseif ($readmore = $attribs->alternative_readmore) :
echo $readmore;
if ($params->get('show_readmore_title', 0)!= 0) :
echo JHtml::_('string.truncate', $this->item->title, $params->get('readmore_limit'));
endif;
elseif ($params->get('show_readmore_title', 0) == 0) :
echo JText::sprintf('COM_CONTENT_READ_MORE_TITLE');
else :
echo JText::_('COM_CONTENT_READ_MORE');
echo JHtml::_('string.truncate', $this->item->title, $params->get('readmore_limit'));
endif; ?>
</a>
</p>
<?php endif; ?>
<?php endif; ?>
<?php
if (!empty($this->item->pagination) && $this->item->pagination && $this->item->paginationposition && $this->item->paginationrelative) :
echo $this->item->pagination;
?>
<?php endif; ?>
<?php // Content is generated by content plugin event "onContentAfterDisplay" ?>
<?php echo $this->item->event->afterDisplayContent; ?>
</div>
При добавлении в материал картинки, получаю на выходе следующий код:
Код
<p>Текст статьи</p>
<hr id="system-readmore" />
<p>текст после подробнее</p>
<p><img src="images/powered_by.png" alt="" /></p>
Нужно все картинки в тексте статьи привести к следующему коду:
Код
<a data-fancybox="gallery" href="images/powered_by.png"><img src="images/powered_by.png" alt="" /></a>
Подскажите как реализовать интеграцию ?
*

Chigolberi

  • Захожу иногда
  • 464
  • 12 / 0
Если к файлу макета (\templates\protostar\html\com_content\article\default.php) добавить:
Код
<pre><?php print_r($this->item->text); ?></pre>
получаем:


Наверное с этим надо работать, только вот как...
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
здра.
самое простое - до инициализации фансибокса внутри блока статьи оборачивать картинки через jQuery .wrap()
хотя можно и после, если ссылкам свой класс давать и после обертывания принудительно инициировать фансибокс по этому классу.

или же контентным/системным плагином на уровне php это делать, что сложнее, т.к. регулярные выражения надо задействовать.
*

Chigolberi

  • Захожу иногда
  • 464
  • 12 / 0
самое простое - до инициализации фансибокса внутри блока статьи оборачивать картинки через jQuery .wrap()

или же контентным/системным плагином на уровне php это делать.
А можно код, что и куда добавлять, я в этом не особо разбираюсь.
*

AlexB

  • Завсегдатай
  • 1973
  • 54 / 2
а можно не заморачиваться и поставить
mAvik Thumbnails
*

Chigolberi

  • Захожу иногда
  • 464
  • 12 / 0
а можно не заморачиваться и поставить
mAvik Thumbnails
Нужен именно FancyBox 3, его кстати использует Kunena форум, отлично оптимизирован под смартфоны и имеет управление тачами и свайпами, а если вы используете Kunena форум, то контент сайта будет как бы приведён к одному формату.
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
да не, лучше заморочиться и иметь один плагин всплытия под все, а не сто )
щас вспомню, как это делается )
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
типа так. вставить можно, допустим, в custom.js или user.js, в папке js  шаблона, какой-то из них точно цепляет протостар
Код
jQuery(document).ready(function($) {
$('.meds img').each(function() {
let src = $(this).attr("src");
$(this).wrap('<a data-fancybox="gallery" href="'+src+'"></a>');
});
});

meds заменить на уникальный класс, в который статья оборачивается, чтобы остальные картинки не тащить, типа логотипы
*

Chigolberi

  • Захожу иногда
  • 464
  • 12 / 0
типа так. вставить можно, допустим, в custom.js или user.js, в папке js  шаблона, какой-то из них точно цепляет протостар
Его создать и подключить нужно? Их просто в папке \templates\protostar\js\ нет, там application.js, classes.js, jquery.fancybox.min.js (подключенный скрипт FancyBox 3), template.js
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
просто создать, автоматом подхватится.
сначала первый, если не подхватится, то переименовать во второй
*

Chigolberi

  • Захожу иногда
  • 464
  • 12 / 0
просто создать, автоматом подхватится.
сначала первый, если не подхватится, то переименовать во второй
Работает!
Только есть лишний код
Код
<="" a=""
Код
<a data-fancybox="gallery" href="/images/powered_by.png" <="" a=""><img src="/images/powered_by.png" alt=""></a>
И можно как то сделать, чтобы обвёртывание работало только в открытой статье?
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
закрывашку пропустил
Код
$(this).wrap('<a data-fancybox="gallery" href="'+src+'"></a>');
по поводу открытой - не понял. если у блока статьи нет уникального класса, то создайте его в шаблоне статьи, просто через пробел добавьте к текущему
ну или дайте адрес сайта, скорее всго можно наследованием прописать комбинацию вложенных классов, чтобы только на конечной статье срабатывало
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Подскажите как реализовать интеграцию ?
Попробуйте так
Код
$itemText = preg_replace('~(<img.*?src(.*)(\s*alt.*)*?/>)~', '<a data-fancybox="gallery" href$2>$1</a>', $this->item->text);
echo $itemText ;
Вариант с JS тоже неплохой.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Chigolberi

  • Захожу иногда
  • 464
  • 12 / 0
по поводу открытой - не понял. если у блока статьи нет уникального класса, то создайте его в шаблоне статьи, просто через пробел добавьте к текущему
ну или дайте адрес сайта, скорее всго можно наследованием прописать комбинацию вложенных классов, чтобы только на конечной статье срабатывало
Разобрался, прописал уникальный класс работает
Попробуйте так
Тоже работает

Но в обоих вариантах есть проблема во всплывающем окне FancyBox 3, при добавлении 2-х картинок - показывает три, при добавлении 3-х картинок - показывает 5
Сейчас в новом сообщении попробую описать проблему.
« Последнее редактирование: 13.06.2020, 12:43:30 от Chigolberi »
*

Chigolberi

  • Захожу иногда
  • 464
  • 12 / 0
effrit, robert, Ребята я извиняюсь, я забыл что сделал это: Кастомное добавление изображения через встроенный редактор TinyMCE
Вернул всё на место, теперь работает как надо!
 *DRINK*
*

Chigolberi

  • Захожу иногда
  • 464
  • 12 / 0
А что будет лучше, скрипт или php ?

Со скриптом на мой взгляд очень удобно, там где нужна обработка, просто прописываем класс.
« Последнее редактирование: 13.06.2020, 12:48:35 от Chigolberi »
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
да тут нет лучше/хуже.
мой вариант разгружает сайт, т.к. скрипт на клиентском компе работает. хотя при сегодняшних мощностях это не актуально, практически.
а вариант robert'a более надежный, т.к. не зависит от очередности подключенных скриптов. так что дело хозяйское, что выбрать.
в качестве плюса варианта с js - можно легко обработать блок в любой части страницы, т.к. скрипт к странице прицеплен, а не к выводу конкретно статьи.
т.е. мой вариант проще кастомизировать, т.к. он ближе к чайниковому уровню  ;D
*

Chigolberi

  • Захожу иногда
  • 464
  • 12 / 0
в качестве плюса варианта с js - можно легко обработать блок в любой части страницы, т.к. скрипт к странице прицеплен, а не к выводу конкретно статьи.
т.е. мой вариант проще кастомизировать, т.к. он ближе к чайниковому уровню
Мне как рас этот вариант нравиться, там где нужна обработка, нужно просто класс прописать.

Думаю многим пригодиться данная статья, многие в закладки добавят.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
да тут нет лучше/хуже.
+
Добавлю, что мой вариант все-таки желательно сделать плагином, ибо в один прекрасный день вам или хуже - вашему преемнику - приспичит убрать эти прибамбасы и будете ломать голову, кто и где их добавил.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Chigolberi

  • Захожу иногда
  • 464
  • 12 / 0
варианта с js - можно легко обработать блок в любой части страницы
Можете ещё помочь, доработать ваш код и добавить ещё одну функцию:
Код
jQuery(document).ready(function($) {
$('.fancybox3 img').each(function() {
let src = $(this).attr("src");
$(this).wrap('<a data-fancybox="gallery" href="'+src+'"></a>');
});
});
Чтобы только к абсолютным ссылкам такого вида:
Код
<div class="class-articles"><a href="https://joomlaforum.ru">ссылка</a></div>
Дописывался код:
Код
http://test.ru/dw/?url=
И ссылка получила следующий вид:
Код
<div class="class-articles"><a href="http://test.ru/dw/?url=https://joomlaforum.ru">ссылка</a></div>
*

Chigolberi

  • Захожу иногда
  • 464
  • 12 / 0
Нашёл решение
Код
const links = document.querySelectorAll('.class-articles a');
const url = 'https://test.ru/dw/?url='

Array.from(links)
    .filter(link => link.getAttribute('href').startsWith('http'))
    .forEach(link => link.href = url + link.href);
*

gonzergonzer

  • Осваиваюсь на форуме
  • 23
  • 1 / 0
типа так. вставить можно, допустим, в custom.js или user.js, в папке js  шаблона, какой-то из них точно цепляет протостар
Код
jQuery(document).ready(function($) {
$('.meds img').each(function() {
let src = $(this).attr("src");
$(this).wrap('<a data-fancybox="gallery" href="'+src+'"></a>');
});
});

meds заменить на уникальный класс, в который статья оборачивается, чтобы остальные картинки не тащить, типа логотипы
Уважаемый огромное спасибо! Все работает, на Joomla 4 правда делал.
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
на здоровье. а js-скриптам вообще по барабану, на какой они CMS, хоть на Друпале, не к ночи буде помянут  ;D
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
Все работает, на Joomla 4
Странно, а пишут что на Joomla 4 нет jQuery .
Смотрю в папке /media/system/js нет jQuery
*

gonzergonzer

  • Осваиваюсь на форуме
  • 23
  • 1 / 0
Странно, а пишут что на Joomla 4 нет jQuery .
Смотрю в папке /media/system/js нет jQuery
по умолчанию отключен jQuery, подключить можно.
*

gonzergonzer

  • Осваиваюсь на форуме
  • 23
  • 1 / 0
на здоровье. а js-скриптам вообще по барабану, на какой они CMS, хоть на Друпале, не к ночи буде помянут  ;D
Доброго! А не подскажите как зациклить галерею, loop: true не работает?
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

[Решено] Вывод значений из custom fields материала в модуле по имени поля

Автор goga_pgasovav

Ответов: 3
Просмотров: 948
Последний ответ 30.12.2024, 13:22:11
от goga_pgasovav
Переход на страницу материала после его размещения пользователем

Автор stepan39

Ответов: 0
Просмотров: 607
Последний ответ 22.11.2024, 07:14:15
от stepan39
Вывод даты материала в списке тегов

Автор androv77

Ответов: 2
Просмотров: 1717
Последний ответ 09.11.2023, 16:33:08
от denxio
Вывод дополнительного поля материала в модуле

Автор timofe

Ответов: 10
Просмотров: 2311
Последний ответ 06.10.2023, 14:02:24
от Mitriy
Как сделать отображение времени создания материала?

Автор Pzhigalov

Ответов: 0
Просмотров: 828
Последний ответ 27.09.2023, 22:45:29
от Pzhigalov