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

Форум PHP

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

 

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

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

тема: Использование шаблонизатора xtemplate
 
 автор: OLi   (06.05.2012 в 20:00)   письмо автору
 
 

Использую шаблонизатор 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:07)   письмо автору
 
   для: 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
        )

)

  Ответить  
 
 автор: confirm   (06.05.2012 в 20:13)   письмо автору
 
   для: OLi   (06.05.2012 в 20:07)
 

В конце концов вы научитесь грамотно использовать mysql_fetch_array() или нет? Вам ведь уже говорили об этом, или вас обматерить надо, чтобы поняли?
А что такое будет $key['name'], не строка случайно? А если она, это разъясняет вам причину?

  Ответить  
 
 автор: OLi   (06.05.2012 в 20:17)   письмо автору
 
   для: confirm   (06.05.2012 в 20:13)
 

Да, кажется понял, думал дело в шаблонизаторе,

Получается, что так $res[$i]['name']?

  Ответить  
 
 автор: confirm   (06.05.2012 в 20:30)   письмо автору
 
   для: OLi   (06.05.2012 в 20:17)
 

И откуда он возьмется (индекс этот) в конструкции foreach?
<?
foreach($res as $key) {
   echo 
$key['name'].'<br>';
   
//....

Не дай бог вы еще такой массив (как результат mysql_fetch_array) выложите ....

  Ответить  
 
 автор: OLi   (06.05.2012 в 20:33)   письмо автору
 
   для: 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'); 

}

Вопрос остается!

  Ответить  
 
 автор: confirm   (06.05.2012 в 20:37)   письмо автору
 
   для: OLi   (06.05.2012 в 20:33)
 

Значит так:
Чем вас уже не устраивает foreach?
И немедленно переделайте свой запрос к базе - хватит мусор гонять туда сюда.

  Ответить  
 
 автор: OLi   (06.05.2012 в 20:42)   письмо автору
 
   для: confirm   (06.05.2012 в 20:37)
 

Почему мусор? - Вы имеете ввиду сформировать массив иначе?
Видимо я не догоняю, просто в foreach делая echo $key['name'] происходит вывод, а в
$xtpl->assign('DATA', ]); это не подставляется.

  Ответить  
 
 автор: confirm   (06.05.2012 в 20:54)   письмо автору
 
   для: OLi   (06.05.2012 в 20:42)
 

>Почему мусор?

А вы, выставляя сюда свой массив, разве не видите, что каждый его вложенный массив содержит два идентичных набора данных, один из которых индексный, а второй ассоциативный. Вы используете только один из них - ассоциативный. А второй набор это что? Хотите сказать, от него польза? Это МУСОР!
Это не просто безграмотность или незнание, это расточительство. Представьте себе, что вы таким же образом будете получать некие объемные сообщения, которые могут иметь комментарии к ним, которые в свою очередь тоже могут содержать много буковок, а не дай бог еще и картинки в базе. Да все это с объединением запросов, когда на каждый комментарий повтор сообщения, да еще и картинки...
Уже не хило по объему. А вы еще бах и умножаете все это на 2, бог знает для чего. Ресурсы вам будут выделять в рамках, а не сколько влезет, и эти ресурсы надо экономить.
Это вам понятно? А если так - немедленно прочесть о том, что я сказал. Прочесть и запомнить, а попутно узнать, что кроме этой функции существую еще две, одна из которых как раз вам и нужна. Либо используйте нынешнюю, но грамотно.

>а в $xtpl->assign('DATA', ]); это не подставляется.

Что не подставляется, и что вам вообще надо передать в шаблон? Весть массив или отдельные его элементы?

  Ответить  
 
 автор: OLi   (06.05.2012 в 20:57)   письмо автору
 
   для: 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
        )....

  Ответить  
 
 автор: confirm   (06.05.2012 в 21:07)   письмо автору
 
   для: 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, и что у вас является ошибкой не могу сказать. Вы либо не тот тип передаете, либо не так передаете/присваиваете.... В общем причину ищите не в цикле.

  Ответить  
 
 автор: confirm   (06.05.2012 в 21:08)   письмо автору
 
   для: OLi   (06.05.2012 в 20:57)
 

Не массив к такому виду надо приводить, а еще раз повторяю - делать только необходимые выборки из ресурса. Читайте руководство, пора привыкнуть к этому.

  Ответить  
 
 автор: OLi   (06.05.2012 в 21:19)   письмо автору
 
   для: confirm   (06.05.2012 в 21:08)
 

Проблем никаких нет с foreach - с самого начала написал, жаль, что с шаблонизатором помочь не можете, в нем проблема

  Ответить  
 
 автор: OLi   (06.05.2012 в 21:21)   письмо автору
 
   для: OLi   (06.05.2012 в 21:19)
 

Вот тут есть пример, схожий с моим - может быть наведет вас на мысль
http://yvision.kz/post/1415

  Ответить  
 
 автор: OLi   (06.05.2012 в 21:26)   письмо автору
 
   для: OLi   (06.05.2012 в 21:21)
 

Вопрос снят, надо было так )))
 for ($i = 0; $i < $rowsize; $i++) {

// Присваиваем блоку DATA текущий ряд массива 
$xtpl->assign('DATA', $res[$i]);

// Обрабатываем текуший ряд таблицы 
$xtpl->parse('main.advesting'); 

}
\\
Благодарю за советы по рациональному использованию ресурсов.

  Ответить  
 
 автор: confirm   (06.05.2012 в 21:32)   письмо автору
 
   для: OLi   (06.05.2012 в 21:26)
 

Значит я был прав - вы не понимаете, чего вам надо, а потому и передавали в шаблон совсем не то.
<?
foreach($res as $key) {
  
$xtpl->assign('DATA'$key);
  
$xtpl->parse('main.advesting');
}
PS. Только в данном случае (чутье мне подсказывает) необходимости в цикле нет вообще.

  Ответить  
 
 автор: confirm   (06.05.2012 в 21:29)   письмо автору
 
   для: OLi   (06.05.2012 в 21:21)
 

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

  Ответить  
Rambler's Top100
вверх

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