05
dez

Usando FCKeditor com Zend Framework

Olá a todos que estão visitando meu blog e primeiramente muito obrigado pela visita!


Este é meu primeiro post no meu novíssimo site, e escolhi para isso uma dica bem legal que aprendi fazendo esse blog.


Na área administrativa do meu site, precisava de um editor WYSIWYG (what you see is what you get) para fazer meus posts e editar as páginas. Tenho outro site que utiliza o open source PHP List e nele, para fazer as mensagens, foi escolhido o FCK Editor que usei e achei muito prático e completo, então o escolhi também para implementar no meu blog.


Como falado na área Como foi feito?, um link no rodapé, estou utilizando Zend Framework para o desenvolvimento, e então tive que descobrir uma forma prática de implentar o FCK junto ao Zend, daí que surge esse post!


Bom, estou presumindo que você conhece o funcionamento do Zend, se não, sugiro que pesquise um pouco, ainda não tenho um post sobre isso por aqui, mas dentro em breve com certeza existirá um. Utilizei o Zend versão 1.6 e o FCK versão 2.6.3.


Primeiro temos que criar dentro da pasta “library”, ou como você preferir nomear, uma pasta para guardar todas as classes que adicionaremos ao Zend. A criei com o nome de “Pteixeira”, e logo na sequência, crie uma pasta chamada “Fckeditor”, para guardar os arquivos do editor.


Faça o download da ferramenta e extraia o conteúdo na pasta criada.


A estrutura deve ficar assim:


Estrutura de Arquivos


Depois de tudo isso feito, criaremos a classe que fará a instância do FCK. Nomeei a classe como “Fckeditorpedro.php”, pois “Fckeditor.php” já existe, esse arquivo deve ser criado em “/library/Pteixeira/Fckeditor/”. Vou passar o código dessa classe e logo na sequência o explico.


Fckeditorpedro.php

< ?php
/*
 * Classe que estende o FCKeditor
 *
 * @filesource
 * @author Pedro Teixeira
 * @copyright Copyright 2008 Pedro Teixiera
 * @package Pteixeira
 * @subpackage Pteixiera.Fckeditor
 * @version 1.0
 */

/* Aqui incluímos a real classe do FCKEditor que irá criar o editor */
require_once 'Pteixeira/Fckeditor/Fckeditor.php';

class Pteixeira_Fckeditor_Fckeditorpedro
{
	private $_fck;

	/**
	 * Este médoto será chamado sempre que a classe for instanciada,
	 * chamado construtor.
	 * Faz as tarefas iniciais da classe.
	 *
	 * @param string
	 * @return void
	 */
	public function __construct($name)
	{
		/* Instancia o FCKeditor e guarda em uma variável */
		$this->_fck = new FCKeditor($name) ;
	}

	/**
	 * Método que devolve a instância do FCK
	 *
	 * @return FCKeditor
	 */
	public function getInstance()
	{
		return $this->_fck;
	}
}

Na linha 17 declaramos a variável que guardará a instância do FCK.


Na linha 30, dentro do construct, instanciamos a classe do FCK que foi incluída na linha 13 passando uma string como parâmetro, string que será usada para nomear o editor, e guardamos na variável $_fck.


Na linha 40 do método getInstance() retornamos a instância da classe.


Agora que temos quase tudo pronto, basta incluir essa classe no nosso bootstrapping, no meu caso, index.php.


index.php

/* Classe de manipulação do FCK */
Zend_Loader::loadClass('Pteixeira_Fckeditor_Fckeditorpedro');

Agora a classe de manipulação e a estrutura estão prontas, mas ainda falta um detalhe.


O FCK utiliza um IFrame para montar o editor e esse IFrame usa um arquivo html de dentro da pasta dele, porém, como estamos utilizando o Zend Framework, o RewriteEngine está ligado, o que irá impedir do IFrame ser mostrado pelo browser. Para resolvermos isso, basta criar um .htaccess dentro da pasta “/library/Pteixeira/Fckeditor/” com o seguinte conteúdo.


.htaccess

Allow from all
RewriteEngine off

Assim desabilitamos o RewriteEngine dentro da pasta do FCK.


Bom, estamos com tudo pronto, agora basta usar!


Para isso vou criar um exemplo e na sequência explico seu funcionamento. Esse exemplo será um controlador que fará uso da nossa classe.


IndexController.php

< ?php
/**
 * Controlador de Teste
 *
 * @filesource
 * @author Pedro Teixeira
 * @copyright Copyright 2008 Pedro Teixeira
 * @package pteixeira
 * @subpackage pteixeira
 * @version 1.0
 */

class IndexController extends Zend_Controller_Action
{
	/** Ação principal */
	public function indexAction()
	{
		$fck = new Pteixeira_Fckeditor_Fckeditorpedro('nomedofck');
		$fck = $fck->getInstance();
		$fck->Value = 'Valor Padrão';
		$fck->Width = '800px';
		$fck->Height = '600px';
		$fck->BasePath = $this->_request->getBaseUrl() . '/library/Pteixeira/Fckeditor/' ;

		$this->view->fck = $fck;
	}
}

