Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Smarty] fetch()
Forum PHP.pl > Forum > Gotowe rozwiązania > Systemy szablonów
BugsBunny
Cała strona opiera się o Smarty.

mam np. index.php, któy wywołuje index.tpl w którym to są dwie zmienne
{$menu} // wyświetla MENU
{$strona} // wyświetla STRONY

a index.php jest taki
  1. <?php 
  2. require_once('system/smarty/Smarty.class.php');
  3.  
  4. $smarty = new Smarty;
  5.  $smarty->template_dir = $_home_path."style/";
  6.  $smarty->compile_dir = $_home_path.'system/templates/templates_c/';
  7. $smarty->config_dir  = $_home_path.'system/templates/configs/';
  8. $smarty->cache_dir = $_home_path.'system/templates/cache/'; 
  9.  define('APP_URL', 'http://10.1.1.133/~aktualnosci/');
  10.  $temp = $smarty->fetch('aktualnosci.php');
  11.  $smarty->assign('strona',$temp);
  12. $smarty->display('index.tpl');
  13. ?>


muszę wywietlić w zmiennej strony inną strone tj. aktualności.php.
Tylko że w niej są kolejne zmienne i chyba tutaj jest problem dlaczego nie chce mi to działać.

oto błąd

Warning: Smarty error: unable to read resource: "aktualnosci.php" in c:\usr\krasnal\www\aktualnosci\system\smarty\Smarty.class.php on line 1095

próbowałem też zamist aktualnosci.php dać odnosnik do aktualnosci.tpl ale chyba musze najpierw wywolac skrypt php ktory uzupelni dane.

Jak to zrobić questionmark.gif
z góry thx cool.gif
AxZx
wpisz poprawna sciezke do tego pliku i bedzie dzialac
BugsBunny
dałem link bezpośdreni i poszło
  1. <?php
  2. $temp = $smarty->fetch('C:usrkrasnalwwwaktualnosciaktualnosci.php');
  3. ?>

tylko jak to potem naprawić bo tak zostań nie może worriedsmiley.gif

Jak wpisałem odnośnik do tpl to grało wszystko grało ale nie wstawiało mi danych. jak wpisałem do php to jest taki błąd

Fatal error: Smarty error: [in C:\usr\krasnal\www\aktualnosci\aktualnosci.php line 19]: syntax error: unrecognized tag: $smarty->assign('aktualnosci', $db->rekordy); (Smarty_Compiler.class.php, line 436) in c:\usr\krasnal\www\aktualnosci\system\smarty\Smarty.class.php on line 1095
AxZx
aaa
nie mozesz fetchowac pliku php
fetch mozesz uzyc tylko do szablonow

