Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Instrukcje warunkowe w szablonie
Forum PHP.pl > Forum > PHP
PiotrekM
Witam,
napisałem własną klasę templatów. Chciałbym teraz obsłużyć w niej instrukcje warunkowe, na początek zwykły if.
Proszę o sugestie

  1. <?php if( ! defined('UNI_FRAME')) exit('No direct script access allowed');
  2. */
  3.  
  4. class class_templates{
  5.  
  6. /**
  7. * core references
  8. */
  9.  
  10. private $uniclass;
  11. private $input;
  12. private $output;
  13.  
  14. function __construct( $uniclass) {
  15.  
  16. $this -> uniclass = $uniclass;
  17. $this -> input = class_input::getInstance();
  18. $this -> output = class_output::getInstance();
  19. }
  20.  
  21. /**
  22. * select template name
  23. *
  24. * @return: mixed
  25. */
  26.  
  27. public function getTemplateName() {
  28.  
  29. // download data
  30. $settings = $this -> uniclass -> db -> query("SELECT * FROM settings");
  31.  
  32. $row = mysql_fetch_assoc( $settings);
  33.  
  34. // return data
  35. return $this -> templateData($row['template'], 'name');
  36. }
  37.  
  38. /**
  39. * download data from template id
  40. *
  41. */
  42.  
  43. private function templateData( $id, $field) {
  44.  
  45. // get data from db
  46. $data = $this -> uniclass -> db -> query("SELECT * FROM templates WHERE id='". $id ."'");
  47.  
  48. $row = mysql_fetch_assoc( $data);
  49.  
  50. return $row[$field];
  51. }
  52.  
  53. /**
  54. * load template
  55. *
  56. */
  57.  
  58. public function loadTemplate( $file, $array) {
  59.  
  60. //add sufix to name
  61. $templateFile = $file . '.html';
  62.  
  63. $template = file_get_contents( 'templates/'. $this -> getTemplateName() .'/' . $templateFile);
  64.  
  65. try {
  66. if( is_array($array)) {
  67.  
  68. //parse data
  69. foreach($array as $text => $value) {
  70.  
  71. //2D arrays
  72. if( is_array( $value)) {
  73.  
  74. //parse 2D data
  75. foreach($value as $twoDtext => $twoDvalue) {
  76.  
  77. //change texts on values (2D)
  78. $template = str_ireplace( '{$'. $text .':'. $twoDtext .'}', $twoDvalue, $template);
  79. }
  80. } else {
  81.  
  82. //change texts on values
  83. $template = str_ireplace( '{$'. $text .'}', $value, $template);
  84. }
  85. }
  86. } else {
  87. throw new exception_fatal_error( "Data to the template must be in an array.", 0);
  88. }
  89. }catch ( exception_fatal_error $exception){
  90.  
  91. //trow error
  92. die( $exception);
  93.  
  94. }
  95. //run template
  96. return $template;
  97. }
  98.  
  99. }
  100.  
  101. ?>
szagi3891
Lepszym rozwiązaniem będzie jeśli zainteresujesz się transformacją xslt. Za pomocą tego narzędzia można bardzo łatwo oddzielać dane od szablonu. Na początku wydaje się trochę nieprzyjazne, ale potem wydaje się znacznie bardziej proste i intuicyjne niż jakikolwiek system szablonów winksmiley.jpg
wookieb
1) Po co wykorzystywać bazę do korzystania z szablonów na plikach? Niepotrzebne obciążenie, a przy większej ilości szablonów i ich wywołań to strasznie wąskie gardło.
2) Szablony typu smarty i inne wychodzą z użycia z prostego względu, czasem bardziej ograniczają niż przynoszą korzyści. Dlatego korzysta się ze zwykłych szablonów napisanych w php. Proste, kompletnie nie ograniczające. Można tylko dopisać parę funkcji ułatwiających korzystanie z tablic aby nie było notice'ów i problem z głowy.

Na tego typu szablonach operuje np Zend_View. Moim zdaniem za ciężke jak na tak prostą funkcjonalność dlatego polecam zapoznać się z jej działaniem i napisać własną prostszą wersję.
Crozin
O tym jaki jest sens (żaden) używania takich systemów szablonów jak ten tu pokazany było już niejeden raz na forum. Przeszukaj...
PiotrekM
Dzięki za odpowiedzi.
Napisałem klasę trochę inaczej - zastosowałem ładowanie zmiennych oraz szablonu osobno. dodałem także czyszczenie bufora, a instrukcje chyba jednak będą zbędne.
można zamknąć
Cysiaczek
Tematy w tym dziale dotyczą problemów z programowanie obiektowym.
Przenoszę na PHP.
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.