[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Smarty + PHP + MySQL
xxxLOGIATxxx
Работаю со скриптом на движке Smarty, нужна ваша помощь для вывода данных, мне хотя бы посмотреть на PHP пример вывода данных из таблицы в отдельных циклах

БД выглядит примерно следующим образом:

-------------------------------------------------------------
id | name | surname
-------------------------------------------------------------
1 | Вася | Пупкин
2 | Петя | Уткин
3 | Саша | Барашкин
-------------------------------------------------------------

Нужно вывести их в циклах, желательно в while ну или в любой другой компактный цикл (база данных очень большая, нужен минимум запросов в базу). Для каждого столбца нужен отдельный цикл. Если кто работал со Smarty - за готовый пример буду вечно благодарен. Времени в обрез, очень нужна помощь, хотя бы в простом PHP виде.

Вот так работают циклы в Smarty http://www.smarty.net/manual/en/language.f...ion.section.php [очень маленький пример]



Спустя 1 час, 12 минут, 25 секунд (22.08.2010 - 04:24) waldicom написал(а):
Вот коротенький пример (много вырезано).

{section name=i loop=$products_to_show}
<tr>
<
th width="14" class="pr_l"><img src="img/line_01.png" width="14" height="27" border="0" alt="" class="" /></th>
<
th width="108"><div>{$products_to_show[i].country}{$products_to_show[i].country_new}</div></th>
<
th width="25%">Артикул:
{if $products_to_show[i].product_code}
{
$products_to_show[i].product_code}
{
/if}
</th>
<
th>{$CD_styles[i].st}</th>
<
th width="20%">{$smarty.const.STRING_DATE}: {$products_to_show[i].date}</th>
<
th width="50" class="center">
............

{/section}


Для чего "...Для каждого столбца нужен отдельный цикл..."?

Спустя 11 минут, 15 секунд (22.08.2010 - 04:35) xxxLOGIATxxx написал(а):
Цитата (waldicom @ 22.08.2010 - 01:24)
Вот коротенький пример (много вырезано).

{section name=i loop=$products_to_show}
        <tr>
            <
th width="14" class="pr_l"><img src="img/line_01.png" width="14" height="27" border="0" alt="" class="" /></th>
            <
th width="108"><div>{$products_to_show[i].country}{$products_to_show[i].country_new}</div></th>
            <
th width="25%">Артикул:
                {if $products_to_show[i].product_code}
    {
$products_to_show[i].product_code}
    {
/if}
            </th>
            <
th>{$CD_styles[i].st}</th>
            <
th width="20%">{$smarty.const.STRING_DATE}: {$products_to_show[i].date}</th>
            <
th width="50" class="center">
      ............

{/section}


Для чего "...Для каждого столбца нужен отдельный цикл..."?

Благодарю, сейчас начну тестить.

Нужно отдельно вывести переменные, одна отвечает за id аватары, вторая адрес, третья имя и тд., я сейчас в документации выкопал пару сведений по тому что хватит и одной, но как "плохознающий" PHP мне тяжело с этим, пока на стадии обучения, буду рад если покажете свой вариант вывода

Спустя 1 день, 12 минут, 28 секунд (23.08.2010 - 04:48) xxxLOGIATxxx написал(а):
Вот пример PHP и кода из TPL


$query = "SELECT * FROM se_profilecomments WHERE profilecomment_user_id='2' ORDER BY profilecomment_id";
$result = mysql_query($query);


$all_comments = mysql_fetch_array($result);




$total_comments = $all_comments['profilecomment_body'];


$smarty->assign('custid',$total_comments);






{section name=customer loop=$custid}
Link {$custid[customer]} <br />
{/section}


Ничего не отображается, а если и отображается, так по одной букве на каждую строку. В чём моя ошибка?

Как правильно вывести цикл?

Спустя 3 часа, 12 минут, 38 секунд (23.08.2010 - 08:00) Семён написал(а):
А у тебя собственно массив хоть есть?
Выведи его:
echo "<pre>";
print_r($total_comments);
echo "</pre>";


И я обычно с массивами работаю в Smarty примерно так:
                    
{foreach key=key item=n from=$categories_data}
<div class="ct-block">
<
img src="{$n.ct_image_icon}" style="float:left;">
<
div><a href="/shop/catalog/{$n.id}/1/{$n.ct_name}.html">{$n.ct_name}</a></div>
<
div><small>описание</small></div>
</
div>
{/foreach}

Спустя 43 минуты, 31 секунда (23.08.2010 - 08:44) xxxLOGIATxxx написал(а):
echo "<pre>";
print_r($total_comments);
echo "</pre>";


Вот что вывел:

Array
(
[0] => 61
[profilecomment_id] => 61
[1] => 1
[profilecomment_user_id] => 1
[2] => 1
[profilecomment_authoruser_id] => 1
[3] => 1282352746
[profilecomment_date] => 1282352746
[4] => Write Something...
[profilecomment_body] => Write Something...
)

А так:

while($row=mysql_fetch_array($result))
{
$total_comments = $row['profilecomment_body'];
echo $total_comments;
}


Выводит всё как надо...

Не пойму в чём проблема...

Спустя 9 минут, 15 секунд (23.08.2010 - 08:53) Семён написал(а):
Для начала подготовьте корректный массив прежде чем его выводить. wink.gif

Спустя 4 минуты, 4 секунды (23.08.2010 - 08:57) xxxLOGIATxxx написал(а):
Можешь сделать семпл? Книг до фига, не могу найти ничего толкового по массивам, всё познаётся на практике =)

