10/10/2018, 09:21

Hỏi về mảng trong Smarty

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

PHP Code:
$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***91;"dist_id"***93;, 
          
'dist_name' => $result***91;"dist_name"***93;, 
          
'city_name' => $result***91;"city_name"***93;,
          
'nt_id'       => $result***91;"nt_id"***93;,
          
'nt_user'    => $result***91;"nt_user"***93;,
          
'nt_phone'    => $result***91;"nt_phone"***93;,
          
'nt_content'    => $result***91;"nt_content"***93;,
          
'nt_title'    => $result***91;"nt_title"***93;,
          
'nt_cost'    => $result***91;"nt_cost"***93;,
          
'post_date'    => $result***91;"post_date"***93;);
     }
    
$smarty->assign('nt',$array); 
file template

Code:
{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

Code:
$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 viết 11:37 ngày 10/10/2018
- 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 viết 11:23 ngày 10/10/2018
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 viết 11:22 ngày 10/10/2018
Được gửi bởi rekcah
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 viết 11:35 ngày 10/10/2018
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
Code:
$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
Code:
{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*>
Bài liên quan
0