concrete5.6(関連)

PCサイトとスマホ(スマートフォン)サイトの画像を切り替える方法(2)


1)designer contentをインストールする

 詳しいインストール方法は、日本語ユーザー会の説明をご参照頂くこととします。

 一応簡単に説明しますね。
まず、本家アドオンのサイトから、圧縮されたファイルをダウンロードしてきます。
(※designer conctentは、開発者向けのため、マーケットプレイスからは直接インストールできません)

 ダウンロードしてきたファイルを解凍して、フォルダごと(「designer content」フォルダ)、 concrete5のサイトの「packeges」フォルダにアップロードします。

 concrete5を拡張 → 機能追加、「Designer Content」[インストール]を押す。

Designer Content install.jpg

 「新しいパッケージがインストールされました。」が表示されれば、インストール完了です。

Designer Content install_ok.jpg

PCサイトとスマホ(スマートフォン)サイトの画像を切り替える方法(3)

PCサイトとスマホ(スマートフォン)サイトの画像を切り替える方法(1)

 concrete5(5.6.3.3-ja)で、PCサイトとスマートフォンサイトの画像を切り替える方法

 concrete5は、CMSとしてある程度ファイル数も多く、どうしても速度面が気になるところではあります。しかしながら実際は、高機能なキャッシュシステムによってそれを感じさせないレスポンスをもたらしてくれます。

 高速に表示してくれるのはいいのですが、一つだけ困った事があります。

このキャッシュシステムは、各ページのブロック単位で働かす事が可能なのですが、
標準でかつよく使う、『記事ブロック』の設定を変更するわけにはいけないですね。
 (※変更しても問題 ないなら当然 可能です!)

concrete5では「カスタムテンプレート」を使って、サイトの表示仕様や、見栄えは修正するのですが、 アクセスしてきた端末によって画像を切り替えたい場合があります。

ですので、記事ブロックのカスタムテンプレートに、画像切り替えロジック(User Agentによる:方法は後述)を書きました。

concrete5のキャッシュ設定は、

『キャッシュとスピード設定』にて、
フルページキャッシュ → 有効 - 該当のページ上のブロックで許可されていれば

に設定しました。

あれ?
実際の動作は、最初にアクセスされた機器の画像になっている
そうなんです。画像が切り替えできていないのです。

仕方がないので、キャッシュをトップページのみ無効にしていました。
そして、調査を開始。

concrete5-japan.orgの検索 欄 より
検索ワード::キャッシュ ブロック単位

テーマで叩いたAPIのキャッシュについて
http://concrete5-japan.org/community/forums/development/post-8796/
をみつけました。それによると、(リンク変更を考慮して引用&転記しました)

----------------------------------------
テーマでやると、フルページキャッシュしか効きません。ただ、フルページキャッシュで良ければ、ログアウトして閲覧する際は超高速になります。ページ内に動的なブロックがあるとフルページキャッシュが作られませんので、たまに困ります。

ブロックで作れば、ブロックキャッシュが効きます。ブロックキャッシュはブロック単位で表示結果をキャッシュしますので、フルページキャッシュが効かない場合でも高速化できます。Designer Contentで適当にブロックを作ってから、controller.phpのキャッシュ設定をいじればOKです。

$btCacheBlockRecord : ブロックの設定をキャッシュするかどうか。普通はtrue
$btCacheBlockOutput : ブロックの出力結果をキャッシュするかどうか。ページリストやコメント欄など常に更新がある動的なものはfalse
$btCacheBlockOutputOnPost : フォームの送信があったときにキャッシュするかどうか。最初の表示はキャッシュされていて、送信ボタンを押した際の表示はキャッシュされない。完全にフォーム用の設定項目。
$btCacheBlockOutputForRegisteredUsers : ログインしているユーザーにもアウトプットキャッシュを表示するかどうか。キャッシュしたいがログインユーザーによって表示が変わる場合があるとき $btCacheBlockOutputLifetime : アウトプットキャッシュの有効期間。秒単位
----------------------------------------