Спустя 42 минуты, 38 секунд (23.08.2010 - 09:40) Семён написал(а):
$result = mysql_query("SELECT * FROM mp_users");
while($row = mysql_fetch_assoc($result)) {
$array[] = $row;
}
$smarty->assign("myarray",$array);


Debug:

echo "<pre>";
print_r($array);
echo "</pre>";


Array
(
[0] => Array
(
[id] => 1
[user_name] => Semen
[user_password] => abc
)

[1] => Array
(
[id] => 2
[user_name] => Vasya
[user_password] => abcd
)

[2] => Array
(
[id] => 3
[user_name] => Petr
[user_password] => abcde
)

[3] => Array
(
[id] => 4
[user_name] => Filipp
[user_password] => mypass
)

[4] => Array
(
[id] => 5
[user_name] => TEST
[user_password] => TEST
)

)


Smarty Template

{foreach key=key item=n from=$myarray}
{
$n.user_name}
{
/foreach}


Совет используй в связке DBSimple, тогда такие преобразования массивов будут исключены из кода.

Спустя 24 минуты, 28 секунд (23.08.2010 - 10:04) xxxLOGIATxxx написал(а):
Благодарю, буду тестить

Спустя 9 минут, 1 секунда (23.08.2010 - 10:13) xxxLOGIATxxx написал(а):
И снова пустота, хоть дебаг и отображает всё как надо, ничего не понимаю...

В любом случае благодарю за попытку, буду искать в чём причина

Спустя 55 минут, 16 секунд (23.08.2010 - 11:09) Семён написал(а):
На шаблоне своём попробуй

{$твоя_переменная|print_r}

Спустя 43 минуты, 57 секунд (23.08.2010 - 11:53) xxxLOGIATxxx написал(а):
Вывел по две записи с каждого столба:

6161111112823527461282352746Write Something...awfWrite Something...awfArray


Спустя 1 минута, 59 секунд (23.08.2010 - 11:55) Семён написал(а):
Показывай как ты получил и отобразил на шаблоне.

Спустя 12 часов, 44 минуты, 35 секунд (24.08.2010 - 00:39) xxxLOGIATxxx написал(а):
PHP:

$query = "SELECT * FROM se_profilecomments WHERE profilecomment_user_id='{$user->user_info['user_id']}' ORDER BY profilecomment_id"; 
$result = mysql_query($query);


$all_comments = mysql_fetch_array($result);


$smarty->assign('custid',$all_comments);


TPL (отображает по две записи):

{$custid|print_r}


TPL вариант с переменной $allcomments (отображает просто цифру 1)

{$all_comments|print_r}

Спустя 13 минут, 32 секунды (24.08.2010 - 00:53) xxxLOGIATxxx написал(а):
Вот пример запроса из другого файла:

    // LOOP OVER USER LEVELS
