Jump to content

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


Go to solution Solved by mishanya,

Recommended Posts

В стандартной симпле товары выводятся в виде: 

товар 1 | товар 2 | товар 3 | товар 4 
товар 5 | товар 6 | товар 7 | товар 8

мне же необходимо сделать вывод

товар 1 | товар 3 | товар 5 | товар 7 
товар 2 | товар 4 | товар 6 | товар 8

 

как это сделать?

Link to post
Share on other sites

мне же необходимо сделать вывод

 

товар 1 | товар 3 | товар 5 | товар 7 

товар 2 | товар 4 | товар 6 | товар 8

 

как это сделать?

 

Изменить вывод в шаблоне. Многое зависит в того, как устроен шаблон и в каком порядке он  реально выводит товары в HTML-код.

Возможно, это окажется сложным -  тогда придется работать и в файле PHP, меняя там порядок товаров либо как-то еще.

В любом случае без шаблона вряд ли получите готовое  универсальное решение...

Link to post
Share on other sites

В стандартной симпле как раз ни так ни так товары не выводятся.

 

 

 ну расскажите как тогда выводятся? 

 

 

Изменить вывод в шаблоне. Многое зависит в того, как устроен шаблон и в каком порядке он  реально выводит товары в HTML-код.

Возможно, это окажется сложным -  тогда придется работать и в файле PHP, меняя там порядок товаров либо как-то еще.

В любом случае без шаблона вряд ли получите готовое  универсальное решение...

 

разбираю стандартный шаблон, хтмл не поможет в этом вопросе, надо ковырять пхп

Link to post
Share on other sites

ну расскажите как тогда выводятся?

 

Если посмотреть products.tpl, то легко понять, что HTML-код формируется в виде

 

<ul class="products">

<li class="product"> [Товар 1] </li>

<li class="product"> [Товар 2] </li>

<li class="product"> [Товар 3] </li>

<li class="product"> [Товар 4] </li>

<li class="product"> [Товар 5] </li>

<li class="product"> [Товар 6] </li>

<li class="product"> [Товар 7] </li>

<li class="product"> [Товар 8] </li>

</ul>

 

если хотите

<ul class="products">

<li class="product"> [Товар 1] </li>

<li class="product"> [Товар 3] </li>

<li class="product"> [Товар 5] </li>

<li class="product"> [Товар 7] </li>

<li class="product"> [Товар 2] </li>

<li class="product"> [Товар 4] </li>

<li class="product"> [Товар 6] </li>

<li class="product"> [Товар 8] </li>

</ul>

 

то проще, действительно, в PHP изменить порядок в списке товаров...

Link to post
Share on other sites

Если посмотреть products.tpl, то легко понять, что HTML-код формируется в виде

<ul class="products">

<li class="product"> [Товар 1] </li>

<li class="product"> [Товар 2] </li>

<li class="product"> [Товар 3] </li>

<li class="product"> [Товар 4] </li>

<li class="product"> [Товар 5] </li>

<li class="product"> [Товар 6] </li>

<li class="product"> [Товар 7] </li>

<li class="product"> [Товар 8] </li>

</ul>

то проще, действительно, в PHP изменить порядок в списке товаров...

как изменить в пхп? 

надо что бы товары располагались в 4 колонки, но порядок вертикальный

Link to post
Share on other sites
  • Solution

как изменить в пхп? 

надо что бы товары располагались в 4 колонки, но порядок вертикальный

 

в шаблоне:

{$count_products = $products|count}
{$row_count = ($count_products/4)|ceil}
<ul class="products">
	{$i=0}
	{foreach $products as $product}
		{$i=$i+1}
		{if $product@first || $i==1}<li class="product">{/if}
			<div class="product_block">
				тут код для товара
			</div>
		{if $i==$row_count || $product@last}</li>{$i=0}{/if}
	{/foreach}
</ul>
Link to post
Share on other sites

нынче есть различные способы решения подобного казалось бы программного функционала с помощью правил CSS. НО устаревшие браузеры этого дела не одобрят. я бы порекоммендовал обратить внимание на flex-верстку и/или связочку правил column-count, column-gap, column-width, column-rule...

Link to post
Share on other sites

Если Вам подошел способ от mishanya, то и хорошо.

 

А по-моему, способ какой-то странный и кривой. Например,

1. если в списке 21 товар, то этот способ разобъет их по колонкам так: 6+6+6+3 (последняя колонка существенно меньше остальных).

2. если в списке 5 товаров, то этот способ разобъет их по колонкам так: 2+2+1+0 (вообще одна колонка пустая будет).

Link to post
Share on other sites

Если Вам подошел способ от mishanya, то и хорошо.

 

А по-моему, способ какой-то странный и кривой. Например,

1. если в списке 21 товар, то этот способ разобъет их по колонкам так: 6+6+6+3 (последняя колонка существенно меньше остальных).

2. если в списке 5 товаров, то этот способ разобъет их по колонкам так: 2+2+1+0 (вообще одна колонка пустая будет).

у меня товаров 100+ в каждой категории, выводятся только названия, все на одной странице

