Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Smarty] Metoda zwracajaca obiekt
Forum PHP.pl > Forum > Gotowe rozwiązania > Systemy szablonów
Ember
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?
pinochet
W pliku tpl:
Kod
{$zmienna}

w php:
  1. <?php
  2. $instance_of_smarty->assign('zmienna', $Article->ShowCategory()->ShowName());?>
Ember
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.
pinochet
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ć "->" ?
antyqjon
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.
Ember
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.
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.