ブロックのcontroller.phpの、
// $btCacheBlockOutput = true;
$btCacheBlockOutput = false;
にするだけなんです。

が、これを行うためには、前述の通り記事ブロックや画像ブロックのcontroller.phpを修正するわけにもいきません。

 そこで登場するのが、前述の引用にもあります通り、

designer conctent」を使って適当なブロックを作成して(この言い方がふさわしいのです)それに、画像切り替えロジック追加と、 キャッシュの設定変更すれば出来上がりです。


【目次】
 1)designer conctentのインストール
 2)オリジナルブロックの作成(リンク付き画像2個[PC用/スマホ用]表示ブロック)
 3)画像を切り替えるロジックの追加(ただし、関数として設定::helper(navigationにメソッドとして)
 4)画像切り替え追加( 2)でできたブロックのview.php(カスタムテンプレートでもどうぞ)に 3)のメソッド(関数)を使って作成 )
 5)controller.phpのキャッシュの修正
 6)動作検証(キャッシュ設定変更、キャッシュをクリア後)::PCとスマホから画像が切り替わっていることの確認
   (※当マインドハーツのトップページがこの機能を使って、ビルボード画像を切り替えています)

PCサイトとスマホ(スマートフォン)サイトの画像を切り替える方法(2)

さくらのスタンダードで、sitemapページがsitemap.xmlになる

 『さくらのレンタルサーバ スタンダード』

※2015/06/19時点(仕様は適宜変更される場合がございますので、ご注意ください)

●ページ : サイトマップ
●カノニカルURL : sitemap

と設定して、sitemap.xml のファイルがある(通常は作成しているのである)とき

『サイトマップ』のページを表示すると、『sitemap.xml』の中身が表示されてしまいます。

 ★原因は、『さくらのレンタルサーバ スタンダード』が、特殊な「URLルーティング」 設定になっているためだと思われます。

(※未確認の推測ですが、独自ドメインのサービス仕様と、セキュリティ確保のため?) 「concrete5.6.3.3日本語」にて、「プリティーURL」をONにすると起こります。

 最も、本家サイト の質問があるように、実際には存在しないフォルダよりも、存在するファイルを 優先して表示するように、mod_rewrite(URLを自由に変換する機能)の設定されているようです。 これを一般的に、「特殊」設定と言われているものかと思います。

他のサーバで、かつ特殊な設定になっていないものは起こりません。


 ★回避方法ですが、2つあります。

1)●ページ : サイトマップ ●カノニカルURL : sitemap-list

というように、sitemap.xmlの「sitemap」と重ならないようにします。

なお、「プリティーURL」は、デフォルトのままでOKです。
ドメインのルート以外のフォルダにインストールしてある時は、
例) concrete5が、http://example.com/concrete5/ に保存されている場合
「RewriteBase /」 → 「RewriteBase /concrete5/」

 

2)他のサーバーと同じ表示にしたい(普通はね)

●ページ : サイトマップ
●カノニカルURL : sitemap
●ファイル表示(Rss): sitemap.xml

と機能してほしいとき

★concrete5がインストールされているフォルダに、
『sitemap』フォルダ(中身は空にする)を作成します。

★「プリティーURL」を以下のように設定します。

# -- concrete5 urls start --

RewriteEngine On
RewriteBase /
RewriteRule ^sitemap\.xml$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}/index.html !-f
RewriteCond %{REQUEST_FILENAME}/index.php !-f
RewriteRule . index.php [L]

# -- concrete5 urls end --

※確認時、ブラウザのキャッシュを削除しておかないと、表示がかわりません。
concrete5のキャッシュではないです。

ページタイプの削除で警告が出る対処方法

ページタイプの削除実行時、ページ情報が残っている警告が出る場合の該当ページ(ページバージョン)を確認(削除)する方法 concrete5(5.6.3.3.ja)

