使用Mustache和WordPress模板化更复杂的if语句

时间:2019-06-05 12:13:38

标签: php wordpress mustache visual-composer wpbakery

我正在使用Visual Composer(现为WPBakery)开发自己的块/简码,并通过Mustache模板进行渲染。

我将参数传递给模板,然后根据这些参数(在Visual Composer中设置)呈现模板。

我有一个订阅服务,并且希望能够根据用户是否登录以及用户是否具有有效订阅来切换页面上的内容。

所以我有一个下拉列表,您可以在其中选择要显示其屏蔽的用户:

  • 为所有用户显示
  • 已登录+活动子
  • 已登录+无效的子
  • 已注销/未注册

这是我要获取参数的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中,我将有两个不同的块–每个块设置为订户或注销。

“欢迎回来” –将为登录用户显示

“立即注册或登录” –将显示给注销用户

但是,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}}

任何输入将不胜感激。

1 个答案:

答案 0 :(得分:1)

Mustache引擎没有您尝试执行的条件语句。

我认为您可以为每个用户组传递一个包含布尔值的数组,然后检查模板中它们是否不为空。

我还认为您可以用三元运算符替换@foreach (var head in Model.Where(c => c.CompanyProductGroupId == ViewBag.PageId && c.ParentId == null)) { <div class="section-title2"> <h2>head.CompanyProductGroupTitle</h2> <br /> <p>head.CompanyProductGroupDes </p> </div> @foreach (var gr in head.CompanyProduct.Where(d => d.CompanyProductGroupId == head.CompanyProductGroupId)) { <div class="wid-50"> <img src="~/companyproduct/image/@gr.CompanyProducGtPic" /> <div class="wid-50-content"> <h2>@gr.CompanyProductTitle</h2> <p> @gr.CompanyProductShortDesc </p> <a href="#">بیشتر</a> </div> </div> } } 语句(这将提供布尔值,因此非常适合该解决方案)。

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
));