|
|
|
| Использую шаблонизатор xtemplate
Хочу вывести столько заполненных таблиц, сколько было возвращено запросом.
Вот что делаю:
<?
include_once('template/xtemplate.class.php');
$xtpl = new XTemplate('../views/full_search_result.tpl');
foreach ($res as $key) {
// Присваиваем блоку DATA текущий ряд массива
$xtpl->assign('DATA', $key['name']);
// Обрабатываем текуший ряд таблицы
$xtpl->parse('main.advesting');
}
// Обрабатываем всю таблицу
$xtpl->parse('main'); //Парсинг главного блока, в котором у нас все содержимое шаблона
$xtpl->out('main'); //Вывод результатов парсинга на экран
?>
|
Проблема в том, что в шаблоне за место DATA.NAME отображается лишь 1-я буква имени, а не полное $key['name']. | |
|
|
|
|
|
|
|
для: OLi
(06.05.2012 в 20:00)
| | Массив такой структуры:
Array
(
[0] => Array
(
[id] => 1
[0] => 1
[date] => 12
[1] => 12
[name] => Олег
[2] => Олег
[email] => no@mail.ru
[3] => oli35@mail.ru
[phone] => +373777739923
[4] => +37379734923
[about] => Обо мне
[5] => Обо мне
[region] => 1
[6] => 1
[code] => 1414
[7] => 1414
[type] => 1
[8] => 1
)
[1] => Array
(
[id] => 2
[0] => 2
[date] => 67
[1] => 67
[name] => Яна
[2] => Яна
[email] =>
[3] =>
[phone] => 546646
[4] => 546646
[about] => 46t46
[5] => 46t46
[region] => 4
[6] => 4
[code] => 5656
[7] => 5656
[type] => 1
[8] => 1
)
)
|
| |
|
|
|
|
|
|
|
для: OLi
(06.05.2012 в 20:07)
| | В конце концов вы научитесь грамотно использовать mysql_fetch_array() или нет? Вам ведь уже говорили об этом, или вас обматерить надо, чтобы поняли?
А что такое будет $key['name'], не строка случайно? А если она, это разъясняет вам причину? | |
|
|
|
|
|
|
|
для: confirm
(06.05.2012 в 20:13)
| | Да, кажется понял, думал дело в шаблонизаторе,
Получается, что так $res[$i]['name']? | |
|
|
|
|
|
|
|
для: OLi
(06.05.2012 в 20:17)
| | И откуда он возьмется (индекс этот) в конструкции foreach?
<?
foreach($res as $key) {
echo $key['name'].'<br>';
//....
}
| Не дай бог вы еще такой массив (как результат mysql_fetch_array) выложите .... | |
|
|
|
|
|
|
|
для: confirm
(06.05.2012 в 20:30)
| | Да - я понял ошибку, действительно глупо не видеть то, что явно. Тогда, если немного переделать пример выше на:
$rowsize = count($res);
for ($i = 0; $i < $rowsize; $i++) {
// Присваиваем блоку DATA текущий ряд массива
$xtpl->assign('DATA', $res[$i]['name']);
// Обрабатываем текуший ряд таблицы
$xtpl->parse('main.advesting');
}
|
Вопрос остается! | |
|
|
|
|
|
|
|
для: OLi
(06.05.2012 в 20:33)
| | Значит так:
Чем вас уже не устраивает foreach?
И немедленно переделайте свой запрос к базе - хватит мусор гонять туда сюда. | |
|
|
|
|
|
|
|
для: confirm
(06.05.2012 в 20:37)
| | Почему мусор? - Вы имеете ввиду сформировать массив иначе?
Видимо я не догоняю, просто в foreach делая echo $key['name'] происходит вывод, а в
$xtpl->assign('DATA', ]); это не подставляется. | |
|
|
|
|
|
|
|
для: OLi
(06.05.2012 в 20:42)
| | >Почему мусор?
А вы, выставляя сюда свой массив, разве не видите, что каждый его вложенный массив содержит два идентичных набора данных, один из которых индексный, а второй ассоциативный. Вы используете только один из них - ассоциативный. А второй набор это что? Хотите сказать, от него польза? Это МУСОР!
Это не просто безграмотность или незнание, это расточительство. Представьте себе, что вы таким же образом будете получать некие объемные сообщения, которые могут иметь комментарии к ним, которые в свою очередь тоже могут содержать много буковок, а не дай бог еще и картинки в базе. Да все это с объединением запросов, когда на каждый комментарий повтор сообщения, да еще и картинки...
Уже не хило по объему. А вы еще бах и умножаете все это на 2, бог знает для чего. Ресурсы вам будут выделять в рамках, а не сколько влезет, и эти ресурсы надо экономить.
Это вам понятно? А если так - немедленно прочесть о том, что я сказал. Прочесть и запомнить, а попутно узнать, что кроме этой функции существую еще две, одна из которых как раз вам и нужна. Либо используйте нынешнюю, но грамотно.
>а в $xtpl->assign('DATA', ]); это не подставляется.
Что не подставляется, и что вам вообще надо передать в шаблон? Весть массив или отдельные его элементы? | |
|
|
|
|
|
|
|
для: confirm
(06.05.2012 в 20:54)
| | Ответ меня вразумил! Мне нужно передать в шаблон отдельные его элементы
Массив привел к такому виду:
Array
(
[0] => Array
(
[0] => 1
[1] => 12
[2] => Олег
[3] => o@mail.ru
[4] => +37377773523
[5] => Обо мне
[6] => 1
[7] => 1414
[8] => 1
)....
|
| |
|
|
|
|
|
|
|
для: OLi
(06.05.2012 в 20:57)
| | Вот часть вашего массива (и без мусора):
<?
$a = array (
array('name' => 'Олег',
'email' => 'no@mail.ru',
'phone' => '+373777739923'),
array('name' => 'Яна',
'email' => '',
'phone' => '546646')
);
foreach($a as $v) echo $v['name'].', '.$v['email'].', '.$v['phone'].'<br>';
| Проверьте, на экран будут выведены все элементы, которые я запрашиваю. Так какие претензии к конструкции foreach?
Я не знаю этого шаблонизатора, хотя по присваиванию очень похоже на Smarty, и что у вас является ошибкой не могу сказать. Вы либо не тот тип передаете, либо не так передаете/присваиваете.... В общем причину ищите не в цикле. | |
|
|
|
|
|
|
|
для: OLi
(06.05.2012 в 20:57)
| | Не массив к такому виду надо приводить, а еще раз повторяю - делать только необходимые выборки из ресурса. Читайте руководство, пора привыкнуть к этому. | |
|
|
|
|
|
|
|
для: confirm
(06.05.2012 в 21:08)
| | Проблем никаких нет с foreach - с самого начала написал, жаль, что с шаблонизатором помочь не можете, в нем проблема | |
|
|
|
|
|
|
|
для: OLi
(06.05.2012 в 21:19)
| | Вот тут есть пример, схожий с моим - может быть наведет вас на мысль
http://yvision.kz/post/1415 | |
|
|
|
|
|
|
|
для: OLi
(06.05.2012 в 21:21)
| | Вопрос снят, надо было так )))
for ($i = 0; $i < $rowsize; $i++) {
// Присваиваем блоку DATA текущий ряд массива
$xtpl->assign('DATA', $res[$i]);
// Обрабатываем текуший ряд таблицы
$xtpl->parse('main.advesting');
}
| \\
Благодарю за советы по рациональному использованию ресурсов. | |
|
|
|
|
|
|
|
для: OLi
(06.05.2012 в 21:26)
| | Значит я был прав - вы не понимаете, чего вам надо, а потому и передавали в шаблон совсем не то.
<?
foreach($res as $key) {
$xtpl->assign('DATA', $key);
$xtpl->parse('main.advesting');
}
| PS. Только в данном случае (чутье мне подсказывает) необходимости в цикле нет вообще. | |
|
|
|
|
|
|
|
для: OLi
(06.05.2012 в 21:21)
| | Еще раз говорю, я не знаю этого шаблонизатора, и разбираться в нем нет никакой охоты.
Изначально вы конструкцией передавали в тело ее, не элементы, а значения, и получали в шаблоне только первый символ этого значения. А так как строка это массив, то это наводит на мысль, что в шаблоне вы ожидаете массив, который раскладываете, а получая строку, и получаете, что получаете. Из этого следует, что вам не элементы передавать в шаблон надо, а массив.
Если все обстоит именно так, то это и есть причина. | |
|
|
|