olgnet Опубликовано 23 ноября, 2011 Жалоба Поделиться Опубликовано 23 ноября, 2011 Здравствуйте, столкнулся с такой проблемой. Есть шаблон в котором в списке товаров используются таблицы(тоесть через определённое кол-во товаров ставится тег <tr>), но во всех шаблонов для simpla cms список товаров реализуется с помощью <div>. Как можно решить эту проблему? В других cms для создания интернет-магазинов эта проблема решается например с помощью цикла for ($i = 0; $i < sizeof($products); $i = $i + 2) {<tr> for ($j = $i; $j < ($i + 2); $j++) {// вид товара в тегах <td>}</tr>}(думаю понятно, здесь будут 2 товара в строке. )Если не будет решения стандартными средствами, то расскажите как правильно вставлять php код в шаблон. Заранее очень благодарен! Цитата Ссылка на сообщение Поделиться на другие сайты
Гость Опубликовано 23 ноября, 2011 Жалоба Поделиться Опубликовано 23 ноября, 2011 Кто писал эти ваши cms? Это просто безумие.Во-первых, проще и быстрее идти в одном цикле, а там где надо - вставлять </tr><tr>Зачем нам вложенный цикл?Ваш пример можно упростить до:for ($i = 0; $i < sizeof($products); $i++) {// вид товара в тегах <td>if($i%2) print '</tr><tr>';}Во-вторых sizeof($products) нужно выносить за цикл, зачем каждый раз ее вызывать? Наверное из-за таких программистов другие cms и тормозят (не удивлюсь что там могут вызвать еще и mysql_num_rows в цикле В-третьих, зачем нам вообще цикл for, если еще проще использовать foreach:foreach ($products as $i=>$p) { // вид товара в тегах <td> if($i%2) print '</tr><tr>';} Цитата Ссылка на сообщение Поделиться на другие сайты
Гость Опубликовано 23 ноября, 2011 Жалоба Поделиться Опубликовано 23 ноября, 2011 В смарти это будет выглядеть так:{foreach $products as $p}<td>товар</td> {if $p@iteration is even by 2}</tr><tr>{/if}{/foreach} Цитата Ссылка на сообщение Поделиться на другие сайты
olgnet Опубликовано 23 ноября, 2011 Автор Жалоба Поделиться Опубликовано 23 ноября, 2011 Гениально! Огромное спасибо, всё работает... Не буду создавать ещё тему, спрошу тут же - есть кнопка добавление в корзину, выглядит так <a href="javascript:AddToCart(1)" class="add2cart"></a>, нужно "адаптировать" эту кнопку под шаблон симплы, если использую input с тем же стилем add2cart то прям на кнопке появляется отправить, хотя value нет. Как можно её адаптировать, оставив в теге <a>?(может как нибудь с атрибутом href поиграться или с помощью onclick) Цитата Ссылка на сообщение Поделиться на другие сайты
Гость Опубликовано 23 ноября, 2011 Жалоба Поделиться Опубликовано 23 ноября, 2011 Зависит от шаблона который вы используете. Если не нужна аяксовая корзина, то самый простой способ:<!-- Выбор варианта товара и кнопка в корзину возле каждого из них -->{foreach $product->variants as $v} Название варианта: {$v->name} Цена варианта: {$v->price|convert} {$currency->sign|escape} В корзину: <a href="/cart?variant={$v->id}"/>в корзину</a>{/foreach}А если варианты товаров вам не нужны, тогда вообще просто ссылка <a href="/cart?variant={$product->variant->id}"/>в корзину</a> Цитата Ссылка на сообщение Поделиться на другие сайты
olgnet Опубликовано 24 ноября, 2011 Автор Жалоба Поделиться Опубликовано 24 ноября, 2011 И последнее, у меня сбоку запланирован блок 4 случайных товара. Как его можно реализовать? Цитата Ссылка на сообщение Поделиться на другие сайты
olgnet Опубликовано 24 ноября, 2011 Автор Жалоба Поделиться Опубликовано 24 ноября, 2011 Если это сложно, это не имеет особого значения, можно например 4 лучших товара Цитата Ссылка на сообщение Поделиться на другие сайты
Гость Опубликовано 24 ноября, 2011 Жалоба Поделиться Опубликовано 24 ноября, 2011 Для этого нужно в файле View.php выбрать из базы 4 случайных товара// Выбираем случайные id товаров$this->db->query('SELECT id FROM __products ORDER BY RAND() LIMIT 4');$rand_ids = $this->db->results():// Выбираем эти товары$rnd_products = $this->products->get_products(array('id'=>$rand_ids));// Передаём в шаблон$this->design->assign('rnd_products', $rnd_products);В шаблоне выводим{foreach $rnd_products as $p}{$p->name}{/foreach} Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 24 ноября, 2011 Жалоба Поделиться Опубликовано 24 ноября, 2011 admin спасибо! Давно думал над подобным кодом.Мне пришлось писать отдельный Bests.View.php Цитата Ссылка на сообщение Поделиться на другие сайты
olgnet Опубликовано 24 ноября, 2011 Автор Жалоба Поделиться Опубликовано 24 ноября, 2011 Вставил в конец файла /view/view.php , но тогда при загрузке сайта появляется белая страница Цитата Ссылка на сообщение Поделиться на другие сайты
olgnet Опубликовано 24 ноября, 2011 Автор Жалоба Поделиться Опубликовано 24 ноября, 2011 Разобрался, но этот код выводит все товары которые есть в одинаковом порядке. Ошибка видимо в $rnd_products = $this->products->get_products(array('id'=>$rand_ids)); , т.к. если убрать код где запрашиваются случайные id товаров, то $this->products->get_products(array('id'=>$rand_ids)); всё равно выводит все товары Цитата Ссылка на сообщение Поделиться на другие сайты
olgnet Опубликовано 24 ноября, 2011 Автор Жалоба Поделиться Опубликовано 24 ноября, 2011 Если не получиться сделать рандомные товары, то например как сделать что бы выводилось 4 лучших товара Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 25 ноября, 2011 Жалоба Поделиться Опубликовано 25 ноября, 2011 Пробовал реализовать, но увы выводит только один товар и хоть ты тресни!Вот код:// Выбираем случайные id товаров$query = $this->db->placehold('SELECT id FROM __products ORDER BY RAND() LIMIT 4');$this->db->query($query);$random = $this->db->result();// Выбираем эти товары$random_products = array();foreach($this->products->get_products(array('id'=>$random)) as $p)$random_products[$p->id] = $p;// Передаём в шаблон$this->design->assign('random_products', $random_products); Цитата Ссылка на сообщение Поделиться на другие сайты
Гость Опубликовано 25 ноября, 2011 Жалоба Поделиться Опубликовано 25 ноября, 2011 $random = $this->db->resultS(); Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 25 ноября, 2011 Жалоба Поделиться Опубликовано 25 ноября, 2011 Так вообще ничего не получаю, а если $random = $this->db->result();, то один товар=( Цитата Ссылка на сообщение Поделиться на другие сайты
olgnet Опубликовано 25 ноября, 2011 Автор Жалоба Поделиться Опубликовано 25 ноября, 2011 Такой код я так понимаю выводит только названия товаров? Цитата Ссылка на сообщение Поделиться на другие сайты
olgnet Опубликовано 25 ноября, 2011 Автор Жалоба Поделиться Опубликовано 25 ноября, 2011 Ну вообще всё правильно, функция result "Возвращает первый результат запроса. Необязательный второй аргумент указывает какую колонку возвращать вместо всего массива колонок" а results возвращает все результаты запроса массивом. Только у меня results тоже не работает Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 25 ноября, 2011 Жалоба Поделиться Опубликовано 25 ноября, 2011 Вот и у меня results не работает.Либо так либо массив колонок но без изображений товаров. Цитата Ссылка на сообщение Поделиться на другие сайты
olgnet Опубликовано 25 ноября, 2011 Автор Жалоба Поделиться Опубликовано 25 ноября, 2011 Нет, изображения нужныПодождём ответа админа Цитата Ссылка на сообщение Поделиться на другие сайты
Гость Опубликовано 25 ноября, 2011 Жалоба Поделиться Опубликовано 25 ноября, 2011 изображения$this->products->get_images(фильтр по id товара(ов)); Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 25 ноября, 2011 Жалоба Поделиться Опубликовано 25 ноября, 2011 admin а как же с results? Цитата Ссылка на сообщение Поделиться на другие сайты
Гость Опубликовано 25 ноября, 2011 Жалоба Поделиться Опубликовано 25 ноября, 2011 results возвращает массив объектов из базы, используйте results а не result. Result выводит только первый объект Цитата Ссылка на сообщение Поделиться на другие сайты
olgnet Опубликовано 25 ноября, 2011 Автор Жалоба Поделиться Опубликовано 25 ноября, 2011 Но results не работает, вот например код который вы мне выше писали // Выбираем случайные id товаров$this->db->query('SELECT id FROM __products ORDER BY RAND() LIMIT 4');$rand_ids = $this->db->results():// Выбираем эти товары$rnd_products = $this->products->get_products(array('id'=>$rand_ids));// Передаём в шаблон$this->design->assign('rnd_products', $rnd_products);у меня не работает Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 25 ноября, 2011 Жалоба Поделиться Опубликовано 25 ноября, 2011 Такое ощущение что admin не понимает о чем идет речь. Цитата Ссылка на сообщение Поделиться на другие сайты
Гость Опубликовано 25 ноября, 2011 Жалоба Поделиться Опубликовано 25 ноября, 2011 $rand_ids = $this->db->results('id'):теперь $rand_ids будет не массив объектов, а массив чисел Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.