如何创建一个可更改页面内容的开关?

时间:2019-03-19 02:02:40

标签: html drupal switch-statement twig drupal-8

我有一个Drupal网站8,我使用Twig自定义页面。

我创建了2个区块视图:

  • drupal_view('message_activity_stream_timeline_public', 'block_1') }}
  • drupal_view('message_activity_stream_timeline_private', 'block_1') }}

在我的主页上,我想设置一个从block_1到block_2的开关,反之亦然。

当开关位于PUBLIC位置时,它必须显示块drupal_view('message_activity_stream_timeline_public', 'block_1') }}

当开关位于PRIVÉ位置时,它必须显示块drupal_view('message_activity_stream_timeline_private', 'block_1') }}

不必记住位置。

我该怎么做?

这是我的页面:

           <div class="home-page-header-bottom">
              <h5>Fil d’actualité <button type="button" class="btn btn-default btn-tooltip" data-toggle="tooltip" data-placement="bottom" title="Le fil d'actualité public affiche en temps réel toute l'activité publique qui se déroule sur le site. Le fil d'actualité privé affiche en temps réel uniquement l'activité publique des pages que vous aimez et l'activité privée liée à votre compte. Lorsque vous êtes connecté, vous pouvez basculer d'un fil d'actualité à l'autre."><i class="fas fa-info-circle fa-lg"></i></button></h5>
              <div class="toggle-on-off">
                <span class="toggle-on-off-public">PUBLIC</span>
                <i class="fas fa-toggle-on fa-rotate-180 fa-3x"></i>
                <span class="toggle-on-off-prive">PRIVÉ</span>
              </div>
            </div>
          </div>

          <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 home-page-footer">
            <div class="col-md-12 timelines">
              <div class="main-timeline">
                {{ drupal_view('message_activity_stream_timeline_public', 'block_1') }}
                {{ drupal_view('message_activity_stream_timeline_private', 'block_1') }}
              </div>
            </div>
          </div>

您能告诉我如何在不重新加载页面的情况下获取方法吗?

1 个答案:

答案 0 :(得分:0)

您可以设置其他变量,以使用hook_preprocess_HOOK()发送到模板,然后在树枝条件中使用该值。

您还需要考虑缓存,否则Drupal的动态页面缓存可能会在首次需要时存储呈现的页面片段,并将其存储给所有以后的用户。

function MY_MODULE_hook_preprocess_ELEMENT(&$variables) {
  // Add a variable to send to the template.
  $variables['new_variable'] = TRUE;

  // Add the appropriate cache contexts so that the template is re-rendered when needed.
  $variables['#cache']['contexts'][] = 'session';
}