1

2 つの変数があります。1 つは$video_idyoutube または vimeo ビデオ ID を含む変数です。もう 1 つは$video_type、「youtube」または「vimeo」のいずれかを含むものです。

私はphpに2つの関数を持っています、
youtube_embed($id, $width, $height)
vimeo_embed($id, $width, $height)

私がやりたいのは、この関数を呼び出して、$video_id

私はそれをできた:

{if $video_type == 'youtube'}
    {$video_id|youtube_embed:123:123}
{elseif $video_type == 'vimeo'}
    {$video_id|vimeo_embed:123:123}
{/if}

しかし、次のような変数修飾子名を使用できるかどうか疑問に思っています

{$video_id|`$video_type`_embed:123:123}
4

1 に答える 1

1

できたとしても、それは悪い考えです。

次のようにすれば、コードの読み取り、維持、および将来の拡張がより明確になります。

{$video_id|video_embed:$video_type:123:123}

次に、PHP で $video_type をチェックし、テンプレート レベルで処理しようとするのではなく、適切な修飾子に渡します。

function video_embed($video_id, $video_type, $x, $y){
    switch($video_type){
        case('youtube'):
            youtube_embed($video_id, $x, $y);
            break;

        case('vimeo'):
            vimeo_embed($video_id, $x, $y);
            break;

        default:
            throw new UnsupportVideoTypeException($video_type);
    }
}

必然的に新しいビデオ タイプをサポートする必要がある場合、ビデオを表示するすべてのテンプレートを編集するのではなく、PHP の video_embed 関数にコードを追加するだけで済みます。

記録のために、いいえ、それは可能ではないようです。Smarty のソース コードを見ると、修飾子が必要なときに変数を評価しようとはしません。

于 2012-12-11T03:53:36.107 に答える