Консультация № 145999
04.10.2008, 18:38
0.00 руб.
0 13 0
Добрый вечер уважаемые эксперты.

Вопрос на тему Smarty. Я пытаюсь сделать страницу на которой будут отображены фото в табличке 3x4 (3 толбца на 4 строки). Ссылки на эти фото хранятся в бд. Не могу понять, с чего начать.

файл gallary.php

Код:

require_once ('smarty2_6_20/libs/Smarty.class.php');
$smarty = new Smarty;
....
$page=0;
$photonumber=12;
$db->sql_query("SELECT * FROM `gallary` order by `id` DESC LIMIT $page, $photonumber");
$rows=array();
while ($row=$db->sql_fetchassoc())
$rows[]=$row;
$smarty->assign('new', $rows);
....
$smarty -> display('gallary.tpl');



Файл gallary.tpl (Понимаю, что не правильно организовано)

Код:
 
<table>
<tr>
{foreach key=key item=item from=$new}
<td><img src="{$item.small}"></img></td>
{/foreach}
</tr>
</table>

При таком шаблоне, под каждую фотку создаётся свой столбец. А нужно чтобы, чтобы по 3 фотки в 1й строке отображалось. Первая строка заполнилась -> переходим на вторую и т.д. Как-то переключатель надо сделать, но как. Пожалуйста помогите :)

Обсуждение

Неизвестный
04.10.2008, 19:18
общий
К сожалению я точно не знаю, что умеет smarty в шаблонах, но если в этих шаблонах есть IF, ваша проблема решается довольно просто:

Подправим цикл:

$id = 0;
while ($row=$db->sql_fetchassoc())
{
$row['ID'] = $id;
$rows[]=$row;
$id=$id+1;
}

Теперь у вас в строчках есть поле ID с номером строки. (Если у вас ID уже занят - выбирайте другое название)
В шаблоне примерно так:

<table>
<tr>
{foreach key=key item=item from=$new}
<td><img src="{$item.small}"></img></td>
{if $item.ID кратно трём}</tr><tr>{endif}
{/foreach}
</tr>
</table>
Неизвестный
04.10.2008, 21:56
общий
Спасибо за помощь,

На страничке всё выстраивается в ряд...

html код генерируется следующий:
Код:
 

<table>
<tr>
<td><img src="images/gallary/small/30.jpg"></img></td>
<td><img src="images/gallary/small/19.jpg"></img></td>
<td><img src="images/gallary/small/5.jpg"></img></td>
<td><img src="images/gallary/small/1.jpg"></img></td>
</tr><tr></tr>
</table>



что ж делать то...
Неизвестный
04.10.2008, 21:59
общий
Владимир, спасибо Вам ещё раз, я поставил в условии не кратное 3м, а кратное 2м и всё отлично стало работать!
Неизвестный
04.10.2008, 22:02
общий
Лучше поставьте $id = 1, тогда иды будут начинаться не с 0, а с 1. Это я слегка ошибся
Неизвестный
04.10.2008, 22:08
общий
Ага, уже сделалкрасота...
Неизвестный
04.10.2008, 22:19
общий
Рано радуюсь....

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

Код:
 

<table>
<tr>
<td><img src="images/gallary/small/63.jpg"></img></td>
<td><img src="images/gallary/small/56.jpg"></img></td>
<td><img src="images/gallary/small/33.jpg"></img></td>
</tr>
<tr>
<td><img src="images/gallary/small/40.jpg"></img></td>
<td><img src="images/gallary/small/46.jpg"></img></td>
<td><img src="images/gallary/small/47.jpg"></img></td>
<td><img src="images/gallary/small/30.jpg"></img></td>
<td><img src="images/gallary/small/19.jpg"></img></td>
<td><img src="images/gallary/small/5.jpg"></img></td>
<td><img src="images/gallary/small/1.jpg"></img></td>
</tr>
</table>



досадно :(
Неизвестный
04.10.2008, 22:21
общий
что-то я с кратным недопомнимаю...
Неизвестный
04.10.2008, 22:40
общий
Ощущение, что у вас там просто равнство. Попробуйте вывести IDы, может в них глюк?
Неизвестный
04.10.2008, 22:44
общий
Да, стояло равенство (мой косяк, поэтому он доходил до 3х и дальше всё в одну строку выводил), сейчас поднял документацию пытаюсь разобраться, пока безуспешно.
Неизвестный
04.10.2008, 22:53
общий
Если в шаблоне не будет - переделайте код так:

$id = 1;
while ($row=$db->sql_fetchassoc())
{
$row['ID'] = $id;
$rows[]=$row;
$id=$id+1;
if ($id > 3) $id=1;
}
Тогда id будет меняться по принципу 1,2,3,1,2,3 но в шаблоне уже поменять не получиться.
Неизвестный
04.10.2008, 23:03
общий
В шаблонах есть возможность использовать mod (остаток от деления), чётно (is not even), не чётно (is not odd), is not div by (возможно деление без остатка).

Если сделать
...
if ($id>3) $id=1;
...

Тогда я не смогу использовать id'шники самих изображений в бд которые лежат, на случай если буду делать увеличенный просмотр.
Неизвестный
04.10.2008, 23:09
общий
ааа всё разобрался!
:) спасибо за внимание
Неизвестный
04.10.2008, 23:09
общий
Тогда {if ($item.ID mod 3) = 2}</tr><tr>{endif}
Форма ответа