циклы в SMARTY

stepby

Новичок
циклы в SMARTY

прошу подсказки знающих людей

есть двумерный массив
$arr[0]['id']=10;
$arr[0]['title']='a';

$arr[1]['id']=20;
$arr[1]['title']='b';

$arr[2]['id']=30;
$arr[2]['title']='c';

$arr[3]['id']=40;
$arr[3]['title']='d';

$arr[4]['id']=50;
$arr[4]['title']='e';

нужен такой формат вывода (нужно в цикле табличку прокрутить - с этим вот и проблем у меня)

<table>
<tr>
<td width=35%>{$id}</td>
<td width=10%>{$title}</td>
<td width=1><img src="img/none.gif"></td>

<td width=20%><img src="img/none.gif"></td>
<td width=35%>{$nex_id}{$next_title}</td>
</td>
</tr>
</table><img src="img/none.gif" width=1 height=15 border="0"><Br>


пишу так но так не правильно ( и результат естественно не верный
{section name="item" loop=$arr}
<table>
<tr>
<td width=35%>{$arr[item].id}</td>
<td width=10%>{$arr[item].title}</td>
<td width=1><img src="img/none.gif"></td>

<td width=20%><img src=
"img/none.gif"></td>
<td width=35%>{$arr[item.index_next].id}{$arr[item.index_next].title}</td>
</td>
</tr>
</table><img src="img/none.gif" width=1 height=15 border="0"><Br>


{/section}
 

kvf77

Red Devil
stepby

ну и в чем проблема-то?
когда проблема - пишут: делал так, не получилось

намек понял?

на сайте по Smarty есть русская дока, тебе нужна команда foreach
 

Анатолий

Новичок
stepby
Советую обратить свой взор на http://smarty.incutio.com/?page=HtmlTableAdvPlugin и внимательнее читать форум. Я недавно подобный вопрос задавал.

А вообще с твоей проблемой можно справиться так:
PHP:
<table>
{foreach name=tbl item=tbl from=$arr}
<tr>
<td width=35%>{$tbl.id}</td>
<td width=10%>{$tbl.title}</td>
<td width=1><img src="img/none.gif"></td>

<td width=20%><img src="img/none.gif"></td>
<td width=35%>{$tbl.id}{$tbl.title}</td>
</td>
</tr>
{/foreach}
</table>
 

kvf77

Red Devil
Анатолий

ну вот зачем тут твой пример кода? особенно когда человек понял что надо делать? давай дадим другим поучиться самостоятельно

для его нужд твоя советуемая надстрой ка нафиг не нужна - она вообще врядли для чего нужна - тока для описанного тобою редкого случая помоему, все остальное делается за 5 сек. самостоятельно без лишних плугинов
 

Анатолий

Новичок
kvf77
Согласен, но я ему и написал, что для его нужд подойдет решение с {foreach}. А надстройка для общего развития - это никогда не помешает.
 

kvf77

Red Devil
magic

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

stepby

Новичок
Всем пасибо!
К сожалению не смог воспользоваться Вашими советами.
Сделал по своему и думаю есть один аспект почему именно свой вариант оставляю

- мой код поймет любой программер который будет поддерживать проект
- плюс в том что время разобраться нужно минимум
- другой плюс это переносимость для других проектов

пишу то что я навоял
если кто-то может написать лучшее решение
естественно постараюсь разобраться и воспользоваться

$arr[0]['id']=10;
$arr[0]['title']='a';

$arr[1]['id']=20;
$arr[1]['title']='b';

$arr[2]['id']=30;
$arr[2]['title']='c';

$arr[3]['id']=40;
$arr[3]['title']='d';

$arr[4]['id']=50;
$arr[4]['title']='e';



код пхп
1.

$display='';
$num - это размер массива
for($i=0;$i<$num;$i+=2){
$a1[]=$arr[$i]; // первая колонка вывода
$a2[]=$arr[$i+1]; // вторая колонка вывода
$smarty=new Smarty;
$smarty->assign('a1',$a1);
$smarty->assign('a2',$a2);
$display.=$smarty->fetch(шаблон);
unset($a1);
unset($a2);
}
print $display;

2.шаблон
<table>
<tr>
{section name="item" loop=$a1}
<td width=35%>

{$a1[item].id}</td>

<td width=10%>{$a1[item].$title}</td>

{sectionelse}

<td width=35%> &nbsp;</td>

<td width=10%></td>

{/section}

<td width=1><img src="img/none.gif"></td>

<td width=20%><img src="img/none.gif"></td>
{section name="item" loop=$a2}

<td width=35%>{$a2[item].$id}{$a2[item].$title}</td>
</td>
{sectionelse}
<td width=35%>&nbsp;</td>

{/section}
</tr>
</table><img src="img/none.gif" width=1 height=15 border="0"><Br>
=========================================

Спасибо!

Пример написан сокращенно без необходимы проверок!
Но я думаю - двуколоночный вывод кому-то может помочь сохранить время на разработку на СМАРТИ
 

kvf77

Red Devil
stepby

угу - не знаю как кто - я твой код практически ваще не понял

интересно всетки какого вида тебе таблица нужна - потому как то, что ты привел тут я не очень представляю как должно выглядеть.

что значит "не смог воспользоваться" нашими советами, при условии, что Анатолий вообще дал тебе готовый код - который понятен и мал в отличие от твоего

зачем такой огород нагородил?

еще пару замечаний о плюсах - твой подход плох тем, что ты зачем-то делаешь несколько действий вместо одного

твой шаблон становится не явным и его использование усложняется

разбираться с твоим кодом ничуть не проще, чем с любым другим

переносимость я вообще не понял к какому боку ты приплел

и совсем напоследок - твой код - это пример того КАК НЕ НАДО на smarty делать двухколоночный вывод

О как - я всетки понял как твой код работает - ну ты брат ваще дал стране угля - выкинь быстренько эту залипуху и забудь ее как страшный сон - тебе Smarty-то нафиг понадобился? представляю как это все тормознет если таблица будет большой :)
 

