Apesar de muito simples, este pequeno codigo e bem poderoso. Ele abre as portas para as proximas partes neste projeto. De uma olhada no no exemplo de implementacao a baixo e se achar util e so baixar pelo github e sair usando.Este e um exemplo de como utilizar este Adapter.<?php$schedulesQuery = Doctrine_Query::create() ->select() ->from('Schedule');$adapter = new Cs_Paginator_Adapter_DoctrineQuery($schedulesQuery);$paginator = new Zend_Paginator($adapter);$this->view->schedules = $paginator;O resto segue exatamente o funcionamento do Zend_Paginator. Internamente o Adapter utiliza Doctrine Pager o que faz com que o funcionamento do Zend_Paginator seja otimo, buscando no banco apenas a pagina corrente.Esse e o primeiro componente que fara parte de algo maior, apesar de ser completamente funcional sozinho. As outras partes do Cs_Table eu vou postando com o tempo.Onde baixar? O titulo desse post poderia ser "Criando cache de imagens no browser". Mas eu queria tambem apresentar uma ferramenta bem legal. O nome dela e Page Speed.Eu usei essa ferramenta pra avaliar algumas partes de um site do qual eu nao participei do desenvolvimento desde o comeco. E ela foi bem eficiente em me mostrar os pontos onde eu podia melhorar o desempenho. Entao foi so aplicar algumas correcoes rapidas e pronto. A pagina ficou um foguete.Essa ferramenta e do proprio google e e um plugin para firebug. Ela esta com certeza na minha lista de must have de ferramentas de desenvolvimento. Voce pode conseguir o Page Speed aqui.O problema que ela identificou, era que algumas imagens nao estavam sendo colocadas no cache do navegador. Porque eram redimensionadas on the fly pelo php e o header nao era setado apropriadamente. Eu falei sobre cache em outro post, mas nesse caso especifico eu deixei faltando algum exemplo de codigo de como implementar o uso do cache do navegador. Entao ta ai:$etag = md5_file($foto);$lastModified = gmdate("D, d M Y H:i:s", filemtime($foto)) . " GMT";$expires = 604800;header("Cache-Control: max-age= $expires, private"); header("Expires: $expires");header("Pragma: cache");header('Content-type: image/jpeg');header("Last-Modified: $lastModified");header("Etag: $etag");if (@strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == $lastModified || trim($_SERVER['HTTP_IF_NONE_MATCH']) == $etag) { header("HTTP/1.1 304 Not Modified"); exit;}Com esse script o browser vai fazer cache da imagem o que vai evitar requisicoes desnecessarias. Em vez de baixar toda imagem a cada request, ele vai baixar apenas HTTP/1.1 304 Not Modified. Alem disso vai evitar o resample que e feito a cada request da imagem, que era o meu caso. Pra resolver o resample e mais indicado fazer o cache no proprio servidor, mas isso e so gravar a img em uma pasta ja redimensionada. Sim eu gostaria muito de colocar um screencast explicando, mas e fim de ano e as coisas nem sempre sao faceis quando se tem mais tempo livre. Mas por sorte eu tive tempo de arrumar uma imagem e de terminar o codigo que eu vou explicar mais tarde. Com sorte vai ter algumas pessoas contentes.//indexController.php<?phpclass IndexController extends Zend_Controller_Action{ /** * TODO: move to a auth controller as login action */ public function indexAction() { $request = $this->getRequest(); /** * TODO: change to Zend_Form isValid() */ if($request->isPost() && $request->getParam('login') && $request->getParam('pass')) { $adapter = new My_Auth_Adapter( $request->getParam('login'), $request->getParam('pass') ); $auth = Zend_Auth::getInstance(); $result = $auth->authenticate($adapter); if(! $auth->hasIdentity() ) { $this->view->msgs