使用 Mustache 和 WordPress 模板化更复杂的 if 语句
Templating more complex if-statements with Mustache & WordPress
我正在使用 Visual Composer(现为 WPBakery)开发自己的 blocks/shortcodes,并通过 Mustache
模板呈现它们。
我正在向模板传递参数,然后根据这些参数(在 Visual Composer 中设置)渲染模板。
我有订阅服务,希望能够根据用户是否登录以及用户是否有有效订阅来切换页面上的内容。
所以我有一个下拉菜单,您可以在其中 select 为哪些用户显示块:
- 为所有用户显示
- 已登录 + 活跃子
- 已登录 + 不活动子
- 注销/未注册
这是我在其中获取参数的text-block-template.php
:
//returns true/false
$is_active_sub = call_to_sub_api($sessionID);
//Selected in dropdown of which users to show element for
switch ($show_element):
case 'all':
$user_group = 'all_users';
case 'subs':
$user_group = 'subscribers';
case 'logged_out'
$user_group = 'inactive';
//Mustache render function (takes a template + variables & renders the template)
render_mustache_func('text-template.mustache', array(
'text_content' => $text,
'user_group' => $user_group,
'subscriber' => $is_active_sub
))
所以在 Visual Composer 中我会有两个不同的块——每个块都设置为订阅者或注销。
'Welcome back' – 将显示给登录用户
'Sign up or log in now' – 将显示给注销的用户
但是,if 语句似乎无法检查字符串值,我做错了吗?
另外,同一个HTML元素写多次感觉很多余。你会建议另一种解决方案吗?
{{#user_group=all_users}}
<p class="text">{{text_content}}</p>
{{/user_group=all_users}}
{{#user_group=subscribers}}
{{#subscriber}}
<p class="text">{{text_content}}</p>
{{/subscriber}}
{{/user_group=subscribers}}
{{#user_group=inactive}}
<p class="text">{{text_content}}</p>
{{/user_group=inactive}}
如有任何意见,我们将不胜感激。
Mustache 引擎没有您尝试执行的条件语句。
我认为您可以为每个用户组传递一个包含布尔值的数组,然后检查它们在您的模板中是否不为空。
我还认为你可以用三元运算符替换你的 switch
语句(这将给出布尔值,非常适合该解决方案)。
//returns true/false
$is_active_sub = call_to_sub_api($sessionID);
// Usergroups array
$user_groups = [
'all_users' => ($show_element === 'all'),
'subscribers' => ($show_element === 'subs'),
'inactive' => ($show_element === 'logged_out')
];
//Mustache render function (takes a template + variables & renders the template)
render_mustache_func('text-template.mustache', array(
'text_content' => $text,
'user_groups' => $user_groups,
'subscriber' => $is_active_sub
));
{{#user_groups.all_users}}
<p class="text">{{text_content}}</p>
{{/user_groups.all_users}}
{{#user_groups.subscribers}}
{{#subscriber}}
<p class="text">{{text_content}}</p>
{{/subscriber}}
{{/user_groups.subscribers}}
{{#user_groups.inactive}}
<p class="text">{{text_content}}</p>
{{/user_groups.inactive}}
我正在使用 Visual Composer(现为 WPBakery)开发自己的 blocks/shortcodes,并通过 Mustache
模板呈现它们。
我正在向模板传递参数,然后根据这些参数(在 Visual Composer 中设置)渲染模板。
我有订阅服务,希望能够根据用户是否登录以及用户是否有有效订阅来切换页面上的内容。
所以我有一个下拉菜单,您可以在其中 select 为哪些用户显示块:
- 为所有用户显示
- 已登录 + 活跃子
- 已登录 + 不活动子
- 注销/未注册
这是我在其中获取参数的text-block-template.php
:
//returns true/false
$is_active_sub = call_to_sub_api($sessionID);
//Selected in dropdown of which users to show element for
switch ($show_element):
case 'all':
$user_group = 'all_users';
case 'subs':
$user_group = 'subscribers';
case 'logged_out'
$user_group = 'inactive';
//Mustache render function (takes a template + variables & renders the template)
render_mustache_func('text-template.mustache', array(
'text_content' => $text,
'user_group' => $user_group,
'subscriber' => $is_active_sub
))
所以在 Visual Composer 中我会有两个不同的块——每个块都设置为订阅者或注销。
'Welcome back' – 将显示给登录用户
'Sign up or log in now' – 将显示给注销的用户
但是,if 语句似乎无法检查字符串值,我做错了吗?
另外,同一个HTML元素写多次感觉很多余。你会建议另一种解决方案吗?
{{#user_group=all_users}}
<p class="text">{{text_content}}</p>
{{/user_group=all_users}}
{{#user_group=subscribers}}
{{#subscriber}}
<p class="text">{{text_content}}</p>
{{/subscriber}}
{{/user_group=subscribers}}
{{#user_group=inactive}}
<p class="text">{{text_content}}</p>
{{/user_group=inactive}}
如有任何意见,我们将不胜感激。
Mustache 引擎没有您尝试执行的条件语句。
我认为您可以为每个用户组传递一个包含布尔值的数组,然后检查它们在您的模板中是否不为空。
我还认为你可以用三元运算符替换你的 switch
语句(这将给出布尔值,非常适合该解决方案)。
//returns true/false
$is_active_sub = call_to_sub_api($sessionID);
// Usergroups array
$user_groups = [
'all_users' => ($show_element === 'all'),
'subscribers' => ($show_element === 'subs'),
'inactive' => ($show_element === 'logged_out')
];
//Mustache render function (takes a template + variables & renders the template)
render_mustache_func('text-template.mustache', array(
'text_content' => $text,
'user_groups' => $user_groups,
'subscriber' => $is_active_sub
));
{{#user_groups.all_users}}
<p class="text">{{text_content}}</p>
{{/user_groups.all_users}}
{{#user_groups.subscribers}}
{{#subscriber}}
<p class="text">{{text_content}}</p>
{{/subscriber}}
{{/user_groups.subscribers}}
{{#user_groups.inactive}}
<p class="text">{{text_content}}</p>
{{/user_groups.inactive}}