2009-08-18 12 views
11

Próbuję utworzyć formularz węzła dla niestandardowego typu. Mam włączone grupy organiczne i systematykę, ale chcę, by ich elementy pojawiały się w niestandardowej kolejności. Dlatego zaimplementowałem hook_form_alter i ustawię podrzędną #weight podmary og_nodeapi na -1000, ale nadal będzie ona następować po taksonomii i menu. Próbowałem nawet zmienić podbarwę w zestaw pól (aby wymusić to renderowanie), ale bez kości. Próbowałem również ustawićDlaczego własność "#weight" nie ma żadnego efektu w formularzach Drupala?

$form['taxonomy']['#weight'] = 1000 

(Mam dwa vocabs, więc jest już renderowane jako zestaw pól), ale to również nie działa.

Ustawiłem wagę mojego modułu bardzo wysoko i potwierdziłem w tabeli systemowej, że jest to rzeczywiście najwyższy moduł na stronie - więc nie mam pomysłów. Jakieś sugestie?

Aktualizacja:

Chociaż nie jestem do końca pewien, w jaki sposób udało mi się uzyskać zestaw pól taksonomii do zlewu poniżej wszystkiego, ale teraz mam problem, który jest powiązany z nadzieją łatwiejsze do zrozumienia. W ramach zestawu konkretną taksonomii, mam dwie pozycje (znaczniki i multi-select), i chciałem dodać kilka instrukcji w hook_form_alter następująco:

$form['taxonomy']['instructions'] = array(
    '#value' => "These are the instructions", 
    '#weight' => -1, 
); 

Zgadłeś, to wydaje po warunki wstawione przez moduł taksonomii. Jeśli jednak zmienię to na zestaw pól:

$form['taxonomy']['instructions'] = array(
    '#type' => 'fieldset', // <-- here 
    '#title' => 'Instructions', // <-- and here for good measure 
    '#value' => "These are the instructions", 
    '#weight' => -1, 
); 

to magicznie unosi się na górze, tak jak zamierzałem. Próbowałem również textarea (to też działało) i wyraźnie mówiąc znaczników (to nie).

Tak więc zmiana rodzaju z "znaczników" (domyślny IIRC) na "zestaw pól" powoduje, że nie jest już ignorowany jego ciężar.

+0

Czy próbujesz zmienić kolejność w formularzu lub na renderowanej stronie. Nie sądzę, że zmiana kształtu haka zmieni to dla obu. –

+0

Tylko na formularzu. –

+0

Zaktualizowałem moją odpowiedź poniżej, dodając kolejny możliwy powód, gdy uruchomiono z zainstalowanym modułem CCK. –

Odpowiedz

11

Brzmi to dość dziwnie, ponieważ manipulacja parametrem "#weight" elementów formularza zawsze działa niezawodnie dla mnie tak, jak reklamowano. Należy jednak zwrócić uwagę, że ciężary mają wpływ tylko na porządek względem elementów rodzeństwa, więc jeśli element, który chcesz przenieść, znajduje się na poziomie niższym niż pozostałe elementy, musisz zmienić waga elementu nadrzędnego, który jest na tym samym poziomie, na którym chcesz się przesunąć.

celu wyjaśnienia, jeśli mają hierarchię jak tak,

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

nie można przenieść „baz” w stosunku do „foo” poprzez ustawienie wagi „Baz”. Musisz ustawić wagę na "pasku" (przesuwając ją również), lub wyciągnąć "baz" i doprowadzić go do tego samego poziomu, co "foo".

Inną możliwą przyczyną może być CCK: Jeśli masz zainstalowany CCK, pozwala ustawić kolejność własnych, jak również inne pola pod admin/content/node-type/<yourNodeType>/fields. Zmienia kolejność, rejestrując wywołanie zwrotne pre-renderowania content_alter_extra_weights(), więc działałoby to po twoich zmianach w hook_form_alter.


Edit: Aktualizacja odpowiedzieć aktualizację zapytania

Znaczniki typ pola ma szczególne zachowanie, gdy używany wewnątrz fieldsets, który zasugerował on w forms api documentation:

Uwaga: jeśli używasz znaczników, jeśli twoje treści nie są zapakowane w znaczniki (ogólnie: <p> lub <div>), twoja treść nie mieści się w zwiniętych polach.

Wygląda na to, że nie tylko znajduje się poza zwiniętymi zestawami pól, ale także nie przestrzega wagi w tych przypadkach.Owijanie zawartość pola znaczników w <p> tagów czyni go respektować ciężar na moim komputerze:

$form['taxonomy']['instructions'] = array(
    '#value' => "<p>These are the instructions</p>", 
    '#weight' => -1, 
); 
+0

Hmmm ... Włączyłem CCK w tym samym czasie, ale teraz mam go wyłączony. Być może dlatego mój oryginalny przypadek działa teraz? Ale jak już powiedziałem w zaktualizowanym opisie, mam teraz inny, ale łatwiejszy do odtworzenia problem. –

