Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Шаблонизатор своими руками. Вывод одного и того же по несколько раз
Форумы портала PHP.SU » » Хранение данных, их вывод и обработка » Шаблонизатор своими руками. Вывод одного и того же по несколько раз

Страниц (1): [1]
 

1. MamayAdesu - 21 Мая, 2015 - 15:31:04 - перейти к сообщению
Я делаю для своего сайта шаблонизатор (если можно его так назвать). Сделал шаблон для комментариев на сайте и его обработку, но одни и те же комментарии выводятся по столько раз, сколько всего комментариев в базе данных.

Кусочек кода
PHP:
скопировать код в буфер обмена
  1. $tpl = fopen("themes/".$theme."/comment.php", "r"); // шаблон
  2. while(! feof($tpl))
  3.     {
  4.         if(! isset($tpl_result)) $tpl_result = "";
  5.         $replace = fgets($tpl);
  6.         $replace = str_replace("{commentid}", $commentwhile['id'], $replace);
  7.         $replace = str_replace("{userid}", $authorid['id'], $replace);
  8.         $replace = str_replace("{username}", $authorid['login'], $replace);
  9.         $replace = str_replace("{usergroup}", $cw_user_group, $replace);
  10.         $replace = str_replace("{date}", $commentdate, $replace);
  11.         $replace = str_replace("{comment}", $commentwhile['comment'], $replace);
  12.         $tpl_result = $tpl_result.$replace;
  13.     }
  14.                                                            
  15. if($can_delete_comment) $tpl_result = preg_replace("/\[delete\](.*)\[\/delete\]/msi", "$1", $tpl_result); // спойлер [delete]
  16. else $tpl_result = preg_replace("/\[delete\](.*)\[\/delete\]/msi", "", $tpl_result); // спойлер [delete] пустой
  17.                
  18. if(dscms_logged()) $tpl_result = preg_replace("/\[logged\](.*)\[\/logged\]/msi", "$1", $tpl_result); // спойлер [logged]
  19. else $tpl_result = preg_replace("/\[logged\](.*)\[\/logged\]/msi", "", $tpl_result); // спойлер [logged] пустой
  20.                                                        
  21. echo $tpl_result; // выводим результат




Шаблон
CODE (html):
скопировать код в буфер обмена
  1. <!-- Комментарий.Начало ID = {commentid} -->
  2. <div class="minihr" id="comment-{commentid}">
  3.   Автор: <a href="/profile/{userid}">{username}</a><br>
  4.   {usergroup}<br><br>
  5.   Дата создания: <a href="#comment-{commentid}">{date}</a><br>
  6.   Комментарий:<br><div class='commentborder'>{comment}</div><br>
  7.  
  8.   [delete]<a href="/comment/delete/{commentid}">Удалить</a>[/delete]
  9.  
  10.   [logged] | <a href="/comment/reply/{commentid}">Ответить</a>[/logged]
  11. </div>
  12. <hr>
  13. <!-- Комментарий.Конец -->



Результат
CODE (html):
скопировать код в буфер обмена
  1. <!-- Комментарий.Начало ID = 6 -->
  2. <div class="minihr" id="comment-6">
  3.   Автор: <a href="/profile/1">admin</a><br>
  4.   <b style="color: red;">Администратор</b><br><br>
  5.   Дата создания: <a href="#comment-6">16 мая 2015 21:30</a><br>
  6.   Комментарий:<br><div class='commentborder'>1</div><br>
  7.  
  8.   <a href="/comment/delete/6">Удалить</a>
  9.  
  10.    | <a href="/comment/reply/6">Ответить</a>
  11. </div>
  12. <hr>
  13. <!-- Комментарий.Конец -->
  14. <!-- Комментарий.Начало ID = 6 -->
  15. <div class="minihr" id="comment-6">
  16.   Автор: <a href="/profile/1">admin</a><br>
  17.   <b style="color: red;">Администратор</b><br><br>
  18.   Дата создания: <a href="#comment-6">16 мая 2015 21:30</a><br>
  19.   Комментарий:<br><div class='commentborder'>1</div><br>
  20.  
  21.   <a href="/comment/delete/6">Удалить</a>
  22.  
  23.    | <a href="/comment/reply/6">Ответить</a>
  24. </div>
  25. <hr>
  26. <!-- Комментарий.Конец -->
  27. <!-- Комментарий.Начало ID = 8 -->
  28. <div class="minihr" id="comment-8">
  29.   Автор: <a href="/profile/1">admin</a><br>
  30.   <b style="color: red;">Администратор</b><br><br>
  31.   Дата создания: <a href="#comment-8">16 мая 2015 21:31</a><br>
  32.   Комментарий:<br><div class='commentborder'>2</div><br>
  33.  
  34.   <a href="/comment/delete/8">Удалить</a>
  35.  
  36.    | <a href="/comment/reply/8">Ответить</a>
  37. </div>
  38. <hr>
  39. <!-- Комментарий.Конец -->
  40. <!-- Комментарий.Начало ID = 6 -->
  41. <div class="minihr" id="comment-6">
  42.   Автор: <a href="/profile/1">admin</a><br>
  43.   <b style="color: red;">Администратор</b><br><br>
  44.   Дата создания: <a href="#comment-6">16 мая 2015 21:30</a><br>
  45.   Комментарий:<br><div class='commentborder'>1</div><br>
  46.  
  47.   <a href="/comment/delete/6">Удалить</a>
  48.  
  49.    | <a href="/comment/reply/6">Ответить</a>
  50. </div>
  51. <hr>
  52. <!-- Комментарий.Конец -->
  53. <!-- Комментарий.Начало ID = 8 -->
  54. <div class="minihr" id="comment-8">
  55.   Автор: <a href="/profile/1">admin</a><br>
  56.   <b style="color: red;">Администратор</b><br><br>
  57.   Дата создания: <a href="#comment-8">16 мая 2015 21:31</a><br>
  58.   Комментарий:<br><div class='commentborder'>2</div><br>
  59.  
  60.   <a href="/comment/delete/8">Удалить</a>
  61.  
  62.    | <a href="/comment/reply/8">Ответить</a>
  63. </div>
  64. <hr>
  65. <!-- Комментарий.Конец -->
  66. <!-- Комментарий.Начало ID = 9 -->
  67. <div class="minihr" id="comment-9">
  68.   Автор: <a href="/profile/1">admin</a><br>
  69.   <b style="color: red;">Администратор</b><br><br>
  70.   Дата создания: <a href="#comment-9">16 мая 2015 21:31</a><br>
  71.   Комментарий:<br><div class='commentborder'>3</div><br>
  72.  
  73.   <a href="/comment/delete/9">Удалить</a>
  74.  
  75.    | <a href="/comment/reply/9">Ответить</a>
  76. </div>
  77. <hr>
  78. <!-- Комментарий.Конец -->
2. DeepVarvar - 21 Мая, 2015 - 16:15:19 - перейти к сообщению
MamayAdesu пишет:
dscms
Это Dark Sky CMS или Damn Simple CMS?
Явно не второе, т.к. оно на какане.
MamayAdesu пишет:
Сделал шаблон
http://smex-public[dot]ru/uploads/po[dot][dot][dot]_vzfgkwuxvbm[dot]jpg

Выкинь игры с шаблонами. Пхп сам себе прекрасный шаблонизатор.
Тут каждый второй писал шаблонизатор на поиграться -- все уже одумались.
3. MamayAdesu - 21 Мая, 2015 - 16:21:49 - перейти к сообщению
DeepVarvar пишет:
MamayAdesu пишет:
dscms
Это Dark Sky CMS или Damn Simple CMS?
Явно не второе, т.к. оно на какане.
MamayAdesu пишет:
Сделал шаблон
http://smex-public[dot]ru/uploads/po[dot][dot][dot]_vzfgkwuxvbm[dot]jpg

Выкинь игры с шаблонами. Пхп сам себе прекрасный шаблонизатор.
Тут каждый второй писал шаблонизатор на поиграться -- все уже одумались.


DS CMS - это я так свою CMS создал, но чёт решил не распространять.
4. DelphinPRO - 21 Мая, 2015 - 17:42:22 - перейти к сообщению
DeepVarvar пишет:
Тут каждый второй писал шаблонизатор на поиграться -- все уже одумались.

И взяли Twig =)
И автору советую: хочешь писать свою CMS - пиши, но используй для нее готовые проверенные компоненты. Просто чтобы время впустую не убивать, а все-таки создать действующий продукт. Шаблонизатор - возьми готовый, куча их. Роутер - поищи на гитхабе простенький, но уже готовый. И т.д.
И работу свою ускоришь, и с чужим кодом научишься работать и понимать его. И лучшие практики подсмотришь, если будешь брать хорошие компоненты.
5. DeepVarvar - 21 Мая, 2015 - 19:34:21 - перейти к сообщению
DelphinPRO пишет:
И взяли Twig =)
А скока у тебя твиг жрет памяти, не замерял? Я не замерял, и замерять не на чем по быстрому, вот и спрашиваю.
6. DelphinPRO - 22 Мая, 2015 - 00:02:58 - перейти к сообщению
не мерил.

но.
Как эту хрень померить? городить такой же вариант шаблона на нативном php? как-то геморрно выглядит..

(ну то есть как сравнить)
7. DeepVarvar - 22 Мая, 2015 - 02:36:03 - перейти к сообщению
Не надо ничего городить -- в индексном файле замеры до и после. И сравни с рендерингом шаблона и без.

 

Powered by ExBB FM 1.0 RC1