Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Smarty] fetch(), problem chyba logiczny
BugsBunny
post 31.07.2006, 20:55:51
Post #1





Grupa: Zarejestrowani
Postów: 206
Pomógł: 4
Dołączył: 2.04.2005

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


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
Go to the top of the page
+Quote Post
AxZx
post 31.07.2006, 21:24:14
Post #2





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


wpisz poprawna sciezke do tego pliku i bedzie dzialac


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
BugsBunny
post 31.07.2006, 21:37:13
Post #3





Grupa: Zarejestrowani
Postów: 206
Pomógł: 4
Dołączył: 2.04.2005

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


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
Go to the top of the page
+Quote Post
AxZx
post 31.07.2006, 21:46:13
Post #4





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


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


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
BugsBunny
post 31.07.2006, 21:59:59
Post #5





Grupa: Zarejestrowani
Postów: 206
Pomógł: 4
Dołączył: 2.04.2005

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


  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
Go to the top of the page
+Quote Post
NuLL
post 1.08.2006, 03:38:24
Post #6





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


  1. <?php
  2. //..
  3. $smarty->assign('strona',file_get_contents('aktualnosci.php'));
  4. //..
  5. ?>


Ten post edytował NuLL 1.08.2006, 03:38:41


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
nazihipi
post 1.08.2006, 08:03:01
Post #7





Grupa: Zarejestrowani
Postów: 139
Pomógł: 0
Dołączył: 14.07.2006

Ostrzeżenie: (10%)
X----


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...
Go to the top of the page
+Quote Post
BugsBunny
post 1.08.2006, 22:41:55
Post #8





Grupa: Zarejestrowani
Postów: 206
Pomógł: 4
Dołączył: 2.04.2005

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


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
Go to the top of the page
+Quote Post
nazihipi
post 2.08.2006, 12:34:39
Post #9





Grupa: Zarejestrowani
Postów: 139
Pomógł: 0
Dołączył: 14.07.2006

Ostrzeżenie: (10%)
X----


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...

Ten post edytował nazihipi 2.08.2006, 17:59:59
Go to the top of the page
+Quote Post
BugsBunny
post 12.08.2006, 13:43:06
Post #10





Grupa: Zarejestrowani
Postów: 206
Pomógł: 4
Dołączył: 2.04.2005

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


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

Ten post edytował BugsBunny 12.08.2006, 22:12:06
Go to the top of the page
+Quote Post
Balon
post 4.09.2006, 15:59:59
Post #11





Grupa: Zarejestrowani
Postów: 422
Pomógł: 0
Dołączył: 14.12.2005
Skąd: Wałbrzych

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


  1. <?php
  2. { home assign = "home" }
  3. ?>


--------------------
Postura wielka i morda wredna, jestem Balon, kozak z osiedla !
bzdury.pl - Królestwo rozrywki
Go to the top of the page
+Quote Post
heaven
post 21.10.2006, 00:28:24
Post #12





Grupa: Nieautoryzowani
Postów: 92
Pomógł: 15
Dołączył: 21.10.2006

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


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

Ten post edytował heaven 21.10.2006, 08:20:19
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: 17.06.2025 - 12:55