我有两个变量,一个是$video_id
,其中包含youtube或vimeo视频ID。
另一个是$video_type
,其中包含“youtube”或“vimeo”。
我在php中有两个函数,
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}
答案 0 :(得分: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的源代码,当它期望修饰符时,它不会尝试评估变量。