「今、作成中のエントリー」のEIDを表示する
エントリー作成画面で、そのエントリーのEIDを取得する方法です。
グローバル変数に%{EID}があります。
エントリーIDを表示するためのグローバル変数です。
このグローバル変数は、エントリー作成中に使うことができません。
まだエントリーが作成されていないので、エントリーIDが決定していないからです。
エントリー作成中に「このエントリーのEIDが表示できたらいいな」と思ったら、下記のグローバル変数を作ると良いかもしれません。
作り方
グローバル変数を作成するので、Hook.phpを編集します。
下記のコードをコピペしましょう。
位置は
public function extendsGlobalVars(&$globalVars)
がある下です。
public function extendsGlobalVars(&$globalVars) { if( EID ){ $DB = DB::singleton(dsn()); $nextEid = intval($DB->query(SQL::currval('entry_id', dsn()), 'one')) + 1; $globalVars->set('NEXT-EID', $nextEid); } }
これで今作成しているエントリーのEIDを、グローバル変数で表示することができるようになりました。
%{NEXT-EID}
と書けば表示できます。
ちなみにHook.phpは下記の場所にあります。
注意点
このグローバル変数には注意点があります。
- 複数のタブで同時にエントリー作成すると、正しくエントリーIDと一致させることができない。
- 複数のユーザで同時にエントリー作成すると、エントリーIDと一致させることができない。
このグローバル変数は「エントリー作成画面を開いたときの最新のエントリーID」に1加えた数です。
そのため、同じタイミングでエントリー作成画面を開くと、作成時のEIDと一致しなくなります。
そういうわけで、使い方によっては不具合の元になる可能性があります。
今ログインしているユーザのユーザIDと組み合わせたり、時間を表示するグローバル変数と組み合わせれば、こういった問題は解決できるかもしれません。
なおこの方法は、僕が考えた方法ではありません。僕はPHPをほとんどわかっていないので。
アップルプルの伊藤さんに教えてもらった方法を、ブログにまとめているだけです。
バージョン2.1ではこのグローバル変数と同じ表示ができた変数がありました。
おそらく公式の変数ではないと思うのですが、{next_eid}という変数がバージョン2.1にはありました。
CMSをバージョンアップしたところ、この{next_eid}が使えなくなりました。
そのため今回紹介したグローバル変数を使うことになったと言うわけです。
この{next_eid}がいつ廃止されたのかはわかりません。