segunda-feira, 23 de maio de 2011

Ckeditor no zend framework, php, fckeditor

Olá!
Hoje vou explicar de forma simples como se usa o CKeditor no zend framework.

Para quem não sabe o CKeditor (antigo FCKeditor) é uma classe para editor de texto escrita em diversas linguagens.


Antes de mais nada baixe a classe ai no proprio site deles: http://ckeditor.com/download




Depois de baixar, descompacte e insira ela na sua pasta public...

no meu caso coloquei assim: nomedoprojeto\public_html\js\ckeditor
ou seja, dentro da public, e dentro da js eu inseri a pasta toda do ckeditor.


Precisamos antes de mais nada ir na view que vamos utilizar a classe e inserir o js, a minha view é a de noticias então adicionei na views/scripts/noticias/index.phtml

Eu chamo o js dessa forma:

< ? php

  //chamando ckeditor o js
  $this->headScript()->appendFile($this->baseUrl().'/js/ckeditor/ckeditor.js');
?  >

Percebam que pego o baseUrl + o diretório após o public...

Agora vamos criar um Helper para o CKeditor, vc não sabe o que são os helpers do ZEND?
Resumidamente o Helper é uma classe auxiliar para a view, imagina um caso na qual você precisa executar funções complexas na view como o de organizar a data, vc não faria isso na view certo? E se precisa utilizar 'n' vezes? E logicamente não faria no controller pq é ação expecifica para visão, sendo assim usamos os Helpers, q são classes que chamamos sem precisar carregar na view, basta criar uma pasta 'helpers' dentro da pasta views ao lado da scripts =]

Quer uma explicação mais detalhada? Documentação do ZEND


Então vamos la, criando esse diretório: /view/helpers vamos criar uma página php dentro dela chamada  SetupEditor.php (de o nome que vc quiser)

Dentro desse helper criado vamos adicionar:


class Zend_View_Helper_SetupEditor {

    f u n c t i o n setupEditor( $ textareaId ) {
        return "< script type=\"text/javascript\">
    CKEDITOR .replace ( '" . $textareaId . "' );
        < / script >";
    }
}
 
 
O que estamos fazendo é simples, apenas criando uma
 função que recebe o id do text area e retornamos 
ele com o script do ckeditor, isso poderia ser feito
 na view mas e se você precisa fazer várias vezes, 
não é melhor criar um helper?
 
 
 
Agora vamos voltar a nossa view e adicionar um text 
area: 
 
< textarea name="not_texto" id="not_texto"< 
/ textarea> 


depois de adicionar o textarea vamos apenas utilizar o 
helper com o mesmo nome do textarea assim:

 echo $this->setupEditor( 'not_texto' ); ?>

E PRONTO, vejam que não usei o zend form então no 
controller
eu receberia o dado pelo getParam mais o menos assim:

$request = $this->getRequest();
$noticia = $request->getParam('not_texto');

simples não é?!

Fala sério esse Helper é uma mão na RODAAAA xD
Vejam que não utilizamos a classe php do CKeditor 
mas sim a de JS.
Acho que é mais simples, uma vez q isso é FRONTEND.

Espero ter ajudado.


Baseado no tutorial do site norte americano Harikt

@pv_fusion

 
 

sábado, 14 de maio de 2011

O que é JSON?


Que estamos evoluindo mais rápido que a velocidade dos carros da F1 todo mundo sabe, mas e como acompanhar? Será que tudo que aparece de novo é realmente importante aprender?
A resposta para isso é simples: 'DEPENDE'...
Depende?
Sim, depende do seu segmento...

Mas como nesse caso eu abordo desenvolvimento de aplicações para a WEB então eu ja deixo claro o segmento do JSON... (DESENVOLVIMENTO DE SOFTWARE)...



Mas afinal o que significa JSON?

