Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [smarty] Pobranie zmiennej
Forum PHP.pl > Forum > Gotowe rozwiązania > Systemy szablonów
wiliams
W tym szablonie smarty jest następująca pętla foreach

  1.  
  2. {foreach from=$ProductsCategoryList item=ProductCatRow name=ProductsCategoryListLoop}
  3.  


która wypluwa numery id kategorii z tablicy

  1. {$ProductCatRow.categoryname}


to działa, bez zarzutu, ale

Chciałbym w tym samym pliku za pomocą znaczników {php} {/php} zrobić zapytanie SELECT, w którym w polu where mógłbym się odwołać do wspomnianej zmiennej
  1. {$ProductCatRow.categoryname}


Jak bym tego nie wpisywał wyrzuca mi błąd

  1.  
  2. {php}
  3.  
  4.  
  5. include ('connection.php');
  6. $wynik = mysql_query("SELECT * FROM categories WHERE categoryid = '{$ProductCatRow.categoryid}'")
  7. or die("Błąd w zapytaniu!");
  8. while($rek = mysql_fetch_array($wynik)) {
  9. echo $rek['categoryname']."<br />";
  10. }
  11.  
  12. {/php}
  13.  



nospor
'{$ProductCatRow.categoryid}'")
Zajrzyj proszę do dokumentacji smarty, jak w bloku {PHP} należy się odwoływać do zmiennych smartiego - jest to tam bardzo dobrze opisane.
rocktech.pl
Witam.

Generalnie taka gimnastyka w Smarty do niczego dobrego cię nie zaprowadzi. To rozwiązanie ma sens jedynie w przypadku kiedy nie masz dostępu do pliku który generuje tablicę $ProductsCategoryList.

Pokaż zapytanie które pobiera dane do $ProductsCategoryList to pokombinujemy a szablony trzymaj wolne od {php} smile.gif
wiliams
Chcę zmodyfikować działający skrypt, który w panelu admina wyświetla listę kategorii z jakimi powiązany jest produkt, tak aby obok każdej kategorii wyświetlała się także kategoria rodzica. Na zasadzie

- Jabłko (owoce)
- Marchewka (warzywa)

w bazie występuje między kategoriami zależność parentid

To wszystko ma strukturę w stylu MVC.

Kontroler:

  1. $ProductsCategoryList = $Products->getProductCategories($_GET['ProductID']);


Model:
  1. function getProductCategories($prodid){
  2. global $DB;
  3. $sql = "
  4. SELECT c.*
  5. FROM categories c
  6. LEFT JOIN products_categories pc
  7. ON (c.categoryid = pc.categories_id)
  8. WHERE
  9. pc.products_id = {$prodid}
  10. ";
  11. $DB->Query($sql,'getProductCategories');
  12.  
  13. $rows = array();
  14. while($row = $DB->Fetch('getProductCategories')){
  15. $rows[] = $row;
  16. }
  17. return $rows;
  18. }


Widok (smarty tpl)

  1. <ul>
  2. {foreach from=$ProductsCategoryList item=ProductCatRow name=ProductsCategoryListLoop}
  3. <li><a href="/admin/products.php?CategoryID={$ProductCatRow.parentid}">{$ProductCatRow.categoryname}</a></li>
  4. {/foreach}
  5. </ul>



I to wszystko działa wyświetlając listę kategorii dla danego produktu, ale tak jak napisałem, potrzebuję dopisać do każdej z kategorii jej nadkategorię.
rocktech.pl
No to jedziesz tak:

  1. function getProductCategories($prodid){
  2. global $DB;
  3. $sql = "
  4. SELECT c.*
  5. FROM categories c
  6. LEFT JOIN products_categories pc
  7. ON (c.categoryid = pc.categories_id)
  8. WHERE
  9. pc.products_id = {$prodid}
  10. ";
  11. $DB->Query($sql,'getProductCategories');
  12.  
  13. $rows = array();
  14. while($row = $DB->Fetch('getProductCategories')){
  15.  
  16. $row['nadkategoria'] = "SELECT * FROM categories WHERE categoryid = $row.categoryid" //oczywiscie psedokod
  17. $rows[] = $row
  18. }
  19. return $rows;
  20. }

Smarty:
  1. <ul>
  2. {foreach from=$ProductsCategoryList item=ProductCatRow name=ProductsCategoryListLoop}
  3. {$ProductCatRow.nadakategoria.klucz}
  4. <li><a href="/admin/products.php?CategoryID={$ProductCatRow.parentid}">{$ProductCatRow.categoryname}</a></li>
  5. {/foreach}
  6. </ul>
wiliams
Zgodnie z instrukcją zrobiłem, ale nie poszło. Zastanawiam się, czy nie muszę czegoś dodać do zapytania

  1. function getProductCategories($prodid){
  2. global $DB;
  3. $sql = "
  4. SELECT c.*
  5. FROM categories c
  6. LEFT JOIN products_categories pc
  7. ON (c.categoryid = pc.categories_id)
  8. WHERE
  9. pc.products_id = {$prodid}
  10. ";
  11. $DB->Query($sql,'getProductCategories');
  12.  
  13. $rows = array();
  14. while($row = $DB->Fetch('getProductCategories')){
  15. $row['nadkategoria'] = "SELECT * FROM categories WHERE categoryid = '$row.parentid'";
  16. $rows[] = $row;
  17. }
  18. return $rows;
  19. }



Smarty:

  1. foreach from=$ProductsCategoryList item=ProductCatRow name=ProductsCategoryListLoop}
  2. <li><a href="/admin/products.php?CategoryID={$ProductCatRow.categoryid}">{$ProductCatRow.categoryname}</a></li>
  3. {$ProductCatRow.nadkategoria.categoryname}
  4. <li><a href="/admin/products.php?CategoryID={$ProductCatRow.parentid}">{$ProductCatRow.nadkategoria.categoryname}</a></li>
  5. {/foreach}
  6.  


do zamknięcia:

Poradziłem sobie przez poniższą gimnastykę
$parentid = $this->get_template_vars('ProductCatRow');
$parent= $parentid['parentid'];

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.