Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Kohana] Przeniesienie wszystkich obliczeń do classy, w widoku same zmienne
marcin86s
post 22.11.2011, 16:18:52
Post #1





Grupa: Zarejestrowani
Postów: 58
Pomógł: 0
Dołączył: 29.11.2007
Skąd: City 17

Ostrzeżenie: (0%)
-----


Jako że moje forum coraz bardziej się rozrasta postanowiłem przenieść wszystkie obliczenia do classy, a w widoku zostawić same zmienne:

  1. public function action_index() {
  2. $this->template->content = View::factory('forum')
  3.            ->bind('category', $category)
  4.            ->bind('last_post_image', $last_post_image);
  5. $this->template->title = __('Forums');
  6. $this->template->viewmode = 'full';
  7.  
  8. $orm_categories = ORM::factory('forumcategory')
  9. ->order_by('sort','ASC')
  10. ->find_all();
  11. $orm_boards = ORM::factory('forumboard')
  12. ->order_by('forumcategory_id','ASC')
  13.   ->find_all();
  14. $orm_topic = ORM::factory('forumtopic')
  15. ->find();
  16. $orm_user = ORM::factory('user')
  17. ->where('id','=',Auth::instance()->get_user())
  18. ->find();
  19.  
  20. foreach ($orm_categories as $orm_category)
  21. {
  22. $category = $orm_category->category_name;
  23.  
  24. foreach ($orm_boards as $orm_board)
  25. {
  26. if($orm_category->id == $orm_board->forumcategory_id)
  27. {
  28. $orm_topic->id = $orm_board->id;
  29. if($orm_topic->last_post > $orm_user->last_login)
  30. {
  31. $readed = 'new_';
  32. }
  33. else
  34. {
  35. $readed = 'no_';
  36. }
  37. $last_post_image = HTML::anchor('forum/board/'.$orm_board->id.'/'.URL::title($orm_board->board_name, '-', TRUE).'/', HTML::image('media/images/forum/'.$readed.'post.png', array('alt' => $orm_board->board_name)));
  38.  
  39. }
  40. }
  41. }

  1. <div class="header">
  2. <h1><?php echo $category ?></h1>
  3. </div>
  4. <div class="abox">
  5. <?php echo $last_post_image ?>
  6. </div>
  7. <div class="bbox">
  8. <b><?php echo ''?></b>
  9. <br />
  10. <?php echo ''?>
  11. </div>
  12. <div class="cbox">
  13. <br />
  14. <?php echo ''?>
  15. </div>
  16. <div class="cbox">
  17. <br />
  18. <?php echo ''?>
  19. </div>
  20. <div class="fbox">
  21. </div>
  22. <br class="clear" />

W wyniku wyświetla mi tylko ostatnią kategorię, co robię źle? Jakieś podpowiedzi jak to wykonać?

I drugie pytanie jak wyświetlić role obecnie zalogowanego użytkownika? Jest jakaś szybka metoda Auth na to? czy trzeba pobierać id i robić zapytanie do bazy?

Ten post edytował marcin86s 22.11.2011, 18:53:32
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
skowron-line
post 22.11.2011, 18:30:29
Post #2





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


No może dlatego że w pętli nadpisujesz zmienną.


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
marcin86s
post 22.11.2011, 18:41:58
Post #3





Grupa: Zarejestrowani
Postów: 58
Pomógł: 0
Dołączył: 29.11.2007
Skąd: City 17

Ostrzeżenie: (0%)
-----


No do takiego samego wniosku sam doszedłem, tylko jak zrobić żeby widok był w pętli i żeby to działało? tongue.gif
Go to the top of the page
+Quote Post
skowron-line
post 22.11.2011, 18:48:09
Post #4





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


A o łączeniu stringów to kiedyś słyszałeś questionmark.gif
Kod
.

i popraw BBCODE bo źle się czyta.


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
marcin86s
post 22.11.2011, 18:58:26
Post #5





Grupa: Zarejestrowani
Postów: 58
Pomógł: 0
Dołączył: 29.11.2007
Skąd: City 17

Ostrzeżenie: (0%)
-----


Słyszałem tylko jeśli dam:
  1. $category .= $orm_category->category_name;

itd.
To widok się nadal nie zapętli tylko wszystkie dane wyświetlą się w jednym.
Go to the top of the page
+Quote Post
skowron-line
post 22.11.2011, 19:02:56
Post #6





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


Od razu lepiej.

Ty musisz cały widok do pętli wrzucić jeżeli chcesz żeby się pokazał kilka razy a nie zmienną.
  1. foreach()
  2. {
  3. $view .= View::factory(..);
  4. }
  5. $this->template->content = $view;


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
marcin86s
post 22.11.2011, 19:29:07
Post #7





Grupa: Zarejestrowani
Postów: 58
Pomógł: 0
Dołączył: 29.11.2007
Skąd: City 17

Ostrzeżenie: (0%)
-----


Dalej mi to jakoś nie działa, nie rozumiem jakie parametry mam bym dać do foreach()?

Wymyśliłem coś takiego i parę innych sposobów:
  1. public function action_index() {
  2.  
  3. //$view = NULL;
  4. $dupa1 = array();
  5. $dupa2 = array();
  6. /* $view = View::factory('forum')
  7. ->bind('category', $category)
  8. ->bind('last_post_image', $last_post_image)
  9. ->bind('board_name', $board_name)
  10. ->bind('board_info', $board_info)
  11. ->bind('topic', $topic)
  12. ->bind('post', $post);*/
  13. $orm_categories = ORM::factory('forumcategory')
  14. ->order_by('sort','ASC')
  15. ->find_all();
  16. $orm_boards = ORM::factory('forumboard')
  17. ->order_by('forumcategory_id', 'ASC')
  18. ->find_all();
  19. $orm_topic = ORM::factory('forumtopic')
  20. ->find();
  21. $orm_user = ORM::factory('user')
  22. ->where('id', '=', Auth::instance()->get_user())
  23. ->find();
  24.  
  25. foreach($orm_categories as $orm_category)
  26. {
  27. $category = $orm_category->category_name;
  28. $dupa1 .= array(
  29. 'category' => $category,
  30. '' => '',
  31. '' => '',
  32. '' => '',
  33. '' => '',
  34. '' => '',
  35. );
  36.  
  37. foreach($orm_boards as $orm_board)
  38. {
  39. if($orm_category->id == $orm_board->forumcategory_id)
  40. {
  41. //$orm_topic->id = $orm_board->id;
  42. if($orm_topic->last_post > $orm_user->last_login)
  43. {
  44. $readed = 'new_';
  45. }
  46. else
  47. {
  48. $readed = 'no_';
  49. }
  50. $last_post_image = HTML::anchor('forum/board/'.$orm_board->id.'/'.URL::title($orm_board->board_name, '-', TRUE).'/', HTML::image('media/images/forum/'.$readed.'post.png', array('alt' => $orm_board->board_name)));
  51.  
  52. $access = '0';
  53. switch($orm_topic->powers)
  54. {
  55. case '4':
  56. if(Auth::instance()->logged_in('admin'))
  57. {
  58. $access = '1';
  59. }
  60. break;
  61. case '3':
  62. if(Auth::instance()->logged_in('clan'))
  63. {
  64. $access = '1';
  65. }
  66. break;
  67. case '2':
  68. if(Auth::instance()->logged_in('clan'))
  69. {
  70. $access = '1';
  71. }
  72. break;
  73. case '1':
  74. if(Auth::instance()->logged_in('login'))
  75. {
  76. $access = '1';
  77. }
  78. break;
  79. }
  80.  
  81. if($access)
  82. {
  83. $board_name = HTML::anchor('forum/board/'.$orm_board->id.'/'.URL::title($orm_board->board_name, '-', TRUE).'/',$orm_board->board_name);
  84. }
  85. else
  86. {
  87. $board_name = $orm_board->board_name;
  88. }
  89.  
  90. $board_info = $orm_board->info;
  91. $topic = $orm_board->topics;
  92. $post = $orm_board->posts;
  93. $dupa2 .= array(
  94. '' => '',
  95. 'last_post_image' => $last_post_image,
  96. 'board_name' => $board_name,
  97. 'board_info' => $board_info,
  98. 'topic' => $topic,
  99. 'post' => $post,
  100. );
  101. }
  102. }
  103. }
  104. $dupa = array_merge((array)$dupa1, (array)$dupa2);
  105. foreach($dupa as $view){
  106. $view .= View::factory('forum')
  107. ->bind('category', $category)
  108. ->bind('last_post_image', $last_post_image)
  109. ->bind('board_name', $board_name)
  110. ->bind('board_info', $board_info)
  111. ->bind('topic', $topic)
  112. ->bind('post', $post);}
  113. $this->template->content = $view;
  114. $this->template->title = __('Forums');
  115. $this->template->viewmode = 'full';
  116. }

Tu wyświetla to samo co wcześniej więc zmienne są nadpisywane, umieszczałem też "$view .= ..." w miejscu "$dupa2 .= array(..." co skutkowało wyświetleniem się nad każdym boardem nazwy kategorii. Powinno być wyświetlane na zasadzie kategoria1:board1,board2 kategoria2:board3,board4. Przy umieszczaniu tych wszystkich ifów, foreach i switchy w widoku wszystko chodziło prawidłowo. Prosił bym o jeszcze jakieś podpowiedzi nie chce wracać do starego rozwiązania z masą kodu PHP w widoku.

Ten post edytował marcin86s 22.11.2011, 21:00:25
Go to the top of the page
+Quote Post
Kedan
post 25.11.2011, 10:59:31
Post #8





Grupa: Zarejestrowani
Postów: 53
Pomógł: 1
Dołączył: 20.07.2007

Ostrzeżenie: (0%)
-----


W takich wypadkach po prostu robię zwykłą tablicę widoków którą przekazuję do innego widoku
  1. $views_array = array();
  2.  
  3. foreach($some_data_array as $orm_object) {
  4. $tmp_view = View::factory('path/to/view');
  5. $tmp_view->id = $orm_obj->id;
  6. $tmp_view->name = $orm_obj->name; // etc.
  7. array_push($views_array, $tmp_view);
  8. }
  9.  
  10. $this->template->content->elements = $views_array;


A potem w głównym widoku:
  1. foreach($elements as $element) {
  2. echo $element;
  3. }
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.06.2025 - 20:40