Link to post
Share on other sites

у меня товаров 100+ в каждой категории, выводятся только названия, все на одной странице

 

3. если в списке 101 товар, то этот способ разобъет их по колонкам так: 26+26+26+23.

 

Визуально, Вы может, и не заметите особой разницы, но метод явно неправильный.

 

Но даже если у Вас в категории много товаров и работает разбивка на страницы, то на последней странице вполне может оказаться и 5 товаров, и 21 товар и отображение будет, скорее всего, некрасивым...

Link to post
Share on other sites

{$count_products = $products|count}
{$row_count = ($count_products/4)|floor}
{$big_columns = $count_products%4}
<ul class="products">
{$i=0} {$i2=1}
{foreach $products as $k =>$product}
{$i=$i+1}
{if $i==1}<li class="product">{/if}
<div class="product_block">
[товар, колонка {$i2}, позиция {$i}]
</div>
{if ($i==$row_count && $i2>$big_columns ) || $i>$row_count || $product@last}</li>{$i=0}{$i2++}{/if}
{/foreach}
</ul>

Link to post
Share on other sites
  • 8 years later...

а как сделать такое отображение:

товар 1 | товар 2
товар 3 | товар 4 
товар 5
товар 6 | товар 7
товар 8 | товар 9
товар 10
товар 11 | товар 12
товар 13 | товар 14
товар 15

Link to post
Share on other sites
В 15.03.2024 в 09:41, phukortsin сказал:

Программировать все нужное, примеры в теме есть...

делаю вот так

<ul class="products">
    {$i=0}
    {foreach $products as $key => $product}
        {$i=$i+1}
        {if $product@first || $i==1 || ($key % 5 == 0)}<li class="product">{/if}
            <div class="product_block">
                {$product->name|escape} тут код для товара
            </div>
        {if $i==2 || ($key % 5 == 4) || $product@last}</li>{$i=0}{/if}
    {/foreach}
</ul>

Вначале нормально, а потом не закрывает </li> и отображает уже не правильно....почему?

вот как отображает:

<ul class="products">
	<li class="product"> 
		<div class="product_block">
			1 тут код для товара
		</div>
		<div class="product_block">
			2 тут код для товара
		</div>
	</li>  
	<li class="product">  
		<div class="product_block">
			4 тут код для товара
		</div>
	</li>
	<li class="product">
		<div class="product_block">
			5 тут код для товара
		</div>
		<div class="product_block">
			6 тут код для товара
		</div>
	</li>
	<li class="product">  
		<div class="product_block">
			7 тут код для товара
		</div>
		<div class="product_block">
			8 тут код для товара
		</div>
	</li>  
	<li class="product"> 
		<div class="product_block">
			9 тут код для товара
		</div>
		<li class="product"> 
			<div class="product_block">
                10 тут код для товара
            </div>
        </li> 
		<li class="product">
			<div class="product_block">
                11 тут код для товара
            </div>
        </li> 
		<li class="product"> 
			<div class="product_block">
                12 тут код для товара
            </div>
        </li>
</ul>

 

Link to post
Share on other sites

Это работает верно для простых данных (когда в массиве $products ключи идут по порядку 0,1,2,3). А когда ключи произвольные, возникает ошибка, потому что условие ($key % 5 == 4) фактически выдает результат СЛУЧАЙНЫМ ОБРАЗОМ.

Можно, например, не использовать $key, а вместо нее вручную формировать свою переменную.

 

Link to post
Share on other sites
3 часа назад, phukortsin сказал:

Это работает верно для простых данных (когда в массиве $products ключи идут по порядку 0,1,2,3). А когда ключи произвольные, возникает ошибка, потому что условие ($key % 5 == 4) фактически выдает результат СЛУЧАЙНЫМ ОБРАЗОМ.

Можно, например, не использовать $key, а вместо нее вручную формировать свою переменную.

 

Спасибо, сделал вот так:

<ul class="products">
    {$i=0}
    {$index=0}
    {foreach $products as $product}
        {$i=$i+1}
        {$index=$index+1}
        {if $product@first || $i==1 || ($index % 5 == 1)}<li class="product">{/if}
            <div class="product_block">
                {$product->name|escape} тут код для товара
            </div>
        {if $i==2 || ($index % 5 == 0) || $product@last}</li>{$i=0}{/if}
    {/foreach}
</ul>

 

Edited by founder
Link to post
Share on other sites

Если нужно менять <li> где вывод по 1 товару, нужно сделать вот так:

<ul class="products">
    {$i=0}
    {$index=0}
    {foreach $products as $product}
        {$i=$i+1}
        {$index=$index+1}
        {if $product@first || $i==1 || ($index % 5 == 1)}{if $index % 5 == 0}<li class="КЛАСС ДЛЯ ОДНОГО ТОВАРА">{else}<li class="product">{/if}{/if}
            <div class="product_block">
                {$product->name|escape} тут код для товара
            </div>
        {if $i==2 || ($index % 5 == 0) || $product@last}</li>{$i=0}{/if}
    {/foreach}
</ul>

 

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...