Joomla! の Plugin を自作する(1)

Joomla! 用に Open Graph protocol のメタタグを自動挿入するプラグインを作ってみようと思います。

テンプレートやモジュールの自作は当サイトでも記事にしていますので、さほど苦労することなくいけそうな予感です(笑)。



www.imuza.com

www.imuza.com


Joomla! Documentation

何をおいてもまずは、Joomla! Documentation を読んでみましょう。

J3.x:Creating a Plugin for Joomla - Joomla! Documentation


最もシンプルなプラグインは、ひとつの php ファイルとインストール XML ファイルで構成されるとあります。サンプルコードもありますので、まずはテスト用に <meta property="og:title" content="" /> をヘッダ内に挿入するコードを試してみます。


インストール XML ファイル

<?xml version="1.0" encoding="utf-8"?>
<extension version="3.1" type="plugin" group="content">
    <name>IMUZA Open Graph</name>
    <author>IMUZA.com</author>
    <creationDate>July 2017</creationDate>
    <copyright>Copyright (C)2017 IMUZA.com. All rights reserved.</copyright>
    <license>GNU General Public License version 2 or later; see LICENSE.txt</license>
    <authorEmail></authorEmail>
    <authorUrl>www.imuza.com</authorUrl>
    <version>0.0.1</version>
    <description></description>
    <files>
        <filename plugin="imzopengraph">imzopengraph.php</filename>
        <filename>index.html</filename>
    </files>
</extension>


  • <extension> タグの group="" には、保存する plubins 以下のフォルダを指定します。どうやって決めるかは、使うイベントによります。イベントは、Plugin/Events - Joomla! Documentation で確認できます。今回は、メタタグをヘッダに挿入したいということですので、onContentBeforeDisplay が使える content ということになります。
  • <files> タグにはインストールするファイルを書きます。<folder> タグでフォルダごとインストールでき(ると思い)ます。

まずは、これだけあれば大丈夫ですが、他に次のタグが使えます。

  • <language> タグは言語ファイル。
  • <config> タグは、プラグインの設定ページのフォームデータを指定できます。


Plugin ファイル

<?php
// No direct access
defined( '_JEXEC' ) or die;

class plgContentImzOpenGraph extends JPlugin {

    function onContentBeforeDisplay() {
        $document = JFactory::getDocument();
        $document->addCustomTag('<meta property="og:title" content="IMUZA.com"/>');
        return true;
    }
}


クラス名は決まりがあるようで、plg<PluginGroup><PluginName> としなければいけないとのことです。今回の場合は、plgContentImzOpenGraph となります。大文字小文字は区別されません。

後は、セキュリティ用の index.html を入れておきます。


<html><body bgcolor="#FFFFFF"></body></html>


zip ファイルに固めてインストール

作成した3つのファイルをフォルダに入れ、zipファイルに固め、エクステンション管理からインストールし有効にします。あえて違う名前にすることはありませんがフォルダ名は何でもいいようです。


f:id:ausnichts:20170712172746p:plain


f:id:ausnichts:20170712173147p:plain


ソースを確認

確かにヘッダに、

 <meta property="og:title" content="IMUZA.com"/>

と入っています。

後は、それぞれの記事からタイトルやイメージを取ってきてメタタグを構成して表示すればいけます。

ただ、個別にイメージなどを指定したい場合にどうするかですね。次回です。