Шаблонирование более сложных if-выражений с помощью Mustache & WordPress - PullRequest
0 голосов
/ 05 июня 2019

Я использую 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 у меня было бы два разных блока - каждый установлен либо на подписчика, либо на выход из системы.

«Добро пожаловать назад» - будет отображаться для вошедших в систему пользователей

«Зарегистрироваться или войти сейчас» - будет отображаться для вышедших из системы пользователей

Однако, если операторы, кажется, не в состоянии проверить строковые значения, я делаю это неправильно?

Кроме того, это очень избыточно, чтобы писать тот же элемент 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 Ответ

1 голос
/ 05 июня 2019

У движка Усы нет условных выражений, как вы пытались сделать.

Я думаю, вы могли бы передать массив, содержащий логическое значение для каждой вашей группы пользователей, а затем проверить, не являются ли они пустыми в вашем шаблоне.

Я также думаю, что вы можете заменить ваш оператор 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}}
...