26th abr 2009
Mostrando o potencial da JS Calls PHP #1
Já faz alguns meses que tive a idéia de criar uma biblioteca PHP, opensource, para facilitar as interações entre javascript e PHP. Batizei a mesma de JS Calls PHP, e com ela é possível acessar métodos de classes PHP de uma forma simples, com sintaxe clara e orientada a objetos.
Veja a página completa da biblioteca aqui.
Então resolvi criar uma série de posts onde vou mostrar o que é possível fazer com essa biblioteca. Basicamente, ela possibilita qualquer interação da interface com o backend desde que esse seja em PHP e o que você quiser que interaja esteja orientado a objetos.
Vale ressaltar que sempre me perguntam se é uma biblioteca AJAX; tecnicamente falando, não, ela não é. Ela utiliza requisicões assíncronas via javascript com troca de dados no formato JSON, e não dá suporte nenhum a manipulação DOM, como uma jQuery ou Prototype faz. Mas o que nela é diferente do que tem por aí? Possibilita você acessar métodos do PHP, colocando toda abstração de orientação a objetos (nome_da_classe.nome_do_metodo([argumentos])) sem precisar utilizar, por exemplo. o método load() ou $.ajax() da jQuery ou a classe Ajax da Prototype passando URLs inteiras como caminho.
Nesse primeiro post, criei uma rotina que chama via javascript um método de uma classe do PHP que recebe três parâmetros: largura, altura e um texto e cria no sistema de arquivos uma imagem com fundo preto e o texto passado como parâmetro em vermelho, e quando ela acaba de ser executada, no javascript dou reload na imagem.
Utilizei esse exemplo que postei no O Desenvolvedor de manipulação de imagens no PHP com a biblioteca GD como base.
Código da classe:
<?php
class GDTest {
function __construct() {}
function createImageWithText($width, $height, $txt) {
//cria uma imagem com largura x altura definida pelo usuário
$im = imagecreatetruecolor($width, $height);
//aloca as cores para imagem
$text_color = imagecolorallocate($im, 233, 14, 91);
//escreve o texto na imagem
imagestring($im, 1, 5, 5, $txt, $text_color);//iunicia buffer
ob_start();
// cria imagem de saída, formato jpeg, bom 85% de qualidade
imagejpeg($im, NULL, 85);
//captura saída para string
$contents = ob_get_contents();
//finaliza captura
ob_end_clean();
//libera memória
imagedestroy($im);
//escreve arquivo em disco, usando os comando básicos do PHP
$fh = fopen(“temp/img2.jpg”, “w+” );
fwrite( $fh, $contents );
fclose( $fh );
return true;}
}
?>
Então expus essa classe na JS Calls PHP sob o nome gd e habilitei o método a ser acessado, no arquivo de configuração (config.php) e criei o html que faz essa chamada.
<html>
<head>
<script type=”application/javascript” src=”../engine.js”></script>
<script type=”application/javascript” src=”../interface/gd.js”></script>
<script type=”application/javascript”>function getImg() {
gd.createImageWithText(300, 100, document.getElementById(“texto”).value, function(cb) {
if(cb) {document.getElementById(“myImage”).src = “../temp/img2.jpg?date=” + new Date();
}
});
}</script>
</head>
<body>
<h1>JS Calls PHP</h1>
<h2>Exemplo de uso</h2>
<label for=”texto”>Seu texto:</label><input type=”text” name=”texto” id=”texto” />
<a href=”#” onClick=”getImg(); return false;”>criar/atualizar imagem</a><br /><br />
<img src=”#” id=”myImage” />
</body>
</html>
Espero que o exemplo tenha ficado bem explicado e que seja de utilidade. Se tiverem dúvidas ou sugestões de exemplos, enviem

Muito bem explicado Chris, parabéns.
Só tem um problema com o exemplo, o texto da imagem é pequeno e tem pouco contraste com o fundo.
[]s
Cara, bem sacado isso; vou tentar melhorar isso quando tiver um tempo! Vlw!