Variáveis multiline no javascript

É cada vez mais comum manipular uma quantidade enorme de html através do Javascript, seja usando Ajax ou apenas alterando elementos estáticos do html.

Alguns códigos que eu vejo tem "tripas" gigantescas de código html tudo na mesma linha, para se manter dentro de uma variável. Identação zero, não precisa dizer que o código é praticamente ilegível, né?

//Exemplo de código ilegível
var structureTable = "<table><tbody><tr><td>Name</td><td>ID</td><td>Value</td><td>Tax</td><td>Quantity</td></tr><tr><td>Name</td><td>ID</td><td>Value</td><td>Tax</td><td>Quantity</td></tr></tbody></table><hr /><h2>Tabela 2</h2><table><tbody><tr><td>Name</td><td>ID</td><td>Value</td><td>Tax</td><td>Quantity</td></tr><tr><td>Name</td><td>ID</td><td>Value</td><td>Tax</td><td>Quantity</td></tr></tbody></table>";

Neste caso a estrutura nem é tão complicada, duas tabelas apenas. Mas as vezes a coisa fica FEIA quando existem blocos muito grande de HTML que devem ser manipulados pelo javascript.

Uma solução para lidar com este problema é usar Ajax e carregar o bloco de javascript de um arquivo HTML separado e inserir ele no seu DOM, mas vejo isso como uma requisição desnecessária ao servidor – você fará uma requisição para um conteúdo que não é dinâmico.

A solução que proponho para lidar com strings que são códigos de HTML são variáveis com mais de uma linha no javascript.

Variáveis multiline no javascript

A mesma "structureTable" que defini no exemplo acima vou definir agora, usando quebra de linha para variáveis do JS. Para sinalizar a quebra de linha no Javascript você só precisa usar uma barra invertida e continuar a variável na próxima linha.

//Exemplo de código legível
var structureTable = "<table>\
<tbody>\
   <tr>\
     <td>Name</td>\
     <td>ID</td>\
     <td>Value</td>\
     <td>Tax</td>\
     <td>Quantity</td>\
   </tr>\
</tbody>";

 

E pronto, você tem sua variável legível e muito mais fácil de dar manutenção depois.

Mercado de trabalho – A vaga de PHP é sua…

As vezes vejo no Twitter algumas oportunidades de emprego para desenvolvedores, repasso algumas no twitter do O Desenvolvedor (follow us!) e tem algumas que são muito engraçadas tristes.

Exemplo de uma que li recentemente, de uma agência de SP e RJ:

Para uma vaga de web-developer Júnior:

Pré-requisitos:

  • Sólidos conhecimentos de HTML/CSS (W3C), JavaScript (Ajax), PHP e MySQL;

  • Experiência com administração remota de plataformas UN*X;

  • Entendimento de linguagens de programação de uso genérico (C/C++/Java/Perl/Python/etc);

  • Capacidade de elaborar soluções próprias em programação;

  • Possuir um portfólio online.

Desejável conhecimento de:

  • ActionScript 3;

  • Frameworks de JavaScript (jQuery/YUI/etc);

  • Shell scripting;

  • Especificações do protocolo HTTP/1.1;

  • Uso das APIs dos webservices (Flickr/Google/Twitter/YouTube/etc);

  • WordPress (elaboração de temas e/ou plugins).

 

Destaque para "linguagens de programação de uso genérico (C/C++/Java/Perl/Python)", especificações do protocolo HTTP/1.1 e shell scripting.

Oportunidade de trabalho…

A oportunidade existe desde que você seja um back-front-end developer com conhecimentos em gerenciamento e protocolo de redes, domine frameworks e algumas linguagenzinhas genéricas que vão do ASP, PHP, Python até o Cobol.

Profissional transformer
(ou o famoso tapa-buraco)

 

Mas nem tudo é tristeza, ainda existem algumas empresas que conseguem dividir e focar em pessoas com conhecimentos específicos. Mas só algumas, enquanto isso o Roberto Justus tem uma mensagem a você, que está procurando uma vaga de programador PHP:

 

