concrete5 のサイト構築は道を切り開く醍醐味が味わえる
案外情報が少なくて、concrete5の構築には割りと時間がかかりがちですが、でもそれが面白かったりするわけで。
今回、concrete5でサイトを作る際に躓いたことや小技的なものを共有するために記事にしました。
ちなみにこの記事は、concrete5 5.7.5.9 を対象に作成しています。他のバージョンでも動くかは不明ですが参考にはなるかと思います。
目次
1. 困った:ページタイプのデフォルトブロックが何故か編集できない
2. サブディレクトリにconcrete5をインストールしてルート(/)で公開したい
3. 記事ブロックのWYSIWYGエディタ(Redactor)の挙動を変更したい
4. 確認画面付き問い合わせフォーム(自動返信メールあり)の作成
5.なぜかpage_theme.phpが読み込まれない。bootstrap3のグリッドが有効化できない。(2017年9月27日追記/concrete5 8.1)
困った:ページタイプのデフォルトブロックが何故か編集できない
管理者にも「一般管理者」と「スーパー管理者」の2つがある。スーパー管理者でしか、ページタイプのデフォルトブロックは編集できない
スーパー管理者:一番最初に作成されるユーザー admin ユーザのこと
一般管理者:管理者グループに属している自分で追加したユーザのこと
詳しくは、Katzさん記事が分かりやすかったです。
concrete5 で管理者が複数人いるときの豆知識
http://ja.katzueno.com/2014/11/3288/
サブディレクトリにconcrete5をインストールしてルート(/)で公開したい
やりたいこと
/ ・・・ルートディレクトリにはconcrete5をインストールせず、
/concrete5/ ・・・ concrete5ディレクトリにインストールした状態で、
http://example.com/ にアクセスしても、concrete5を読み出して表示させたい!
理由は聞かないで!そうしたいんだ!
色々と参考になるフォーラムがあったのでそれを参考に実装しました。
フォーラムを読むと、.htaccssだけでも実現可能ということも書かれていましたが、私の場合は、concrete5インストールディレクトリ直下のindex.phpを修正しないと、画像などのパスが「http://example.com/concrete5/・・・」となってしまいましたので、index.phpも修正を行いました。
参考にしたフォーラム記事
https://concrete5-japan.org/community/forums/5-7-x/post-10739/
https://concrete5-japan.org/community/forums/usage/post-2602/
ちなみに動作確認したのはCPIのACE01レンタルサーバです。
修正・作成するファイル
/.htaccess
/concrete5/.htaccess
/concrete5/index.php
/.htaccess の修正内容
ルートディレクトリ直下の.htaccessに以下のルールを記述する。
下2行の「concrete5」となっている部分は、ご自身のインストールしたディレクトリ名に書き換えること。
| RewriteEngine On RewriteBase / RewriteRule ^$ index.php [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !^concrete5/ [NC] RewriteRule ^(.*)$ /concrete5/$1 |
/concrete5/.htaccess の修正内容
concrete5インストールディレクトリ直下の.htaccessに以下のルールを記述する。
最終行の「concrete5」となっている部分は、ご自身のインストールしたディレクトリ名に書き換えること。
| RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /concrete5/index.php/$1 [L] |
/concrete5/index.php の修正内容
concrete5インストールディレクトリ直下のindex.phpを修正する。
require(‘concrete/dispatcher.php’);よりも上に以下の4行を追加する。
それぞれ「concrete5」となっている部分は、ご自身のインストールしたディレクトリ名に書き換えること。
| <?php $_SERVER['REDIRECT_URL'] = str_replace('concrete5/', '', $_SERVER['REDIRECT_URL']); $_SERVER['ORIG_PATH_INFO'] = str_replace('concrete5/', '', $_SERVER['ORIG_PATH_INFO']); $_SERVER['PATH_INFO'] = str_replace('concrete5/', '', $_SERVER['PATH_INFO']); $_SERVER['SCRIPT_NAME'] = str_replace('concrete5/', '', $_SERVER['SCRIPT_NAME']); |
追加するとこんな感じになる。
| <?php $_SERVER['REDIRECT_URL'] = str_replace('concrete5/', '', $_SERVER['REDIRECT_URL']); $_SERVER['ORIG_PATH_INFO'] = str_replace('concrete5/', '', $_SERVER['ORIG_PATH_INFO']); $_SERVER['PATH_INFO'] = str_replace('concrete5/', '', $_SERVER['PATH_INFO']); $_SERVER['SCRIPT_NAME'] = str_replace('concrete5/', '', $_SERVER['SCRIPT_NAME']); require('concrete/dispatcher.php'); |
動作確認する
自分のサイトURLにアクセスして、concrete5がちゃんと読み出されていることを確認するべし。
記事ブロックのWYSIWYGエディタ(Redactor)の挙動を変更したい
記事ブロックのWYSIWYGエディタのRedactor(リダクター)のカスタマイズ方法です。
concrete5 バージョン8からはCKEditorが使われるようになったので5.7までしか役に立たないかもしれません。ごめんなさい。
以下のドキュメントを参考に行います。
https://concrete5-japan.org/help/5-7/recipes/customizing-redactor-editor/
やりたいこと
・自動的にdiv要素がp要素に変換される処理をやめたい
・spanなどのインライン要素が勝手に消去される処理をやめたい
修正・追加するファイル
/application/bootstrap/app.php
/application/src/Editor/RedactorEditor.php
/application/bootstrap/app.php を修正する
/application/bootstrap/app.php ファイルを開き、以下のソースを追加します。
| Core::bindShared('editor', function() { return new \Application\Src\Editor\RedactorEditor(); }); |
/application/src/Editor/RedactorEditor.php を追加する
| <?php namespace Application\Src\Editor; // コアの RedactorEditor クラスを継承してオーバーライド class RedactorEditor extends \Concrete\Core\Editor\RedactorEditor { protected function getEditor($key, $content = null, $options = array()) { // オプションを追加する $options['replaceDivs'] = false; // divがpに変換される処理をストップする $options['removeWithoutAttr'] = false; // spanが消去される処理をストップする // 親クラスの getEditor() メソッドを呼び出す return parent::getEditor($key, $content, $options); } } |
肝になるのが以下の部分。
$options[‘replaceDivs’] = false; // divがpに変換される処理をストップする
$options[‘removeWithoutAttr’] = false; // spanが消去される処理をストップする
それぞれ、
・replaceDivsをfalseにすることでDivが置き換わるのを停止。
・removeWithoutAttrをfalseにすることで属性の付いていないspan等の要素が消されるのを停止。
という設定になります。
確認画面付き問い合わせフォーム(自動返信メールあり)の作成
便利!スイトン(SUITON)確認フォームアドオンを使うと確認画面付きの問い合わせフォームが作れる!
GitHubで公開されているconcrete5 5.7系用確認画面付メールフォーム「suiton_confirm_form_pack」を利用すると確認画面付きのメールフォームが簡単に作れました。
https://github.com/YuzuruSano/suiton_confirm_form_pack
しかも、管理者用の自動返信メールと送信者(問い合わせしてくれた人)用の自動返信メールを別々に設定出来るのも便利でした!
インストール方法・使い方
GitHubにインストール方法や使い方が書かれています。
使う時にカスタムテンプレートの指定を「confirm」に設定することをお忘れなく。私はテンプレート指定が出来ておらず、なんで確認画面が出ないんだ~~!と頭を抱えました。
https://github.com/YuzuruSano/suiton_confirm_form_pack
なぜかpage_theme.phpが読み込まれない。bootstrap3のグリッドが有効化できない
page_theme.php に以下の記述をして、enableGridContainer を呼び出すとエラー画面が表示される。あ、これだけ、concrete5 version 8.1で起きたことです。
page_theme.php
| <?php namespace Application\Theme\MyTheme; use Concrete\Core\Page\Theme\Theme; class PageTheme extends Theme { protected $pThemeGridFrameworkHandle = 'bootstrap3'; } |
テーマのグリッド設置部分で以下のようにエリアを呼び出す。
home.php
| <?php $a = new Area('Main'); $a->enableGridContainer(); $a->display($c); ?> |
エラー発生内容
予期せぬエラーが発生しました。
グリッドフレームワークが見つかりませんでした。グリッドエリアのメソッドには、PageTheme クラスで定義された有効なグリッドフレームワークが必要です。
No grid framework found. Grid area methods require a valid grid framework defined in a PageTheme class.
対処方法
テーマをアンインストールして再度インストールし直す(テーマを切り替えるだけではダメ)とGridフレームワークが認識されてエラーが消えた。
page_theme.phpはテーマのインストール時に保持されるっぽいかも?
まとめ
concrete5を使った制作のお役に立てれば幸いです。
Version 8が出ているのになんで5.7やねんというツッコミが来そうですが。大人の事情をお察しください。
concrete5の最新バージョン「concrete5 Version 8」はExpressと呼ばれるkintoneチックなデータベースを作れる機能が追加されるなど更に進化をしています。
興味がある方は、ぜひ最新バージョンをダウンロードして使ってみましょう!
https://concrete5-japan.org/
2017年1月25日には、8.1.0もリリースされています!
https://concrete5-japan.org/news/concrete5-810/