freoにfancybox3を導入

fancybox3.jpg

国産CMS「freo」は画像や動画をポップアップして表示する用に「Colorbox」が標準装備されていますが、これをレスポンシブ・モバイル対応が万全な「fancybox3」に乗り換えるためのメモです。

fancybox3を利用する方法は以下の二つがあります。

  1. 必要ファイルをダウンロードしてきて自分のサーバにアップロードする
  2. CDNで提供されているCSS・スクリプトを読み込む

今回は2.のCDNを利用する方法を解説します。

必要ファイルの読み込み

編集が必要なのは

  • templates/header.html
  • templates/internals/admin/header.html
  • templates/internals/admin/iframe_header.html

colorboxの読み込みタグをfancybox3の読み込みタグに書き換えます

<link rel="stylesheet" href="{$freo.core.http_url}{$smarty.const.FREO_CSS_DIR}colorbox.css" type="text/css" media="all" />

<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/fancyapps/[email protected]/dist/jquery.fancybox.min.css" />
<script type="text/javascript" src="{$freo.core.http_url}{$smarty.const.FREO_JS_DIR}jquery.colorbox.js"></script>

<script src="https://cdn.jsdelivr.net/gh/fancyapps/[email protected]/dist/jquery.fancybox.min.js"></script>

に。スクリプトの読み込みタグは「default.js」の読み込みタグより前に記述すること。

リンク付き画像をfancybox3で開くためのjsファイル変更

編集が必要なのは

  • js/admin.js
  • js/default.js
  • js/iframe.js
//ColorBox
var extensions = ['gif', 'GIF', 'jpeg', 'JPEG', 'jpg', 'JPG', 'jpe', 'JPE', 'png', 'PNG'];

var target = '';
$.each(extensions, function() {
	if (target) {
		target += ',';
	}
	target += 'a[href$=\'.' + this + '\']';
});
$(target).colorbox();

$('a.colorbox').colorbox({ width:'80%', height:'80%', iframe:true });

//fancybox3
var extensions = ['gif', 'GIF', 'jpeg', 'JPEG', 'jpg', 'JPG', 'jpe', 'JPE', 'png', 'PNG'];

var target = '';
$.each(extensions, function() {
	if (target) {
		target += ',';
	}
	target += 'a[href$=\'.' + this + '\']';
});
$(target).attr({'data-fancybox': 'images'});

$('a.colorbox').attr({
    'data-fancybox':'',
    'data-type':'iframe'
});

に書き換えます。さらにjs/iframe.jsの以下の箇所

//メディア挿入
$('a.insert').click(function() {
	if (parent.tinymce.isIE) {
		parent.tinyMCE.activeEditor.focus();
		parent.tinyMCE.activeEditor.selection.moveToBookmark(parent.tinymce.EditorManager.activeEditor.windowManager.bookmark);
	}
	parent.tinyMCE.activeEditor.execCommand('mceInsertContent', false, $(this).attr('title'));
	parent.$.fn.colorbox.close();
});

//メディア挿入
$('a.insert').click(function() {
	if (parent.tinymce.isIE) {
		parent.tinyMCE.activeEditor.focus();
		parent.tinyMCE.activeEditor.selection.moveToBookmark(parent.tinymce.EditorManager.activeEditor.windowManager.bookmark);
	}
	parent.tinyMCE.activeEditor.execCommand('mceInsertContent', false, $(this).attr('title'));
	parent.$.fancybox.close();
});

に書き換えます。

画像以外をfancybox3で開く

基本的にリンクタグ(<a href~)に「 data-fancybox=""」を記述するとfancybox3で開くことができます。例えば以下のように記述します。

  • ウェブページをインラインフレームで開く
    <a href="http://codepen.io/fancyapps/full/jyEGGG/" data-fancybox="" data-type="iframe"> Webpage </a>
  • youtube動画
    <a href="https://www.youtube.com/watch?v=_sI_Ps7JSEk" data-fancybox=""> YouTube video </a>

fancybox3表示のカスタマイズ

表示のオプションはfancybox3 · Documentationで見ることができます。一例として当サイトではdefault.jsに以下のように記述しています。

//ColorBox
var extensions = ['gif', 'GIF', 'jpeg', 'JPEG', 'jpg', 'JPG', 'jpe', 'JPE', 'png', 'PNG'];

var target = '';
$.each(extensions, function() {
	if (target) {
		target += ',';
	}
	target += 'a[href$=\'.' + this + '\']';
});
$(target).attr({'data-fancybox': 'images'});

$('a.colorbox').attr({
	'data-fancybox':'',
	'data-type':'iframe'
});
$('[data-fancybox]').fancybox({
	// オプションを下記に記載していきます
	loop : true, // 複数画像表示時に最初と最後をループさせる
	toolbar  : false, // ツールバーの非表示
	smallBtn : true, // 小さいCloseボタン利用する
});