10/10/2018, 09:31

Hiển thị mảng trong Smarty Template Engine?

Mình có 1 đoạn mã gọi dữ liệu từ table "category" trong database.
Có 2 loại cat là root và sub. Mình dùng while 2 lần ->> gọi được Root rồi tới sub của nó, nhưng đó là khi dùng echo (hiển thị trong chính file php), còn khi cho nó hiện trong file tpl của Smarty Template Engine thì chịu, Không biết làm thế nào! Mình thử dùng section tương tự lúc dùng while nhưng ko được: nó chỉ hiện ra root thôi, còn sub thì ko thấy.
Code trong file php:
Code:
// Danh sách chuyên mục
      $rootcat_qr = mysql_query("SELECT * FROM category WHERE type = 'root'");
      $r=0;$s=$r;$cat=array();$subcat=array();
      while ($root = mysql_fetch_array($rootcat_qr))
      {
          $cat[$r] = $root['name'];$r++;
          $subcat_qr = mysql_query("SELECT * FROM category WHERE type = 'sub' and parent = "$cat[$r]" ");
      while ($sub = mysql_fetch_array($subcat_qr))
          {
          $subcat[$S] = $sub['name'];$s++;
          }
      }
Code trong file tpl:
Code:
<select name="cat">
{section name=r loop=$cat}<option>{$cat[r]} [Root]</option>{section name=s loop=$subcat}<option>{$subcat[s]}</option>{/section}{/section}</select>

Nếu hiển thị trực tiếp trong file PHP thì code sau sẽ work:
Code:
// Danh sách chuyên mục
      $rootcat_qr = mysql_query("SELECT * FROM category WHERE type = 'root'");
      while ($root = mysql_fetch_array($rootcat_qr))
      {
          $cat = $root['name'];
          echo $cat;
          $subcat_qr = mysql_query("SELECT * FROM category WHERE type = 'sub' and parent = "$cat" ");
      while ($sub = mysql_fetch_array($subcat_qr))
          {
          $subcat = $sub['name'];
          echo $subcat;
          }
      }
Mong các bạn giúp dùm :P Mình thử đủ cách rồi vẫn ko được
amida viết 11:39 ngày 10/10/2018
assign variable của php vào varible của template chưa?
gaulucky92 viết 11:32 ngày 10/10/2018
Ọc dĩ nhiên là assign rồi chứ :-S Ko assign làm sao nó hiện ra "root" hả bạn assign cả root lẫn sub, nhưng... chỉ root hiện còn sub thì... :-S
amida viết 11:42 ngày 10/10/2018
Vì tôi không thấy lỗi phần parse html trong template, nên tôi muốn xem xem bạn có chắc là bạn assign cả 2 arrays hay không đã
gaulucky92 viết 11:35 ngày 10/10/2018
Assign đầy đủ rồi :-S Theo mình chắc là do phần code trong tpl... Chẳng biết ghi thế nào cho đúng đây..
Hero_vanchien viết 11:32 ngày 10/10/2018
Theo tôi nghĩ thì 2 cái root và sub đó có liên quan đến nhau. Vậy bạn đã tạo ra sự liên quan cho chúng chưa?

Và cũng như vậy ở smarty bạn cũng phải đưa chúng ra theo kiểu có liên quan chứ.

Hình như bạn còn code sai chính tả đấy.
Cứ nghĩ đí Nếu khó quá mình sẽ đưa code cho xem.
conan1212 viết 11:46 ngày 10/10/2018
Được gửi bởi gaulucky92
Assign đầy đủ rồi :-S Theo mình chắc là do phần code trong tpl... Chẳng biết ghi thế nào cho đúng đây..
PHP Code:
<select name=category>
{
html_options values=$option_values selected=$option_selected output=$option_output}
</
select
Cần phân tích lại giải thuật + đọc lại manual của Smarty để code cho nó rỏ ràng hơn nhé em.
mrmanh viết 11:41 ngày 10/10/2018
Nếu chỉ dùng đến 2 cấp thì sao bạn không dùng hàm Foreach cho dễ đi nhỉ.
Ví dụ SELECT root category.(Root thì parentid=0 còn subcategory thì parentid <>0 )

$sql_root="SELECT * FROM tbl_category WHERE parentid=0";
$sql_sub="SELECT * FROM tbl_category WHERE parentid <> 0";

sau đó gọi hàm lấy về kết quả $rs_root và $rs_sub rồi assign vào templates:
assign("root",$rs_root);
assign("sub",$rs_sub);

trong file HTML bạn gọi như sau:

{section name=i loop=$root}
<div class="root">{$root[i].catname}</div>
foreach(item=item from=$sub)
if($item.catid eq $root[i].catid)
<div class="sub">{$item.catname}</div>
{/if}
{/foreach}
{/section}

Chúc thành công !
cuongphvnu viết 11:44 ngày 10/10/2018
Làm như mrmanh là được, hoặc có thể section 2 lần như file .PHP
{section name=i loop=$root}
<div class="root">{$root[i].catname}</div>
{section name=j loop=$sub[i]}
{if $sub[i][j].catid eq $root[i].catid}
<div class="sub">{$sub[i][j].catname}</div>
{/if}
{/section}
{/section}
Nếu muốn trực quan hơn thì hiển thị mảng trong Smarty ra mà nhin cho dễ giống print_r() trong PHP ấy
Bgs
Bài liên quan
0