Обычно вы видите такое поведение на узле, когда включен CCK.Это связано с тем, что CCK переопределяет вес для полей по умолчанию и CCK с помощью настраиваемой собственной системы заказов, выбрав Управление контентом -> Типы контента -> [Тип контента] -> Управление полями .
Конечно, если вы отключите CCK (возможно, не вариант), ваши значения #weight
будут соблюдены.
Следует отметить, что в то время как API форм допускает десятичные дроби для #weight
Рекомендуется использовать целые числа.
Редактировать
Если вы хотите работать с ограничениями, представленными CCK, в пользовательском модуле вам потребуетсяреализовать обработчик #pre_render
, который будет изменять вес элементов формы после того, как CCK их изменяет:
function mymodule_form_alter(&$form, &$form_state, $form_id) {
$form['#pre_render'][] = 'mymodule_form_alter_weight';
}
function mymodule_form_alter_weight($elements) {
$elements['cid']['#weight'] = 0.003;
$elements['subject']['#weight'] = 0.004;
return $elements;
}
Проблема в том, что вы не будете знать, какие значения веса CCK использовал для других элементов формы, поэтомув то время как вы заказали cid перед темой, оба поля могут отображаться посередине всех других полей на странице, а не в их исходном положении.
CCK вынуждает вас повернуть в угол, когда дело доходит до веса,Правильный способ обработки заказов в Drupal / CCK - это соблюдение выбора, сделанного администратором для Управление контентом -> Типы контента -> [Тип контента] -> Управление полями .
Если у вас есть пользовательский элемент формы, вы можете сообщить об этом CCK, чтобы он отображался в Управление полями путем реализации hook_content_extra_fields()
,Продолжая с кодом выше:
function mymodule_content_extra_fields() {
$extras['mymodule'] = array( // Name of field
'label' => t('Mymodule'),
'description' => t('Mymodule field'),
'weight' => 10, // The default weight, can be overriden on Manage Fields
);
return $extras;
}