Urls usando ’slug’

Posted: December 18th, 2007 | Author: andre | Filed under: CakePHP | No Comments »

Vo mostrar aqui como utilizar urls em estilo slug como o wordpress. As razões de utilizar esse tipo de recurso é simples, as urls ficam mais apresentáeis e intuitivas e tornando-se mais atraentes. O precesso de adaptação é bem simples, utilizando mais um field ’slug’ na tabela do banco e usando esse campo ao invés do id para procura.

CREATE TABLE contents (  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,images_id INTEGER UNSIGNED NOT NULL,title VARCHAR(45) NULL,
 
slug VARCHAR(100) NULL,
 
text TEXT NULL,
 
created DATETIME NULL,
 
updated DATETIME NULL,
 
PRIMARY KEY(id),
 
UNIQUE INDEX contents_index1129(slug)
 
);

Com a table já pronta, podemos editar o controler. Para isso vamos mudar a function “view” do contents_controller.php.
A seguir o code original criado a partir do bake.php:

function view($id = null) {
if (!$id) {
$this->Session->setFlash('Invalid id for Content.');
$this->redirect('/contents/index');
}
$this->set('content', $this->Content->read(null, $id));
}

Agora a modificação, e então ocorre a mágica:

function view($slug = null) {
if (!$slug) {
$this->Session->setFlash('Invalid id for Content.');
$this->redirect('/contents/index');
}
$this->set('content', $this->Content->findBySlug(null, $slug));
}

Com o método ‘findBy’ vc escolhe qual campo vc deseja usar para a procura, no caso nosso campo ’slug’ da tabela.
Então para completar a mudança só é preciso agora alterar as views de modo que nos links seja indicado não a ID e sim o Slug da página requisitada:

...
<td class="actions">
<?php echo $html->link('View','/contents/view/' . $contents['Content']['slug'])?>
<?php echo $html->link('Edit','/contents/edit/' . $contents['Content']['slug'])?>
<?php echo $html->link('Delete','/contents/delete/' . $contents['Content']['slug'], null, 'Are you sure you want to delete id ' . $contents['Content']['slug'])?>
</td>
...

Agora uma última implementação, reparam que usamos na tabela a campo ’slug’ como UNIQUE, obviamente é necessário que essa entrada seja única no banco de dados para que duas páginas não tenham o mesmo ’slug’ perdendo assim a funcionalidade que mostramos aqui. Só é necessário alterar a function ‘add’ no próprio controller:

function add() {
if (empty($this->data)) {
$this->render();
} else {
$this->cleanUpFields();
 
/*aqui preencho o campo slug com o title + a data pra formar uma entrada unica */
 
$this->data['Content']['slug'] = $this->Common->title_slug($this->data['Content']['title'].'-'.date('Y-m-d H:i:s'));
 
if ($this->Content->save($this->data)) {
$this->Session->setFlash('The Content has been saved');
$this->redirect('/contents/index');
} else {
$this->Session->setFlash('Please correct errors below.');
}
}
}

Repare que foi utilizado um component ‘Common’ cujo codigo é disponibilizado a seguir, basta criar o arquivo /controllers/components/Common.php com ele e chama-lo usando “var $components = array(‘Common’);”.

 
class CommonComponent extends Object{
function title_slug( $title )
{
$slug = $title;
 
$bad = array( 'Š','Ž','š','ž','Ÿ','À','Á','Â','Ã','Ä','Å','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ñ',
'Ò','Ó','Ô','Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','à','á','â','ã','ä','å','ç','è','é','ê',
'ë','ì','í','î','ï','ñ','ò','ó','ô','õ','ö','ø','ù','ú','û','ü','ý','ÿ',
'Þ','þ','Ð','ð','ß','Œ','œ','Æ','æ','µ',
'"',"'",'“','"',"n","r",'_');
 
$good = array( 'S','Z','s','z','Y','A','A','A','A','A','A','C','E','E','E','E','I','I','I','I','N',
'O','O','O','O','O','O','U','U','U','U','Y','a','a','a','a','a','a','c','e','e','e',
'e','i','i','i','i','n','o','o','o','o','o','o','u','u','u','u','y','y',
'TH','th','DH','dh','ss','OE','oe','AE','ae','u',
'','','','','','','-');
 
// replace strange characters with alphanumeric equivalents
$slug = str_replace( $bad, $good, $slug );
 
$slug = trim($slug);
 
// remove any duplicate whitespace, and ensure all characters are alphanumeric
$bad_reg = array('/s+/','/[^A-Za-z0-9-]/');
$good_reg = array('-','');
$slug = preg_replace($bad_reg, $good_reg, $slug);
 
// and lowercase
$slug = strtolower($slug);
 
return $slug;
}
 
}

