[Concrete5] レイアウトの削除方法

そういえばレイアウトの追加はわかりやすいけど、削除はわかりにくい場所にあったなぁと思いまして。
Concrete5は自由度が高くて使いやすいのだけど、やはりまだまだwordpressに比べると人口的にも少ないし、ナレッジの蓄積が足りないなぁと思います。5.6から5.7に変わった時点で5.6までのノウハウやプラグインも使えなくなってしまって、かなり苦労しました。

下記に、くどくどとスクリーンショットを交えて書いてありますが、非常に分かりづらいので、サクッと解決方法を知りたい方は、動画キャプチャをご覧ください。

動画の流れを文章とスクリーンショットで記載しているだけですので動画を見て解決したら読む必要はないです。

レイアウトの追加は簡単

レイアウト機能の追加はエリアからすぐに選択できるので簡単に追加できます。
追加

レイアウト

こんな感じですぐに2カラムや3カラムの追加が可能です。

そして、削除をしたい時に削除のメニュー項目が見つからないことに気づきます。

エリアのメニューを開いても、「ブロックを追加」「エリアのデザインを編集」「レイアウトを追加」の三つしかありません。
エリア

レイアウトのメニューを開くと、エリアのメニューに加えて、「コンテナーのレイアウトを編集」「レイアウトデザインを編集」「レイアウトをプリセットとして保存」「プリセットを管理」の4項目が表示されます。
レイアウトメニュー

直感的に操作が可能なConcrete5なら、「レイアウトデザインを編集」だろうと、思って選択すると何やらエディタが出てきて、「どうやらここでは削除ができないなぁ、つまりConcrete5でレイアウトを一旦追加してしまうとレイアウト自体を削除することはできないのだろう…」と思ってしまいがちです。
レイアウトデザインを編集

レイアウト自体の削除は、「コンテナーのレイアウトを編集」

コンテナー

直感的にわかりにくい名称の「コンテナーのレイアウトを編集」、これはレイアウトがカラムになっているものを包括するブロックという意味として捉えられるので、このメニューを選ぶと、ゴミ箱のアイコンがあるので、ここからレイアウト自体の削除が可能です。
コンテナ編集

ウェブカメラを隠すNopeを買ってきた

最近Macのカメラが乗っ取られるという記事をよく見かけるので、僕のひどい顔を世間様にお見せするわけにはいかないので、いっそシール(ウェブカメラ目隠しシール
)で塞いでしまうことも考えていたのですが、お客さんとビデオ会議するのにも使うので、ちゃんと隠せて、さっと外せてすぐ使える、みたいなものがいいかと思い、カメラを隠す「Nope」というスタイリッシュな磁石を買ってきました。

参考:「ウェブカメラをスタイリッシュに隠して盗撮を防止する「Nope」

2016-10-03-16.41.09

秋葉館というお店で、iMac用が1組、iPadやMacbook用の2組の3組がセットになっていて1,242円でした。

iMac用とiPad用の違いは、磁石の大きさくらいです。
二つの磁石の片方に両面シールを貼って固定し、もう片方を目隠し用として使います

2016-10-03-17.08.39

実際に、Photo Boothを使って試してみたところ、貼り付けた位置が少しずれてしまって少し角が見えてしまいました。

スクリーンショット 2016-10-03 17.13.59

なお、まぁ顔が見えないならいいやと妥協しました。
固定側の磁石をちゃんと貼れば、しっかり隠れるとおもいます

Adobe AnimateCCでサクッとHTML5 canvasアニメーションを作れた

Adobe AnimateCCって?

Adobe AnimateCCは昔ウェブ界を席巻していた、旧Flashです。
Flashと同じ感覚で、canvasアニメーションが作れるみたいです。
僕はスクリプト系はてんでダメなんで、GUIでcanvasアニメーションがサクッと作れるのは非常に助かります。
ただ、現状使用している人自体が少なく、スクリプトの記述方法action scriptと若干変わってたりしてノウハウがあまりなくて独学で勉強するしかないのはちょっと辛いところだと思います。時間をかけてじっくり学んでいこうと思います。

