Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: php smarty
Forum PHP.pl > Forum > Gotowe rozwiązania > Systemy szablonów
atomp3
Witam

na tej stronie napisałem posta: http://www.phpinsider.com/smarty-forum/viewtopic.php?t=11001

Ponieważ nie chce mi sie przepisywać napisze krótko o co mi chodzi.

W pliku index.php steruje strona przez switch`a (kod w linku powyzej) -> wywoluje funkcje ktora nastepnie poprzez smarty wyswietla na index.tpl.

Jednak nie wiem czy robie to poprawnie i druga sprawa czy musze uzywac zmiennych globalnych w funkcjach? $db i $smarty? inaczej nie dzialaja.

Dzieki za wszelkie info. Szczerze to nie wiem jak to najlepiej ugryzc zeby bylo zgrabnie, chodzi mi o sterowanie strona z poziomu index.php wywolanie funkcji i wyswietlnie smarty na index.tpl
strife
Przenoszę na Gotowe rozwiązania -> Systemy szablonów

Nie musisz używać zmiennych globalnych. Możesz $db i $smarty, przekazywać argumentem funkcji : >

  1. <?php
  2. function show( $oSmarty )
  3. {
  4. $oSmarty -> assign('dupa', 'foo');
  5. }
  6.  
  7. $o = new Smarty;
  8.  
  9. show( $o );
  10. ?>


Nie wiem czy dobrze zrozumiałem, ociężało mi się dzisiaj myśli, ( przez maturę : P ). Albo jak widzę pracujesz na obiekcie, więc możesz dodać smarty do klasy.

  1. <?php
  2. $o = new Logbook;
  3. $o -> Smarty = new Smarty;
  4. $o -> Smarty -> assign('dupa', 'foo');
  5. ?>


? : >

  1. <?php
  2. { 
  3.  
  4. //global $db; 
  5. //global $smarty; 
  6.  
  7. $smarty = $this -> Smarty; // analogicznie postepujemy z $db
  8. $db->query("SELECT * FROM logbook") or die($db->error()); 
  9. $il=$db->numrows(); 
  10.  
  11.  for($i = 0; $i < $il; $i++) { 
  12.  $row=$db->fetcharray(); 
  13.  $data[] = $row; 
  14.  } 
  15.  
  16. $smarty -> assign('view', '1');
  17. $smarty -> assign('data', $data); 
  18. $smarty -> display('index.tpl'); 
  19. }
  20. ?>


Pozdrawiam.
atomp3
ok można i tak smile.gif ale za każdym razem jak w funkcji uzyje klasy $db czy $smarty będe musiał przekazywać argument? np dla funkcji dodaj czy usuń? właśnie tego chciałem uniknąć smile.gif

Dzięki za szybką odpowiedź
strife
No przecież w ostatnim listingu Ci to napisałem, patrz:

  1. <?php
  2. class Foo
  3. {
  4. var $Smarty;
  5.  
  6. // konstruktor
  7. function Foo( $oSmarty )
  8. {
  9. $this -> Smarty = $oSmarty;
  10. }
  11. function dodaj()
  12. {
  13. $smarty = $this -> Smarty;
  14. $smarty -> assign('action', 'dodaj');
  15. }
  16. function usun()
  17. {
  18. $smarty = $this -> Smarty;
  19. $smarty -> assign('action', 'usun');
  20. }
  21. }
  22.  
  23.  
  24. $o = new Foo( new Smarty );
  25. ?>


Wtedy nie musisz w metodach przekazywać obiektu Smarty. O to Ci chodzi ?
atomp3
To mnie sie dzisiaj ciezko myśli smile.gif bo nie chce to działać

index.php

  1. <?php
  2. $news = new News;
  3.  
  4. require 'smarty/smarty.class.php'; 
  5. $smarty = new Smarty; //core smarty object
  6.  
  7.  
  8. switch ($_GET['action']) {
  9.  
  10.  case 'view' :
  11.  default : $news->viewNews();
  12.  
  13.  
  14.  }
  15. ?>



w functions.php

  1. <?php
  2. class News {
  3.  
  4.  
  5. // database object
  6. var $db;
  7.  
  8.  
  9. //konstruktor
  10. function News() {
  11.  
  12. $this -> db = new DbConnect("localhost","root","","catalog",$error_reporting=true,$persistent=false);
  13.  
  14.  
  15. }
  16.  
  17.  
  18.  
  19. function viewNews() {
  20.  
  21.  
  22. $this->db->query("SELECT * FROM logbook") or die($db->error());
  23.  
  24.  
  25. }
  26.  
  27. }
  28. ?>



za każdym razem Fatal error: Call to a member function on a non-object sad.gif


ok już wiem o co biega smile.gif może komuś to pomoże:

  1. <?php 
  2.  
  3. require './smarty/smarty.class.php';
  4. require './includes/classes/DBconnect.class.php'; 
  5.  
  6. class News_Smarty extends Smarty { 
  7. function News_Smarty() {
  8. $this->template_dir = 'templates/tmpl1';
  9. $this->compile_dir = 'templates_c';
  10. $this->config_dir = 'configs';
  11. $this->cache_dir = 'cache';
  12. }
  13. }
  14.  
  15.  
  16. class News {
  17.  
  18. var $tpl;
  19. var $sql;
  20. var $db;
  21.  
  22.  
  23. //constructor
  24. function News() {
  25. $this -> tpl =& new News_Smarty;
  26. $this -> sql =& new DbConnect("localhost","root","","catalog",$error_reporting=true,$persistent=false);
  27. $this -> sql -> open() or die($this -> sql ->error());
  28. }
  29.  
  30.  
  31. function viewNews() {
  32.  
  33. $db = $this -> sql;  
  34. $db -> query("SELECT * FROM product") or die($db->error());
  35.  
  36. $il=$db->numrows();
  37.  
  38.  for($i = 0; $i < $il; $i++) {
  39. $row=$db->fetcharray();
  40.  $data[] = $row;
  41.  }
  42.  
  43.  
  44. $this -> tpl -> assign('view', '1');  
  45. $this -> tpl -> assign('data', $data);
  46.  
  47. $this -> tpl -> display('index.tpl');
  48. }
  49.  
  50. }
  51.  
  52. ?>
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.