★ページのページタイプをデザインで変更したのに、削除できない。
 公式ページ(concrete5-japan.org)→コミュニティー/フォーラムの回答では、「どこのページでも一切使っていないページタイプでないと削除はできません。」とのこと。
 concrete5には履歴を管理する機能があり、この過去の履歴に削除したいページタイプがあると削除できません。
履歴の古いものを全て削除すればいいのですが、仕組みの構造を理解するために、バージョンを決め打ちで削除する方法を記載してみました。

 ※公式ページ内での検索方法→サイト上部にある、検索窓に、ページタイプを削除するにはと入力して、検索してください。ページタイプを削除するにはの投稿を参照ください


このページタイプを削除するには、このページタイプを使用している全てのページを削除し、このページタイプを使用している全てのページバージョンを取り除く必要があります。

[※]警告ダイアログ

werning_c5_page_type_del_0.JPG



★本操作を実施する前に必ず、データベースのバックアップを取得してください。
 ※当サイトの方法は、自己責任にてお願いします。
   (管理画面での削除ですので、特に問題となることは少ないと思われます)

 (方法1) concrete5にてバックアップ→の管理画面ドロップダウンメニュー(末尾)→システムと設定→データベースをバックアップ→「バックアップを実行」
 (方法2) phpMyAdminにてバックアップ(実際の方法は、ご契約のホスティングのヘルプページもしくは、別途検索してください)
    
※「■高度版」ではphpMyAdminが必要となります

「簡易版」・・・とりあえず、不要なページタイプが削除できればよい場合
「高度版」・・・必要最小限の変更、削除のみで、不要なページタイプを削除する場合

「簡易版」

 [Step1]ゴミ箱→空
 [Step2]削除したいページタイプから作成したと思われる、ページの最新以外の全てのバージョンの削除
 [Step3]ページタイプの削除(ページタイプ→デザイン→[右下にあるボタン]削除)

※(管理画面)→「フルサイトマップ」での「ごみ箱」の表示方法
concrete5の管理画面→フルサイトマップ→(右上)オプション→「システム設定」にチェック

[1]サイトマップ→右上の「オプション」をクリック
saitemap_1.JPG

[2]左上の「システムページを表示」にチェック
saitemap_2_system_on.JPG

[3]サイトマップをスクロールすると、以下の項目が現れます
saitemap_3_recycles.JPG

[4]「ゴミ箱」をクリックして、「ゴミ箱を空にする」を押します
saitemap_4_recycles_del.JPG




「高度版」(phpMyAdmin操作、簡単なSQLがわかる方

 [Step1]phpMyAdmin内で、SQLにてページの削除バージョンを探す
 [Step2][Step1]で見つけた、ページのバージョンを削除
 [Step3]ページタイプの削除

 

 [Step1]phpMyAdmin内で、SQLにてページの削除バージョンを探す

1)消したいページタイプのページIDを確認する。

 ・「管理画面」→「ページタイプ」から、削除したいページタイプを確認する
  例)CMSアーカイブ (※cID=16を探します)


  確認するテーブルは、PageTypes

SQL)select * from PageTypes;

これをphpMyAdmin(ログインしてください。
※ログイン方法は、各ホスティングのヘルプ等を参照)の『SQL』欄にコピー&ペーストして検索してください

SQL の結果

Host: localhost8889
Database: concrete5
Generation Time: 2015 年 5 月 12 日 23:21
Generated by: phpMyAdmin 4.2.10 / MySQL 5.5.38
SQL query: select * from PageTypes LIMIT 0, 30 ;
行: 12

ctIDctHandlectIconctNamectIsInternalpkgID
1 core_stack main.png Stack 1 0
2 dashboard_primary_five main.png Dashboard Primary + Five 1 0
3 dashboard_header_four_col main.png Dashboard Header + Four Column 1 0
4 blog_entry template1.png ブログ記事 0 0
8 information right_sidebar.png お知らせ 0 0
10 front_page right_sidebar.png トップページ 0 0
11 default right_sidebar.png Default 0 0
14 about_us right_sidebar.png マインドハーツについて 0 0
15 concrete5 template1.png CMS情報 0 0
16 cms_archive right_sidebar.png CMSアーカイブ 0 0
19 info_entry template3.png お知らせ投稿 0 0
18 cms_entry template1.png CMS投稿 0 0

