ラック
Home > CMS > 記事 > 2016年4月 > concrete5所感

concrete5所感

カテゴリ: concrete5

concrete5(5.7系)を触り始めたのでその所感を書き連ねたいと思います。

 

concrete5の所感

  • コンテンツ(ページ)の管理はMODxに似る。管理画面の「サイトマップ」機能がMODxの左側のツリーそのもの。ページの所属の移動も可能。
  • コンテンツごとに異なるデザインを使用可能(ページタイプで記事の所属する「ページタイプ」を指定。「ページタイプ」そのものに「ページテンプレート(デザインのテンプレート)」を指定することが可能なので、記事-ページタイプ-ページテンプレート、と順番に紐付けることでデザインを柔軟に変更できる)
  • i18n(translateとlocalization)に対応した設計になっている。多言語サイトの構築がWPなどに比べて楽になる(はず)。 ※CMSの設計自体が念頭に置いた造りになっているため
  • デフォルトで装備されている機能
    • PCテーマとスマホテーマの切り替え機能(テーマ)
    • ブログ
    • ポートフォリオ
    • お問い合わせフォーム
    • メンテナンスモード
    • バックアップ&リストア
    • SEO対策一式(WPのSEO All in Packみたいなもの?
    • サーバキャッシュ機能
    • etc.

さすがCMS。そもそもブログツールであるWPや、スピード重視のMODxとは異なり、サイトのコンテンツや管理として必要な機能がもりっとデフォルトで用意されていますね。

 

 

テーマの作成手順

  1. テーマ作成(ページテンプレート含む)
  2. アップロード&インストール、有効化
  3. ページタイプ作成、ページテンプレート適用
  4. 各ページにテンプレート適用

流れとしてはざっくりとこんな感じでしょうか。

実際に簡単なテーマを作成

この辺りとか他諸々を参考にしてトップページだけの簡単なテーマを作ってみました。

concrete5そのものはXAMPPの中に5.7.5.6をインストールして実験。

 

必要なもの

  • default.php (必須)
  • thumbnail.png (必須)
  • description.txt
  • page_theme.php (任意)

上の参考サイトで言われているように、テーマに必要なものは4つ。ただしpage_theme.phpは任意なので必須のものだけならば3つ。

default.phpはWPで言えばindex.phpでしょうか。要は実際に表示されるページのテンプレートですね。htmlを作成した後、concrete5用のphpメソッドやらクラスやらを付け足して、jsやcssの読み込みパスも変えて…としてあげれば良い。

description.txtはWPでいえばstyle.cssの先頭に付けるコメント文に当たるでしょうか。テーマ名やテーマの説明を書くものです。文字コードをUTF-8にすること以外はそんなに注意は必要ないかと(page_theme.phpでも同じことを記述することができるので、その場合は不要?)

thumbnail.pngはテーマ選択時に表示されるスクショの役割。自分で使う分には適当な画像を適切なサイズで用意してあげれば良いのかな、と。サイズは360x270(px)っぽい?

最後に、一番詰まったのがpage_theme.php。concrete5の5.7以降で新しく追加されたものなので、あんまり情報が転がっていないので中身をどう書けば良いのか中々掴めませんでした。

今回BootstrapやFont Awesomeを使ったため、デフォルトで用意されているものを使おうかと思ってrequireAssetしたかったのでpage_theme.phpも用意することに。

これの記述方法を間違うとテーマ選択画面でエラーが出てテーマが選択できなかったり、そもそもテーマ選択画面がエラーで開かなくなったりするのでちょっと面倒でした…。

とりあえず動くものはできましたが、Bootstrapのcssを読み込んでくれないのでBootstrapのcssは自前のものを使うことにしたのと、Font Awesomeのバージョンが古いのでいくつかフォントが読み込めなかったので結局Font Awesomeも自前のものを読み込むことにしたりで妥協が多し。


<?php
namespace Application\Theme\sampletheme; //ここはテーマ名ではなくてテーマのフォルダ名。記述必須
class PageTheme extends \Concrete\Core\Page\Theme\Theme { //"PageTheme"というクラスは必須
	//"PageTheme"の中に必要な情報を書いていく
	public function registerAssets() { //concrete5で用意されているものを使うか使わないか
		$this->requireAsset('javascript', bootstrap/*');
		$this->providesAsset('css', 'bootstrap/*'); //読み込んでくれなかったのでいらない子宣言(もしかしてログオン中は読まない…?)
		$this->providesAsset('css', 'font-awesome'); //バージョン古くていくつかフォントが出なかったのでいらない子宣言
		$this->requireAsset('javascript', 'jquery'); //これないとログオフ時にjquery読み込んでくれない
	}
	protected $pThemeGridFrameworkHandle = 'bootstrap3'; //エリアに突っ込むときにグリッドレイアウト対応させるならば必要

	public function getThemeName() { //テーマ名。description.txtを用意したならば不要だけど一応書いておく
		return t('sampletheme');
	}
	public function getThemeDescription() { //テーマの説明。description.txtを用意したならば不要だけど一応書いておく
		return t('concrete5サンプルテーマ');
	}
}
?>

コメントもりもり付け足しましたが大体こんな感じです。

page_theme.phpはconcrete5で用意されているものを読むか自前のプラグイン読むかとか結構テーマの作り方によっては必要な感じですが、これをプログラム経験のないデザイナーさんが書くのは結構ハードル高いんじゃないかなー、という所感。

慣れればおまじないとして運用できそうですけど、最初のうちは

  • 「テーマが選択できないー」
  • 「そもそもテーマ選択画面がエラーになるー」
  • 「テーマを選択したらエラーになったー」
  • 「jqueryが上手く動かないー」
  • 「Bootstrapがおかしいー」

とか、いろんなことが起きそうですね…。

下手なエラーを起こすとクリティカルになりそうなので気を付けないと。

 

 

他のCMSと比べて意識すべき点

1.)名前の由来の通り「コンクリートブロックを積み上げるようにコンテンツをどんどん積んでいく」ことを基本としています。

この「コンテンツを積んでいく」というのがミソで、ページに追加するブロックはどういうものを許容するか、をきちんと最初の段階で設計しておかないといけないのではないでしょうか。

デフォルトの状態で用意されているブロックでも色々なものが挿入できるので、当初デザイナーさんが想定していなかったhtmlタグが混入しやすい、ということに繋がる気がします。

こうした事象を回避するため「このアカウントはこのページはAのブロックだけ、こっちのページではAとCのブロックだけ…」といった権限設定か、あるいはブロックのデザイン自体をカスタマイズ(カスタムテンプレート機能)といったことをする必要がありそうです。

 

2.)上のブロックでコンテンツが挿入される、というのはDBの構造もWPやMODxとは異なる概念をもたらします。

当然ですが、テーマの作り方でどういうブロックをどこに挿入できるのか、というのが異なります(aというテーマではトップページにブロックが挿入可能な場所が2か所あるが、bで1か所もない、とか)。

そのため、aというテーマでブロックを追加して記事を書いたが、bにテーマを変更した途端それがまったく表示されなくなる、ということが簡単に起こり得ます(WPやMODxでもできなくはない)。

表示されなくなったといってもデータが消えたわけではなく、データベースの中にはきちんと保存されています。ただ、表示するかどうかが「テーマ」に強く依存する形になっているので、DBをちら見した感じではデータの持ち方が異なる気がします。

 

3.)カスタマイズ内容が散在しそうな感じ。

基本的にWPやMODxはテーマのディレクトリ内を弄ればテーマの作成ができます。これはconcrete5でも同様のようです。

しかし、concrete5はブロックを挿入できること、そしてこのブロックをテーマに合わせたものにカスタマイズ(「カスタムテンプレート」の機能や、そもそもオリジナルのブロックを作成してしまう)するとなると、テーマの置き場所のディレクトリだけでなく、ブロックのディレクトリの中もファイルを設置していくことになります。

そうすると、テーマの一部としてブロックの管理もしないといけない、ということになるかもしれません。

そして、それぞれ操作する場所が変わってくるため、カスタマイズした内容が散在する、ということに…。

 

この辺りはまだガッツリ触っていないので実際とは異なるかもしれませんが、現状の印象としては以上のような感じです。

 

全体を見るとやはり肝はブロックですね。ブロックという概念があるだけで、様々な局面でWPやMODxとかなり考え方を変える必要があります。

自由度が高い分、やりたいことが多いと、自分でカスタマイズする内容が増えたり、プログラム的な要素が増えます(これはWPやMODxでも言えますが)。

そして、最初にサイトマップやできること、やりたいこと、目的、権限などの仕様をきっちり決めておかないとWPやMODxよりも大変なことになりそうな感じがしました。

ただし、それができればより自由度は高くなると思います。何より触っていて楽しいですし。

上手く使えるかどうかはディレクションとプログラムの技術力次第、だと思いました。

 

 

参考

主にconcrete5の概要や他のCMSとの比較、テーマ作成といった部分で参考になりそうなサイトをペタペタ。

タグ: カスタマイズ

 



関連する記事一覧