Yahoo esquece de trocar página de erro do Symfony

Olá pessoal,

essa mancada foi enviada por Dimiguel e é uma página de erro do Answers do Yahoo, que todos nós sabemos que foi desenvolvido usando o Symfony.

Erro no Yahoo!

Abraços pessoal e até a próxima!

Comentário

CakePHP 1.2: Corrigindo erro estranho na Dreamhost

Olá pessoal,

a medida que passei a usar mais o CakePHP 1.2, passei a me deparar com mais problemas. (Não são muitos. Mas alguns são bem chatos.)

Estava instalando um novo site na Dreamhost, quando me deparei com o seguinte erro:

Missing Controller

Error: InternalError.htmlController could not be found.

Error: Create the class InternalError.htmlController below in file: app/controllers/internal_error.html_controller.php

<?php
class InternalError.htmlController extends AppController {

	var $name = 'InternalError.html';
}
?>

Notice: If you want to customize this error message, create app/views/errors/missing_controller.ctp

Percebam que nem mesmo o nome deste controlle solicitado é coerente. Depois de muito ajeitar o routes sem muito sucesso, acabei descobrindo na lista oficial que deveria trocar a conta para PHP 4. Não entendi o porquê do erro, mas felizmente a Dreamhost me permitiu fazer isso!

Abraços e espero que ninguém passe por isso em um servidor de hospedagem que não dá a mesma liberdade que a DH!

Comentários (7)

jQuery - image replacement com 4 linhas

Olá pessoal,

precisei usar image replacement em um projeto, mas um IR dinâmico. Resolvi então implementar um em jQuery.

HTML:
  1. <h2 class="ir">Titulo</h2>
  2. <a href="http://www.tuliofaria.net" class="ir">Tulio</a>

JAVASCRIPT:
  1. $(function(){
  2. $(".ir").each(function(){
  3. t = $(this).text();
  4. $(this).text("");
  5. $(this).append('<img src="geradordaimagem.php?texto='+escape(t)+'" alt="'+t+'" border="0" />');
  6. });
  7. });

O script PHP para a geração dos títulos pode ser conseguido em: http://www.alistapart.com/articles/dynatext , aliás, no neste post no ALA tem também o JS (não jQuery, rs) de como se fazer o mesmo.

Prefiro o meu, que basta colocar a classe ir, ou qualquer outra (configurando o script) e mandar substituir.

Abraços pessoal e até a próxima!

Comentários (6)

CakePHP 1.2: carregando model, controller e component dinâmicamente

Olá pessoal,

continuando a série de posts sobre o CakePHP 1.2 e das mudanças que ele trouxe, neste post irei falar como carregar dinâmicamente model', controller's e component's.

No Cake 1.1, era comum usármos:

PHP:
  1. loadModel("nomeDoModel");
  2. loadComponent("nomeDoComponent");
  3. loadControllers("nomeDoController");

No Cake 1.2 todos os esses loads viraram App::import, que seria usado assim:

PHP:
  1. App::import("Model", "nomeDoModel");
  2. App::import("Component", "nomeDoComponent");
  3. App::import("Controller", "nomeDoController");

O Cake 1.2 está se tornando OO de verdade.

Abraços pessoal e até a próxima!

Comentários (12)

CakePHP 1.2 - Named params

Olá pessoal,

um recurso bem interessante do CakePHP 1.2 é o chamado named params, ou parâmetros nomeados, que consiste em enviar informações pela URL mas sem precisar ter uma "ordem" para isso.

Por exemplo:
www.dominio.net/controller/método/nome:Tulio/cidade:Pouso Alegre/

Assim podemos recuperar estes valores dentro do controller usando o seu nome e não mais dependendo da posição que ela está na URL.

Todos os parâmetros nomeados chegam ao controller dentro de $this->params["named"], neste exemplo acima, teriamos $this->params["named"]["nome"] e $this->params["named"]["cidade"].

Vale lembrar que como o parâmetro nomeado pode ou não vir na URL, devemos verificar sua existência com isset antes de usá-lo.

Até a próxima pessoal, qualquer dúvida, comentem!

Comentários (5)

CakePHP 1.2 - Salvando registros

Olá pessoal,

atendendo a pedidos e aproveitando que por se tratar de um assunto interessante, vou falar sobre a inserção e atualização de dados no CakePHP 1.2.

A primeira mudança que encontramos é a inclusão do método set para o model, assim antes de salvarmos, validarmos e etc, devemos definir os dados usando o mesmo.

Como todos sabem o Cake usa um único método para criar e atualizar registros (o método save). Mas como diferenciar um do outro? Com o ID :) Se nos dados passados (setados) houver o id, será efetuado um update, senão um insert. Simples, não?

Exemplo:

PHP:
  1. $dados = array("Usuario"=>
  2. "id"=>1,
  3. "nome"=>"Tulio Faria"
  4. )
  5. );
  6.  
  7. $this->Usuario->set($dados);
  8. $this->Usuario->save();

Como em $dados tem o id (chave primária), neste caso, seria feito um update setando o nome para "Tulio Faria" do Usuario de id = 1.

Para fazermos o insert, bastaria tirar o id de dados.

Para atualizar um único campo, podemos usar um outro método, o saveField.

PHP:
  1. $this->Usuario->id = 1;
  2. $this->Usuario->saveField("nome", "Tulio Faria");

Neste caso, faria o mesmo efeito do exemplo do save, atualizando o nome para "Tulio Faria" para o Usuario de id = 1.

Bom é isso pessoal, qualquer dúvida comentem!

Abraços,

Comentários (13)

CakePHP 1.2: helper para paginação, simples, rápido e indolor

Olá pessoal,

eu venho usando o CakePHP 1.2 nos meus projetos recentes, e confesso que o quer já era bom ficou muitíssimo melhor.

Uma das novas características incorporadas ao core do CakePHP 1.2 é o helper para paginação e que salvou minha pele em um projeto, onde do dia para noite 10 registros viraram 6000, e resolvido com uma paginação em menos de 2 minutos.

Para usá-lo, começamos definindo os parâmetros da paginação, que pode ser feito de modo genérico para todos os models usados do controller (código aplicado no controller que terá paginação):

PHP:
  1. var $paginate = array('limit' => 50);

Neste caso definimos o tamanho da página de registros com o tamanho 50. Podemos ainda, adicionar conditions, fields, order, page e recursive, assim como é feito no findAll de um model.

Essa configuração será usada para todos os models deste controller. Se quisermos configurações diferentes para models diferentes, usaríamos:

PHP:
  1. var $paginate = array(
  2.  
  3. 'Model1'=> array('limit' => 50),
  4.  
  5. 'Model2'=> array('limit' => 20)
  6.  
  7. );

Depois de configurado, na hora de enviarmos os dados para o view, ao invés de usar findAll ou similares, usaremos:

PHP:
  1. $this->set("dados", $this->paginate("NomeDoModel"));

Pronto, agora só falta mostrar as páginas no view com:

PHP:
  1. Mostrando página: <?php echo $paginator->counter(array("separator"=>" de ")); ?>
  2.  
  3. ...
  4.  
  5. <?php echo $paginator->prev("Anterior"); ?>
  6.  
  7. <?php echo $paginator->numbers(); ?>
  8.  
  9. <?php echo $paginator->next("Próxima"); ?>

Depois disso é só testar e correr pro abraço :)

Bom pessoal, qualquer dúvida comentem! Abraços e até a próxima!

Comentários (22)