Craft CMS プラグインの作法(セクション関連)

Craft CMSのプラグインを書くときの作法

スラッグでセクションを取得する


URLのslugでセクションからエントリーを1件取得する方法。
$criteria = craft()->elements->getCriteria(ElementType::Entry);
$criteria->section = 'sampleSection';
$criteria->slug = 'test-slug';
$entry = $criteria->first();

sampleSectionのsampleTagsフィールドでタグ検索した結果を取得する


$criteria->searchを使います。twigで記述した場合
{% set entries = craft.entries.section('sampleSection').search('sampleTags:test') %}
と等価です。
$criteria          = craft()->elements->getCriteria(ElementType::Entry);
$criteria->section = "sampleSection";
$criteria->search = "sampleTags:test";
$entries = $criteria->find();

新規にセクションを作成する


プラグインでセクションの新規エントリーを保存する方法。
$currentUser = craft()->userSession->getUser();
$section = craft()->sections->getSectionByHandle('sampleSection');
$section->getEntryTypes();
$entry = new EntryModel();
$entry->sectionId = $section->id;
$entry->enabled = true;
$entry->authorId = $currentUser->id;
// ToDo : セクションのフィールドを埋める
$success = craft()->entries->saveEntry($entry);

セクションのSuper Tableフィールドを更新する


new1,new2,new3…のインデックスを持った配列を設定します。新規作成時、更新時どちらも同じ方法です。
$field = craft()->fields->getFieldByHandle("sampleSuperTableField");
$blockTypes = craft()->superTable->getBlockTypesByFieldId($field->id);
$blockType = $blockTypes[0];
$superTableData = array();

$tableValues = array(
'new1' => array(
'sampleTextField' => 'foobar',
'sampleAssetFileField' => $assets,
),
'new2' => array(
'sampleTextField' => 'foobar',
'sampleAssetFileField' => $assets,
),
);

foreach($tableValues as $key => $value) {
$superTableData[$key] = array(
'type' => $blockType->id,
'enabled' => true,
'fields' => $value,
);
}
$entry->setContentFromPost(array("sampleSuperTableField" => $superTableData));

$success = craft()->entries->saveEntry($entry);

アセットフィールドの更新


アセットフィールドはIDの配列なので、そのように設定します。タグフィールドやカテゴリフィールドも基本的に同じです。
$entry->getContent()->setAttributes(array(
"sampleAssetField" => array($assetModel->id),
));
$success = craft()->entries->saveEntry($entry);


Razer Tiamat 7.1 (v1) イヤーパッドを交換

Razer Tiamat 7.1 (V1) のイヤーパッドが加水分解でボロボロになってしまったので交換しました。ほぼ毎日使っている(仕事の時も通話用に使っている)ので、痛むのが早いです。

amazonで探すと、Tiamat 7.1用のイヤーパッドはノーブランド品が、かなり多く出品されているので、とりあえず適当に選んでみました。

Tiamat 7.1のイヤーパッドは樹脂製のピンで固定するようになっているんですが、購入したイヤーパッドはピンを通す穴が無いので、自分で開ける必要があります。ドライバーセットのキリで、適当に穴を開けて取り付け。

純正のイヤーパッドと比べると、若干小ぶりでスポンジの量が多くパンパンですが、装着感はあまり変わらないので良しとします。

GMYLE スマートコンセントの設定(IFTTT編)

ということで、IFTTTのレシピも作りました。

Maker Channelでwebhookを有効にして、トリガーをwebhookに、thatにはSmartlifeのturn-onとturn-offを設定しています。

ASUSモニターの電源を切るレシピ



win10にインストールしているGit Bashでcurlを叩いてみます("your-key"には自分のキーを入れます)。
$ curl -X POST https://maker.ifttt.com/trigger/asus-off/with/key/your-key
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 48 100 48 0 0 48 0 0:00:01 0:00:01 --:--:-- 38
Congratulations! You've fired the asus-off event

だいたい、3〜5秒後に電源がOFFになりました。

これをタスクスケジューラーを使って、スリープから復帰時に実行すればいいわけです。
ですが、一旦、電源OFFにしてONにする必要があり、トータル10秒くらいかかりそうなので…

やめました。

GMYLE スマートコンセントの設定(アプリ編)

割と分かりにくい設定方法だったので、手順をメモ。

操作用アプリをインストール


App Storeの場合、スマートコンセントを操作するアプリはコレ。



デバイスの登録


アカウントを作ってログインしたら、Add Deviceでデバイスを追加します。
イージーモードとAPモードのどちらかで接続できるとありますが、今回はイージーモードで登録しました。

【事前準備】
1)予め、2.4GHzのWi-FiアクセスポイントにiPhoneを接続しておきます(11b/g/nのいずれか)。
2)スマートコンセントを電源に接続して、電源ボタンを5秒長押しすると、2秒に1回電源ランプが点滅するようになります。アプリの画面上でインジケーターが点滅しているので、同じタイミングで点滅するまで、5秒長押しをします。



Wi-Fiのアクセスポイントのパスワードを入力します。ここで入力したパスワードがスマートプラグに設定されて、アクセスポイントに自動接続できるようになります。

恐らく、最初に2.4GHzのアクセスポイントに接続しないといけないのは、スマートコンセントに接続先を知らせるためのようです。私の場合、デバイス追加後にiPhoneのWi-Fiアクセスポイントは5GHz帯に戻しています。同じノードなら別のアクセスポイントからでも普通に操作できます。



接続が完了すると、デバイスが表示されるので、適当に名前を付けます。



デバイスの操作



デバイスの一覧が表示され、状態を確認できます。



でかいコンセントをタップすると操作ができます。

オフ状態


オン状態


登録が面倒ですが、一度登録すれば、ほぼタイムラグ無しで電源操作をできるようになります。
スマートコンセントはケーブルボックス内に収納していますが、特に反応に問題はありませんでした。


Dyson V8 Animalpro SV10 AN COM2

Dyson DC12plus アニマルプロを購入したのが2007年12月なので、丸10年使ってきて、いまも現役稼働中です。

2年前くらい前からコードレスのV8 アニマルプロをいつ購入するかタイミングを見計らっていて、完全に失敗しました。

一時期は5万円台で変えたV8アニマルプロですが、途端に在庫不足で変えなくなり、その後マイナーチェンジ+円安の影響で7〜8万円台をいったりきたり。また、夏頃になったら新モデル前に投げ売りになるのかもしれませんが、もう我慢できずに購入することにしました。

もともとDC12plusを購入したのも、愛犬ココ(パピヨン♂)の毛が、当時使っていた掃除機では吸い込むことができなかったことが理由だったのですが、そのココも15才になり、最近は目がよく見えないようで、餌あちこちに食べこぼすようになり、毎回掃除が大変。

吸込仕事率だけで比較すると、DC12plusは210W、V8は110Wと約半分なので、性能自体にあまり期待はしていませんが、掃除機の稼働率を上げるなら、やっぱりコードレスのほうがいいかな、と思います。