Remplir les champs d'un type de contenu grâce à un module

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour à tous,

Voilà, cela fait un petit mois que je suis sur drupal et je commence à avoir quelques questions sur le développement de modules.

Alors, je vous explique...

J'ai créé grâce à "l'interface drupal" un nouveau type de contenu "graph" avec plusieurs champs (créés avec CCK): "sommets", "arrêtes","degré"...

La base de données a donc une nouvelle table "content_type_graph" avec comme champs"field_nb_sommets_value","field_nb_arretes_value"... mais également un "vid" et un "nid"

Mais voilà, je veux remplir ces champs automatiquement grâce à un module (que j'essaye d'implémenter)

Ce module doit récupèrer des données d'un fichier .txt et insérer les valeurs dans les champs du type de contenu "graph"

Voici le code pour le moment:

<?php

$fichier=file("/var/www/drupal-6.20/sites/all/modules/remptab/tmp.txt");
$name=$fichier[0];
$nb_sommets=$fichier[1];
$nb_arretes=$fichier[2];
$deg_max=$fichier[5];
$deg_min=$fichier[6];
$deg_moy=$fichier[7];

function tabgraph_insert($node) {
db_query("INSERT INTO {content_type_graph} (nid,vid,field_nb_arretes_value,field_nb_sommets_value,field_deg_moy_value,field_deg_min_value,field_deg_max_value) VALUES (%d, %d, %d,%d,%f,%f,%f)", $node->nid, $node->vid, $nb_arretes, $nb_sommets, $deg_moy, $deg_min, $deg_max);
}

Avec ce code, Drupal affiche page blanche et si j'enlève la ligne function tabgraph_insert($node){ et }
, l'insertion dans la base marche mais les valeurs du vid et nid sont à 0, du coup j'ai une erreur

Est-ce que mon code comprend des erreurs ou faut t-il rajouter des fonctions pour que ce module fonctionne?

Si quelqu'un a une réponse, je suis bien évidemment preneur...

Forum : 
Version de Drupal : 

Tu avais tout à fait raison vincent...Merci!

Maintenant j'ai un autre soucis, en fait dans ce type de contenu, on peut ajouter 3 fichiers attachés différents, je me suis inspiré du code d'un autre post sur le forum...mais il me reste des erreurs...(voir en fin de msg)

Voici le code: (certes un peu long...)

<?php

//code pour récupérer les infos du fichier.txt (voir dans post precedent)

//permet d'enlever l'extension du name
$pt = ".";
$position = strpos($name, $pt);
$name_sans_extension = substr($name, 0, $position);

//déclaration des 3 fichiers
$file = new stdClass();
$file1 = new stdClass();
$file2 = new stdClass();

$file_drupal_path = "sites/default/files/".$name_sans_extension.".graph";
$file_drupal_path1 = "sites/default/files/".$name_sans_extension.".png";
$file_drupal_path2 = "sites/default/files/".$name_sans_extension.".tar.gz";

$file->filename = basename($file_drupal_path);
$file->filepath = $file_drupal_path;
$file->filemime = 'graph';

$file->uid = $uid;
$file->status = FILE_STATUS_PERMANENT;
$file->timestamp = time();
drupal_write_record('files', $file);

//...pareils pour les 3 (j'ai bien changé les numéros pour file1 et file2)

// le node_save
$node -> type = 'big_structured_graphs';
$node -> title = $name_sans_extension;
$node -> field_nb_sommets_bsg[ 0 ][ 'value' ] = $nb_sommets ;
$node -> field_nb_arretes_bsg [ 0 ][ 'value' ] = $nb_arretes ;
$node -> field_deg_max_bsg [ 0 ][ 'value' ] = $deg_max ;
$node -> field_deg_min_bsg [ 0 ][ 'value' ] = $deg_min ;
$node -> field_deg_moy_bsg [ 0 ][ 'value' ] = $deg_moy ;
$node -> field_file_bsg = array(

array( 'delta' => 0,
'fid' => $file->fid,
'title' => basename($file->filename),
'filename' => $file->filename,
'filepath' => $file->filepath,
'filesize' => $file->filesize,
'mimetype' => $mime,

'data' => array(
'description' => basename($file->filename),
),
'list' => 1,
),

array( 'delta' => 1,
'fid' => $file1->fid,
'title' => basename($file1->filename),
'filename' => $file1->filename,
'filepath' => $file1->filepath,
'filesize' => $file1->filesize,
'mimetype' => $mime1,

'data' => array(
'description' => basename($file1->filename),
),
'list' => 1,
),

array( 'delta' => 2,
'fid' => $file2->fid,
'title' => basename($file2->filename),
'filename' => $file2->filename,
'filepath' => $file2->filepath,
'filesize' => $file2->filesize,
'mimetype' => $mime2,

'data' => array(
'description' => basename($file2->filename),
),
'list' => 1,
),

);

