DEDE テンプレートで php スクリプトを実行し、php 変数を使用する方法
dede テンプレートを使用する場合、dede に対応する関数がない場合、多くの場合、dede データベースの基礎となるフィールドを直接処理する必要があります。私たちはそれに対処する方法を見つける必要があります。
例: データテーブル addonimages の特定のレコードの typeid フィールドを取り出し、typeid を 2 倍した結果をブラウザに出力したいとします。 (注: ここでの typeid 値は 6 です)
最初は次のように書きました:
<body class="index"> {dede:loop table='dede_addonimages' if='aid=94'} [field:typeid runphp='yes'] echo @me*2; [/field:typeid] {/dede:loop} </body>
ブラウザの出力は次のとおりです: 12 6
ここに余分な 6 があるのは、[field:typeid] が最初に内部 php ステートメントを実行し、[/field:typeid] 行に到達すると内部関数を呼び出して直接返すためだと思います。 [ field:typeid] 基になるテンプレートのコンテンツを 12 として直接出力したい場合は、/include/extend.fuc.php ファイル にカスタム関数を追加するだけです。
function abc($val){ return $val*2; }
<body class="index"> {dede:loop table='dede_addonimages' if='aid=94'} [field:typeid function="abc(@me)" /] {/dede:loop} </body>
例:
<body class="index"> {dede:loop table='dede_addonimages' if='aid=94'} [field:typeid runphp='yes'] echo $a=@me*2; [/field:typeid] {/dede:loop} {dede:php}var_dump($a);{/dede:php} </body>
上記の PHP スクリプトの変数を後続の PHP スクリプトで使用したい場合、私は一時的な解決策を思いつきました。それは、グローバル変数を使用してこの問題を解決することです。
<body class="index"> {dede:loop table='dede_addonimages' if='aid=94'} [field:typeid runphp='yes'] $GLOBALS['a']=@me*2; [/field:typeid] {/dede:loop} {dede:php}echo $GLOBALS['a'];{/dede:php} </body>