JSON é um acrônimo para "JavaScript Object Notation", é um formato leve para intercâmbio de dados computacionais. JSON é um subconjunto da notação de objeto de JavaScript, mas seu uso não requer Javascript exclusivamente.

A simplicidade de JSON tem resultado em seu uso difundido, especialmente como uma alternativa para XML em AJAX. Uma das vantagens reivindicadas de JSON sobre XML como um formato para intercâmbio de dados neste contexto, é o fato de ser muito mais fácil escrever um analisador JSON.
Em JavaScript mesmo, JSON pode ser analisado trivialmente usando a função eval(). Isto foi importante para a aceitação de JSON dentro da comunidade AJAX devido a presença deste recurso de JavaScript em todos os navegadores web atuais.

Na prática, os argumentos a respeito da facilidade de desenvolvimento e desempenho do analisador são raramente relevados devido aos interesses de segurança no uso de eval() e a crescente integração de processamento XML nos navegadores web modernos. Por esta razão JSON é tipicamente usado em ambientes onde o tamanho do fluxo de dados entre o cliente e o servidor é de supra importância (daí seu uso por Google, Yahoo, etc., os quais servem milhões de usuários), onde a fonte dos dados pode ser explicitamente confiável, e onde a perda dos recursos de processamento XSLT no lado cliente para manipulação de dados ou geração da interface, não é uma consideração.

Enquanto JSON é frequentemente posicionado "em confronto" com XML, não é incomum ver tanto JSON como XML sendo usados na mesma aplicação. Por exemplo, uma aplicação no lado cliente a qual integra dados do Google Maps com dados atmosféricos através de SOAP, requer suporte para ambos formatos de dados.

Existe um crescente suporte para JSON através do uso de pequenos pacotes de terceiros. A lista de linguagens suportadas incluem ActionScript, C/C++, C#, Delphi, ColdFusion, Java, JavaScript, Objective CAML, Perl, PHP, ASP 3.0, Python, Rebol, Ruby, Lua e Harbour.

Um exemplo de objeto JSON:


{ "Aluno" : [         
 { "nome": "João", "nota": [ 8, 9, 7 ]  },         
{ "nome": "Maria", "nota": [ 8, 10, 7 ] },         
{ "nome": "Pedro", "nota": [ 10, 10, 9 ] }      
] }


Espera ai pv.... esse tal JSON é um array? Basicamente isso amigo! 
Mas com ele conseguimos "conversar" com outras linguagens...  Veja uma comparação de XML e Json 
 
OBJETO JSON 
{"menu": {   
"id": "file",   
"value": "File",  
 "popup": {     
"menuitem": [       
{"value": "New", "onclick": "CreateNewDoc()"},      
 {"value": "Open", "onclick": "OpenDoc()"},       
{"value": "Close", "onclick": "CloseDoc()"}     ]   } }}

Mesmo exemplo só que em XML
< menu id="file" value="File" >
  < popup >
    < menuitem value="New" onclick="CreateNewDoc()" / >
    < menuitem value="Open" onclick="OpenDoc()" / >
     
  < / popup >
< / menu >
Percebeu a limpeza?  Valeu!

sexta-feira, 22 de abril de 2011

Implementando um Objeto de Valor no PHP

Hoje vou falar sobre Objeto de Valor (Value Objects) e demonstrar a implementação de um objeto de valor no PHP. Objetos de valor? Vamos a uma definição:

Muitos objetos não possuem nenhuma identidade conceitual. Esses objetos descrevem alguma característica de alguma coisa.

No livro Domain Driven Design de Eric Evans ele faz uma analogia bem interessante que é:

Quando uma criança está desenhando, ela está preocupada com a cor da caneta que vai escolher, e pode estar preocupada com a espessura da ponta. Mas se houver duas canetas da mesma cor e de mesmo formato, ela provavelmente não vai se importar em qual delas está utilizando. Se uma caneta se perder e for substituída por outra da mesma cor tirada de uma nova embalagem, ela pode recomeçar o seu trabalho sem se preocupar com a troca.