$node = node_submit ( $node );
node_save($node);
content_insert($node);

//fin module

Tout marche bien, les données sont entrées dans la bdd avec des nid et vid valides, mais apparemment ça coince au niveau des fichiers...Voici mon erreur:

* user warning: Duplicate entry '132-0' for key 'PRIMARY' query: INSERT INTO content_field_file_bsg (vid, nid, delta, field_file_bsg_fid, field_file_bsg_list, field_file_bsg_data) VALUES (132, 132, 0, 32, 1, 'a:1:{s:11:\"description\";s:10:\"4elt.graph\";}') in /var/www/drupal-6.20/sites/all/modules/cck/content.module on line 1213.
* user warning: Duplicate entry '132-1' for key 'PRIMARY' query: INSERT INTO content_field_file_bsg (vid, nid, delta, field_file_bsg_fid, field_file_bsg_list, field_file_bsg_data) VALUES (132, 132, 1, 33, 1, 'a:1:{s:11:\"description\";s:8:\"4elt.png\";}') in /var/www/drupal-6.20/sites/all/modules/cck/content.module on line 1213.
* user warning: Duplicate entry '132-2' for key 'PRIMARY' query: INSERT INTO content_field_file_bsg (vid, nid, delta, field_file_bsg_fid, field_file_bsg_list, field_file_bsg_data) VALUES (132, 132, 2, 34, 1, 'a:1:{s:11:\"description\";s:11:\"4elt.tar.gz\";}') in /var/www/drupal-6.20/sites/all/modules/cck/content.module on line 1213.

Si quelqu'un trouve la réponse mon module sera (presque) terminé et j'arrêterai d'écrire des posts de 3 kilomètres de long...^^

Nikel! Plus d'erreurs...maintenant je cherche à savoir si le fichier existe bien pour ne pas afficher de liens "inutils". Je veux que drupal créé un lien si le fichier existe...

J'ai tenté ça mais drupal n'aime pas -->page blanche:

........
$node -> field_file_bsg = array(

if (file_exists($file)) {

array( 'delta' => 0,
'fid' => $file->fid,
'title' => basename($file->filename),
'filename' => $file->filename,
'filepath' => $file->filepath,
'filesize' => $file->filesize,
'mimetype' => $mime,

'data' => array(
'description' => basename($file->filename),
),
'list' => 1,
),

}

......

Une petite idée???

J'essaye juste avec un 'if' pour voir s'il fonctionne...

En faisant le code suivant mes fichiers sont insérés dans la bdd au bon endroit. Le problème c'est que ces fichiers ne n'affichent pas sur le site...

J'ai cherché, essayé de faire autrement mais en vain...

Es ce que vous avez une idée??

//code

if (file_exists($file_drupal_path))
{

$node -> field_file_graph = array(

array( 'delta' => 0,
'fid' => $file->fid,
'title' => basename($file->filename),
'filename' => $file->filename,
'filepath' => $file->filepath,
'filesize' => $file->filesize,
'mimetype' => $mime,

'data' => array(
'description' => basename($file->filename),
),
'list' => 1,
),

array( 'delta' => 1,
'fid' => $file1->fid,
'title' => basename($file1->filename),
'filename' => $file1->filename,
'filepath' => $file1->filepath,
'filesize' => $file1->filesize,
'mimetype' => $mime1,

'data' => array(
'description' => basename($file1->filename),
),
'list' => 1,
),

array( 'delta' => 2,
'fid' => $file2->fid,
'title' => basename($file2->filename),
'filename' => $file2->filename,
'filepath' => $file2->filepath,
'filesize' => $file2->filesize,
'mimetype' => $mime2,

'data' => array(
'description' => basename($file2->filename),
),
'list' => 1,
),

);

}