Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CakePHP] 2. pytania z serii kontroler-model(e)
Forum PHP.pl > Forum > PHP > Frameworki
Zeppelin
witam,
Jestem raczej poczatkujacy w cakePHP i jest to moj 1-wszy framework na jakim pracuje. Szukam rozwiazania dla pewnego przypadku:
Tworze portal, ktory na stronie glownej ma sporo boxów po prawej i po lewej stonie, na ktorych sa dane pobierane z bazy, z roznych tabel, np. ostatnii news itp. Po wejsciu na jakas podstrone, boxy te nadal sa widoczne. Powstaja 2 zagadnienia:

1. [dla strony glownej] Jak sprawic, aby za pomoca JEDNEGO kontrolera obsluzyc te boxy, tzn. powyciagac dane z roznych modeli danych, roznych tabel?
1b) tak przy okazji to najlepiej by bylo, zeby ten kontroler nie obslugiwal modelu o wlasnej nazwie, bo nie mam tabel w bazie o takiej nazwie jak ten kontroler (jest to mozliwe?).

2. [dla podstron] Czy jest mozliwosc, aby te boxy po bokach byly umieszczane w elementach (view/elements), tak aby nie trzeba bylo przy kazdym ladowaniu podstrony pisać w kontrolerze kodu dla obluzenia danych do tych boxów itd.? Tzn. tak jak klasyczne elementy, ale z ta roznica, ze tutaj beda w nich jakies dane z bazy danych..

Bylbym wdzieczny za wskazowki, bo mecze sie od 2 dni jak to załatwić. Pozdrawiam
woj_tas
Zainteresuj się metodą requestAction w widoku - Tu masz przykład.
Zeppelin
Cytat(woj_tas @ 20.05.2010, 11:32:54 ) *
Zainteresuj się metodą requestAction w widoku - Tu masz przykład.


Zainteresowalem sie i działa! smile.gif Dzięki Wojtas!

Doczytalem sie rowniez, ze jest to metoda bardzo zle wplywajaca na szybkosc dzialania, z czym sie zgodze, bo praktycznie co zaladowanie strony kontrolery, modele (łączenie z baza) itd. sa wywolywane...

Z pomoca przychodzi cache'owanie, ale cos mi nie dziala, chociaz nie jestem pewien czy to dziala tak jak powinno;
zastosowalem
  1. echo $this->element('latest_comments', array('cache'=>'+1 hour'));

zamiast
  1. echo $this->element('latest_comments');

ale nie działa (chyba(?))...

Tzn. zmieniam wartosc w bazie danych, strone odswiezam i wartosc na stronie (w elemencie) sie rowniez zmienia. Nie powinno sie to zmienic dopiero po godzinie? Czy to dziala na innej zasadzie? Wybaczcie jesli pytanie jest lamerskie, ale wlasnie tak wyobrazalem sobie cache'owanie.

pozdrawiam

woj_tas
hmm, powinno byc ok.

W core.php nie masz przypadkiem wyłączonego cache-u?
Zeppelin
Cytat(woj_tas @ 25.05.2010, 08:13:05 ) *
hmm, powinno byc ok.

W core.php nie masz przypadkiem wyłączonego cache-u?


Dzieki, a który kod powinien być nieskomentowany w core.php?
Na probe odkrylem:
  1. Configure::write('Cache.check', true);

