Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Ruby On Rails > Переделать код


Автор: Лена 20.12.2009, 18:04
У меня есть код который выстраивает список товаров в столбик:
Код

<table>
<% for product in @products -%>
  <tr>
     <td><%= image_tag(product.image_url) %></td>
     <td ><h3><%= h(product.title) %></h3><%= (truncate(product.description, 350))%>
     <%= link_to 'Подробнее >>', :action => 'new_window', :id => product %>
     </td>
  </tr>
  
  <tr>
     <td valign="top"><span class="price"><%= number_to_currency(product.price) %></span></td>
     <td>
     <% form_remote_tag :url => { :action => :add_to_cart, :id => product } do %>
      <%= submit_tag "Добавить в корзину" %><hr>
      
    <% end %></td>
  </tr>
<% end %>
 </table>


Как переделать код, чтобы был список в два стобика, а не в один. Я что-то не пойму как это реализовать

Автор: source777 20.12.2009, 19:18
А каким образом должно образоваться 2 столбика:

1 2
3 4
5 6
7 8
.. ..

или

1 i+1
2 i+2
.. ..
i  n

???

Автор: Лена 20.12.2009, 21:52
Цитата(source777 @  20.12.2009,  19:18 Найти цитируемый пост)
А каким образом должно образоваться 2 столбика:

1 2
3 4
5 6
7 8


Мне кажется этот вариант будет наиболее лучше...

Автор: source777 20.12.2009, 23:18
В таком случае тебе надо будет проверять счётчик итераций на чётность, и выводить соответствующий фрагмент вёрстки.
Вёрстку для двух столбиков ты ведь уже подготовила?

Автор: Лена 20.12.2009, 23:50
Цитата(source777 @  20.12.2009,  23:18 Найти цитируемый пост)
Вёрстку для двух столбиков ты ведь уже подготовила? 


Не совсем понимаю. Мне надо создать таблицу с двумя столбиками и в зависимости от четности раставлять данные в строках этой таблицы?

Автор: source777 21.12.2009, 00:24
Тебе надо просто определиться с вёрсткой.
Если ты хочешь выводить это в таблице, то тебе нужно будет закрывать </tr> после каждого второго продукта.

P.S. Кстати непонятно, почему у тебя сейчас 2 строчки(tr) на каждый продукт, должна быть только одна, а всё описание продукта должно помещаться внутрь ячейки(td). Ну это есть ты табличную вёрстку предпочитаешь, а не блочную.

Добавлено через 1 минуту и 40 секунд
P.P.S. В любом случае, подготовь сначала вёрстку без привязки к Ruby, просто голый HTML.

Автор: Лена 21.12.2009, 11:24
Цитата(source777 @  21.12.2009,  00:24 Найти цитируемый пост)
Кстати непонятно, почему у тебя сейчас 2 строчки(tr) на каждый продукт, должна быть только одна, а всё описание продукта должно помещаться внутрь ячейки(td). 



Не вижу ошибки. Вот добавила границу для таблицы, чтобы визульно посмотреть для тестирования. Все выглядит как и планировала (см.рис.).
Теперь думаю как переделать стуктуру этой table под два столбика.  smile 

Автор: source777 21.12.2009, 12:38
Цитата(Лена @  21.12.2009,  11:24 Найти цитируемый пост)
Не вижу ошибки. Вот добавила границу для таблицы, чтобы визульно посмотреть для тестирования. Все выглядит как и планировала (см.рис.).

Ну если ты так и планировала, то нужно делать таблицу внутри td. Т.к. сейчас у тебя нет никакого элемента, внутри которого содержится всё, что относится к конкретному продукту, а это уже логическая ошибка вёрстки.

Автор: Лена 21.12.2009, 15:03
Цитата(source777 @  21.12.2009,  12:38 Найти цитируемый пост)
а это уже логическая ошибка вёрстки. 



А как все таки наиболее правильно будет решить? Как примерно должен выглядеть html?

Автор: source777 21.12.2009, 15:41
Цитата(Лена @  21.12.2009,  15:03 Найти цитируемый пост)
Как примерно должен выглядеть html? 

Ну это уже в другой раздел. 
Если бы я делал нечто подобное, то html выглядел бы примерно так:
Код

<ul class="products">
  <li>
   <!-- а сюда можно уже саму информацию о продукте, хоть таблицей, хоть как угодно -->
  </li>
  <li>
  </li>
...
  <li>
  </li>
</ul>

А остальное в CSS, например:
Код

.products li {
  float:left;
  list-style-type:none;
  width:50%;
}

Автор: Лена 21.12.2009, 22:02
Подскажите а в этой верстке где должна быть строка перебора: <% for product in @products -%>
?

Автор: source777 21.12.2009, 22:23
После <ul class="products">


Код