+0

Zaktualizowana odpowiedź na adres zaktualizowane pytanie –

+0

Dzięki, to jest idealne! –

1

Nie bardzo rozumiem, co chcesz osiągnąć. Czy mógłbyś wyjaśnić? Czy chcesz zmienić pozycję menu systematyki na stronie?

W międzyczasie można zainstalować Drupal Devel module (jeśli jeszcze tego nie zrobiłeś). Następnie włącz opcję "Wyświetlaj klucze i masy elementów formularza" w sekcji Administrator> Ustawienia wersji.

To powinno pomóc w usunięciu problemu.

Edit po informacji zwrotnej:

Spojrzałem na niego trochę więcej. Masa taksonomia jest ustawiony w taxonomy.module na linii 556 (Drupal 6.12):

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

Aby przetestować również realizowane hook_form_alter dla mojego modułu jak ten:

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

Działa to dla mnie znaczy porusza listę rozwijaną taksonomii u góry strony. Mogę zmienić wagę i przesuwa się ona odpowiednio na renderowanej stronie.

Ponieważ powiedziałeś, że próbowano ustawienie $form['taxonomy']['#weight'] w swoim pierwotnym stanowisku mogę obecnie myśleć tylko dwóch możliwych kontroli:

  1. Upewnij cache jest czyszczony przed badaniem. (Można użyć modułu Devel do tego)
  2. sprawdzić, czy swójhook_form_alter nazywa potaxonomy_form_alter

I wysłaniu kodu masz obecnie możemy spojrzeć na to bardziej szczegółowo.


Uwaga: ciężary wyświetlane przez moduł Devel nie są zbyt przydatne w tej sytuacji. Wyświetlane są masy elementów na "podformatach", a nie waga samego "podformularza". Na przykład. kiedy ustawię $form['taxonomy']['#weight'] = -9;, -9 nie jest wyświetlane przez moduł Devel, ale raczej wagi elementów wewnątrz $form['taxonomy'].

+0

Cześć Heinrich, tak, próbuję zmienić pozycję rozwijanej mapy systematyki. Nie mam devel, ale zainstaluję go dziś wieczorem i zgłoś się. Dzięki! –

+0

Witam Heinrich, zainstalowałem devel i sprawdziłem wagi. Wszystko wydaje się być zgodne z zamierzeniami, ale zestawy pól nie są ułożone w kolejności rosnącej wagi. Pierwszy zestaw pól to taksonomia o wadze 1000. Druga to menu (-2), a następnie zarys księgi (10). Jest jeszcze kilka, następnie Załączniki plików (30), Informacje o autorze (20) i informacje dotyczące publikacji (25). Więc nie tylko te zestawy pól, które dodałem, są niesprawne, ale także te podstawowe. Czy hook_form_alter jest za późno, aby zmienić kolejność istniejących zestawów pól? –

+0

Dzięki za wyjaśnienie RE devel. Jestem całkiem pewien, że hook_form_alter jest wywoływany po taxonomy_form_alter, ponieważ widzę wszystkie elementy dodane do taksonomii z mojego haka. –

0

Czy określony ciężar innym polu i teraz twoja forma węzeł nie jest prawidłowo zorganizowany? Forma api jest trochę drażliwa, a zmiana formy może doprowadzić do pomieszania rzeczy. Czasami muszę ponownie przypisać wagę do przycisków przesyłania/podglądu, aby odzyskać je na dole formularza, do którego należą.

0

Aby pokryć wszystkie bazy, upewnij się, że wyczyścisz pamięć podręczną w razie potrzeby. Drupal przechowuje formularze domyślnie w pamięci podręcznej, jeśli włączony jest moduł buforowania.

+0

Dzięki - wyłączam buforowanie. Wydaje się, że Heinrich go jednak przybił. –

3

Czasami (lub zawsze, gdy waga elementów CCK) linię, która działa w hook_form_alter lub $ form [ '# after_build'] zwrotna jest to jedno:

$form['#content_extra_fields']['taxonomy']['weight'] = 5; 
+0

to jest * prawdziwa * odpowiedź na to pytanie – gpilotino

2

chcielibyście wstawić <div> mogę użyć w JS. To nie działało dla mnie:

$form['you_as_reviewer']['ui_container'] = array(
    '#type' => 'markup', 
    '#value' => '<div id="le_reviewer_tags_ui"/>', 
    '#weight' => 5, 
); 

Waga została zignorowana.

To działało:

$form['you_as_reviewer']['ui_container'] = array(
    '#type' => 'markup', 
    '#prefix' => '<div>', 
    '#value' => '<div id="le_reviewer_tags_ui"/>', 
    '#suffix' => '</div>', 
    '#weight' => 5, 
); 

Dodane prefiks i sufiks.

Powiązane problemy