kind Posted November 6, 2012 Report Share Posted November 6, 2012 Здравствуйте. Задача у меня не из простых.Завёл в БД булево поле act для товара, сделал его вывод в админке и на сайте. Обозвал это дело "Акция". Теперь у акционного товара есть свойство$product->act и если оно равно true, на акционном товаре можно написать слово акция, вывести картинку другого размера - всё, на что хватит фантазии. Более того, при добавлении запросаorder by p.act desc сначала выводятся акционные товары (товары дня), а лишь затем все остальные.Есть одна проблемма: нужно после акционных товаров провести черту, визуально отделив их от обычных продуктов.Как это сделать, ума не приложу.Один из вариантов - сделать 2 {foreach}, в одном из которых выводить все товары с $product->act, а во втором все с !$product->actНо нагружать сервер лишним нельзя.Скажите, как мне до вывода первого неакционного товара провести черту?Как после вывода последнего акционного товара вывести черту?Спасибо. Quote Link to post Share on other sites
Kosjak76 Posted November 6, 2012 Report Share Posted November 6, 2012 Как вариант - использовать http://htmlbook.ru/css/first-child или http://htmlbook.ru/css/last-child Quote Link to post Share on other sites
kind Posted November 6, 2012 Author Report Share Posted November 6, 2012 Идея. Но как использовать, мозг сломалидёт вывод:{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 ?? Quote Link to post Share on other sites
Kosjak76 Posted November 6, 2012 Report Share Posted November 6, 2012 .block-noact:first-child Quote Link to post Share on other sites
Kosjak76 Posted November 6, 2012 Report Share Posted November 6, 2012 Или все-таки 2 {foreach}, не думаю, что это сильно повысит нагрузкуи я бы сделал так Quote Link to post Share on other sites
kind Posted November 6, 2012 Author Report Share Posted November 6, 2012 Спасибо, мысль я понял. Только не работает:<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> Quote Link to post Share on other sites
Kosjak76 Posted November 6, 2012 Report Share Posted November 6, 2012 А так?1234 Quote Link to post Share on other sites
kind Posted November 6, 2012 Author Report Share Posted November 6, 2012 и так нет. работает лишьdiv:first-childа если к нему по имени обращаться, не хочет. так что это не решение. Quote Link to post Share on other sites
kind Posted November 6, 2012 Author Report Share Posted November 6, 2012 придётся аписать функцию вывода всех акционных товаров.как это сделать, моих знаний не хватит. Quote Link to post Share on other sites
Kosjak76 Posted November 6, 2012 Report Share Posted November 6, 2012 Думаете, это меньше нагрузит сервер, чем 2 {foreach} ? очень в этом сомневаюсь...Мое мнение, два раза обойти готовый массив - лучшее решение. Quote Link to post Share on other sites
kind Posted November 7, 2012 Author Report Share Posted November 7, 2012 Kosjak76, я перепробовал всё и даже частично нашёл решение.На заметку, как верстальщику о приёмах в css3:.block-act + block-noact{...} - указывает на блок block-noact, следующий сразу за block-noact (в данном случае на первый block-noact.ну ещё :before {content:'...'}Но всё это не то. Решил я пойти вашим путём, а именно использовать дважды foreach.Снизит ли нагрузку с сервера использование {break} в случае если в foreach попадается НЕакционный товар? (пишут, что в смарти есть break) Quote Link to post Share on other sites
kind Posted November 7, 2012 Author Report Share Posted November 7, 2012 ап Quote Link to post Share on other sites
kind Posted November 9, 2012 Author Report Share Posted November 9, 2012 ап Quote Link to post Share on other sites
Kasha Posted November 9, 2012 Report Share Posted November 9, 2012 >>Решил я пойти вашим путём, а именно использовать дважды foreach.Снизит ли нагрузку с сервера использование {break} в случае если в foreach попадается НЕакционный товар? (пишут, что в смарти есть break)так если у вас не акционный товар (не попадает в иф) тогда его просто пропускают и идут дальше, и никакой брейк тут не нужен. нагрузка минимальна по хорошему.не очень понимаю в чем проблема? при первом ноакт вывести над ним черту?, так возьмите проверку на переменную, и как попадается первое совпадение (первый ноакт) сделайте чтобы переменная измениласьчтото вроде:иф (!$product->act энд $act) ($act = false; "") /ифи все это в одном форече Quote Link to post Share on other sites
kindd Posted November 11, 2012 Report Share Posted November 11, 2012 sheeft, смарти - шаблонизатор, в нём нет объявления переменных. Они объявляются в коде программы, а не в шаблоне.ИМХО. Quote Link to post Share on other sites
Kasha Posted November 11, 2012 Report Share Posted November 11, 2012 что мешает добавить одну строчку в коде? Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.