Joomla 2.5 Custom Shortcodes plugin


Вообщем понадобилось к джумле 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]

Плагином распарсивается вот в такую галерейку:

ПОЛЕЗНО  Virtuemart: Вывод значения кастомного поля

Joomla 2.5 Custom Shortcodes plugin
и на всякий случай прикрепляю сам архив с плагином. на его основе в дальнейшем можно добавить и другие обработки шорткодов

Добавлено 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;
	}
}