Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Smarty] Metoda zwracajaca obiekt
Ember
post
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 13.04.2006

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


Witam.
Przekazuje do smarty obiekt, ktorego jedna z metod zwraca inny obiekt. Nastepnie probuje uzyskac dane z metody zwracanej przez pobrany obiekt, lecz niestety nie wychodzi.
Probowalem tak:
Cytat
{$Article->ShowCategory()->ShowName()}

ale wyskakuje blad:
Cytat
syntax error: unrecognized tag: $Article->ShowCategory()->ShowName() (Smarty_Compiler.class.php, line 446)

Probowalem tez tak:
Cytat
{$Category = Article->ShowCategory()}{$Category->ShowName()}

ale wyskakuje blad:
Cytat
Call to a member function ShowName() on a non-object


W drugim sposobie zadne dane nie sa przypisywane zmiennej.
W PHP wystarczy
Cytat
$Article->ShowCategory()->ShowName()
lecz niestety to nei dziala w Smarty.
Jakeis pomysly? czy musze przekazywac te dane do smarty osobno?

Ten post edytował Ember 4.01.2009, 20:41:20
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
pinochet
post
Post #2





Grupa: Zarejestrowani
Postów: 120
Pomógł: 12
Dołączył: 9.10.2008
Skąd: Tricity.Rumia()

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


W pliku tpl:
Kod
{$zmienna}

w php:
  1. <?php
  2. $instance_of_smarty->assign('zmienna', $Article->ShowCategory()->ShowName());?>


Ten post edytował pinochet 4.01.2009, 21:21:47
Go to the top of the page
+Quote Post
Ember
post
Post #3





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 13.04.2006

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


Tak wiem, znam podstawy smarty.
Uzywam tych samych nazw zmiennych w plikach TPL oraz PHP, dlatego pewnie stad przypuszczasz ze nie przekazalem zmiennych.
Moj problem polega na tym, ze po przekazniu:
  1. <?php
  2. $smarty->assign("Article", $Article);
  3. ?>

nie chce przekazywac jeszce:
  1. <?php
  2. $smarty->assign("Category", $Article->ShowCategory());
  3. ?>

jesli istnieje opcja uzyskania obiektu Category z obiektu Article w szablonie.

Ten post edytował Ember 4.01.2009, 21:37:10
Go to the top of the page
+Quote Post
pinochet
post
Post #4





Grupa: Zarejestrowani
Postów: 120
Pomógł: 12
Dołączył: 9.10.2008
Skąd: Tricity.Rumia()

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


Spróbuj bez tych nawiasów :] Metodę na pewno da się wykonać ale moze w Smartach działą to na zasadzie jakiegoś ifa i nie da się zagłębiać "->" ?
Go to the top of the page
+Quote Post
antyqjon
post
Post #5





Grupa: Zarejestrowani
Postów: 77
Pomógł: 27
Dołączył: 24.03.2002
Skąd: Tarnów

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


Nie da się w ten sposób wywoływać łańcucha metod w Smarty. Można co najwyżej przypisywać wyniki pośrednie, w sposób mało elegancki, lecz działający. Więcej na ten temat.


--------------------
Zbyszek 'antyqjon' Siciarz

siciarz.net | Aquila DSP C++
Go to the top of the page
+Quote Post
Ember
post
Post #6





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 13.04.2006

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


Cytat(pinochet @ 4.01.2009, 21:44:44 ) *
Spróbuj bez tych nawiasów :] Metodę na pewno da się wykonać ale moze w Smartach działą to na zasadzie jakiegoś ifa i nie da się zagłębiać "->" ?

Tak:
  1. <?php
  2. {$Article->ShowCategory->ShowName()}
  3. ?>

? W tym wypadku tez nie dziala:
Kod
Call to a member function ShowName() on a non-object

Wyglada na to ze jednak bede musial osobno przekazac smrty'emu obiekt Article i osobno Category. No coz, trudno :]

Cytat(pinochet @ 4.01.2009, 21:44:44 ) *
Spróbuj bez tych nawiasów :] Metodę na pewno da się wykonać ale moze w Smartach działą to na zasadzie jakiegoś ifa i nie da się zagłębiać "->" ?

Ok dzieki za linka, wczesniej nie zauwazylem Twojego posta. Pozwole sobie wkkleic tutaj wykorzystane rozwiazanie dla potomnych:
  1. <?php
  2. /*
  3.  * Template.class.php
  4.  */
  5. require_once dirname(__FILE__).'/Smarty.class.php';
  6.  
  7. class Template extends Smarty
  8. {
  9.   public $compiler_file   = 'Smarty_Compiler_New.class.php';
  10.   public $compiler_class = 'Smarty_Compiler_New';
  11.  
  12.   function __construct()
  13.   {
  14.      $this->Smarty();
  15.      
  16.      // here you can define all the paths
  17.      $views_path = SystemConfig::$viewsPath;
  18.      $temp_path = SystemConfig::$tempPath;
  19.      
  20.      $this->template_dir    = $views_path;
  21.      $this->cache_dir       = $views_path . 'configs';
  22.      $this->compile_dir       = $temp_path . 'tpl_compile';
  23.      $this->config_dir       = $temp_path . 'tpl_cache';
  24.      $this->plugins_dir[]   = 'customs';
  25.   }
  26. }
  27. ?>

oraz
  1. <?php
  2. /*
  3.  * Smarty_Compiler_New.class.php
  4.  */
  5. require_once dirname(__FILE__).'/Smarty_Compiler.class.php';
  6.  
  7. class Smarty_Compiler_New extends Smarty_Compiler {
  8.  
  9.    var $_obj_call_regexp       =   null;
  10.  
  11.    function __construct()
  12.    {
  13.       $this->Smarty_Compiler();
  14.      
  15.       $this->_obj_call_regexp = '(?:' . $this->_obj_start_regexp . '(?:' . $this->_obj_params_regexp . ''.'(?:' . $this->_obj_ext_regexp . '(?:' . $this->_obj_params_regexp . '|' . $this->_obj_single_param_regexp . '(?:s*,s*' . $this->_obj_single_param_regexp . ')*))*' .    ')?(?:' . $this->_dvar_math_regexp . '(?:' . $this->_num_const_regexp . '|' . $this->_dvar_math_var_regexp . ')*)?)';
  16.    }
  17. }
  18. ?>


Wszystko dziala pieknie jak nalezy, dzieki za pomoc.
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 Aktualny czas: 22.08.2025 - 05:01