[support] howto manage multiple values in a custom node
Daniel Caillibaud
ml.dcailli at free.fr
Sun May 18 23:44:15 UTC 2008
Hi all,
I'm starting with my first drupal (5.7) module...
I want to build a complex custom node type by code (I prefer than with CCK, not to be dependant of such a big module, and also
to be sure than nobody can change the structure without change the code too, because I'll have many actions on differents
fields and their relations).
My problem is about management of multiple values, howto link a list of values to a node ?
e.g. with several subjects linked to a node
I try first the tables
my node type: node_edures(nid,description)
a bridge table: edures_fields_subjects(sid,nid)
subjects table: edures_subjects(sid,subject)
But then, in edures_load(&$node) I can't return an array in a property of my node that doesn't exists...
So I tried this design (fssid means fieldset_subject_id):
node_edures(nid,description,fssid)
edures_fs_subjects(fssid,sid)
edures_subjects(sid,subject)
And my function edures_load become :
$obj = db_fetch_object(db_query('SELECT * FROM {node_edures} WHERE nid = %d', $node->nid));
$subjects = db_query('SELECT subject
FROM {edures_fs_subjects} fss
LEFT JOIN {edures_subjects} s USING (sid)
WHERE fssid = %d;', $obj->fssid);
$obj->fssid = array('fssid'=>$obj->fssid, 'subjects'=>array());
$subject = array();
while ($subject = db_fetch_array($subjects)) {
$obj->fssid['subjects'][] = $subject['subject'];
}
return $obj;
But it's quite dirty to change initial int of $node->fssid by an array, don't you think so ?
What's the better way ?
--
Daniel
Quand on regarde le ciel dans l'eau, on voit les poissons dans les arbres.
Sancho P.
More information about the support
mailing list