2013-11-25 2 views
1

я хочу, чтобы добавить заголовки блоков, чтобы отделить некоторые продукты на главной странице,Добавление названий блоков для отдельных продуктов на домашнюю страницу Nopcommerce

я использую nopcommerce 3.0 источник,

, как тока я есть 24 продуктов на главной странице ,

я хочу показать 22, а затем вставить название баннера,

затем под названием баннер показать две последние продукты

код я могу найти:

вид HomepageProducts.cshtml

@model IList<ProductOverviewModel> 

@using Nop.Web.Models.Catalog; 

@if (Model.Count > 0) 
{ 
    <div class="product-grid home-page-product-grid"> 
     <div class="title"> 
      <strong>@T("HomePage.Products")</strong> 
     </div> 
     @foreach (var item in Model) 
     { 
      <div class="item-box"> 
       @Html.Partial("_ProductBox", item) 
      </div> 
     } 
    </div> 
} 

UPDATE

Я теперь изменен код с ответом, @Razor,

теперь он отображает первые 22 продукта, а затем мой заголовок, но не отображает оставшиеся продукты после,

@if (Model.Count > 0) 
    { 
     <div class="product-grid home-page-product-grid"> 
      <div class="title"> 
       <strong>@T("HomePage.Products")</strong> 
      </div> 

      @{ 
      int I = 0; 
      foreach (var item in Model) 
      { 
       if(I != 22) 
       { 
        <div class="item-box"> 
        @Html.Partial("_ProductBox", item) 
        </div> 
        I++; 
       } 
      } 

      <div class="item-box"> 
       My block title sentence! 
      </div> 

      foreach(var item in Model) 
      { 
       if(I > 22) 
       { 
        <div class="item-box"> 
        @Html.Partial("_ProductBox", item) 
        </div> 
       } 
      } 
      } 

     </div> 
    } 

ответ

1

Что-то, как это должно работать.

<div class="product-grid home-page-product-grid"> 
    <div class="title"> 
     <strong>@T("HomePage.Products")</strong> 
    </div> 
    @for (var i = 0; i < Model.Count(); i++) 
    { 
     var item = Model[i]; 

     <div class="item-box"> 
      @Html.Partial("_ProductBox", item) 
     </div> 

     if (i == 22) 
     { 
      <div class="banner">banner</div> 
     } 
    } 
</div> 
+0

Спасибо, теперь я задаюсь вопросом, как я буду гнездовать оставшиеся продукты в контейнере, которые я могу создать. – Corbo152

1

Итак, вы хотите показать первые 22, затем ваш пользовательский заголовок блока, а затем остальные продукты?

Возьмите эту линию:

@foreach (var item in Model) 

и заменить эти два:

@int i = 0; 
@for (i = 0; i < Model.Count() && i < 22; i++) 

, а также:

@Html.Partial("_ProductBox", item) 

с

@Html.Partial("_ProductBox", Model[i]) 

Это приведет к тому, вид на выходе только вплоть до первых 22 продуктов, после чего вы можете вставить ваш заголовок блока со следующим:

<div class="item-box"> 
    My block title sentence! 
</div> 

и затем выводит остаток продукции:

@for (i = i; i < Model.Count(); i++) 
{ 
    <div class="item-box"> 
     @Html.Partial("_ProductBox", Model[i]) 
    </div> 
} 

Это работает, потому что мы отслеживали, сколько продуктов уже было представлено в переменной i, а затем мы продолжим оттуда в коллекции продуктов, найденных в модели (если их более 22).

Обратите внимание, что код будет по-прежнему выводить название вашего блока, даже если в самом конце списка находится менее 22 продуктов.

Так что окончательные изменения в общей сложности являются:

@model IList<ProductOverviewModel> 

@using Nop.Web.Models.Catalog; 

@if (Model.Count > 0) 
{ 
    <div class="product-grid home-page-product-grid"> 
     <div class="title"> 
      <strong>@T("HomePage.Products")</strong> 
     </div> 
     @int i = 0; 
     @for (i = 0; i < Model.Count() && i < 22; i++) 
     { 
      <div class="item-box"> 
       @Html.Partial("_ProductBox", Model[i]) 
      </div> 
     } 
     <div class="item-box"> 
      My block title sentence! 
     </div> 
     @for (i = i; i < Model.Count(); i++) 
     { 
      <div class="item-box"> 
       @Html.Partial("_ProductBox", Model[i]) 
      </div> 
     } 

    </div> 
} 

EDIT: К сожалению, я забыл изменить ссылку на отдельные продукты, чтобы быть на основе массива, используя модель [я] вместо пункта. См. Мои изменения выше.

+0

спасибо, теперь я получаю ошибки, которые я и элемент не существуют в текущем контексте? – Corbo152

+0

@ Corbo152 - см. Мои правки –

3

Я создал несколько петель Foreach в C#, преобразовать его, и вы должны быть хорошо идти :)

@if (Model.Count > 0) 
    { 
     <div class="product-grid home-page-product-grid"> 
      <div class="title"> 
       <strong>@T("HomePage.Products")</strong> 
      </div> 
      @int i = 0; 
      @for (i = 0; i < Model.Count() && i < 22; i++) 
      { 
       <div class="item-box"> 
        @Html.Partial("_ProductBox", item) 
       </div> 
      } 


      <------ CONVERT THE PART BELOW TO CSHTML ------> 
      Int I = 0; 

      foreach (var item in Model) 
      { 
       If(I != 22) 
       { 
        <div class="item-box"> 
        @Html.Partial("_ProductBox", item) 
        </div> 
        I++ 
       } 
      } 
      <------ CONVERT THE PART ABOVE TO CSHTML ------> 


      <div class="item-box"> 
       My block title sentence! 
      </div> 
      <------ CONVERT THE PART BELOW TO CSHTML ------> 
      foreach(var item in Model) 
      { 
       if(i > 22) 
       { 
        <div class="item-box"> 
        @Html.Partial("_ProductBox", item) 
        </div> 
       } 
      } 
      <------ CONVERT THE PART ABOVE TO CSHTML ------> 
     </div> 
    } 

Надеется, что это помогает :)

+0

Благодаря RaZor, работающему в определенной степени, он отображает 22 продукта, а затем заголовок, но не отображает оставшиеся продукты after.i изменил мой вопрос – Corbo152

+0

Хорошо, я посмотрю! – JRO

Смежные вопросы