Pular para o conteúdo principal

Marcus VBP

Desenvolvimento Web, Drupal, Ubuntu, Nerdices, e o que mais der na telha...

drupal 7

Tweet

Criando um node programaticamente: um exemplo prático

Saudações meus amigos!

O artigo de hoje vai ensinar a criar um node programaticamente, no Drupal 7. A situação é a seguinte:

Quando o usuário autentica-se no site, será necessário verificar ele é autor de um node do tipo "Galeria de Fotos". Caso este conteúdo não exista, crie um. Caso o usuário já seja o autor de um node do tipo "Galeria de Fotos", não faça nada.

O usuário não pode ter permissão de criar, editar ou apagar galerias de fotos. As fotos que comporão a galeria serão inseridas posteriormente, através de programação.

Para realizar este serviço, criei um pequeno módulo chamado "auto user gallery" e no arquivo auto_user_gallery.module eu incluí o seguinte código:

  1. // Esta função é executada no início do carregamento de páginas não cacheadas.
  2. // Como o usuário vai efetuar login no site, a página inicial será recarregada.
  3. function auto_user_gallery_init() {
  4. // carrega os dados do usuário logado atual
  5.   global $user;
  6. // testa se estamos na página inicial e se o usuário não é anônimo
  7.   if ((drupal_is_front_page() || empty($_GET['q'])) && $user->uid != 0) {
  8. // verifica se já existe algum node do tipo "galeria_de_fotos"
  9.     $galerias = db_select('node','nid')->fields('nid')->condition('uid', $user->uid, '=')->condition('type', 'galeria_de_fotos', '=')->orderBy('created', 'DESC')->execute()->fetchField();
  10. // caso não exista, crie um novo node com as seguintes características
  11.     if (empty($galerias)) {
  12.       $node = new StdClass(); // define $node como um objeto
  13.       $node->type = 'galeria_de_fotos'; // tipo do node
  14.       node_object_prepare($node);  // preenche os demais dados do node
  15.       $node->status = 1; // define o node como publicado
  16.       $node->uid = $user->uid; // define o autor como o usuário atual
  17.       $node->title = 'Galeria de ' . $user->name; // define o título do node
  18.       $node->created = time(); // data de criação como o sendo a data atual
  19.       $node->language = LANGUAGE_NONE; // define a linguagem como neutra
  20.       node_save($node); // salva o node no banco de dados.
  21.     }
  22.   }
  23. }

No meu caso, o campo "body" não é necessário, então o deixei em branco. Mas caso precise preencher o campo, é só seguir a lógica apresentada acima (dica, o módulo devel é seu amigo):

  1. // Let's add standard body field
  2. $node->body[$node->language][0]['value'] = 'Este é o texto do body';
  3. $node->body[$node->language][0]['summary'] = 'Este é o sumário do campo';
  4. $node->body[$node->language][0]['format'] = 'filtered_html'; // É necessário definir qual o formato de texto, caso o campo use este recurso

E para outros campos, é quase a mesma coisa:

  1. $node->field_custom_name[$node->language][0]['value'] = 'este é o texto de um campo de texto customizado';
  2. // se você usa um formato de texto no campo, não esqueça de defini-lo
  3. $node->field_custom_name[$node->language][0]['format'] = 'filtered_html';

E por aí vai.

Preencher campos de arquivo e imagem é um pouco mais complexo, pois no Drupal 7 os arquivos são uma entidade também, e precisam ser descrevidos. Exemplo:

  1. $file_path = drupal_realpath('somefile.png');
  2. // Cria o file object
  3. $file = (object) array(
  4.           'uid' => $user->uid, // "dono" do arquivo
  5.           'uri' => $file_path, // caminho para o arquivo
  6.           'filemime' => file_get_mimetype($filepath), // pega o mimetype do arquivo
  7.           'status' => 1,
  8.  ); 
  9. $file = file_copy($file, 'public://'); // Salva o arquivo na raiz da sua pasta files. Você pode especificar uma sub-pasta, usando public://imagens, por exemplo.
  10. $node->field_image[$node->language][0] = (array)$file; //associa o file object com o campo de imagem

This is it. Este código é uma exemplo simples e muito prático da criação de um node programaticamente. Você pode criar usuários, comentários e termos de forma muito semelhante ao que foi mostrado aqui.

Este artigo foi parcialmente baseado neste artigo em inglês aqui.

Tópicos: 
drupal 7DrupalsnippetTutorial
3 comentários
Comente você também!
Inscreva-se em RSS - drupal 7

Siga no Twitter

Follow @marcusvbp

Assine por Email

Mais Comentados

  1. Sonho Lúcido e Paralisia do Sono (407)
  2. Relatório de Estágio completo, disponível para consulta e download (137)
  3. Usando um iPod Shuffle de 2gb sem utilizar o iTunes (30)
  4. Novo vírus do Orkut (alguma novidade?) (29)
  5. A volta do golpe do boleto falso, agora pela hostdobrasil.com (26)
  6. Hospedagem ILIMITADA por apenas 7 Reais mensais*? Só na Dreamhost! (26)
  7. Minha "lista de desejos" para o Linux (25)
  8. Webdesign no Linux Parte 4: Rodando um servidor Apache com PHP e MySQL (23)
  9. Webdesign no Linux, parte 3: programas de edição de código (23)
  10. Meu primeiro sistema em PHP e MySQL (temperado com Javascript) (23)

Populares do dia

  1. CSS (0)
  2. A Empresa (0)
  3. Sobre o portal Paraíba Jovem (0)
  4. Descrição Geral das Atividades (0)
  5. Hardware e software utilizados (0)
  6. Organização do Relatório (0)
  7. Centralizando os elementos principais do layout (0)
  8. Posicionando as colunas do layout (0)
  9. Colocando o rodapé no local certo (0)
  10. Objetivo (0)
mais

Informativo

  • Relatório de Estágio: Desenvolvimento do Portal Paraíba Jovem
  • Gerenciamento de Conteúdo com o Drupal
  • Informativo

RSS Feed

  • RSS do Blog
  • RSS Mobile
  • RSS dos comentários

Arquivo mensal

  • Maio 2012 (2)
  • Abril 2012 (2)
  • Março 2012 (3)
  • Fevereiro 2012 (1)
  • Janeiro 2012 (4)
  • Dezembro 2011 (1)
  • Novembro 2011 (2)
  • Setembro 2011 (2)
  • Agosto 2011 (3)
  • Julho 2011 (2)
  • Junho 2011 (2)
Mais

Tópicos

  • ação (2)
  • Acessórios (1)
  • adsense (3)
  • Agenda (1)
  • Ajuda (1)
  • Android (2)
  • Animação (1)
  • Ano novo (1)
  • Apache (1)
  • Apple (2)
  • Arena (2)
Mais

Meu Twitter

Permitida a cópia desde que citado a fonte. [Política de Privacidade]

Powered by Drupal CMS.