stepby

Новичок
Спасибо тебе за ответы kvf77!

Но я вижу что задачу я описал не достаточно понятно так как все прочитали только половину моего первого сообщения
а вот мой первый пример кода никто не разобрал к сожалению и поэтому до конца не понял задачи

Задача состоит в том чтобы вывод данных сделать в две колонки с учетом верстки, а верстка первой части таблицы отличается от второй части таблицы.

-~{}~ 19.10.05 12:23:

И еще хочу добавить!
Плохо ребята то что критиковать легко, а вот если что-то делать -
для этого нужно приложить силы.


И как мне кажеться лучше не давать вообще комментариев
если ты не приводишь кода или полезных комментариев
например
!!!цитирую
===
еще пару замечаний о плюсах - твой подход плох тем, что ты зачем-то делаешь несколько действий вместо одного
=====


!!!цитирую
=====
ну ты брат ваще дал стране угля - выкинь быстренько эту залипуху
=====
 

kvf77

Red Devil
stepby

угу - перечитал - но твой вариант от этого не становится эффективнее.

во-первых, зачем тебе цикл for? когда можно просто сделать так:

$a1[]=array_keys($arr); // первая колонка вывода
$a2[]=array_values($arr); // вторая колонка вывода

во-вторых, шаблон должен быть единым - незачем плодить кучу шаблонов

еще бы неплохо было полгядеть на страничку, где твоя таблица сверстана - больно мне интересно понять как же она всетки должна выглядеть
 

stepby

Новичок
НАСЧЕТ=========
представляю как это все тормознет если таблица будет большой :)
===============================
Отвечаю
- таблица не будет больной - так как она одна но прокручивается в цикле
и резльтатом будет таких 10-50 ьабличек на страницу + добавиться постраничная разбивка.

И вообще - не увидел от тебя дельного совета kvf77.

Одни какие-то негативные отзывы .
 

kvf77

Red Devil
Автор оригинала: stepby
НАСЧЕТ=========
представляю как это все тормознет если таблица будет большой :)
===============================
Отвечаю
- таблица не будет больной - так как она одна но прокручивается в цикле
и резльтатом будет таких 10-50 ьабличек на страницу + добавиться постраничная разбивка.

И вообще - не увидел от тебя дельного совета kvf77.

Одни какие-то негативные отзывы .
ты не увидел, потому что не слушаешь что тебе говорят и помоему не читаешь толком, что я тебе пишу.

выложи в инет пример готовой таблицы, чтобы можно было заценить это произведение
 

stepby

Новичок
Такая запись

$a1[]=array_keys($arr); // первая колонка вывода
$a2[]=array_values($arr); // вторая колонка вывода


и ламеру понятна что это говно для этой задачи
и человек предлагет это юзать

-~{}~ 19.10.05 12:53:

Думаю тема закрыта
Всем спасибо!
 

kvf77

Red Devil
stepby

да я-то как бы и не против - пользуй как знаешь - когда захочешь сделать как правильно - приходи еще
 

Яро

бард-скальд
А мне вот интересно, тэги PHP и CODE религия запрещает использовать, чтобы код было удобнее читать в вопросах/ответах? Это, кстати, относится не только к этому треду - тенденция наплевательского отношения к потенциальным отвечающим растет изо дня в день.
 
Сверху