Cake PHP!

Posted: August 25th, 2007 | Author: andre | Filed under: Geral | No Comments »

CakePHPDepois de testar vários CMS, experimentei Mambo, WebsiteBaker, WordPress e vários outros, resolvi criar meu própio CMS, mas depois de montar a base para ele mesmo que ele tenha ficado além das minhas expectativas resolvi deixar o projeto de lado e então resolvi procurar por frameworks em php para desenvolver websites.

Primeiramente encontrei o Zend Framework, bem robusto, pelo que percebi pode-se criar aplicações bem robustas usando o ZF, mas mesmo assim não era o que eu estava procurando. Pesquisando um pouco mais achei o CakePHP, a primeira vista não achei o CakePHP tão atraente, mas depois de usa-lo um pouco mais eu particularmente gostei muito dele.

O CakePHP é um framework para desenvolvimento rápido de aplicações que usa conceitos como ActiveRecord, Association Data Mapping, Front Controller and MVC. Pra quem quer ter uma noção o quão rápido é o desenvolvimento com um framework tentem montar o “Blog Tutorial”do próprio manual do Cake.

Website
www.bakephp.org

CakePHP blog tutorial:
http://manual.cakephp.org/appendix/blog_tutorial


medidas no CSS

Posted: August 20th, 2007 | Author: andre | Filed under: CSS | No Comments »

Unit Description

%     Porcentagem

in     Polegada

cm     Centimetro

mm     Milimetro

em     1em é igual a tamanho atual de fonte. 2em significa 2 vezes o tamanho atual de fonte. Ex. Se um elemento é mostrado com um fonte de 12pt, então ‘2em’ são 24pt, uma unidade bastante util para adapatar automáticamente à fonte que o usuário usa.

ex     um ex é a x-height de uma fonte(x-height é normalmente metade de font-size)

pt point(1 pt é o mesmo que 1/72 polegadas)

pc pica (1 pc é o mesmo que 12 points)

px pixels (um ponto na tela do computador)

Colors
Unit Description

color_name     Nome de uma cor (e.g. red)

rgb(x,x,x)     Um valor RGB (e.g. rgb(255,0,0))

rgb(x%, x%, x%)     Um valor percentual RGB (e.g. rgb(100%,0%,0%))

#rrggbb     Numero HEX (e.g. #ff0000)

fonte: www.w3.org


Promocode Dreamhost

Posted: February 8th, 2007 | Author: andre | Filed under: Geral | 1 Comment »

A Dreamhost é umas das melhores empresas de hospedagem atualmente. Possuo uma conta lá e gostei muito dos recursos disponíbilizados pela dreamhost, como por exemplo os “One Click Installs” onde se pode instalar softwares como o Wordpress, muito facilmente. E muitas outros recursos que não vou detalhar aqui senão vai ficar muito longo.

Criei um promocode para que novos usuários possam ganhar o desconto total oferecido em um promocode, $97 doláres de desconto na assinatura do plano anual. Para quem estiver interessado no desconto o Promocode é INFINITA97.

Pra quem não sabe como funciona, é só efetuar seu cadastro normalmente e informar o promocode na caixa indicada no formulário, não se preocupe ele é checado antes de finalizar o cadastro, e pronto vc ganhou o desconto de $97.

dreamhost


Infinita design v3. 2007 !

Posted: January 17th, 2007 | Author: andre | Filed under: Geral | 2 Comments »

Opa, com tempo vago nesse mes de janeiro decidi fazer um redesign do website agora baseado no famoso wordpress.
Fiquei espantado com o wordpress, muito funcional e fácil de usar.

Para o design eu quis manter o tema “rascunho” que atribui a primeira imagem do design anterior (era um cubo feito por vários traços, parecendo rabiscos). O tema “rascunho” já mostra logo de cara a lembrança de projeto e design, uma imagem de preparação.

Bom era essa a ídeia, não sei se passou, e se não passou, ficou bonito pra caramba. :)

cube