【问题标题】:ExpressionEngine -> Template inclusion(s)ExpressionEngine -> 模板包含
【发布时间】:2012-03-28 19:57:53
【问题描述】:

ExpressionEngine 模板代码:

<div class="container_16">
  <div class="grid_16">
{if "{segment_1}" == "home"}
  {embed="include/title" title="welcome"}
{if:elseif "{segment_1}" == "login"}
  {embed="include/title" title="login"}
{if:else}
<?php
  if(isset($_SESSION['loggedin'])) {
    if($_SESSION['loggedin']) {
?>
      {embed="include/title" title="welcome"}
<?php
    } else {            
?>    
      {embed="include/title" title="login"}
<?php 
    }
  }
?>          
{/if}
  </div> <!-- grid_16 -->
</div> <!-- container_16 -->

我在上面的代码中遇到的问题是,当 segment_1 为空时, 我希望它仅在以下情况下显示带有嵌入标题=登录的标题模板 $_SESSION['loggedin'] 不正确。

知道会话变量甚至没有设置,所以它应该显示标题 带有登录名的模板,但除此之外没有显示任何内容:

<div class="container_16">
  <div class="grid_16">

  </div> <!-- grid_16 -->
</div> <!-- container_16 -->

如果我有 home 作为 segment_1,它会显示带有嵌入 title=welcome 的标题模板。

有没有更好的方法来做到这一点?

【问题讨论】:

    标签: templates expressionengine


    【解决方案1】:

    不能使用 {logged_in} 和 {logged_out} 变量吗?

    无论哪种方式添加额外的条件:

    {if "{segment_1}" == "home"}
      {embed="include/title" title="welcome"}
    {if:elseif "{segment_1}" == "login" && logged_out}
      {embed="include/title" title="login"}
    {if:else}
      {if logged_in}
        {embed="include/title" title="welcome"}
      {if:else}
        {embed="include/title" title="login"}
      {/if}
    {/if}
    

    在旧版本的 EE 中,我遇到了 if:else 无法处理logged_in 条件的问题,因此您可能只需要替换为:

    {if logged_in}
    {/if}
    {if logged_out}
    {/if}
    

    如果您必须使用会话变量,请确保在模板中打开 PHP,并将解析设置为在 EE 之前。你需要稍微改变条件:

    {if:elseif "{segment_1}" == "login" && "0" == "<?= (isset($_SESSION['loggedin'])) ? "1" : "0"; ?>"}
    

    虽然您可能能够摆脱这种情况(您需要进行测试以确认):

    ... && <?= (isset($_SESSION['loggedin'])) ? true : false; ?>}
    

    【讨论】:

    • [quote]你能不使用 {logged_in} 和 {logged_out} 变量吗?[/quote] 不,我们没有使用 EE 的成员程序。
    • 我在原始帖子中添加了一些编辑,以涵盖您的 PHP 会话变量场景。如果您想从模板中完全删除 PHP,您可以使用会话插件 (devot-ee.com/add-ons/session-variables-plugin) 来获取值。
    • 我已经下载并安装了会话变量插件。今天晚些时候会检查代码。
    • 无法在 EE 之前设置解析,导致问题。如果设置为输出,我会收到以下错误:

      Message: Invalid EE Con​​ditional Variable: {if:elseif "" == "login" || "0" == "= (isset($_SESSION['loggedin'])) ? "1" : "0"; ?>"}

    • “导致问题” - 此处提供更多详细信息会有所帮助。尝试删除 PHP 中的双引号: {if:elseif "" == "login" || "0" == "= (isset($_SESSION['loggedin'])) ? '1' : '0'; ?>"}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多