在Drupal 7中以编程方式对字段集合排序
保存节点时,如何以编程方式更改字段集合中项目的顺序/权重?在Drupal 7中以编程方式对字段集合排序,drupal,drupal-7,drupal-field-collection,Drupal,Drupal 7,Drupal Field Collection,保存节点时,如何以编程方式更改字段集合中项目的顺序/权重? 感谢您的帮助。谢谢。已经找到了答案。我正在使用hook\u node\u presave,然后对字段集合数组重新排序。以前我使用的是hook\u node\u update,但它不起作用。这是一个代码片段,用于在保存节点之前按字段集合的任何字段对字段集合进行排序: function your_module_node_presave($node){ if ($node->type == 'foo') { // We m
感谢您的帮助。谢谢。已经找到了答案。我正在使用hook\u node\u presave,然后对字段集合数组重新排序。以前我使用的是hook\u node\u update,但它不起作用。这是一个代码片段,用于在保存节点之前按字段集合的任何字段对字段集合进行排序:
function your_module_node_presave($node){
if ($node->type == 'foo') {
// We must sort by this field collection field
if (!empty($node->field_to_sort_by)) {
// Get the values of the sorting field. We must load the fc items for this.
$items = field_get_items('node', $node, 'field_to_sort_by');
foreach ($items as $item) {
$fc[] = field_collection_field_get_entity($item);
}
// field collection fields on nodes only contains 'value' and 'revision_id'.
// We temporarily add the field to sort by,
// for using the convenient uasort() function over the array.
$tmp_array = $node->field_to_sort_by[LANGUAGE_NONE];
foreach ($tmp_array as $key => $item) {
$tmp_array[$key]['sortfield'] = $fc[$key]->field_to_sort_by[LANGUAGE_NONE][0]['value'];
}
// Now we sort the node's field array using uasort().
usort($tmp_array, 'my_module_sortByField_asc');
// unset the sorting field before updating node's field collection
foreach ($tmp_array as $key => $item) {
unset($tmp_array[$key]['sortfield']);
}
$node->field_to_sort_by[LANGUAGE_NONE] = $tmp_array;
}
}
}
function my_module_sortByField_asc($a, $b) {
return $a['sortfield'] - $b['sortfield'];
}