PDA

View Full Version : Hỏi về mảng trong Smarty



rekcah
04-12-2008, 08:32
Chào các bác, em mới bắt đầu làm quen với Smarty. Em đang gặp vấn đề sau mong các bác giúp đỡ.

Em có đoạn code như sau

file php



$sql_select = "SELECT nt.* WHERE 1 ORDER BY nt.post_date DESC LIMIT 50";
$r = $mysql_hnmt->query($sql_select);
$rows = $mysql_hnmt->num_rows($r);
while ($result = $mysql_hnmt->fetch_array($r))
{

$array = array('dist_id' => $result["dist_id"],
'dist_name' => $result["dist_name"],
'city_name' => $result["city_name"],
'nt_id' => $result["nt_id"],
'nt_user' => $result["nt_user"],
'nt_phone' => $result["nt_phone"],
'nt_content' => $result["nt_content"],
'nt_title' => $result["nt_title"],
'nt_cost' => $result["nt_cost"],
'post_date' => $result["post_date"]);
}
$smarty->assign('nt',$array);


file template



{foreach from=$nt item=arr}
Title : {$arr.nt_title}<br>
User : {$arr.nt_user}<br>
{/foreach}


Nhưng không ra kết quả, em không cần gọi


$smarty->display('ketqua.tpl')

đâu, vì em gọi kiểu khác. Em nói để các bác khỏi hiểu nhầm là chưa trả về file kết quả.

Cảm ơn!
<*kakalot*>

amida
04-12-2008, 11:15
- Query statement có vấn đề, bác phải define table thì nó mới biết select ở table nào chứ. Còn select thì '*' được rồi, theo tôi nhớ là kô cần prefix.
- Fetch nhiêu kết quả thì ít nhất trong loop phải đặt 1 biến đếm cho $array, vì lần fetch sau sẽ đè lên lần fetch trước. Còn nếu chỉ fetch 1 kết quả thì khỏi cần dùng while.

Vấn đề chỉ ở chỗ cách bác viết query thôi :)

rekcah
04-12-2008, 15:58
Ah cảm ơn bác Amida, cái query tôi xóa bớt để cho đơn giản nên xóa mất FROM table. Câu lệnh query thì không có vấn đề gì.
Tôi cũng nghĩ là phải thêm 1 biến đếm cho từng thành phần, nhưng làm sao để gán cho từng biến mảng với dữ liệu là từng record? Để từ đó mình mới gán được dữ liệu cho mảng của smarty.
<*kakalot*>

herofit
05-12-2008, 01:22
Ah cảm ơn bác Amida, cái query tôi xóa bớt để cho đơn giản nên xóa mất FROM table. Câu lệnh query thì không có vấn đề gì.
Tôi cũng nghĩ là phải thêm 1 biến đếm cho từng thành phần, nhưng làm sao để gán cho từng biến mảng với dữ liệu là từng record? Để từ đó mình mới gán được dữ liệu cho mảng của smarty.
<*kakalot*>

lấy ra như vậy thì có vấn đề gì đâu nhỉ? để chắc chắc bạn có thể đính kèm mã nguồn của bạn + database lên đây để mọi ngừoi tét

rekcah
16-12-2008, 10:39
Mình đã giải quyết được vấn đề rồi, mình đưa lên đây cho bạn nào chưa biết tham khảo.

Giả sử, mình có 1 csdl, đã có các bản ghi để sẵn sàng truy vấn. Một csdl bài viết chẳng hạn (bao gồm tiêu đề, nội dung, người gửi, thời gian gửi...)
Bây giờ muốn truy vấn ra và gán vào mảng của smarty

Code php


$sql_select = "SELECT * FROM post WHERE 1";
$results = array(); // Khởi tạo biến mảng để gán dữ liệu
$r = $mysql->query($sql_select); // thực thi truy vấn
while ($row = $mysql->fetch_array($r)) // Lấy từng bản ghi
$results[] = $row; // gán biến mảng với dữ liệu từng bản ghi
$smarty->assign('results', $results); // Gán dữ liệu cho biến mảng của smarty
$smarty->display('output.tpl'); // Ai cũng biết rồi


Đây là code template


{section name=nr loop=$results}
{$results[nr].title}
{$results[nr].content}
{$results[nr].user}
{sectionelse}
<h1>Không có kết quả nào!</h1>
{/section}


Hoàn thành, không cần phải biến đếm nữa
<*kakalot*>