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

Форум PHP

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

 

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

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

тема: Цикл в шаблоне
 
 автор: ChieFSS   (13.11.2007 в 11:42)   письмо автору
 
 

Сделал шаблон. Переменную $tpl_name получилось пробежать циклом, а $tpl_text и $tpl_date нет.
Можно как-нибудь объединить три цикла в один или подскажите решение этой проблемки?

index.php

$query = mysql_query("SELECT * FROM `news`");
        while($new = mysql_fetch_array($query)) {
            $name[] = $new['name'];
            $text[] = $new['text'];
            $date[] = $new['date'];
        }
        include("template/news.tpl");


news.tpl

<table border="1" width="300px" cellpadding="0" cellspacing="0">
<?foreach($name as $tpl_name):?>
<tr>
<td>
<?=$tpl_name?>
</td>
<td>
<?=$tpl_text;?>
</td>
<td>
<?=$tpl_date;?>
</td>
</tr>
<?endforeach;?>
</table>

   
 
 автор: malish   (13.11.2007 в 11:45)   письмо автору
 
   для: ChieFSS   (13.11.2007 в 11:42)
 

Это свой движок или смарти юзаешь?

   
 
 автор: ChieFSS   (13.11.2007 в 11:47)   письмо автору
 
   для: malish   (13.11.2007 в 11:45)
 

Своё

   
 
 автор: malish   (13.11.2007 в 11:48)   письмо автору
 
   для: ChieFSS   (13.11.2007 в 11:42)
 

Можно попробывать так:


$query = mysql_query("SELECT * FROM `news`");
        while($new = mysql_fetch_array($query)) {
            $info[] = new array('name' => $new['name'], 'text' => $new['text'], 'date' => $new['date']);
        }
        include("template/news.tpl");



<table border="1" width="300px" cellpadding="0" cellspacing="0">
<?foreach($infoas $i):?>
<tr>
<td>
<?=$i['name']?>
</td>
<td>
<?=$i['text'];?>
</td>
<td>
<?=$i['date'];?>
</td>
</tr>
<?endforeach;?>
</table> 

   
 
 автор: malish   (13.11.2007 в 11:52)   письмо автору
 
   для: malish   (13.11.2007 в 11:48)
 

а вообще нахрена создавать свой массив если $new и так содержит многомерный массив данных? вот его и проходи в своём foreach:)))

   
 
 автор: ChieFSS   (13.11.2007 в 11:56)   письмо автору
 
   для: malish   (13.11.2007 в 11:52)
 

Спасибо. Работает.

Всмысле "$new = mysql_fetch_array($query)" вынести в шаблон вместо foreach ?

   
 
 автор: malish   (13.11.2007 в 11:59)   письмо автору
 
   для: ChieFSS   (13.11.2007 в 11:56)
 

в foreach бежать не по $info массиву а по $new.. там все хранится в том же виде.. а $info убери:)

   
 
 автор: ChieFSS   (13.11.2007 в 12:07)   письмо автору
 
   для: malish   (13.11.2007 в 11:59)
 

Чёто не получается

   
 
 автор: ChieFSS   (13.11.2007 в 12:34)   письмо автору
 
   для: ChieFSS   (13.11.2007 в 12:07)
 

А что тогда с этим циклом делать?
while($new = mysql_fetch_array($query))

   
 
 автор: Unkind   (13.11.2007 в 22:33)   письмо автору
 
   для: ChieFSS   (13.11.2007 в 12:34)
 

Делайте что-то вроде

<?php
// ...

function parse_block($tpl$block_vars)
{
    while( 
preg_match('/<!-- BEGIN ([A-Za-z\d_]+) -->(?:\r\n)?(.*?)<!-- END \\1 -->(?:\r\n)?/s'$tpl$m) )
    {
        
$block '';
        
$block  $this->parse_block($m[2], $block_vars);
        
$block_name $m[1];

        
preg_match_all('/{' $block_name '.([A-Za-z\d_]+)}/'$block$vPREG_PATTERN_ORDER);

        
$block_vars[$block_name] = isset($block_vars[$block_name]) ? $block_vars[$block_name] : array();

        
$result '';

        for(
$a 0$a count$block_vars[$block_name] ); $a++)
        {
            for(
$i 0$buff $block$i count$v[1] ); $i++)
            {
                
$replaced = array();

                if( !
in_array($v[1][$i], $replaced) )
                {
                    
$replaced[] = $v[1][$i];

                    if( isset(
$block_vars[$block_name][$a][$v[1][$i]]) )
                    {
                        
$buff str_replace($v[0][$i], $block_vars[$block_name][$a][$v[1][$i]], $buff);
                    }
                    else
                    {
                        
$buff str_replace($v[0][$i], ''$buff);
                    }
                }
            }

            
$result .= $buff;
        }

        
$tpl str_replace($m[0], $result$tpl);
    }

    return 
$tpl;
}

// ...
?>

   
Rambler's Top100
вверх

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