ale to nie to.. Tam dalej jest tego więcej, tylko nie wiem który za to odpowiada. Przyznam, że nigdy wczesniej nie uzywalem cache'owania w php. Bede wdzieczny za sugestie..
  1. /**
  2.  *
  3.  * Cache Engine Configuration
  4.  * Default settings provided below
  5.  *
  6.  * File storage engine.
  7.  *
  8.  * Cache::config('default', array(
  9.  * 'engine' => 'File', //[required]
  10.  * 'duration'=> 3600, //[optional]
  11.  * 'probability'=> 100, //[optional]
  12.  * 'path' => CACHE, //[optional] use system tmp directory - remember to use absolute path
  13.  * 'prefix' => 'cake_', //[optional] prefix every cache file with this string
  14.  * 'lock' => false, //[optional] use file locking
  15.  * 'serialize' => true, [optional]
  16.  * ));
  17.  *
  18.  *
  19.  * APC (http://pecl.php.net/package/APC)
  20.  *
  21.  * Cache::config('default', array(
  22.  * 'engine' => 'Apc', //[required]
  23.  * 'duration'=> 3600, //[optional]
  24.  * 'probability'=> 100, //[optional]
  25.  * 'prefix' => Inflector::slug(APP_DIR) . '_', //[optional] prefix every cache file with this string
  26.  * ));
  27.  *
  28.  * Xcache (http://xcache.lighttpd.net/)
  29.  *
  30.  * Cache::config('default', array(
  31.  * 'engine' => 'Xcache', //[required]
  32.  * 'duration'=> 3600, //[optional]
  33.  * 'probability'=> 100, //[optional]
  34.  * 'prefix' => Inflector::slug(APP_DIR) . '_', //[optional] prefix every cache file with this string
  35.  * 'user' => 'user', //user from xcache.admin.user settings
  36.  * 'password' => 'password', //plaintext password (xcache.admin.pass)
  37.  * ));
  38.  *
  39.  *
  40.  * Memcache (http://www.danga.com/memcached/)
  41.  *
  42.  * Cache::config('default', array(
  43.  * 'engine' => 'Memcache', //[required]
  44.  * 'duration'=> 3600, //[optional]
  45.  * 'probability'=> 100, //[optional]
  46.  * 'prefix' => Inflector::slug(APP_DIR) . '_', //[optional] prefix every cache file with this string
  47.  * 'servers' => array(
  48.  * '127.0.0.1:11211' // localhost, default port 11211
  49.  * ), //[optional]
  50.  * 'compress' => false, // [optional] compress data in Memcache (slower, but uses less memory)
  51.  * ));
  52.  *
  53.  */

woj_tas
Folder cachu (w sumie chyba cały tmp) ma prawa do zapisu?
Zeppelin
Cytat(woj_tas @ 26.05.2010, 15:07:07 ) *
Folder cachu (w sumie chyba cały tmp) ma prawa do zapisu?


Tak, ma prawa do zapisu.

A w core.php który fragment odpowiada za wlaczenie cache'a? To co skopiowalem z tego pliku w poprzedniej wypowiedzi ma byc jako komentarz?
woj_tas
Tak to powinno być zakomentowane.

Odkomentowane powinno być:
Configure::write('Cache.check', true);
Cache::config('default', array('engine' => 'File'));
Zeppelin
Cytat(woj_tas @ 26.05.2010, 20:30:23 ) *
Tak to powinno być zakomentowane.

Odkomentowane powinno być:
Configure::write('Cache.check', true);
Cache::config('default', array('engine' => 'File'));


Dzieki,

No to niby mam dobrze .. :/

A może ja źle sprawdzam czy dobrze mi cache'uje? Jak to powinno wyglądać? Np. jesli jest +1 hour w parametrze to dane w widoku beda sie zmieniac tylko co godzine (przy zalozeniu, ze wartosci w bazie danych sie zmienia wczesniej)? Prawidlowe mam oczekiwania?
woj_tas
A tworzą Ci się pliki cache-u w app/tmp/cache/view?
Zeppelin
Cytat(woj_tas @ 29.05.2010, 13:19:21 ) *
A tworzą Ci się pliki cache-u w app/tmp/cache/view?


Tworzą się i już działa - nie wiem jak to się stało, może jak grzebałem w core to coś odkomentowałem albo odwrotnie, bo eksperymentowałem z różnymi opcjami .. nieważne - ważne, że działa. Dzięki wielkie za pomoc woj_tas.
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.