kind Опубликовано 6 ноября, 2012 Жалоба Поделиться Опубликовано 6 ноября, 2012 Здравствуйте. Задача у меня не из простых.Завёл в БД булево поле act для товара, сделал его вывод в админке и на сайте. Обозвал это дело "Акция". Теперь у акционного товара есть свойство$product->act и если оно равно true, на акционном товаре можно написать слово акция, вывести картинку другого размера - всё, на что хватит фантазии. Более того, при добавлении запросаorder by p.act desc сначала выводятся акционные товары (товары дня), а лишь затем все остальные.Есть одна проблемма: нужно после акционных товаров провести черту, визуально отделив их от обычных продуктов.Как это сделать, ума не приложу.Один из вариантов - сделать 2 {foreach}, в одном из которых выводить все товары с $product->act, а во втором все с !$product->actНо нагружать сервер лишним нельзя.Скажите, как мне до вывода первого неакционного товара провести черту?Как после вывода последнего акционного товара вывести черту?Спасибо. Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 6 ноября, 2012 Жалоба Поделиться Опубликовано 6 ноября, 2012 Как вариант - использовать http://htmlbook.ru/css/first-child или http://htmlbook.ru/css/last-child Цитата Ссылка на сообщение Поделиться на другие сайты
kind Опубликовано 6 ноября, 2012 Автор Жалоба Поделиться Опубликовано 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 ?? Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 6 ноября, 2012 Жалоба Поделиться Опубликовано 6 ноября, 2012 .block-noact:first-child Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 6 ноября, 2012 Жалоба Поделиться Опубликовано 6 ноября, 2012 Или все-таки 2 {foreach}, не думаю, что это сильно повысит нагрузкуи я бы сделал так Цитата Ссылка на сообщение Поделиться на другие сайты
kind Опубликовано 6 ноября, 2012 Автор Жалоба Поделиться Опубликовано 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> Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 6 ноября, 2012 Жалоба Поделиться Опубликовано 6 ноября, 2012 А так?1234 Цитата Ссылка на сообщение Поделиться на другие сайты
kind Опубликовано 6 ноября, 2012 Автор Жалоба Поделиться Опубликовано 6 ноября, 2012 и так нет. работает лишьdiv:first-childа если к нему по имени обращаться, не хочет. так что это не решение. Цитата Ссылка на сообщение Поделиться на другие сайты
kind Опубликовано 6 ноября, 2012 Автор Жалоба Поделиться Опубликовано 6 ноября, 2012 придётся аписать функцию вывода всех акционных товаров.как это сделать, моих знаний не хватит. Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 6 ноября, 2012 Жалоба Поделиться Опубликовано 6 ноября, 2012 Думаете, это меньше нагрузит сервер, чем 2 {foreach} ? очень в этом сомневаюсь...Мое мнение, два раза обойти готовый массив - лучшее решение. Цитата Ссылка на сообщение Поделиться на другие сайты
kind Опубликовано 7 ноября, 2012 Автор Жалоба Поделиться Опубликовано 7 ноября, 2012 Kosjak76, я перепробовал всё и даже частично нашёл решение.На заметку, как верстальщику о приёмах в css3:.block-act + block-noact{...} - указывает на блок block-noact, следующий сразу за block-noact (в данном случае на первый block-noact.ну ещё :before {content:'...'}Но всё это не то. Решил я пойти вашим путём, а именно использовать дважды foreach.Снизит ли нагрузку с сервера использование {break} в случае если в foreach попадается НЕакционный товар? (пишут, что в смарти есть break) Цитата Ссылка на сообщение Поделиться на другие сайты
kind Опубликовано 7 ноября, 2012 Автор Жалоба Поделиться Опубликовано 7 ноября, 2012 ап Цитата Ссылка на сообщение Поделиться на другие сайты
kind Опубликовано 9 ноября, 2012 Автор Жалоба Поделиться Опубликовано 9 ноября, 2012 ап Цитата Ссылка на сообщение Поделиться на другие сайты
Kasha Опубликовано 9 ноября, 2012 Жалоба Поделиться Опубликовано 9 ноября, 2012 >>Решил я пойти вашим путём, а именно использовать дважды foreach.Снизит ли нагрузку с сервера использование {break} в случае если в foreach попадается НЕакционный товар? (пишут, что в смарти есть break)так если у вас не акционный товар (не попадает в иф) тогда его просто пропускают и идут дальше, и никакой брейк тут не нужен. нагрузка минимальна по хорошему.не очень понимаю в чем проблема? при первом ноакт вывести над ним черту?, так возьмите проверку на переменную, и как попадается первое совпадение (первый ноакт) сделайте чтобы переменная измениласьчтото вроде:иф (!$product->act энд $act) ($act = false; "") /ифи все это в одном форече Цитата Ссылка на сообщение Поделиться на другие сайты
kindd Опубликовано 11 ноября, 2012 Жалоба Поделиться Опубликовано 11 ноября, 2012 sheeft, смарти - шаблонизатор, в нём нет объявления переменных. Они объявляются в коде программы, а не в шаблоне.ИМХО. Цитата Ссылка на сообщение Поделиться на другие сайты
Kasha Опубликовано 11 ноября, 2012 Жалоба Поделиться Опубликовано 11 ноября, 2012 что мешает добавить одну строчку в коде? Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.