<ul class="products">
<% for product in @products -%>
  <li><table>
  <tr>
     <td><%= image_tag(product.image_url) %></td>
     <td ><h3><%= h(product.title) %></h3><%= (truncate(product.description, 350))%>
     <%= link_to 'Подробнее >>', :action => 'new_window', :id => product %>
     </td>
  </tr>
  
  <tr>
     <td valign="top"><span class="price"><%= number_to_currency(product.price) %></span></td>
     <td>
     <% form_remote_tag :url => { :action => :add_to_cart, :id => product } do %>
      <%= submit_tag "Добавить в корзину" %><hr>
      
    <% end %></td>
  </tr>
  </table></li>
<% end %>
</ul>

Автор: Лена 21.12.2009, 22:39
Цитата(source777 @  21.12.2009,  22:23 Найти цитируемый пост)
После <ul class="products">


Упорно выстраивается на всех страницах в один столбик...

Автор: source777 21.12.2009, 23:05
Цитата(Лена @  21.12.2009,  22:39 Найти цитируемый пост)
Упорно выстраивается на всех страницах в один столбик... 

Используй CSS!!!

Автор: Лена 21.12.2009, 23:23
Цитата(source777 @  21.12.2009,  23:05 Найти цитируемый пост)
Используй CSS!!!


У меня не получается. Вот что вижу в Опере (рис.).
Почему-то пустые места и таблицы разной высоты. smile 

Автор: source777 22.12.2009, 13:21
Цитата(Лена @  21.12.2009,  23:23 Найти цитируемый пост)
Почему-то пустые места и таблицы разной высоты

Это у тебя ячейки с текстом описания продукта разной высоты, исправь.

Автор: Лена 23.12.2009, 00:51
Цитата(source777 @  22.12.2009,  13:21 Найти цитируемый пост)
Это у тебя ячейки с текстом описания продукта разной высоты, исправь. 



В общем не получилось у меня красиво разбить. Пока оставила как есть.  smile 

Автор: Лена 26.12.2009, 01:35
В поисках как все таки засунуть все в две колонки таблицы  чтобы все было ровно, был найден такой код:
Код

<table>
  <tr>
     <% for product in @products -%>
         <td><%= image_tag(product.image_url) %></td>
         <h3><%= h(product.title) %></h3>
         <p><%= (truncate(product.description, 350)) %></p>
         <%= link_to 'Подробнее >>', :action => 'new_window', :id => product %>
         <span class="price"><%= number_to_currency(product.price) %></span>
         <% form_remote_tag :url => { :action => :add_to_cart, :id => product } do %>
         <%= submit_tag "Добавить в корзину" %>
         <% end %>
         </td>
         <%= cycle('', '</tr><tr>') unless @products.last == product %>
     <% end %>
  </tr>
 </table>


Однако здесь где-то ошибка... Может есть подсказка?

Автор: Лена 28.12.2009, 22:47
Вот этот код дал результат. Код работает как надо:
Код

<table class="entry" bgcolor=White cellpadding="5" cellspacing="0" width=80% border=0>
  <% i=0 %>
  <% for product in @products -%>
    <% if (i%2).zero? %>
      <tr  valign=top>
        <td><%= image_tag(product.image_url) %></BR><span class="price"><%= (product.price * @curs.course.to_f).floor %> гр.</span></td>
        <td ><h3><div class=amino><%= h(product.category) %></div><%= h(product.title) %></h3><%= (truncate(product.description, 350))%>
        <%= link_to 'Подробнее >>', :action => 'new_window', :id => product %></BR>
        <% form_remote_tag :url => { :action => :add_to_cart, :id => product } do %>
        <%= image_submit_tag("kor.gif") %>
        <% end %>
        </td>
    <% else %>
        <td><%= image_tag(product.image_url) %></BR><span class="price"><%= (product.price * @curs.course.to_f).floor %> гр.</span></td>
        <td ><h3><div class=amino><%= h(product.category) %></div><%= h(product.title) %></h3><%= (truncate(product.description, 350))%>
        <%= link_to 'Подробнее >>', :action => 'new_window', :id => product %></BR>
        <% form_remote_tag :url => { :action => :add_to_cart, :id => product } do %>
        <%= image_submit_tag("kor.gif") %>
        <% end %>
        </td>
      </tr>
    <% end %>
    <% i+=1 %>
  <% end %>
</table>

Автор: source777 28.12.2009, 23:58
Осталось только отDRYить!  smile 

Автор: Лена 29.12.2009, 11:13
Цитата(source777 @  28.12.2009,  23:58 Найти цитируемый пост)
Осталось только отDRYить!


Это как?  smile 

Автор: source777 29.12.2009, 13:15
это без дублирования кода, см. http://en.wikipedia.org/wiki/Don%27t_repeat_yourself

Автор: sunchess 23.3.2010, 14:15
Смотрите в сторону Array#in_groups_of и не надо велосипеда smile

Автор: source777 23.3.2010, 22:28
sunchess, не надо старые темы откапывать. smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)