Insertar Contenido en Drupal

Events happening in the community are now at Drupal community events on www.drupal.org.
jabonillac@gmail.com's picture

Hola a todos, tengo la siguiente inquietud:

En el momento tengo implementado un joomla en el cual cargo las noticias directamente en la base de datos mediante un query sql a la tabla content usando un cronjob; resulta que el sitio lo vamos a migrar a Drupal y necesito hacer lo mismo insertar las noticias directamente a la base de datos pero no encuentro informacion de a que tablas le tengo que pegar y con que formatos de datos, alguien sabe como se puede hacer?

Muchas Gracias de antemano.

Juan Alejandro

Comments

Drupal Bootstraping

juanblo's picture

Saludos Juan,

Bueno creo que esto lo puedes realizar usando Drupal Bootstraping y elaborar un script php que pueda
ser ejecutado usando la línea de comandos. Aquí va un ejemplo muy sencillo: (es aplicable a 6.x y 7.x)

<?php

$_SERVER['HTTP_HOST'] = 'misitio.example.com';
$_SERVER['SCRIPT_NAME'] = '/index.php';

$drupalRoot = "/var/www/drupal"; // Donde reside el código fuente
$current_directory = getcwd();
chdir($drupalRoot);

require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

// A partir de aquí puedes empezar a usar el api de Drupal

$body_text = "Descripción de la noticia";

$node = new stdClass();
$node->type = 'article';

node_object_prepare($node);

$node->title = "Mi noticia";
$node->language = LANGUAGE_NONE;

$node->body[$node->language][0]['value'] = $body_text;
$node->body[$node->language][0]['summary'] = text_summary($body_text);
$node->body[$node->language][0]['format'] = 'filtered_html';

$path = 'content/programmatically_created_node_' . date('YmdHis');
$node->path = array('alias' => $path);

node_save($node);

Guardas el script y lo llamas desde cron.

Consulta más detalles en en el api de Drupal (api.drupal.org). Algunas funciones pueden cambiar
si usas Drupal 6 ó 7.

Espero sea de ayuda

Juan

Muchas Gracias juan!!! voy a

jabonillac@gmail.com's picture

Muchas Gracias juan!!! voy a probarlo

Hola De nuevo, ya puedo

jabonillac@gmail.com's picture

Hola De nuevo,

ya puedo insertar perfectamente usando el api de drupal este es el código:

if($node = node_submit($node)) {

node_save($node);


//guardo los tags
$term = new stdClass();
$term->name = "INSERTE TAGS";
$term->vid = 1;
taxonomy_term_save($term);
echo  $term->tid;

//vinculo la categoria con el nodo

$nid = db_insert('field_data_field_noticia_cate')
->fields(array(
    'entity_type' => 'node',
    'bundle' => 'noticia',
    'deleted' => '0',
    'entity_id' => $node->nid,
    'revision_id' => $node->nid,
    'language' => 'und',
    'delta' => 0,
    'field_noticia_cate_tid' => $row["id_seccion"],
))
->execute();    

//vinculo los tags con el nodo

$nid = db_insert('field_data_field_noticia_etiquetas')
->fields(array(
        'entity_type' => 'node',
        'bundle' => 'noticia',
        'deleted' => '0',
        'entity_id' => $node->nid,
        'revision_id' => $node->nid,
        'language' => 'und',
        'delta' => 0,
        'field_noticia_etiquetas_tid' => $term->tid,
))
->execute();

//vinculo el contenido con el nodo



$nid = db_insert('field_data_field_noticia_body')
->fields(array(
            'entity_type' => 'node',
            'bundle' => 'noticia',
            'deleted' => '0',
            'entity_id' => $node->nid,
            'revision_id' => $node->nid,
            'language' => 'und',
            'delta' => 0,
            'field_noticia_body_value' => $textico,
            'field_noticia_body_summary' => $leadsito,
            'field_noticia_body_format' => 'filtered_html',
))
->execute();


// Fecha de publicacion


$fechipub3 = strtotime($row["fecha_pub"]);



$nid = db_insert('field_data_field_noticia_fechas_p')
->fields(array(
                'entity_type' => 'node',
                'bundle' => 'noticia',
                'deleted' => '0',
                'entity_id' => $node->nid,
                'revision_id' => $node->nid,
                'language' => 'und',
                'delta' => 0,
                'field_noticia_fechas_p_value' => $fechipub3,
                'field_noticia_fechas_p_value2' => $fechipub3,

))
->execute();    

}

tengo problemas especificamente con este bloque:

$nid = db_insert('field_data_field_noticia_body')
->fields(array(
            'entity_type' => 'node',
            'bundle' => 'noticia',
            'deleted' => '0',
            'entity_id' => $node->nid,
            'revision_id' => $node->nid,
            'language' => 'und',
            'delta' => 0,
            'field_noticia_body_value' => $textico,
            'field_noticia_body_summary' => $leadsito,
            'field_noticia_body_format' => 'filtered_html',
))
->execute();

$textico y $leadsito no me acepta texto con tildes o caracteres raros enseguida me bota un PDO exception, si mando texto plano funciona perfecto, alguien tiene alguna de idea de como formatear el texto o que puedo hacer ??

Muchas gracias.

Revisa la función

juanblo's picture

Revisa la función drupal_convert_to_utf8

También revisa que la codificación y collation de tu base de datos se encuentre correctamente configurada.

Juan

Colombia

Group organizers

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: