Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: SECTION в SMARTY
 
 автор: mindless   (15.03.2007 в 03:20)   письмо автору
 
 

есть таблица с колонками "картинка" "описание" "id" в ней 7 записей
как используя смарти получить все записи из колонки "картинка"?
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
делаю так:


<?
$sql
=mysql_query("select * from models");
$data=mysql_fetch_array($sql);
$smarty->assign('tt',$data);  //$data['img']
$smarty->display('models.tpl');
?>

в шаблоне

{section name=items loop=$tt} 
 {$tt.img}
{/section} 

выводит 8 раз значение первой колонки!!!

   
 
 автор: sim5   (15.03.2007 в 07:14)   письмо автору
 
   для: mindless   (15.03.2007 в 03:20)
 

А почему в секции Смарти вы не указывате ее индекс? И что означает {.img}? У вас должно быть типа такой записи: {$tt[items]}

   
 
 автор: mindless   (15.03.2007 в 07:57)   письмо автору
 
   для: sim5   (15.03.2007 в 07:14)
 

типа такой записи {$tt[items]} выводит только последнее значение из колонки
-----------
покажите плиз на примере как надо!

что означает {.img}?
это имя колонки в БД
img - выводит 8 раз имя первого файла
id например 8 раз id первой колонки ...etc

   
 
 автор: sim5   (15.03.2007 в 09:51)   письмо автору
 
   для: mindless   (15.03.2007 в 07:57)
 

Ну вы же не имя колонки в БД передавть должны на страницу. Я не знаю что у вас в БД, но допустим у вас там у казано имя файла картики, а другой ячейке, значение атрибута title.
Вы передали этот массив в Смарти под именем $tt.

Дальше в Смарти выводим (опускаем для простоты ячейки вашей таблицы), при этом, если у вас картинки находятся в папке folderimg, выводим:

{section name=i loop=$tt}
<img src=./folderimg/{$tt[i][0]} title="{$tt[i][1]}">
{/section}

Вам же надо указывать индекс массива, как вы это и в циклах делаете, иначе как вы получите то, чего хотите.

Прикрепляю мануал по section.

   
 
 автор: mindless   (15.03.2007 в 11:50)   письмо автору
 
   для: sim5   (15.03.2007 в 09:51)
 

спасибо за мануал... но к сожелению это тот же кусок из хелпа со смарти.нет.. там показана раота самого смарти по выборке данных из уже переданого массива и ничего о передаче этого же массива.. вот тут http://doc.hive.kiev.ua/smarty/language.function.section.html] например даже приводится php код демонструющий что имено и как передали в секцию.. эти примеры ясны и работает на 100 %... у меня же что-то не выходит так как надо :)
----------------------------------------------------------------------------------------------------------------------
давайте еще раз с начала


- выбрали все данные из БД
$sql=mysql_query("select * from models");
- поместили их в именновано/нумерованный массив
$data=mysql_fetch_array($sql);
- передаем весь массив в переменую $tt для смарти
$smarty->assign('tt',$data);


дальше в шаблоне

- начало секции с производным именем с обращением к переменной $tt в которой массив
{section name=ext loop=$tt}
- тут вы пишите про индексы
- как по мне недолжно быть разницы меж записью
- массив[номер эллемента] и массив[имя эллемента] тоесть
-$tt[i][0]=$tt[i][img] - или что то типа того.....
- вот здесь у меня проблема я незнаю как правельно обратится к переменной
- если смотреть хелп то надо вроде как $tt[ext] 
но оно выдает первую строку всех колонок а не конкретную колонку !:(]
$tt[ext][0] - вот это дает воопще символы отдельно!
{/section} 


покажите пример !

   
 
 автор: sim5   (15.03.2007 в 12:47)   письмо автору
 
   для: mindless   (15.03.2007 в 11:50)
 

А вы проверяли - что у вас вообще передается в Смарти? Вы вообще уверены что передали туда массив?

   
 
 автор: Loki   (15.03.2007 в 14:15)   письмо автору
 
   для: mindless   (15.03.2007 в 03:20)
 

>выводит 8 раз значение первой колонки!!!
разумеется. Других-то вы ему не передаете... смарти ждет на входе двумерный массив, а вы ему передаете одномерный.
И синтаксис у смарти другой:

{section name=items loop=$tt} 
 {$tt[items].img}
{/section}  

   
 
 автор: mindless   (16.03.2007 в 01:10)   письмо автору
 
   для: Loki   (15.03.2007 в 14:15)
 

и так не то выдает :(((

   
 
 автор: sim5   (16.03.2007 в 11:32)   письмо автору
 
   для: mindless   (16.03.2007 в 01:10)
 

Дважды пытался открыть вашу ссылку - не открывается, ну и бог сней. Я вобще не понимаю, как это вы, вместо значений колонки таблицы, можете передать ее имя, и просто уже по этому имени - получить значения. Ну и бог с ним, можете - значит можете. Чего вы голову морочите. Вот пример:


//php
$primer = array('img1','img2','img3','img4','img5','img6','img7','img8');
$smarty->assign("images", $primer);

//tpl
{section name=i loop=$images}
 {$images[i]}<br>
{/section}


запустите его, и вы получите список всех 8 значений массива. Если вы передали в смарти значения под именем $tt, то под этим именем вы и можете обратиться к этим значениям, не важно что это у вас - массив или просто строка. А прикрепленного мануала вполне достаточно, чтобы понять как работает section. Можно передать значения и по другому, но так как это делаете вы, то обратиться можно так как я написал, НО может я и не прав.

   
 
 автор: mindless   (16.03.2007 в 12:39)   письмо автору
 
   для: sim5   (16.03.2007 в 11:32)
 

http://doc.hive.kiev.ua/smarty/language.function.section.html

ненужны мне примеры с мануалов - простые прммеры они всенгда работают
почему тут $data=mysql_fetch_array($sql);
не нужен while?
кто нить может дать работающий свой пример работы с БД а не только обрезаные примеры из хелпа

   
 
 автор: sim5   (16.03.2007 в 13:06)   письмо автору
 
   для: mindless   (16.03.2007 в 12:39)
 

Посмотрел, и что? А что вас не устраивает? Или у вас массив содержит данные, которые таким "некрасивым" способ никак не выведешь? Вы внимательно прочитайте то, что написано в вашей ссылке...

   
 
 автор: mindless   (16.03.2007 в 14:56)   письмо автору
 
   для: sim5   (16.03.2007 в 13:06)
 

а вы сами то пробывали что мне пишете?
или так тяжело восоздать мой пример и посмотреть что выходит а?

index.php

$query  = "SELECT * FROM test";
$result = mysql_query($query);
$data=mysql_fetch_array($result);
$smarty->assign('gg',$data);
$smarty->display('tt.tpl');


tt.tpl

{section name=h loop=$gg}
{$gg[h]}
{/section}


дамп

-- 
-- Структура таблицы `test`
-- 

CREATE TABLE `test` (
  `text` text NOT NULL,
  `id` int(11) NOT NULL auto_increment,
  KEY `id` (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=5 ;

-- 
-- Дамп данных таблицы `test`
-- 

INSERT INTO `test` (`text`, `id`) VALUES 
('aaa', 1),
('bbb', 2),
('ccc', 3),
('ddd', 4);

   
 
 автор: sim5   (16.03.2007 в 16:01)   письмо автору
562 байт
 
   для: mindless   (16.03.2007 в 14:56)
 

>а вы сами то пробывали что мне пишете?
А вы думаете я вам анекдот рассказываю?
Повторяю пример (уже с таблицей) и прикрепляю рисунок результата его выполнения:


//php
$primer = array('img1','img2','img3','img4','img5','img6','img7','img8'); 
$smarty->assign("images", $primer);

//tpl
<table bgcolor="#000000" cellpadding="4" cellspacing="1">
 <tr bgcolor="#ffffff">
  {section name=i loop=$images}
   <td>{$images[i]}</td>
  {/section}
 </tr>
</table>

   
 
 автор: mindless   (16.03.2007 в 17:05)   письмо автору
 
   для: sim5   (16.03.2007 в 16:01)
 

меня не интересует это
$primer = array('img1','img2','img3','img4','img5','img6','img7','img8');
$smarty->assign("images", $primer);

это работает как пить дать!
массив четкий
все правельно..

вы попробуйте с данными из БД мой пример!

   
 
 автор: sim5   (16.03.2007 в 17:19)   письмо автору
 
   для: mindless   (16.03.2007 в 17:05)
 

Вы в своем примере, прежде чем передать это в Смарти, проверьте, что вы туда передаете. Сомнительно что вы туда передаете массив... Посмотрите внимательно...

   
 
 автор: mindless   (16.03.2007 в 19:04)   письмо автору
 
   для: sim5   (16.03.2007 в 17:19)
 

товарищь
а как вы думаете зачем я код привел?

чтоб можно было оценить все ли верно!

while($data[]=mysql_fetch_array($result))
{$smarty->assign('gg',$data);

{section name=h loop=$gg}
{$gg[h].text}
{/section}

вот так работает

   
 
 автор: sim5   (17.03.2007 в 02:48)   письмо автору
 
   для: mindless   (16.03.2007 в 19:04)
 

От товарищьча товарищьчу. Вы в своем первом посте, привели все свои "действия". Я вас и спрашивал... Вы в нем неверно обращаетесь к таблице для получения всех записей в массив. Там нет массива переданного в Смарти, а обращение к элеметам массива (которого нет) "разворачиваемого" в шаблоне, вы производили не правильно... Вы спрашивали о section - я вам ответил... Ну если не нравиться как - извиняйте.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования