Перейти к содержанию
Официальный форум поддержки Simpla

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


Рекомендуемые сообщения

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

$product->act

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

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

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

{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 ??
Ссылка на сообщение
Поделиться на другие сайты

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

<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>
Ссылка на сообщение
Поделиться на другие сайты

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

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

чтото вроде:

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



и все это в одном форече
Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...