Objetos de valor representam um aspecto descritivo do domínio, não sendo necessária nenhuma identidade conceitual. Uma instancia de um objeto de valor que tenha as mesmas características de uma segunda instância do mesmo objeto não devem ser diferenciadas por identidades únicas, pois, afinal o que importa são suas características. Um exemplo simples de objetos de valor, são as cores, não importa onde você utilize uma instancia de Vermelho em seu domínio, o vermelho será sempre vermelho, diferente de uma entidade onde, por mais que tenham características parecidas, sua identidade é diferente e importa para o domínio.

Deixando um pouco analogias de lado vamos pensar em uma implementação real, imagine um caso em que o preço de um produto em uma loja virtual sofra diversos tipos de alteração dependendo do seu contexto, e ainda que é necessário expressar discontos e coisas do tipo, para isso um preço não poderia ser simplesmente um atributo do tipo priomitivo de um produto, ou seja, ele precisa agregar valor e então criariamos um objeto de valor para ele, conforme exemplo a seguir:



domingo, 20 de fevereiro de 2011

Site fóra do AR - Acontecimentos recentes

Amigos, amigas...

Meu site http://www.profpv.com está fóra por uns dias.

Estou fazendo uma MEGA MIGRAÇÃO nos meus dados e alterando minha estrutura de desenvolvimento. sendo assim algumas ferramentas que disponibilizei como:

O que as pessoas falam no twitter (http://www.profpv.com/oqfalam)

e

Armazena Rápido (http://www.profpv.com/baixe)

Estão fóra do ar até a volta do meu servidor.

Bem, gostaria de colocar um link interessante de um blog falando sobre Política.

http://criticandoamidia.blogspot.com/2011/02/abaixodecreto-cpmfnao-foradilma.html


Encontrei esse blog pelo twitter e achei mt interessante oq a escritora fala.


Estou montando um tutorial interessante com PHP do básico ao complexo em breve coloco tudo.

Obrigado;

quarta-feira, 9 de fevereiro de 2011

Buscador de texto(strings) sem usar complexidade - jquery




Conheça o quickSeachr um plugin não-obstrusivo que busca textos e possui várias opções. Muito bom para agilizar processos de dados não cadastrados em banco de dados.

Veja um exemplo aqui

Faça o download aqui

terça-feira, 8 de fevereiro de 2011

Localização (Zend_Locale)


Localização (Zend_Locale)

Minha proposta aqui é sempre tornar o POST rápido e não demorado por isso vou dar uma breve visão sobre o Zend_Locale...
O que é isso? Ele é uma classe do ZF com o intuito de buscar localizações pois sabendo a localização do nosso usuário podemos dizer que lingua definir para ele correto? O Zend Locale pega diversas localizações como a do Navegador do usuário, do nosso ambiente ou ainda do framework eu acho interessante pegar a localização do Navegador em um caso que queremos a real tradução de conteúdo para isso é bem simples:



  1. public function pegalocal(){
  2. require_once 'Zend/Locale';
  3. $local new Zend_Locale(Zend_Locale::BROWSER);
  4.           var_dump($local);


Aqui fizemos algo bem simples, nesse método que inventei 'pegalocal' crio o objeto $local passando como parametro o dado do navegador e dou um var_dump nesse carinha para ver a localização do mesmo, e foi isso que ele me exibiu na tela:


object(Zend_Locale)[70]
  protected '_locale' => string 'pt_BR' (length=5)



Ou seja, olha o idioma ai =)... a localização é basicamente isso...

Observações: Ao criarmos o Zend_Locale não é necessário passar o parâmetro e nesse caso o default é o local do navegador mesmo, mas passei isso para ficar claro. No resultado do var_dump percebemos que a localização é um atributo(_locale) protegido então para pegar o valor vamos usar os famosos gets nesse caso seria um getLanguage para a lingua (pt) e getRegion para a região (BR)...