Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Kohana] Cache a wyświetlanie wyników
Max Damage
post 21.11.2009, 20:04:48
Post #1





Grupa: Zarejestrowani
Postów: 246
Pomógł: 19
Dołączył: 14.06.2007

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


Cześć, dopisałem sobie właśnie prostą obsługę cache dla menu. Model wygląda tak:
  1. public function getMenu() {
  2. $wynik=$this->db->query("SELECT id,nazwa FROM marki ORDER BY nazwa ASC");
  3. return $wynik->result(FALSE);
  4. }

Kontroler:
  1. public function menu(){
  2. $this->template->menu=new View('menu');
  3. $menu_cache=$this->cache->get('menu_cache');
  4. if(!$menu_cache){
  5. $model=new Menu_Model;
  6. $wynik=$model->getMenu();
  7. $this->cache->set('menu_cache',$wynik);
  8. $this->template->menu->menu=$wynik;
  9. }
  10. else {
  11. $this->template->menu->menu=$menu_cache;
  12. }
  13. }

I widok:
  1. foreach($menu as $row) {
  2. echo html::anchor('przegladaj/marki,'.$row['id'],$row['nazwa'],array('class'=>'menu_napis')).'<br />';
  3. echo '<hr/>';
  4. }

Tyle, że to teraz nie działa. Działa dopiero gdy wyniki zwrócę za pomocą result_array(), a w widoku będę miał zamiast tablic, obiekty. Co zrobić aby powyższy skrypt zadziałał? Wolałbym nie przerabiać modelów i widoków gdy będę sobie chciał dodać gdzie indziej obsługę cache na stronie.


--------------------
"Wszyscy wiedzą, że czegoś nie da się zrobić, i przychodzi taki jeden, który nie wie, że się nie da, i on właśnie to robi." - Albert Einstein
Go to the top of the page
+Quote Post
ziqzaq
post 21.11.2009, 22:04:49
Post #2





Grupa: Zarejestrowani
Postów: 428
Pomógł: 128
Dołączył: 17.06.2007

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


Witam.
Poprostu próbujesz cache-ować obiekt Kohana_Mysqli_Result. Niestety to nie wyjdzie wyniki nie są automatycznie ładowane w całości do tego obiektu. Link.
Użyj sobie w widoku var_dump() na tym wyniku z cache i prawdopodobnie dostaniesz coś takiego:
Kod
object(__PHP_Incomplete_Class)[18]
  public '__PHP_Incomplete_Class_Name' => string 'Kohana_Mysqli_Result' (length=20)
//...

Aby cache zadziałało nie musisz przerabiać modelu ani widoku, musisz tylko przy zapisywaniu cache dać $wynik->result_array() i powinno śmigać.
PS. Kohana_Mysqli_Result::result_array przyjmuje dwa argumenty, i ten pierwszy powinien cię zainteresować jeśli chcesz z modelu zwracać tablicę z wynikami a nie obiekt Kohana_Mysqli_Result (pamiętaj tylko, że to może być zasobożerne przy dużej ilości wyników). Zobacz sobie w kohana api.
Pozdrawiam.
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: 13.06.2025 - 07:32