Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Kohana] Cache a wyświetlanie wyników
Forum PHP.pl > Forum > PHP > Frameworki
Max Damage
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.
ziqzaq
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.
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.