2012-03-28 82 views
0

ExpressionEngine模板代码:ExpressionEngine - >模板包含(S)

<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']不正确时才嵌入title = login。

知道会话变量甚至没有设置,所以应该显示标题 模板与登录,但它没有显示,除了这种事:

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

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

如果我有回家的segment_1,它显示嵌入title = welcome的标题模板。

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

回答

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:其他不工作的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; ?>} 
+0

[报价]你能不使用{logged_in}和{logged_out}变量?[/ quote]不,我们没有使用EE的会员例程。 – MB34 2012-03-29 16:57:09

+0

我在原始文章中添加了一些编辑来涵盖PHP会话变量的场景。如果您想从您的模板中完全删除PHP,则可以使用会话插件(http://devot-ee.com/add-ons/session-variables-plugin)来获取该值。 – 2012-03-30 13:10:21

+0

我已经下载并安装了会话变量插件。将在今天晚些时候检查代码。 – MB34 2012-03-30 16:32:06