「今、作成中のエントリー」の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}がいつ廃止されたのかはわかりません。


投稿者名 すずきカレー 投稿日時 2018年02月24日 | Permalink