ただ、そのままだとIE10で表示されないので、create.jsのdevicePixelRatioを調整する必要があるそうです(元同僚に教えてもらった)。
animateでパブリッシュした際に出力されるscriptのvar canvas, stage, exportRoot;の前に、以下の記述をすればIE10でも表示できます。

if("devicePixelRatio" in window === false) {
	window.devicePixelRatio = 1;
}

一応検証した限りでは、以下のブラウザで動きました。

  • Chrome52+
  • Firefox48+
  • Safari9+
  • IE10+

canvasなのでスマホでも問題ないはずです。

[Mac]フュージョンドライブをフォーマットしたらSSDとHDDに分かれてしまった件

年末に仕事を片付けた途端に風邪をひいてしまい、意識朦朧としながらmacのメンテをしようと悪戦苦闘しておりました。

どういう問題があったのかという経緯を説明しますと、以下のような状態でした。

  1. 11月にiMac 2015 Lateモデルを買った
  2. time machineバックアップから古いMacのデータを移行した
  3. 外部ディスプレイをthunderboltに繋いでいるとOSが起動しない

appleのサポートに電話して、買ったばっかなのにおかしいだろ!と話して色々電話でサポートしてもらってたんですが、原因はどうやらカスペルスキーか、何かのドライバなんじゃないかというところまで絞れ、試しに別のパーテーションでOSをインストールしたら問題なく起動するということまでわかりました。

カスペルスキーをアンインストールしたり、ドライバを削除したりしてみたのですが、どこかしらに残っているキャッシュなのか、何のファイルが影響しているか不明のままで直すことができなかったので、仕事が片付いたタイミングで大掃除しようと思い、心機一転クリーンインストールして新しい気持ちで新しい年を迎えようと決断しました。

まず、今のOSをフォーマットしようとしたのですが、フォーマット自体ができず、強制的にフォーマットをかけました。
起動時にcmd+Rでリカバリモードを立ち上げ、ターミナルでドライブの名前を表示。

diskutil cs list

すると、「Logical Volume Group」にA2AB~~~~~みたいな文字列が表示されます。
disk

この、A2AB~~~~~みたいな文字列を指定することで、フォーマットができました。

diskutil cs delete A2AB~~~~~

disk2

ここまでは良かったんです。

フォーマット自体は出来たのですが、フュージョンドライブというのは、そもそもSSDとHDD、二つのドライブを論理的に結合させて構成されているということに気づきます。
そしてディスクユーティリティを開くと、SSDとHDDにわかれてしまった状態でどちらかにOSをインストールしなければならないような状況になってしまいました。
※この時点でテンパってしまってスクリーンショットや写真を残しておりません。

調べると、ディスクユーティリティを開いた時点で、「SSDとHDDにエラーがあるから修復しますか?」的なダイアログが表示され、修復をすればもとのフュージョンドライブに戻るらしいのですが、僕の場合はSSDとHDDにわかれている状態がさも当たり前のように振舞われ、修復自体ができず八方塞がりだと確信しました。

色々調べた結果、複数のドライブをフュージョンドライブにする方法もあるらしく、以下のようにターミナルへ入力しました

diskutil cs create FusionDrive disk0 disk1

作成した論理グループのUUIDを確認します

diskutil cs list

そして、UUIDを入力して論理ボリュームを作成しました

diskutil coreStorage createVolume FD202F33-B382-451E-9358-09CB4D684E8B jhfs+ "Macintosh HD" 100%

本当はスクリーンショットを残してここに入れたかったのですが、なにぶん風邪で頭が回らなかったのと、テンパっていたため拙い文章で申し訳ありません。

これで元通り。ディスクにOSを再インストールして今に至ります。

[concrete5]concrete5.6はphp5.6のサーバだと動かなかった

スクリーンショット 2016-01-04 4.33.46

もともとphp5.3の環境で動いていたconcrete5.6を、php5.6が動いているサーバーに移行したところ、
こんなエラーが出て使えなくなってしまったので、エラー文の部分をコメントアウトしたら直った。

