【问题标题】:ExpressionEngine: Single entry templateExpressionEngine:单条目模板
【发布时间】:2012-10-22 14:51:52
【问题描述】:

我创建了一个名为信用卡的频道。因此,我创建了一个名为 credit-cards 的模板组,其中包含一个循环遍历所有信用卡并输出它们的索引。这方面工作正常,这是我在 credit-cards.group 文件夹中的 index.html 文件的代码:

         {exp:channel:categories category_group="1" style="linear" dynamic="no"}
                    <div class="card-list tab" id="{category_url_title}">
                        <h2 class="category-title">{category_name} Credit Cards</h2>
                        <div class="cards">
                            {exp:channel:entries channel="credit_cards" category="{category_id}" dynamic="no"}
                                <article>
                                    <h4><a href="{url_title_path='credit-cards'}">{title}</a><span class="web-exclusive">MBNA Website Exclusive</span></h4>
                                    <ul>
                                        <li class="col-img">
                                            <a href="{url_title_path='credit-cards'}"><img width="116" height="84" alt="MBNA Platinum Credit Card" src="../lib-ui/img/cards/core/core_116x84/mbna_platinum_card_116x84.png"></a>
                                        </li>
                                        <li class="col-bt">{balance_transfer_rate}</li>
                                        <li class="col-purchases">{purchases_rate}</li>
                                        <li class="col-features">{key_features}</li>
                                        <li class="col-apply">
                                            <a rel="blank" class="btn btn-success" href="{apply_url}">
                                                Apply Now<span class="hide"> for the {title}</span>
                                            </a>
                                            <a class="cta" href="{url_title_path='credit-cards'}">
                                                Learn more<span class="hide"> about the {title}</span>
                                            </a>
                                            <label class="mbna-credit-card checkbox" for="compare_1">
                                                <span tabindex="0">
                                                    <input type="checkbox" value="mbna-credit-card" id="compare_1">
                                                </span>
                                                <span class="hide"> Add the {title} to </span>Compare
                                            </label>
                                        </li>
                                    </ul>
                                    <p class="rep-ex">{representative_example}</p>
                                </article>  
                            {/exp:channel:entries} 
                        </div>
                    </div>
                {/exp:channel:categories}

所以我的问题是这样的。假设我有一张名为 Visa 信用卡的信用卡,为其生成的 url 是 /credit-cards/visa-credit-card。当我单击此链接时,虽然我只是再次获得我的索引页面。我在我的组中创建了另一个名为 single.html 的模板文件,其中包含输出一张信用卡的代码。看起来像这样:

<h1>Credit Card Page</h1>
{exp:channel:entries channel="credit_cards" limit="1"}
{if no_results}
{redirect="404"}
{/if}

那么如何让它使用这个模板文件而不是单个条目呢?

