login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Smarty in OOP. (Opgelost)

Offline Erwt - 23/12/2008 13:16 (laatste wijziging 23/12/2008 13:21)
Avatar van ErwtPHP beginner Hey allemaal,

ik wil graag Smarty in OOP gebruiken. Ik heb een class index met daarbinnen de functie index. In die functie zeg ik dan dat $smarty = new Smarty(); met alle includes e.d. erbij. Maar de bedoeling is dat hij (overal in mijn project) dan weet wat $smarty is. Als ik het buiten de class gebruik dan kent hij $smarty niet. Als ik de class weghaal dan werkt het gewoon. Hoe zorg ik dus eigenlijk dat $smarty public wordt in al mijn classes? Of laat ik het zo zeggen:

Hoe zorg ik ervoor dat ik met een simpel stukje code overal $smarty kan gebruiken zonder dat bij elke class weer te moeten toevoegen? Ik open alles vanuit een controller dus daar is plaats voor includes e.d. of extends..

4 antwoorden

Gesponsorde links
Offline Joost - 23/12/2008 13:30 (laatste wijziging 23/12/2008 13:30)
Avatar van Joost PHP expert
  1. class Controller {
  2. public $oSmarty = new Smarty();
  3. }
  4.  
  5. class Extend extends Controller {
  6. // hier beschik je gewoon over $oSmarty..
  7. }

Of moet het ook in classes die niet de erven van Controller beschikken over het object?
Ik weet niet hoe dat het beste kan, maar wat je bv. kan doen is het bij de __construct meegeven als parameter 
Offline Erwt - 23/12/2008 13:42 (laatste wijziging 23/12/2008 13:43)
Avatar van Erwt PHP beginner Ok, bij die laatst zin ging je me iets te snel.. hier een voorbeeld:

  1. <?php
  2. class index
  3. {
  4. function index()
  5. {
  6. switch($_GET["action"])
  7. {
  8. case "test":
  9. $this->test();
  10. break;
  11.  
  12. case "koe":
  13. $this->koe_zegt_boe();
  14. break;
  15. }
  16. }
  17.  
  18. function test()
  19. {
  20. // Hier moet ik de smarty variabele kunnen gebruiken.
  21. $smarty->display("test.tpl");
  22. }
  23.  
  24. function koe_zegt_boe()
  25. {
  26. // Hier moet ik de smarty variabele kunnen gebruiken.
  27. $smarty->display("koe.tpl");
  28. }
  29. }
  30. ?>


Code was niet echt lang, dus vond het niet nodig het op plaatscode te zetten, vind je van wel PM.

Maar nu moet het ook zijn dat ik het in ANDERE classes kan gebruiken. in een heel andere pagina dus.

Ik maak gebruik van MVC dus waar hij nu $smarty->display aanroept, zal ik een andere class aanroepen in werkelijkheid.
Offline Ibrahim - 24/12/2008 02:13
Avatar van Ibrahim PHP expert Wat je ook kunt doen is, een Register class maken. Deze houd alle objecten in een register en kan zo objecten ophalen waar het niet beschikbaar is omdat het buiten de scope valt.
Offline Erwt - 24/12/2008 08:45 (laatste wijziging 24/12/2008 09:09)
Avatar van Erwt PHP beginner Heb google gezocht over een register class maar 't schijnt geen letterlijke methode te zijn of ik kan gewoon niet zoeken Vond alleen (hele lange) scripts waarvan ik liever geen gebruik wil maken, doe liever alles zelf.

Ik heb eens een voorbeeld gezien waarbij ze het volgende gerealiseerd hebben:

Een controller die als pagina-systeem werkt. Hier stuurt hij de gebruiker door na een andere class, waardoor hij de gebruiker weer doorstuurt naar een andere class. (3 classes... MVC!! )

Nu kon ik overal $smarty gebruiken zonder het ook maar ergens aan te roepen, behalve 1x. Het voorbeeld kan ik niet weer vinden.

Brengt dit misschien op ideeën:

extend class.
define zetten.

Alvast bedankt!

//edit:

Hij opent de controller, daarin kijkt hij welke pagina de gebruiker wil, en die stuurt hij naar een functie in dezelfde class.

De functie in de controller haalt data op. Deze data haalt hij uit een andere class. Daarna opent hij de view class(mvc) en geeft hij de data mee. In de view class zet ik in de constructor dus $this->smarty = new Smarty; en dan wordt hij alleen gebruikt in de view(layout) class.

Dit was het antwoord.. niet wat ik verwacht had maar wou het toch even meedelen.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.197s