/concrete/libraries/3rdparty/Zend/Cache/Core.php on line 361

 if ($this->_options['automatic_serialization']) {
            // we need to serialize datas before storing them
            $data = serialize($data); 
        } 


 if ($this->_options['automatic_serialization']) {
            // we need to serialize datas before storing them
            // $data = serialize($data); 
        } 

原因は調査中。

あんまりコアファイルをいじりたくないけど、もう5.6をこれ以上アップデートすることもないし、サイトリニューアルの時にはconcrete5.7でやりましょうと提案すれば問題はなさそう。

余談。5.6がゲシュタルト崩壊しそう

ブログ復帰 新年のご挨拶

新年あけましておめでとうございます。

昨年、夏頃にとある案件で、wordpressのテストがてら自分のブログをアップデートしたところ、管理画面のすべてのjavascriptが全滅して投稿が一切出来なくなる状態に陥り、その後は多忙のため、自分のブログに関してはずっと放置していました。

さらに年末にサーバのphpをアップデートしたところ、メールサーバーが死んだので心機一転として新しいサーバーを借り、そこへ環境構築し、新たな年を新たな環境で迎えることにしました。

見た目はそのままですが、中身は新たにこれからまたブログは再開しようと思っています。

本年もどうぞよろしくお願いいたします。

[Concrete5]上級権限モードとは別に、テーマ側でユーザ判別したい時。

昨日Concrete5部で上級権限モードの話をしていたので、僕も何か書こうと思います。

上級権限モードは、ページの編集権限から、個別のエリアの編集や追加権限など、非常に事細かに設定ができるすぐれものなのですが、設定が非常に大変です。権限の設定だけでひと財産築けるんじゃないかなって思うくらい大変です。ジョークです。

そして、今回は上級権限モードとは関係の無い話でした。

一体なにがしたいのか

下記のコードを実際に使っているのですが、一体何をしようとしているのか。
「編集モードだったら+ユーザーがadminだったら、エリアを表示する」
という書き方をしています。

理由は以下の通り

  • スマホ版のテーマが別にある(レスポンシブではない)。
  • スマホ版の編集もPCで行う。
  • PCとスマホで表示する内容が異なる。
  • このエリアが編集できるのは、「admin」さんだけ。

つまり、レスポンシブではなく、モバイル用のテンプレートを別で用意していて、それぞれに別の情報を表示したい、でもエリアを表示できるのはadminさんだけに限定したい、というとてもニッチな状況で下記のコードで対処しました。

PC側のテンプレート

/themes/pc/elements/header.php
<?php
if ($c->isEditMode() && $u->getUserName() == 'admin') {
global $c;
$a = new GlobalArea('sp area');
$a->display($c);
} else {
} ?>

スマホ側のテンプレート

/themes/sp/elements/header.php
<?php
$a = new GlobalArea('sp area');
$a->display($c);
?>

それで、できたあとに気づいたのですが、ブロックテンプレートにmobile_detectを使うとか、そもそもadminさんしか編集できないならテーマにハードコーディングしてしまえばよかったなと思いました。

追記

ツイッターでacliss19xxさんから教えてもらいました!

「admin」さんだけだったら、スーパーユーザーだけって書いた方がいいですね。

PC側のテンプレート

/themes/pc/elements/header.php
<?php
if ($c->isEditMode() && $u->isSuperUser()) {//←ここ
global $c;
$a = new GlobalArea('sp area');
$a->display($c);
} else {
} ?>

[Concrete5]ログイン時のアップデート画面を非表示に

バージョン5.6.x
Concrete5はログイン時に、アップデート画面が表示されますが、お客さんに納品後に消して欲しいという要望をいただきまして。
重要な情報が載っていることもあるので、あまり消さない方がいいんですが、消し方はありまぁす。

/config/site.phpに一行追加するだけ。

define('ENABLE_NEWSFLOW_OVERLAY', false);

こんな感じ。

[Mac]メッセージ.appでFacebookメッセージを使う

Facebookメッセージのあの「ぽろんっ♪」って通知音がきらいです。

