Почему делает '#weight' свойство иногда не, имеют какой-либо эффект в формах Drupal?

Когда сделать то, что является очень простой вещью, если у Вас есть понятие, ясное в Вашем уме.

Абстрактные классы могут быть Получены, тогда как Интерфейсы могут быть Реализованы. Существует некоторое различие между двумя. То, когда Вы получаете Абстрактный класс, отношения между производным классом и базовым классом, 'является' отношениями. например, Собака является Животным, Овца является Животным, что означает, что Производный класс наследовал некоторые свойства от базового класса.

принимая во внимание, что для реализации интерфейсов, отношения, "может быть". например, Собака может быть собакой шпиона. Собака может быть собакой цирка. Собака может быть собакой гонки. Что означает, что Вы реализуете определенные методы для получения чего-то.

я надеюсь, что я ясен.

12
задан Luuklag 19 May 2019 в 08:08
поделиться

5 ответов

Звучит довольно странно, потому что изменение параметра #weight элементов формы всегда работает надежно. для меня как разрекламировано. Однако следует отметить, что веса влияют только на порядок относительно элементов-братьев , поэтому, если элемент, который вы хотите переместить, находится на уровне ниже, чем у других элементов, вы d необходимо изменить вес родительского элемента, который находится на том же уровне, что и те, против которых вы хотите переместиться.

Чтобы уточнить, если у вас есть подобная иерархия,

$element['foo'];
$element['bar'];
$element['bar']['baz']

вы не можете перемещать 'baz' относительно в 'foo', установив вес 'baz'. Вам нужно будет либо установить вес на 'bar' (также перемещая его), либо вытащить 'baz' и довести его до того же уровня, что и 'foo'.

Другой возможной причиной может быть CCK : Если у вас установлен CCK, он позволяет вам установить собственный порядок, а также другие поля в admin / content / node-type / / fields . Он изменяет порядок, регистрируя обратный вызов перед рендерингом content_alter_extra_weights () , чтобы он запускался после ваших изменений в hook_form_alter .


Редактировать: Обновление для ответа на вопрос update

Тип поля разметки имеет особое поведение при использовании внутри наборов полей, на что намекает в документации по API форм :

Примечание: если вы используете разметку , если ваш контент не заключен в теги (обычно

или

), ваш контент выйдет за пределы свернутых наборов полей.

Похоже, если это так не только выходят за рамки свернутых наборов полей, но и отказываются учитывать вес в этих случаях. Заключение содержимого поля разметки в теги

заставляет его учитывать вес на моей машине:

$form['taxonomy']['instructions'] = array(
  '#value' => "<p>These are the instructions</p>",
  '#weight' => -1,
);
12
ответ дан 2 December 2019 в 19:32
поделиться

Я не совсем понимаю, чего вы хотите достичь. Не могли бы вы уточнить? Вы хотите изменить положение раскрывающегося списка таксономии на странице?

А пока вы можете установить модуль Drupal Devel (если вы еще этого не сделали). Затем включите «Отображать ключи и веса элементов формы» в меню «Администратор»> «Настройки разработки».

Это должно помочь вам отладить вашу проблему.

Редактировать после обратной связи:

Я изучил это еще немного. Вес таксономии установлен в taxonomy.module в строке 556 (Drupal 6.12):

$form['taxonomy']['#weight'] = -3;

Для тестирования я также реализовал hook_form_alter для своего модуля следующим образом:

function mymodule_form_alter(&$form, $form_state, $form_id) {
      ...
      $form['taxonomy']['#weight'] = -9;
      ...
} 

Это работает для меня, т.е. перемещает таксономию раскрывающийся список вверху страницы. Я могу изменить вес, и он будет соответственно перемещаться на отображаемой странице.

Поскольку вы сказали, что пытались установить $ form ['taxonomy'] ['# weight'] в исходном сообщении, я могу сейчас думать только о двух возможных проверках:

  1. Убедитесь, что кеш очищено перед тестированием. (для этого вы можете использовать модуль Devel)
  2. Проверьте, ваш hook_form_alter называется после taxonomy_form_alter

Я отправляю вам код, который у вас есть, мы могли бы взглянуть на это более подробно.


Обратите внимание: веса, отображаемые модулем Devel, не очень полезны в этой ситуации. Отображаются веса элементов «подформ», а не вес самой «подформы». Например, когда я установил $ form ['taxonomy'] ['# weight'] = -9;

1
ответ дан 2 December 2019 в 19:32
поделиться

Вы указали вес другого поля, и теперь ваша форма узла не организована должным образом? Форма api немного раздражительна, и изменение формы может привести к путанице. Иногда мне приходится переназначать вес моим кнопкам отправки / предварительного просмотра, чтобы вернуть их в нижнюю часть формы, где они принадлежат.

0
ответ дан 2 December 2019 в 19:32
поделиться

Чтобы охватить все базы, убедитесь, что вы очищаете кеш по мере необходимости. Drupal по умолчанию хранит формы в своем кэше, если у вас включен модуль кеширования.

0
ответ дан 2 December 2019 в 19:32
поделиться

Иногда (или всегда, при взвешивании элементов CCK) в обратном вызове hook_form_alter или $ form ['# after_build'] работает следующая строка:

$form['#content_extra_fields']['taxonomy']['weight'] = 5;
3
ответ дан 2 December 2019 в 19:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: