Jump to content

Вывести в категории сначала акционные товары, а потом остальные.


Recommended Posts

Здравствуйте. Задача у меня не из простых.
Завёл в БД булево поле act для товара, сделал его вывод в админке и на сайте. Обозвал это дело "Акция". Теперь у акционного товара есть свойство

$product->act

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

order by p.act desc
сначала выводятся акционные товары (товары дня), а лишь затем все остальные.
Есть одна проблемма: нужно после акционных товаров провести черту, визуально отделив их от обычных продуктов.
Как это сделать, ума не приложу.
Один из вариантов - сделать 2 {foreach}, в одном из которых выводить все товары с $product->act, а во втором все с !$product->act
Но нагружать сервер лишним нельзя.
Скажите, как мне до вывода первого неакционного товара провести черту?
Как после вывода последнего акционного товара вывести черту?
Спасибо.
Link to post
Share on other sites

Идея. Но как использовать, мозг сломал
идёт вывод:

{foreach.....}
{if $product->act}
<div class="block-act">
....
</div>
{else}
<div class="block-noact">
....
</div>
{/if}


В html это будет выглядеть так:

<div class="block-act">....</div><div class="block-act">....</div><div class="block-noact">....</div><div class="block-noact">....</div>

Как использовать в данном случае first-child или last-child, если первым является самый первый block-act, а последним - самый последний block-noact ??
Link to post
Share on other sites

Спасибо, мысль я понял. Только не работает:

<style type="text/css">.block-noact:first-child{border:1px #000;background:#999;}</style><div class="block-act">1</div><div class="block-act">2</div><div class="block-noact">3</div><div class="block-noact">4</div>
Link to post
Share on other sites

Думаете, это меньше нагрузит сервер, чем 2 {foreach} ? очень в этом сомневаюсь...
Мое мнение, два раза обойти готовый массив - лучшее решение.

Link to post
Share on other sites

Kosjak76, я перепробовал всё и даже частично нашёл решение.
На заметку, как верстальщику о приёмах в css3:
.block-act + block-noact{...} - указывает на блок block-noact, следующий сразу за block-noact (в данном случае на первый block-noact.
ну ещё :before {content:'...'}

Но всё это не то. Решил я пойти вашим путём, а именно использовать дважды foreach.
Снизит ли нагрузку с сервера использование {break} в случае если в foreach попадается НЕакционный товар? (пишут, что в смарти есть break)

Link to post
Share on other sites

>>Решил я пойти вашим путём, а именно использовать дважды foreach.
Снизит ли нагрузку с сервера использование {break} в случае если в foreach попадается НЕакционный товар? (пишут, что в смарти есть break)

так если у вас не акционный товар (не попадает в иф) тогда его просто пропускают и идут дальше, и никакой брейк тут не нужен. нагрузка минимальна по хорошему.

не очень понимаю в чем проблема? при первом ноакт вывести над ним черту?, так возьмите проверку на переменную, и как попадается первое совпадение (первый ноакт) сделайте чтобы переменная изменилась

чтото вроде:

иф (!$product->act энд $act) ($act = false; "") /иф



и все это в одном форече
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...