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

Chigolberi

  • Захожу иногда
  • 461
  • 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

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


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

effrit

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

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

Chigolberi

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

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

AlexB

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

Chigolberi

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

effrit

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

effrit

  • Легенда
  • 9804
  • 1080 / 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

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

effrit

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

Chigolberi

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

effrit

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

robert

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

Chigolberi

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

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

Chigolberi

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

Chigolberi

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

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

effrit

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

Chigolberi

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

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

robert

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

Chigolberi

  • Захожу иногда
  • 461
  • 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

  • Захожу иногда
  • 461
  • 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);
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как вывести Intro image материала в модуле Most Commented?

Автор R31rus

Ответов: 11
Просмотров: 293
Последний ответ 06.08.2020, 21:47:20
от sivers
Полусить id материала в модуле mod_breadcrumbs

Автор Шмайсер

Ответов: 3
Просмотров: 155
Последний ответ 29.06.2020, 15:21:50
от Шмайсер
Как скрыть вкладки Публикация и Язык из макета формы добавления материала?

Автор Chigolberi

Ответов: 7
Просмотров: 1156
Последний ответ 28.06.2020, 14:57:28
от Chigolberi
Как назначить свой макет формы добавления материала?

Автор Chigolberi

Ответов: 10
Просмотров: 1452
Последний ответ 26.06.2020, 11:30:38
от Chigolberi
дата + время создания материала

Автор Hufflepuff

Ответов: 8
Просмотров: 1117
Последний ответ 12.06.2020, 14:20:20
от xpank