2012-10-22 14 views
5

Stworzyłem kanał o nazwie karty kredytowe. Dlatego utworzyłem grupę szablonów zwaną kartami kredytowymi z indeksem, który przechwytuje wszystkie karty kredytowe i wyprowadza je. Aspekt ten działa dobrze, tutaj jest mój kod do pliku index.html wewnątrz folderu credit-cards.group:ExpressionEngine: Pojedynczy szablon wpisu

  {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} 

Więc moje pytanie jest takie. Załóżmy, że mam kartę kredytową zwaną kartą kredytową wizową, adres URL generowany dla niej to/karty kredytowe/karta-wizy. Kiedy klikam ten link, otrzymuję ponownie moją stronę indeksu. W mojej grupie utworzyłem inny plik szablonu o nazwie single.html, który ma kod wyprowadzający pojedynczą kartę kredytową. Wygląda to tak:

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

Jak mogę go użyć do tego pliku szablonu zamiast pojedynczego wpisu?

Odpowiedz

0

Dzięki za wszystkie świetne sugestie. Użyłem na końcu modułów stron, które pozwalają określić, który szablon ma być użyty.

10

Jest to dość łatwy do rozwiązania problem. To, co się dzieje, to to, że linia 5 twojego kodu nie ma możliwości określenia, czy powinna ona ograniczyć informacje o wpisie. Z dynamic='no', powiedziałeś „EE, nie trzeba używać URL tutaj, aby dowiedzieć się, co dane, aby ograniczyć to przez”

Moja sugestia będzie następujący kod:

{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} 

umysł Ty, to nie jest w 100% dokładne, ponieważ usunąłem Twój tag exp:channel:categories, ale to powinno dać ci wynik, który ograniczyłby się na podstawie skróconego adresu URL, tak jak to określiłeś.

+0

Witam Dziękuję za pomoc. Nie mam wątpliwości, że to zadziała, ale nadal oznacza, że ​​cały kod znajduje się w tym samym pliku. To nie jest bardzo czyste rozwiązanie, czy nie ma sposobu, aby je oddzielić, tak aby spojrzeć na index.html dla strony indeksu i single.html dla pojedynczego wpisu? – geoffs3310

+1

Hej Geoffs, jeśli chcesz zachować strukturę adresów URL "karty kredytowe/wizy-karta kredytowa" zamiast "karty kredytowe/pojedyncze/karty kredytowe" odpowiedź Chrisa jest drogą do zrobienia. Chris sprawdza przede wszystkim, czy URL zawiera wartość po "kartach kredytowych /" w adresie URL, a następnie przełącza się na wyświetlanie pojedynczego wpisu. Możesz użyć fragmentu kodu lub osadzić, aby podzielić kod na inny, aby wyglądał na czysty. –

+1

Jeśli chcesz dokonać czyszczenia szablonu, możesz użyć fragmentów do usunięcia głównych bloków treści w celu oddzielenia plików (chociaż potrzebujesz dodatkowego narzędzia, np. Mountee lub SnippetSync, aby zapisać je jako pliki). I zamiast zrobić jeśli segment_2/segment_2 == "", zdecydowanie sprawdź Switchee. Wykonywanie oddzielnych (prostych) warunków dla tego, czy/jeśli nie jest, nie jest tak złe, jak wykonywanie złożonych warunków, takich jak: else (ponieważ oba warunki są przetwarzane, mimo że wyświetlany jest tylko jeden), ale gdy zaczniesz używać Switchee, zobaczysz, że masz używać, gdy instrukcje są o wiele mniej. – Tyssen

2

prawdopodobnie będziesz chciał coś takiego w szablonie index:

{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} 

Co się dzieje jest adres URL /credit-cards/visa-credit-card się ładuje szablon indeksu grupie szablonów credit-cards, ale tytuł visa-credit-card URL na końcu mówi ExpressionEngine, aby traktować szablon jako pojedynczą stronę początkową.

Ale tag dynamic="no" w tagu exp:channel:entries powoduje, że EE wciąż pokazuje wszystkie karty kredytowe na tej stronie. This free video about dynamic="off" może wyjaśnić to lepiej.

5

Istnieją dwa podstawowe sposoby korzystania z szablonu "karty kredytowe/pojedyncze" dla pozycji karty kredytowej VISA. szablon

Pierwsza opcja

'karty-kredytowe/index' musiałaby:

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

'karty-kredytowe/singiel' szablon musiałaby:

<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} 

 

Druga opcja:

Zmień nazwę "kart kredytowych/singli" na "karty kredytowe/firma" (lub coś bardziej istotnego dla SEO) i użyj go domyślnie w trybie EE.

Szablon "karty kredytowe/indeks" pozostanie taki sam.szablon

'/ karty-kredytowe spółki musiałyby:

<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} 

W tym drugim wariancie url byłoby site.com/credit-cards/company/visa-credit-card

I mam nadzieję, że pomaga. Daj mi znać, jeśli coś źle zrozumiałem.

6

W jaki sposób mogę go użyć do użycia tego pliku szablonu zamiast pojedynczego wpisu ?

Zamiast:

{url_title_path='credit-cards'} 

Zastosowanie

{title_permalink="credit-cards/single"} 
Powiązane problemy