moze zrobi tak ze w pliku aktualnosci zrob funkcje pokaz()
i wtedy
assign('aktualnosci, pokaz());

cos w tym stylu kombinuj
BugsBunny
  1. <?php
  2. function pokaz(){
  3. $db = new db();
  4.  $db->fetcharray("SELECT * FROM `news` ");
  5.  if(!empty($db->rekordy)){
  6. return $db->rekordy;}
  7. }
  8.  
  9. $smarty->assign('aktualnosci', pokaz());
  10.  
  11. $smarty->display('aktualnosci.tpl');
  12. ?>


i teraz mi wyświetla kod php zamiast TPL

template_dir = $_home_path."style/"; $smarty->compile_dir = $_home_path.'system/templates/templates_c/'; $smarty->config_dir = $_home_path.'system/templates/configs/'; $smarty->cache_dir = $_home_path.'system/templates/cache/'; // $smarty->compile_check = true; // $smarty->debugging = true; // $smarty->assign("option_selected", "NE"); function pokaz() } $smarty->assign('aktualnosci', pokaz()); $smarty->display('aktualnosci.tpl'); ?>

a może da się to zrobić jakąś inną metodą, bo przecież jakoś ludziie robią strony w Smarty
NuLL
  1. <?php
  2. //..
  3. $smarty->assign('strona',file_get_contents('aktualnosci.php'));
  4. //..
  5. ?>
nazihipi
Nie łatwiej by ci było (a na pewno bardziej profesjonalnie), pisać sobie pluginy smarty, a potem dołączać je do szablonu. Bardzo przyjemnie i wydajnie się tak pracuje...
BugsBunny
NuLL Twoja medtoda nie działa.

W takiej formie jak napisałeś nic nie zmienia. Jak wsadziłem to w zmienną to napisało że odwołoanie do nieznanej funckji.

nazihipi mógłbyś napisać coś więcej bo nie bardzo Cie rozumiem. jakiś przykład . byłbym wdzięczny
nazihipi
Tak na szybko. Poniższe rozwiązanie ma przybliżyć jeden z wielu sposobów wykorzystania pakietu SMARTY na prostym przykładzie, tak więc można mieć wątpliwości co do idei OOP tam przedstawionego, ale nie o to teraz chodzi.... winksmiley.jpg

config.inc.php
  1. <?php
  2. /**
  3.  * -------------------------------------------------------------
  4.  * 
  5.  * Glowny plik konfiguracyjny
  6.  * 
  7.  * @name config.inc.php, charset UTF-8
  8.  * @author nazihipi
  9.  * -------------------------------------------------------------
  10.  */
  11.  
  12. define( 'APP_ROOT', 'twoja_sciezka_do_aplikacji' );
  13. define( 'SMARTY_DIR', APP_ROOT . '/libs/smarty/' );
  14. define( 'TEMPLATE_DIR', APP_ROOT . '/templates' );
  15. define( 'COMPILE_DIR', APP_ROOT . '/templates_cache' );
  16. define( 'CONFIG_DIR', APP_ROOT . '/configs' );
  17. define( 'PLUGINS', SMARTY_DIR . '/plugins' );
  18. define( 'SMARTY_PLUGINS', APP_ROOT . '/smarty_plugins' );
  19.  
  20. // Koniec config.inc.php
  21. ?>


class.Smarty.php
  1. <?php
  2. /**
  3.  * -------------------------------------------------------------
  4.  * 
  5.  * Dane lokalnych ustawien SMARTY.
  6.  * 
  7.  * @name class.Smarty.php, charset UTF-8
  8.  * @author nazihipi
  9.  * -------------------------------------------------------------
  10.  */
  11.  
  12. require_once 'config.inc.php';
  13. require_once SMARTY_DIR . 'Smarty.class.php';
  14.  
  15. class Application extends Smarty {
  16.  
  17. /**
  18.    * Ustaw sciezki do katalogow SMARTY
  19.    * 
  20.    * @access public
  21.    */
  22. function __construct() {
  23. $this->Smarty();
  24. $this->template_dir = TEMPLATE_DIR;
  25. $this->compile_dir = COMPILE_DIR;
  26. $this->config_dir = CONFIG_DIR;
  27. $this->plugins_dir[0] = PLUGINS;
  28. $this->plugins_dir[1] = SMARTY_PLUGINS;
  29. }
  30.  
  31. }
  32.  
  33. // Koniec class.Smarty.php 
  34. ?>


smarty_plugins/function.home.php (nazewnictwo: function.twoja_nazwa.php)
  1. <?php
  2. /**
  3.  * -------------------------------------------------------------
  4.  * 
  5.  * Obsluga zadan na stronie glownej
  6.  * 
  7.  * @name function.home.php, charset UTF-8
  8.  * @package smarty
  9.  * @subpackage smarty_plugins
  10.  * @author nazihipi
  11.  * -------------------------------------------------------------
  12.  */
  13.  
  14. // (nazewnictwo: smarty_function_TwojaNazwa)
  15. function smarty_function_home( $parms, $smarty ) {
  16. $home = new home();
  17. $home->run();
  18. $smarty->assign( $parms['assign'], $home );
  19. }
  20.  
  21. class home {
  22. // Zmienne skladow dostepne z poziomu SMARTY
  23. public $mMessage = true;
  24. public $mResult;
  25. // Prywatne zmienne skladowe
  26. private $_mGetData;
  27.  
  28. /**
  29.    * Uzyskaj dostep do poszczegolnych metod, klas
  30.    *
  31.    * @access public
  32.    */
  33. function __construct() {
  34. // Utworz obiekt, ktory umozliwi pobranie danych z bazy
  35. // (Klasa Get oczywiście zaimplementowana i załączona np. w index.php)
  36. $_mGetData = new Get();
  37. }
  38.  
  39. /**
  40.    * Glowna metoda
  41.    *
  42.    * @access public
  43.    * @return array
  44.    */
  45. public function run() {
  46. // np. Sprawdz, czy user obsluguje cookies
  47. if( isset( $_COOKIE['sid'] ) ) {
  48. $this->mMessage = false;
  49. }
  50. // Pobierz newsy z bazy
  51. $this->mResult = $this->_mGetData->getNews();
  52. }
  53.  
  54. }
  55.  
  56. // Koniec function.home.php
  57. ?>


templates/home.tpl
  1. {* ---------------------------------- *}
  2.  
  3. {* Glowny plik szablonu *}
  4.  
  5. {* ---------------------------------- *}
  6.  
  7. { home assign = "home" } {* nazewnictwo: (NazwaFunkcji assign = "NazwaFunkcji") *}
  8.  
  9. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  10. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  11. <head>
  12. <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
  13. <link href="templates_data/css/main.css" type="text/css" rel="stylesheet" media="screen" />
  14. </head>
  15. <body>
  16.  
  17. {strip}
  18.  
  19. { if $home->mMessage }
  20. <div id="warning">Twoja przeglądarka nie obsługuje cookies!</div>
  21. { /if }
  22.  
  23. { section name=news loop=$home->mGetData }
  24. <div class="n_title">{ $home->mGetData[news].title }</div>
  25. <div class="n_text">{ $home->mGetData[news].text }</div>
  26. <div class="n_author">{ $home->mGetData[news].author }</div>
  27. { /section }
  28.  
  29. {/strip}
  30.  
  31. </body>
  32. </html>
  33.  
  34. {* Koniec home.tpl *}


index.php
  1. <?php
  2. /**
  3.  * -------------------------------------------------------------
  4.  * Glowny plik apliklacji
  5.  * 
  6.  * @name index.php, charset UTF-8
  7.  * @author nazihipi
  8.  * -------------------------------------------------------------
  9.  */
  10.  
  11. require_once 'config.inc.php';
  12. require_once 'class.Smarty.php';
  13. require_once 'class.Get.php';
  14.  
  15. $Application = new Application();
  16. $Application->display('home.tpl');
  17.  
  18. // Koniec: index.php
  19. ?>


Takie rozwiązanie pozwala na bardzo proste dodawanie kolejnych modułów, ścisłe segregowania zadań dla każdej części aplikacji etc.

Mam nadzieję że się przyda...
BugsBunny
Zrobiłem wszystko jak napisałes zmienijąc oczywiście niektóre stałe i niestety.

  1. <?php
  2. /**
  3.  * -------------------------------------------------------------
  4.  * 
  5.  * Dane lokalnych ustawien SMARTY.
  6.  * 
  7.  * @name class.Smarty.php, charset UTF-8
  8.  * @author nazihipi
  9.  * -------------------------------------------------------------
  10.  */
  11.  
  12. require_once APP_ROOT . 'klasy/config.inc.php';
  13. require_once APP_ROOT . 'system/smarty/Smarty.class.php';
  14.  
  15. class Application {
  16.  
  17. /**
  18.    * Ustaw sciezki do katalogow SMARTY
  19.    * 
  20.    * @access public
  21.    */
  22. function __construct() {
  23. $this->Smarty();  // TUTAJ BŁĄD
  24. $this->template_dir = TEMPLATE_DIR;
  25. $this->compile_dir = COMPILE_DIR;
  26. $this->config_dir = CONFIG_DIR;
  27. $this->plugins_dir[0] = PLUGINS;
  28. $this->plugins_dir[1] = SMARTY_PLUGINS;
  29. }
  30.  
  31. }
  32.  
  33. // Koniec class.Smarty.php 
  34. ?>



Fatal error: Call to undefined method Application::Smarty() in c:\usr\krasnal\www\aktualnosci\klasy\class.Smarty.php on line 23

Jeszcze z index.php usunąłem tę linie
  1. <?php
  2. require_once 'class.Get.php';
  3. ?>

bo nie mam takiego pliku

Pozatym chyba nie o to chodziło bo nie widze tu wywołania szablonu w szablonie
Balon
  1. <?php
  2. { home assign = "home" }
  3. ?>
heaven
Jedno z rozwiazań
  1. <?php
  2. ob_start(); // to musi byc na samym poczatku pierwszego wykonywanego pliku, jezeli to ten to m
    a to wlanie byc tu
  3. require_once('system/smarty/Smarty.class.php');
  4. $smarty = new Smarty;
  5. $smarty->template_dir = $_home_path."style/";
  6. $smarty->compile_dir = $_home_path.'system/templates/templates_c/';
  7. $smarty->config_dir  = $_home_path.'system/templates/configs/';
  8. $smarty->cache_dir = $_home_path.'system/templates/cache/';
  9. define('APP_URL', 'http://10.1.1.133/~aktualnosci/');
  10. $_block_content = ob_get_contents();// to music jezeli bylo uz cos wczesniej wyrzucone przez echo itp.
  11. ob_end_clean(); // to music jezeli bylo uz cos wczesniej wyrzucone przez echo itp.
  12. include('aktualnosci.php');
  13. $temp = ob_get_contents();
  14. echo $_block_content;// to music jezeli bylo uz cos wczesniej wyrzucone przez echo itp.
  15. $smarty->assign_by_ref('strona',$temp); //assign_by_ref dla lepszej wydajnosci
  16. $smarty->display('index.tpl');?>

chyba że się mylę blink.gif
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.