Gnaviモジュールlightboxの改良
タツ
投稿数: 2447
Gnaviモジュールについて、以前、「Lightbox & Videobox preload for XOOPS Cube Legacy 2.1」を導入し、記事詳細内の画像にもLightboxが利用できるようになっていました。
しかし、HTML5に対応していない為、携帯で見ると画像が適正に処理されていません。もともと記事に掲載可能な3画像までは順番に見ることができますが、記事詳細に掲載されている画像に関してはグループ化されていないので1枚ずつしかLightboxを利用できませんでした。
今回、改良した点は、
・ページごとに掲載された画像を全てをグループ化し順番に見ることができるようにすること。
・携帯で見ても画面内に画像が収まること。
の2点について自分で可能な限り改変してみました。その手順について備忘録として掲載します。
1.lightbox2を公式サイトからダウンロードします。
2.解凍し、必要なファイルを取り出し、Gnaviモジュールのhtml側の各フォルダに保存します。
3.ダウンロードしたlightbox.cssで利用する画像ファイル(ナビゲーションに利用する画像)はimgフォルダに入っています。これをGnaviモジュールではimagesフォルダに保存しているので、lightbox.css内の画像pathをimg→imagesに編集する必要があります。
例)url(../img/close.png) → url(../images/close.png)等
4.Gnaviのテンプレートを編集する
gnaviモジュール名_itemheader.htmlの内容を編集します
・最初の部分
・Gnaviにアップロードされた画像をページタイトルとしてグループ化する
アップロードされた3枚分の画像名はそのまま利用します
data-title="<{$photo.caption}>"
data-title="<{$photo.caption2}>"
data-title="<{$photo.caption3}>"
とします。
アップロードされた3枚分の画像は全てページタイトルとしてグループ化します。
data-lightbox="<{$xoops_pagetitle}>"
<{* FILE1~3 *}>の部分
・<{* DESCRIPTION *}>の詳細記事内に掲載された画像をページタイトルとしてグループ化する
5.以下のコードをテキストファイルに保存し、Lightbox.class.phpとしてhtml/preloadの中に設置します。サイトのpreloadに設置すればbbコードでlightboxが利用できるようになります。
以上
しかし、HTML5に対応していない為、携帯で見ると画像が適正に処理されていません。もともと記事に掲載可能な3画像までは順番に見ることができますが、記事詳細に掲載されている画像に関してはグループ化されていないので1枚ずつしかLightboxを利用できませんでした。
今回、改良した点は、
・ページごとに掲載された画像を全てをグループ化し順番に見ることができるようにすること。
・携帯で見ても画面内に画像が収まること。
の2点について自分で可能な限り改変してみました。その手順について備忘録として掲載します。
1.lightbox2を公式サイトからダウンロードします。
2.解凍し、必要なファイルを取り出し、Gnaviモジュールのhtml側の各フォルダに保存します。
・js/jquery-1.11.0.min.js(これについては既に導入済だったので外しました)
→html/modules/gnaviモジュール名/js/jquery-1.11.0.min.js(必要な場合)
・imgフォルダ内の各ファイル
→html/modules/gnaviモジュール名/imagesのフォルダ内に保存
・js/lightbox.min.js
→html/modules/gnaviモジュール名/js/lightbox.min.js
・css/lightbox.css
→html/modules/gnaviモジュール名/css/lightbox.css
3.ダウンロードしたlightbox.cssで利用する画像ファイル(ナビゲーションに利用する画像)はimgフォルダに入っています。これをGnaviモジュールではimagesフォルダに保存しているので、lightbox.css内の画像pathをimg→imagesに編集する必要があります。
例)url(../img/close.png) → url(../images/close.png)等
4.Gnaviのテンプレートを編集する
gnaviモジュール名_itemheader.htmlの内容を編集します
・最初の部分
・jquery-1.11.0.min.js(必要な場合のみ)、lightbox.min.jsとlightbox.css、を読み込ませる。
- <script type="text/javascript" src="js/prototype.js"></script>
- <script type="text/javascript" src="js/scriptaculous.js?load=effects"></script>
- <script type="text/javascript" src="js/lightbox.js"></script>
- <link rel="stylesheet" href="css/lightbox.css" type="text/css" media="screen" />
↓
+ <script src="js/jquery-1.11.0.min.js"></script>(必要な場合のみ)
+ <script src="js/lightbox.min.js"></script>
+ <link rel="stylesheet" property="stylesheet" href="css/lightbox.css" type="text/css" media="all" />
・Gnaviにアップロードされた画像をページタイトルとしてグループ化する
アップロードされた3枚分の画像名はそのまま利用します
data-title="<{$photo.caption}>"
data-title="<{$photo.caption2}>"
data-title="<{$photo.caption3}>"
とします。
アップロードされた3枚分の画像は全てページタイトルとしてグループ化します。
data-lightbox="<{$xoops_pagetitle}>"
<{* FILE1~3 *}>の部分
- <{if $photo.img==1}><a href="<{$photo.ahref_photo}>" title="<{$photo.caption}>" rel="lightbox"><img src="<{$photo.imgsrc_photo}>" alt="<{$photo.caption}>" <{$photo.width_height}> /></a>
↓
+ <{if $photo.img==1}><a href="<{$photo.ahref_photo}>" data-title="<{$photo.caption}>" data-lightbox="<{$xoops_pagetitle}>"><img src="<{$photo.imgsrc_photo}>" alt="<{$photo.caption}>" <{$photo.width_height}> /></a>
- <{if $photo.img1==1}><a href="<{$photo.ahref_photo1}>" title="<{$photo.caption1}>" rel="lightbox"><img src="<{$photo.imgsrc_photo1}>" alt="<{$photo.caption1}>" <{$photo.width_height1}> /></a>
↓
+ <{if $photo.img1==1}><a href="<{$photo.ahref_photo1}>" data-title="<{$photo.caption1}>" data-lightbox="<{$xoops_pagetitle}>"><img src="<{$photo.imgsrc_photo1}>" alt="<{$photo.caption1}>" <{$photo.width_height1}> /></a>
- <{if $photo.img2==1}><a href="<{$photo.ahref_photo2}>" title="<{$photo.caption2}>" rel="lightbox"><img src="<{$photo.imgsrc_photo2}>" alt="<{$photo.caption2}>" <{$photo.width_height2}> /></a>
↓
+ <{if $photo.img2==1}><a href="<{$photo.ahref_photo2}>" data-title="<{$photo.caption2}>" data-lightbox="<{$xoops_pagetitle}>"><img src="<{$photo.imgsrc_photo2}>" alt="<{$photo.caption2}>" <{$photo.width_height2}> /></a>
・<{* DESCRIPTION *}>の詳細記事内に掲載された画像をページタイトルとしてグループ化する
<{$photo.description}>の部分
- <{$photo.description}>
↓
+ <{$photo.description|replace:'data-lightbox=""':"data-lightbox='$xoops_pagetitle'"|replace:'rel="lightbox"':"data-title='' data-lightbox='$xoops_pagetitle'"}>
5.以下のコードをテキストファイルに保存し、Lightbox.class.phpとしてhtml/preloadの中に設置します。サイトのpreloadに設置すればbbコードでlightboxが利用できるようになります。
<?php
//================================================================
// Lightbox Preload
// by photosite, http://www.photositelinks.com/
//================================================================
if (!defined('XOOPS_ROOT_PATH')) exit();
class Lightbox extends XCube_ActionFilter
{
function preBlockFilter()
{
$this->mRoot->mTextFilter->mMakeXCodeConvertTable->add(array(&$this, 'bbcode'), XCUBE_DELEGATE_PRIORITY_1);
}
function bbcode(&$patterns, &$replacements)
{
// tag for lightbox
$patterns = "/\[url=(['\"]?)(http[s]?:\/\/[^\"'<>]*)\\1 lb=(['\"]?)([^\s]*)\\3 title=(['\"]?)([^\s]*)\\5](.*)\[\/url\]/sU";
$replacements[0] = $replacements[1] = '<a href="\\2" rel="lightbox[\\4]" target="_blank" title="\\6">\\7</a>';
$patterns = "/\[url=(['\"]?)(http[s]?:\/\/[^\"'<>]*)\\1 lb=(['\"]?)([^\s]*)\\3](.*)\[\/url\]/sU";
$replacements[0] = $replacements[1] = '<a href="\\2" rel="lightbox[\\4]" target="_blank">\\5</a>';
// tag for lightbox
$patterns = "/\[siteurl=(['\"]?)([^\"'<>]*)\\1 lb=(['\"]?)([^\s]*)\\3 title=(['\"]?)([^\s]*)\\5](.*)\[\/siteurl\]/sU";
$replacements[0] = $replacements[1] = '<a href="'.XOOPS_URL.'/\\2" rel="lightbox[\\4]" target="_blank" title="\\6">\\7</a>';
$patterns = "/\[siteurl=(['\"]?)([^\"'<>]*)\\1 lb=(['\"]?)([^\s]*)\\3](.*)\[\/siteurl\]/sU";
$replacements[0] = $replacements[1] = '<a href="'.XOOPS_URL.'/\\2" rel="lightbox[\\4]" target="_blank">\\5</a>';
// </a>';
// </a>';
}
}
?>
以上
投票数:20
平均点:5.50
投稿ツリー
-
Gnaviモジュールlightboxの改良
(タツ, 2015/6/3 6:56)
-
Re: Gnaviモジュールlightbox2への改良
(タツ, 2017/2/23 21:04)
- Re: Gnaviモジュールlightbox2への改良 (タツ, 2019/8/30 8:53)
-
Re: Gnaviモジュールlightbox2への改良
(タツ, 2017/2/23 21:04)