E você, quer compartilhar sua opinião sobre o mercado de trabalho para programadores? Comenta aí!

Como pegar o IP de um usuário com o PHP

Sem rodeios, sem mimimi´s, este deve ser o post mais curto já visto aqui no O Desenvolvedor, uma função para pegar o IP do usuário utilizando o PHP.

Usando getenv (para pegar "variáveis do ambiente"):

// Example use of getenv()
$ip getenv("REMOTE_ADDR");

 

E usando a variável superGlobal $_SERVER


// Or simply use a Superglobal ($_SERVER or $_ENV)
$ip $_SERVER["REMOTE_ADDR"];

 

Pronto, simples assim.

Precisei disto para um controle em um método do novo And After e resolvi compartilhar, apesar já ser de conhecimento de qualquer um que domine o PHP pode ajudar alguns n00bs como eu, que ainda não conhecem a sintaxe de cabo a rabo.

 

Direto do PHP Manual

Relacionamento de tabelas no Data Mapper (CI)

Se você não entendeu muito bem o post explicando como melhorar as recomendações de posts relacionados com o Data Mapper, este tutorial poderá ajudar.

Criei um material para apoiar a documentação do Data Mapper sobre o relacionamento de tabelas no banco de dados. Se você não está entendendo nada, recomendo que antes de continuar você leia:

  1. Usando o Data Mapper no Code Igniter – como instalar e configurar o Data Mapper
  2. Entendo o relacionamento de banco de dados

 

Nomenclatura das tabelas relacionais no Data Mapper

O primeiro passo para fazer o relacionamento de tabelas funcionar é estruturar o banco de dados para isso. Para ilustrar este post vamos criar um relacionamento "one to many" de usuários para posts.

Na nossa estrutura do banco de dados temos a tabela users e a tabela posts.

Por regra do Data Mapper as tabelas de relacionamento devem ser estruturadas da seguinte forma:

  1. Nome da primeira tabela do relacionamento (ordem alfabética)
  2. Underline "_"
  3. Nome da segunda tabela do relacionamento

No nosso caso temos as tabelas "users" e "posts", portanto nossa tabela de relacionamento que deve ser criada no banco de dados se chamará "posts_users" e terá três colunas:

id - INT, auto increment

user_id - INT

post_id - INT

Pronto, com esta tabela criada no nosso banco de dados podemos configurar nossas classes "User" e "Post" no Data Mapper.

 

Configurando as classes para relacionamento

Continuando o exemplo anterior da classe User, vamos adicionar a configuração de relacionamento, ela ficará assim:

class User extends DataMapper {
    var $table = "users";

    var $has_many= "posts, comments";

    function User()
    {
        parent::DataMapper();
    }
}

E agora nossa clase Post:

class Post extends DataMapper {
    var $table = "posts";

    var $has_one= "user";
    var $has_many= "comments";

    function User()
    {
        parent::DataMapper();
    }
}

 

Pronto, suas tabelas estão relacionadas pelo Data Mapper e você pode usufruir as facilidades do ORM para criar "innerjoins" que eu não entendo!

 

Salvando dados de relacionamento

Para salvar um relacionamento é simples, criamos os dois objetos que vamos relacionar e usamos o método save do Data Mapper.

É mais fácil exemplificar do que explicar:


$u = new User();
$u->where("login", "odesenvolvedor")->get();

$p = new Post();
$p->title = "Novo post"; $p->content = "Conteúdo html do nosso post"

// Salvamos o novo post e relacionamos ao nosso User
$p->save($u);

Para relacionar dois objetos já existentes a lógica é a mesma:

$u = new User();
$u->where("login", "odesenvolvedor")->get();

$p = new Post();
$p->
where("title", "Novo Post"); $p->get();

// Relacionamos o Post que já existia ao nosso User
$p->save($u);

Este é o básico do relacionamento de dados utilizando o Data Mapper. Para entender recomendo a leitura da documentação do DM.

Para um exemplo prático mais avançado veja como selecionar posts mais relevantes através da comparação de tags.