Pergunta

Em um módulo personalizado para o Drupal 4.7 Eu cortei juntos um objeto nó e passou para node_save ($ node) para criar nós. Esse corte parece não funcionam mais no drupal 6. Enquanto eu tenho certeza que este hack pode ser fixado estou curioso se existe uma solução padrão para criar nós sem um formulário. Neste caso, os dados são puxados a partir de um feed personalizado em outro site.

Foi útil?

Solução

Eu não sei de uma API padrão para criar um nó de forma pragmática. Mas isso é o que eu adquirida a partir de construção de um módulo que faz o que você está tentando fazer.

  1. Verifique se os campos importantes são definidas: uid, nome, tipo, língua, título, corpo do filtro (ver node_add() e node_form())
  2. Passe o nó através node_object_prepare() para que outros módulos podem adicionar ao objeto $ nó.

Outras dicas

O método de melhores práticas de fazer isso acontecer é utilizar drupal_execute. drupal_execute será executado validação padrão e operações básicas nó para que as coisas se comportam da maneira que os espera do sistema. drupal_execute tem suas peculiaridades e é um pouco menos intuitiva do que simplesmente uma node_save, mas, no Drupal 6, você pode utilizar drupal_execute da seguinte forma.


$form_id = 'xxxx_node_form'; // where xxxx is the node type
$form_state = array();
$form_state['values']['type'] = 'xxxx'; // same as above
$form_state['values']['title'] = 'My Node Title';
// ... repeat for all fields that you need to save
// this is required to get node form submits to work correctly
$form_state['submit_handlers'] = array('node_form_submit');

$node = new stdClass();
// I don't believe anything is required here, though 
// fields did seem to be required in D5

drupal_execute($form_id, $form_state, $node);

node_save () ainda funciona bem no Drupal 6; você vai precisar de um par de partes específicas de dados no local para fazer o trabalho.

$node = new stdClass();
$node->type = 'story';
$node->title = 'This is a title';
$node->body = 'This is the body.';
$node->teaser = 'This is the teaser.';
$node->uid = 1;
$node->status = 1;
$node->promote = 1;

node_save($node);

'Status' e 'promover' são fáceis de ignorar -. Se você não definir esses, o nó permanecerá inéditos e não promovido, e você só vai ver se você vai para a tela de administração de conteúdo

Mais uma resposta que eu descobri era usar o exemplo do blogapi módulo no núcleo drupal. O fato de que é no núcleo dá-me um pouco mais de confiança que ele vai continuar a trabalhar em versões futuras.

Existem algumas boas respostas acima, mas no exemplo específico de transformar um item alimentar ingerido em um nó, você também pode tomar a abordagem de usar o módulo SimpleFeed ( http://wwww.drupal.org/project/simplefeed ). Este módulo utiliza o motor SimplePie ingerir alimentos e transforma itens individuais de cada alimento para nós. Sei que esta não aborda especificamente a questão da criação de nós de cron, mas pode ser uma solução mais fácil para o seu problema geral.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top