циклы в SMARTY

  • Автор темы Автор темы stepby
  • Дата начала Дата начала

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}
 
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>
 
Анатолий

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

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

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

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

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

$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>
=========================================

Спасибо!

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

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

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

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

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

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

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

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

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

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

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

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

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

-~{}~ 19.10.05 12:23:

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


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


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

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

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

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

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

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

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

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

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

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

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

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


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

-~{}~ 19.10.05 12:53:

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

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