※上記の結果表示用Tableは、jquery plugin の jQuery Basic Table を使用して整形しています

これで『CMSアーカイブ』のページID(cID=16)が見つかりました。

2)続いてこのページタイプを持つページを取得する。
  ※このページの特定バージョンがあるから消せない。
  ※以下の検索するテーブルでは、列IDがctIDとなっているので注意
  このctID=16 をキーとして、ページバージョンが残っていないかを確認する。

確認するテーブルは、CollectionVersions

SELECT * FROM CollectionVersions where ctID = 16 ORDER BY cID DESC, ctID DESC;
SELECT count(*) FROM CollectionVersions where ctID = 16; (件数確認用)

SQL の結果

Host: localhost8889
Database: concrete5
Generation Time: 2015 年 5 月 17 日 00:29
Generated by: phpMyAdmin 4.2.10 / MySQL?5.5.38
SQL query: SELECT * FROM CollectionVersions where ctID = 16 ORDER BY cID DESC, ctID DESC LIMIT 0, 30 ;
行: 6

cIDcvIDcvNamecvHandlecvDescriptioncvDatePubliccvDateCreatedcvCommentscvIsApprovedcvIsNewcvAuthorUIDcvApproverUIDptIDctIDcvActivateDatetime
202 1 追記データ add_data150321 設定 2014-11-21 11:53:00 2015-03-21 11:54:37 Version 1 0 0 1 1 8 16 NULL
202 2 追記データ add_data150321 設定 2014-11-21 11:53:00 2015-03-21 11:57:30 新バージョン 2 0 0 1 1 8 16 NULL
202 3 追記データ add_data150321 設定 2014-11-21 11:53:00 2015-03-21 11:59:23 新バージョン 3 0 0 1 1 8 16 NULL
202 4 追記データ add_data150321 設定 2014-11-21 11:53:00 2015-03-21 12:02:25 新バージョン 4 0 0 1 1 8 16 NULL
201 1   NULL NULL 2015-03-19 06:15:08 2015-03-19 06:15:08 Version 1 1 0 NULL 1 0 16 NULL
130 18 検索 search 検索&結果の表示ページ 2015-01-29 17:02:00 2015-05-05 18:01:02 Version 18 0 0 1 1 8 16 NULL

※上記の結果表示用Tableは、jquery plugin の jQuery Basic Table を使用して整形しています

これで6件が見つかりました。

cID::ページ
cvID::バージョン番号
cvName::ページバージョンのページ名
cvHandle::ページバージョンのハンドル名

※cvName が空白は、削除したいページタイプ『
CMSアーカイブ

 [Step2][Step1]で見つけた、ページのバージョンを削除

1)該当するページ『追記データ』のバージョン『Version 1,新バージョン 2, 3, 4』を「ページ」→「バージョン管理」で、削除する。不要なら、最新のみを残し、全て削除する。

page_version_del_150517.JPG

page_version_del-4_150517.JPG

page_version_del-5_150517.JPG

2)該当するページ『検索』のバージョン『Version 18』を「ページ」→「バージョン管理」で、削除する。

page_version_del-2_150517.JPG

page_version_del-3_150517.JPG

select * from Pages where cIsTemplate = 1;
※本来、ページとページタイプはリレーションがあり、ひも付けがわかるが、すでにデザインで変更した後なら、わからない。

 [Step3]ページタイプの削除

[1]ページタイプ→『CMSアーカイブ』の「設定」ボタンをクリックpage_type_150517.jpg


[2]『CMSアーカイブ』右下の「削除」ボタンをクリック
page_type_150517-2.jpg

[3]『CMSアーカイブ』が警告なく削除できたらOK
page_type_150517-3.jpg

完了