Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Smarty] fetch(), problem chyba logiczny
BugsBunny
post
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ć (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
z góry thx (IMG:http://forum.php.pl/style_emoticons/default/cool.gif)
Go to the top of the page
+Quote Post
AxZx
post
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
Go to the top of the page
+Quote Post
BugsBunny
post
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 (IMG:http://forum.php.pl/style_emoticons/default/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
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
Go to the top of the page
+Quote Post
BugsBunny
post
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
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
Go to the top of the page
+Quote Post
nazihipi
post
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
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
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.... (IMG:http://forum.php.pl/style_emoticons/default/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
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
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. ?>
Go to the top of the page
+Quote Post
heaven
post
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ę (IMG:http://forum.php.pl/style_emoticons/default/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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 19:29