いや、冗談はさておき、FacebookのメッセージはブラウザとiOS/Androidで利用できるから便利だよねーって思ってたんですが、集中して仕事しているときに「ぽろんっ♪ぽろんっ♪ぽろんっ♪ぽろんっ♪ぽろんっ♪ぽろんっ♪」って来ると、資料用に開いているブラウザタブを切り替えたり、メッセージ用のタブを別ウインドウに分けて最小化しておいたりして、Facebookページをわざわざ開かなければならない状況に陥って、便利なはずが逆に自分の行動をFacebookメッセンジャーに支配されているようで逆に非効率的なのかと思い始めてきました。

スマホアプリみたいな、ブラウザを使用しないものはないのか

AppStoreを覗いたら、いくつかアプリはありました。

これらのアプリを購入して使用すればブラウザのリソースをFacebookに割く必要がなくなるのでこの記事は終了なんですが、個人的にはすでにSkypeとメッセージ.appを常駐起動させているので、さらにもう一つメッセージアプリを起動させるのもなんだかなーって気分です。

Skypeかメッセージ.appで使えないか

正直なところ、いつも使ってるSkypeかメッセージ.appで使えたら楽です。使い慣れているのもあるし。

SkypeはFacebook

最近のSkypeはデフォでFacebook連携機能がついているので、Facebookアカウントのメアドとパスワードを入れればすぐに使えるようになります。

うーん広告が邪魔だなぁ。。

メッセージ.appで使う

Skypeは簡単に使えるけど、タイムラインにかなり大きいバナー広告が出てきて創作意欲が萎えるので、Macのデフォルトでついているメッセージ.appを使おうと思います。
メッセージも結構簡単に設定できます。

1.メッセージの環境設定をひらいて、「アカウント」を選択します。

2.アカウントを追加(左下にある「+」をクリック)

3.アカウントの種類を、「その他のメッセージアカウント」を選択

4.「Jabber」を選択

5.アカウント名にFacebookアカウント名に「@chat.facebook.com」をくっつけたアドレスを入力。パスワードはFacebookのパスワードを入力。サーバやポートはそのままで大丈夫みたいです。

以上。これで、Facebookメッセージがメッセージ.appで使用できるようになりました。

ただ、通常のMMS(iMessage)のように画像ファイルを送る事はできないようです。

[追記]
ちょっと使ってみてわかったのですが、facebookのメッセンジャーでやり取りしたチャットの自分の投稿はメッセージ.appに反映しないようです。もう諦めて専用アプリ買ったほうがいいかもしれません…。

[Concrete5]ログイン時や編集モード時で表示を切り替えよう[メモ]

バージョン:5.6.3.1

自分用メモ的な。

ログインしている or していない

ログインして”いる”時だけ表示

ログインは登録ユーザーしかできないので、クライアントへのメモ的な扱いで残しておくような用途で使えます。

<?php
$u = new User();
if ($u->isRegistered()) { ?>
ここに書いたものはログインして"いる"時だけ表示されます
<?php } ?>

ログインして”いない”時だけ表示

ログインしていない時なので、一般のユーザーが閲覧する際にだけ表示するものを指定できます。
あんまり意味がないと思われますが、最近使いました。

<?php
$u = new User();
if (!$u->isRegistered()) { ?>
ここに書いたものはログインして"いない"時だけ表示されます
<?php } ?>

編集モード or 非編集モード

編集モード時だけ表示

以前、[Concrete5]エリア内にブロックがある時にだけ表示する[メモ]でも使用しました。
編集モード時だけに表示したいものは結構あります。編集時にはヘッダーにメニューバーが表示されるので、メニューバー分の余白を開けるのにもデフォルトのテーマで設定されていますよね。

<?php if ($c->isEditMode()) { ?>
ここに書いたものは編集モード時だけ表示されます
<?php } ?>

非編集モード時だけ表示

編集モードで見えず非編集モードで見えるということは、編集モードでどう頑張っても消したりできないという、クライアントの混乱の元になるのでやめましょう。

<?php if (!$c->isEditMode()) { ?>
ここに書いたものは非編集モード時だけ表示されます
<?php } ?>