【问题讨论】:

    标签: php codeigniter expressionengine


    【解决方案1】:

    这实际上是一个很容易解决的问题。您正在做的是您的代码的第 5 行无法判断它是否应该限制条目信息。使用dynamic='no',您已经说过“EE,您无需使用此处的 URL 来确定限制哪些条目”

    我的建议是以下代码:

    {if segment_2 == ""}
        {exp:channel:categories category_group="1" style="linear" dynamic="no"}
            <div class="card-list tab" id="{category_url_title}">
                <h2 class="category-title">{category_name} Credit Cards</h2>
                <div class="cards">
                    {exp:channel:entries channel="credit_cards" category="{category_id}" dynamic="no" disable="category_fields|member_data|pagination|trackbacks"}
                        <article>
                            <h4><a href="{url_title_path='credit-cards'}">{title}</a><span class="web-exclusive">MBNA Website Exclusive</span></h4>
                            <ul>
                                <li class="col-img">
                                    <a href="{url_title_path='credit-cards'}"><img width="116" height="84" alt="MBNA Platinum Credit Card" src="../lib-ui/img/cards/core/core_116x84/mbna_platinum_card_116x84.png"></a>
                                </li>
                                <li class="col-bt">{balance_transfer_rate}</li>
                                <li class="col-purchases">{purchases_rate}</li>
                                <li class="col-features">{key_features}</li>
                                <li class="col-apply">
                                    <a rel="blank" class="btn btn-success" href="{apply_url}">
                                        Apply Now<span class="hide"> for the {title}</span>
                                    </a>
                                    <a class="cta" href="{url_title_path='credit-cards'}">
                                        Learn more<span class="hide"> about the {title}</span>
                                    </a>
                                    <label class="mbna-credit-card checkbox" for="compare_1">
                                        <span tabindex="0">
                                            <input type="checkbox" value="mbna-credit-card" id="compare_1">
                                        </span>
                                        <span class="hide"> Add the {title} to </span>Compare
                                    </label>
                                </li>
                            </ul>
                            <p class="rep-ex">{representative_example}</p>
                        </article>  
                    {/exp:channel:entries} 
                </div>
            </div>
        {/exp:channel:categories}
    {/if}
    {if segment_2}
        {exp:channel:entries channel="credit_cards" limit="1" disable="category_fields|member_data|pagination|trackbacks"}
            <article>
                <h4><a href="{url_title_path='credit-cards'}">{title}</a><span class="web-exclusive">MBNA Website Exclusive</span></h4>
                <ul>
                    <li class="col-img">
                        <a href="{url_title_path='credit-cards'}"><img width="116" height="84" alt="MBNA Platinum Credit Card" src="../lib-ui/img/cards/core/core_116x84/mbna_platinum_card_116x84.png"></a>
                    </li>
                    <li class="col-bt">{balance_transfer_rate}</li>
                    <li class="col-purchases">{purchases_rate}</li>
                    <li class="col-features">{key_features}</li>
                    <li class="col-apply">
                        <a rel="blank" class="btn btn-success" href="{apply_url}">
                            Apply Now<span class="hide"> for the {title}</span>
                        </a>
                        <a class="cta" href="{url_title_path='credit-cards'}">
                            Learn more<span class="hide"> about the {title}</span>
                        </a>
                        <label class="mbna-credit-card checkbox" for="compare_1">
                            <span tabindex="0">
                                <input type="checkbox" value="mbna-credit-card" id="compare_1">
                            </span>
                            <span class="hide"> Add the {title} to </span>Compare
                        </label>
                    </li>
                </ul>
                <p class="rep-ex">{representative_example}</p>
            </article>  
        {/exp:channel:entries} 
    {/if}
    

    请注意,这不是 100% 准确的,因为我删除了您的 exp:channel:categories 标记,但这应该会根据您指定的缩短的 URL 为您提供限制的结果。

    【讨论】:

    • 您好,感谢您的帮助。我毫不怀疑这会起作用,但它仍然意味着所有代码都在同一个文件中。这不是一个非常干净的解决方案,没有办法将它们分开,以便它查看 index.html 的索引页面和 single.html 的单个条目?
    • Hey Geoffs,如果你想保留“credit-cards/visa-credit-card” url 结构而不是“credit-cards/single/visa-credit-card”,Chris 的回答就是这样去。 Chris 基本上是在检查 url 是否在 url 中的“credit-cards/”之后包含一个值,然后切换到显示单个条目。您可以使用 sn-p 或 embed 将代码拆分到不同的文件中,以保持它看起来干净。
    • 如果你想让模板更干净,你可以使用 sn-ps 删除主要内容块以分隔文件(尽管你需要像 Mountee 或 SnippetSync 这样的插件将它们保存为文件)。如果segment_2/segment_2=="",不要这样做,一定要看看Switchee。为 if/if not 做单独的(简单)条件并不像 if:else 之类的复杂条件那么糟糕(因为即使只显示了一个条件也会被解析),但是一旦你开始使用 Switchee,你会发现你有少用 if 语句。
    【解决方案2】:

    那么我如何让它使用这个模板文件而不是单个 进入?

    代替:

    {url_title_path='credit-cards'}
    

    使用

    {title_permalink="credit-cards/single"}
    

    【讨论】:

      【解决方案3】:

      您可以通过两种主要方式将模板“信用卡/单”用于 VISA 信用卡类别条目。

      第一个选项

      'credit-cards/index' 模板应该有:

      {if segment_2 != ""}
          {embed="credit-cards/single" entry_id="{entry_id}"}
      {/if}
      

      'credit-cards/single' 模板应该有:

      <h1>Credit Card Page</h1>
      {exp:channel:entries channel="credit_cards" limit="1" entry_id="{embed:entry_id}"}
      {if no_results}
        {redirect="404"}
      {/if}
      ... your code ...
      {/exp:channel:entries}
      

       

      第二个选项

      将“credit-cards/single”重命名为“credit-cards/company”(或与 SEO 更相关的名称)并使用默认的 EE 方式。

      'credit-cards/index' 模板将保持不变。

      'credit-cards/company' 模板应该有:

      <h1>Credit Card Page</h1>
      {exp:channel:entries channel="credit_cards" limit="1" entry_id="{entry_id}"}
      {if no_results}
        {redirect="404"}
      {/if}
      ... your code ...
      {/exp:channel:entries}
      

      在第二个选项中,网址是 site.com/credit-cards/company/visa-credit-card

      我希望这会有所帮助。如果我误解了什么,请告诉我。

      【讨论】:

        【解决方案4】:

        您可能希望在索引模板中添加这样的内容:

        {if segment_2 != ""}
          {exp:channel:entries channel="credit_cards"}
            [single entry code...]
          {/exp:channel:entries}
        {if:else}
          {exp:channel:categories category_group="1" style="linear" dynamic="no"}
            [your code for all credit cards]
          {/exp:channel:entries}      
        {/if}
        

        发生的情况是 URL /credit-cards/visa-credit-card 正在加载 credit-cards 模板组的索引模板,但末尾的 visa-credit-card URL 标题告诉 ExpressionEngine 将模板视为单个条目页面。

        但是exp:channel:entries 标签中的dynamic="no" 是 EE 仍然在该页面上显示所有信用卡的原因。 This free video about dynamic="off" 可能会更好地解释它。

        【讨论】:

          【解决方案5】:

          感谢所有伟大的建议。我最后使用了页面模块,它允许您指定要使用的模板。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-20
            • 1970-01-01
            • 2012-10-14
            • 1970-01-01
            相关资源
            最近更新 更多