$levels = $database->database_query("SELECT level_id, level_name FROM se_levels ORDER BY level_name");
while($level_info = $database->database_fetch_assoc($levels)) {
$level_array[$level_info['level_id']] = array( 'level_id' => $level_info['level_id'],
'level_name' => $level_info['level_name']
);

}
return $level_array;


Может запрос не так построил?

Документации к движку к сожалению нет, не пойму что и откуда

Спустя 57 минут, 20 секунд (24.08.2010 - 01:50) xxxLOGIATxxx написал(а):
Копировал, переписал переменные:

    // LOOP OVER USER LEVELS
$query = $database->database_query("SELECT * FROM se_profilecomments WHERE profilecomment_user_id='{$user->user_info['user_id']}' ORDER BY profilecomment_id");
while($comments = $database->database_fetch_assoc($query)) {
$comments_array[$comments['profilecomment_user_id']] = array( 'profilecomment_user_id' => $comments['profilecomment_user_id'],
'profilecomment_body' => $comments['profilecomment_body']
);

}

$smarty->assign('custid',$comments_array);



{section name=customer loop=20}

{$custid[customer].profilecomment_user_id} <br />

{$custid[customer].profilecomment_body} <br />

{/section}


Выводит выбранные данные (как и задумывал), а цикл не работает, хоть и присутствует while, выводит по одному результату...

Спустя 2 часа, 53 минуты, 31 секунда (24.08.2010 - 04:43) xxxLOGIATxxx написал(а):
Ну вот вроде почти правильный код, правда с вопросом.

/// Запрос в базу

$query = $database->database_query("SELECT * FROM se_profilecomments WHERE profilecomment_user_id='{$user->user_info['user_id']}' ORDER BY profilecomment_id");

///Цикл + присвоение каждому типу записи отдельной переменной

while($row = $database->database_fetch_assoc($query))
{
$profilecomment_id = $row['profilecomment_id'];
$profilecomment_user_id = $row['profilecomment_user_id'];
$profilecomment_authoruser_id = $row['profilecomment_authoruser_id'];
$profilecomment_date = $row['profilecomment_date'];
$profilecomment_body = $row['profilecomment_body'];
}

/// Вывод в формат Smarty

$smarty->assign('custid',$result);
$smarty->assign('profilecomment_id',$profilecomment_id);
$smarty->assign('profilecomment_user_id',$profilecomment_user_id);
$smarty->assign('profilecomment_authoruser_id',$profilecomment_authoruser_id);
$smarty->assign('profilecomment_date',$profilecomment_date);
$smarty->assign('profilecomment_body',$profilecomment_body);






/// Запись в TPL файле

{section name=customer loop=30}

1 {$profilecomment_id[customer]} <br />

2 {$profilecomment_user_id[customer] } <br />

3 {$profilecomment_authoruser_id[customer]} <br />

4 {$profilecomment_date[customer]} <br />

5 {$profilecomment_body[customer]} <br />

{/section}



А теперь, собсно, вопрос. Почему через echo всё выводится как подобает, а в Smarty выводит по одному символу из каждой строчки? Причём, выводится всего один раз...

Например, есть запись в $profilecomment_body : Напишите что-нибудь...

Выводит:

Н
а
п
и
ш
и

и тд.

В чём на этот раз я ошибся?

Спустя 5 часов, 36 минут, 33 секунды (24.08.2010 - 10:20) xxxLOGIATxxx написал(а):
Товарищи, пять суток парюсь уже, помогите пожалуйста кто-нибудь...

Спустя 2 часа, 23 минуты, 46 секунд (24.08.2010 - 12:44) xxxLOGIATxxx написал(а):
Сам справился, вот новичкам, как пособие:

$query = $database->database_query("SELECT * FROM se_profilecomments WHERE profilecomment_user_id='{$user->user_info['user_id']}' ORDER BY profilecomment_id");

$result=array();
while($row = $database->database_fetch_assoc($query))
{
$result[]=$row;
}

$smarty->assign('custid',$result);



{section name=test loop=$custid}
{$custid[test].profilecomment_id} <br />
{$custid[test].profilecomment_body} <br />
{/section}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.