Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [smarty] Pobranie zmiennej
wiliams
post 21.11.2011, 16:09:02
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 19.01.2010

Ostrzeżenie: (0%)
-----


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.  



Go to the top of the page
+Quote Post
nospor
post 22.11.2011, 08:24:40
Post #2





Grupa: Moderatorzy
Postów: 36 446
Pomógł: 6292
Dołączył: 27.12.2004




'{$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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
rocktech.pl
post 22.11.2011, 09:39:45
Post #3





Grupa: Zarejestrowani
Postów: 587
Pomógł: 131
Dołączył: 8.02.2010

Ostrzeżenie: (0%)
-----


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


--------------------
Despite the tons of examples and docs, mod_rewrite is voodoo. Damned cool voodoo, but still voodoo. --Brian Moore

I never go looking for a sucker. I look for a Champion and make a sucker of of him. --Amarillo Slim


Home-made : js-gui-classes | Accordion | Tabs | Carousel / php-sms-classes | Obsługa bramki SMS MultiInfo | Obsługa bramki SMS Mobiltek
Go to the top of the page
+Quote Post
wiliams
post 22.11.2011, 10:00:26
Post #4





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 19.01.2010

Ostrzeżenie: (0%)
-----


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ę.
Go to the top of the page
+Quote Post
rocktech.pl
post 22.11.2011, 10:15:31
Post #5





Grupa: Zarejestrowani
Postów: 587
Pomógł: 131
Dołączył: 8.02.2010

Ostrzeżenie: (0%)
-----


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>


--------------------
Despite the tons of examples and docs, mod_rewrite is voodoo. Damned cool voodoo, but still voodoo. --Brian Moore

I never go looking for a sucker. I look for a Champion and make a sucker of of him. --Amarillo Slim


Home-made : js-gui-classes | Accordion | Tabs | Carousel / php-sms-classes | Obsługa bramki SMS MultiInfo | Obsługa bramki SMS Mobiltek
Go to the top of the page
+Quote Post
wiliams
post 23.11.2011, 14:29:51
Post #6





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 19.01.2010

Ostrzeżenie: (0%)
-----


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'];

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.04.2024 - 11:50