Na linha 18 instanciamos a classe que criamos e passamos seu nome como parâmetro. Esse nome será usado para recuperar seu valor seja como $_POST ou $_GET.


Na linha 20 informamos qual será o valor padrão do editor.


Na linha 21 e 22 definimos o tamanho do editor.


Na linha 23 informamos o path do editor.


E por fim, na linha 25 passamos o objeto para a view.


É isso, agora na view basta chamar o seguinte método para criar o editor.


$this->view->fck->Create();

Para recuperar o valor basta o usar o nome que foi passado quando instanciamos a classe, nesse exemplo, “nomedofck”.


Bom, é isso! Espero que tenha sido útil para muitas pessoas.


Obrigado e não deixe de voltar ao meu blog!


Ah! Também não esqueça de deixar seu comentário, ele é realmente importante para que eu saiba como meus posts estão indo.

25 comentários para “Usando FCKeditor com Zend Framework”

  1. Miguel Melo disse:

    Eu estou a desenvolver um CMS, mas ao ir buscar os valores à base de dados para editar uma notícia com o FCKEditor, o fckeditor parece que ignora as tags e o texto fica normal … consegues ajudar-me ?

    O problema está ao popular o form com os valores da BD! :s

    Responder

    MARCELO respondeu:

    BOM AMIGOS EU TENTEI DE DIVERSOS MODOS E A MELHOR QUE CHEGUEI FOI HAUAHUAH .. no erro abaixo:

    Warning: require_once(..) [function.require-once]: failed to open stream: Permission denied in C:\wamp\www\sistemas\cms\lib\talEditor\fckeditor\FCKeditorClass.php on line 11

    Fatal error: require_once() [function.require]: Failed opening required ‘..’ (include_path=’.;./lib;./app/daos/;./app/models/;.;C:\php5\pear’) in C:\wamp\www\sistemas\cms\lib\talEditor\fckeditor\FCKeditorClass.php on line 11

    Alguem faz ideia de como resolver isso :S

    Responder

    MARCELO respondeu:

    @Miguel Melo, Miguel já tentou verificar se existe algo como striptags, se tiver é só remover q passa a gravar o html

    Responder

  2. Pedro Teixeira disse:

    Olá Miguel,

    Muito obrigado por seu comentário!

    Não entendi muito bem qual problema que está acontecendo. Você consegue colocar os valor do banco no FCK mas ele perde as tags HTML?

    Como você está colocando o que vem do banco no FCK? Utilizando o "$fck->Value = ‘Variável que vem do banco’;"?

    Espero sua resposta para poder lhe ajudar melhor.

    Abraços!

    Responder

  3. Estevam Meneses disse:

    Parabéns!
    Seu blog me salvou de uma noite sem sono.

    Também tenho um pequeno tutorial ZF

    http://estevamzf.comoj.com/

    Responder

  4. Pedro Teixeira disse:

    Obrigado Estevam!

    Volte sempre!

    Responder

  5. Junior disse:

    Boa tarde este post e muito bom o meu problema e o seguinte eu estou usando o fckeditor para criar as minhas pagina para colocalas dinamicamento no site so que quando eu tento criar uma pagina em php o codigo do php some ou seja onde e <?php.. ele fica como <– vc poderia me falar como que eu configuro o fckeditor para aceita eu colocar codigos em php

    Responder

  6. Pedro Teixeira disse:

    Olá Junior

    Obrigado por seu comentário.

    Se entendi sua pergunta, você quer colocar códigos PHP para serem exibidos como HTML, assim como no meu blog quando coloco códigos nos posts. Vou considerar que é isso, se não for, pergunte novamente.

    Bom, realmente o FCK não aceita tags PHP, e não tem jeito de adicionar uma exceção. Porém, tem uma forma de "burlar" isso.

    Abra o FCK, na parte superior esquerda, clique em "Source", então você estará editando diretamente o HTML do FCK, dessa forma vamos abrir as tags PHP colocando o equivalente em código HTML, ou seja, troque "<?php" por "&lt;?php", clique novamente em "Source" e você poderá incluir código PHP sem problemas.

    Deu certo?

    Abraços!

    Responder

  7. Júnior disse:

    Muito obrigado pela atenção e mais o menos isso mesmoque vc falou
    so que eu estou querendo fazer o seguinte eu tenho um pagina de cadastro aonde esta ao fckeditor faço o cadastro ate aqui tudo bem.
    Ai eu tenho a minha pagina principal que dentra dela tem uma include chamando as pagina que eu cadastrei dinamicamente so que eu tenho que pegar uma variavel que esta na pagina dinamica e passa para a pagina principal Ex:

    cadastrar um noticia
    noticia ….
    <?php $variavel = ‘valor’;
    ?>

    e quando eu chamar essa pagina dinamicamente ela tem passa essa valor para a pagina princiapal

    pagina pricipal
    <?php
    se $variavel for x fazer …
    ?>

    Responder

  8. Junior disse:

    Boa tarde Pedro tentei faz o que vc me falou mais nao esta nado certo eu fiz assim &lt;? echo ‘ola como vc vai’; session_start(); $_SESSION['teste'] = ‘ola’; ?&gt; mais na hora de exibir como se fosse um comando php ele aparece como esta no banco vc poderia me dar uma luz

    Responder

  9. Pedro Teixeira disse:

    Olá Junior,

    Agora entendi o que você quer.

    Você não deveria fazer isso em hipótese alguma. Esse tipo de cadastro coloca em risco todo o seu sistema e dependendo do servidor, até ele.

    O Zend, o FCK e você como desenvolvedor devem fazer o possível para que em qualquer informação que vá ser processada pelo servidor e enviada ao cliente não hajam códigos PHP, JavaScript e SQL cadastrados pelo usuário.

    Em todos os formulários do meu site tenho um sistema que elimina qualquer código, até HTML.

    Recomendo que você repense o seu sistema para que ele não precise disso.

    Se quiser ajuda para inventar uma forma de resolver isso, vá comentando.

    Espero ter te ajudado.

    Abraços!

    Responder

  10. Rafael disse:

    não estou entendendo por que do erro…

    Fatal error: Uncaught exception ‘Zend_Controller_Action_Exception’ with message ‘Action "true" does not exist and was not trapped in __call()’ in /opt/lampp/htdocs/ZendFramework-1.7.3PL1/library/Zend/Controller/Action.php:475 Stack trace: #0 /opt/lampp/htdocs/ZendFramework-1.7.3PL1/library/Zend/Controller/Action.php(505): Zend_Controller_Action->__call(‘trueAction’, Array) #1 /opt/lampp/htdocs/ZendFramework-1.7.3PL1/library/Zend/Controller/Dispatcher/Standard.php(285): Zend_Controller_Action->dispatch(‘trueAction’) #2 /opt/lampp/htdocs/ZendFramework-1.7.3PL1/library/Zend/Controller/Front.php(934): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #3 /opt/lampp/htdocs/true/index.php(80): Zend_Controller_Front->dispatch() #4 {main} thrown in /opt/lampp/htdocs/ZendFramework-1.7.3PL1/library/Zend/Controller/Action.php on line 475

    Responder

  11. rafael disse:

    bom o topico mais não está funcionando na minha aplicação

    Responder

  12. Pedro Teixeira disse:

    Olá Rafael,

    Me desculpe, não consegui identificar o erro, só por essa mensagem não vou conseguir te ajudar.

    Quanto ao último comentário eu não entendi o que foi dito.

    Abraço!

    Responder

  13. Xande disse:

    Show. Muito bom.

    Responder

  14. Pedro Teixeira disse:

    Valeu Xande!

    Responder

  15. MIlton Sylvio disse:

    Olá Pedro!

    Primeiramente, parabéns pelo post! Show de bola…

    Agora a minha dúvida é: Como eu posso integrá-lo ao Zend_Form?

    Tem idéia de como posso fazer isso?

    Abraços!

    Responder

  16. Pedro Teixeira disse:

    Olá MIlton,

    Uma boa pergunta.

    Acredito que seja possível, mas não sei te falar como fazer isso.

    Abraços!

    Responder

  17. Juan Biscaia disse:

    Ótimo tutorial, mas estou com um problema… n estou conseguindo passar o basePath corretamente… qualquer coisa que eu coloque dá 404 not found… o htaccess ta criado conforme vc explicou, eu passo o caminho relativo dentro do projeto (/library/fckeditor/) mas ele sempre dá erro… pode me ajudar ?

    Responder

  18. Pedro Teixeira disse:

    Juan,

    Tenta tirar o basePath e colocar o caminho na mão. Deu certo?

    Abraço!

    Responder

  19. Rodrigo Mendonça disse:

    Olá, tem como integrar isso que foi feito ao Zend_form ?

    Responder

  20. Pedro Teixeira disse:

    Olá Rodrigo,

    Uma boa pergunta, acredito que seja possível sim, mas talvez perca algumas funções do editor.

    Abraço!

    Responder

  21. online disse:

    o que eu estava procurando, obrigado

    Responder

    Pedro Teixeira respondeu:

    @online,

    Eu que agradeço sua visita!

    Responder

  22. MARCELO disse:

    BOM AMIGOS EU TENTEI DE DIVERSOS MODOS E A MELHOR QUE CHEGUEI FOI HAUAHUAH .. no erro abaixo:

    Warning: require_once(..) [function.require-once]: failed to open stream: Permission denied in C:\wamp\www\sistemas\cms\lib\talEditor\fckeditor\FCKeditorClass.php on line 11

    Fatal error: require_once() [function.require]: Failed opening required ‘..’ (include_path=’.;./lib;./app/daos/;./app/models/;.;C:\php5\pear’) in C:\wamp\www\sistemas\cms\lib\talEditor\fckeditor\FCKeditorClass.php on line 11

    Alguem faz ideia de como resolver isso :S

    Responder

Deixe um comentário