Вообщем понадобилось к джумле 2.5 прикрутить небольшие шорткоды, по типу как используются в wordpress. Гугление выдало вот такой плагин, но при тестах на локалке пхп-падало из-за нехватки оперативы (требовалось больше 1 гига на оработку контента). В итоге погуглив получилось собрать куски кода и обьеденить в небольшой плагин. Код следующий:
shortcodejd.xml
<?xml version="1.0" encoding="utf-8"?> <extension version="3.1" type="plugin" group="content"> <name>wxshortcode</name> <author>Webxloo</author> <creationDate>August 2017</creationDate> <copyright>Copyright (C) 2005 - 2017 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>author@email</authorEmail> <authorUrl>webxloo.com</authorUrl> <version>3.1.0</version> <description>Webxloo Shortcode</description> <files> <filename plugin="shortcodejd">shortcodejd.php</filename> <filename>index.html</filename> </files> <languages> <language tag="en-GB">en-GB.shortcodejd.ini</language> <language tag="en-GB">en-GB.shortcodejd.sys.ini</language> </languages> <config> </config> </extension>
shortcodejd.php
<?php defined('_JEXEC') or die; function processShortCode($matches){ $dat = explode("|", $matches[2]); switch($matches[1]){ case "wheels": $html = ""; $html = ' <div class="col-md-3 col-sm-6 col-xs-12 sp-wheels"> <div class="thumbnail"> <a href="'.$dat[1].'" target="_blank"> <img src="'.$dat[2].'" style="width:100%"> <div class="caption"> <p>'.$dat[0].'</p> </div> </a> </div> </div> '; return $html; } } class PlgContentShortcodejd extends JPlugin { protected $autoloadLanguage = true; public function onContentPrepare($context, &$article, &$params, $limitstart) { $article->text = preg_replace_callback("/\[(\w+) (.+?)]/", "processShortCode", $article->text); return true; } } ?>
Обьясняю. У меня шорткод вот такого вида:
[wheels Spec 1 Wheels|http://www.site.com/|/images/wheels/spec-1_scion_frs_sp-6.jpg]
Плагином распарсивается вот в такую галерейку:
и на всякий случай прикрепляю сам архив с плагином. на его основе в дальнейшем можно добавить и другие обработки шорткодов
Добавлено 09.01.2019
Тут возникла идея еще эти шорткоды заставить работать в модулях и onContentPrepare тут уже не сработает. На помощь к нам приходит функция onAfterRender и тогда двойной шорткод будет выглядеть так:
defined('_JEXEC') or die; function processShortCode2($matches){ $html = $matches[1]; // var_dump($matches); if (!isset($_SERVER['HTTP_USER_AGENT']) || stripos($_SERVER['HTTP_USER_AGENT'], 'Chrome-Lighthouse') === false){ return $html; } else { return ""; } } class PlgContentGhide extends JPlugin { protected $autoloadLanguage = true; public function onAfterRender() { $app = JFactory::getApplication(); if ($app->isAdmin()) { return false; } $buffer = JResponse::getBody(); $buffer = preg_replace_callback("/\[ghide\](.*)\[\/ghide\]/", "processShortCode2", $buffer); JResponse::setBody($buffer); return true; } }