Ostatnie zmiany w polityce prywatności Facebooka sprawiły, że przestały działać niektóre dodatki pobierające dane z tego portalu.

Na jednej stronie mojego klienta wykorzystywany był plugin, który ładował zdjęcia z galerii, za pomocą kodu w artykule

{sfx url='TU LINK DO GALERII'}

Ponieważ przestało to działać, chciałem napisać plugin, który przerobi ten shortcode na prosty link do galerii.

 

Stworzyłem 3 pliki.

plugin-pliki.jpg

1) Index.html pusty, dla bezpieczeństwa.

2) XML

<?xml version="1.0" encoding="utf-8"?>
<extension version="3.8" type="plugin" group="content" method="upgrade">
<name>Facebook Gallery Fix - Solmedia</name>
<author>Solmedia.pl</author>
<creationDate>05.2018</creationDate>
<copyright>(C) 2018 www.solmedia.pl</copyright>
<license>GNU General Public License</license>
<authorEmail>biuro@solmedia.pl<;/authorEmail>
<authorUrl>www.solmedia.pl</authorUrl>
<version>1.0.0</version>
<description>Facebook Gallery Fix - Solmedia</description>
<files>
<filename plugin="fbgal">fbgal.php</filename>
<filename>index.html</filename>
</files>
</extension>

 

3) PHP

<?php
defined('_JEXEC') or die('Restricted access');

class plgSystemFbgal extends JPlugin
{

public function onAfterRender() {
$app = JFactory::getApplication();
$body = $app->getBody();
if ($app->isSite() == false)
{
return false;
}
$pattern = '/{sfx url=\'(.*?)\'}/i';
$body = preg_replace($pattern, '<p><a class="btn btn-primary" target="_blank" href="$1">Zobacz galerię na FB <img src="/images/external-link-symbol.png" /></a></p>', $body);
$app->setBody($body);
}
}

 

Jak działa plugin?

  1. Nazwa klasy musi odpowiadać nazwie pluginu oraz grupie. Mój plugin nazywa się Fbgal i jest w grupie system. Dlatego klasa nazywa się plgSystemFbgal. Joomla sama szuka takiej klasy w moim dodatku i wywołuje jej metodę.
  2. Sprawdzenie if ($app->isSite() == false) odpowiada za to, żeby plugin nie uruchamiał się na zapleczu Joomli
  3. Wreszcie core, czyli podmiana shortcodu. Wykorzystuję funkcję PHP preg_replace.
    1. Szukam kodu {sfx url=”} z dowolną treścią między ”. Pobieram go do zmiennej $1 za pomocą regularnego wyrażenia (odpowiadają za to nawiasy () )
    2. Potem zamieniam ten kod na mój HTML, a w href wstawiam pobrany link za pomocą $1
    3. Wreszcie podmieniam $body na nowe, z poprawionym HTMLem 🙂

Myślę, że dzięki temu przykładowi łatwo będzie napisać Ci własny plugin.

Tagi: