Drupal 6 / jQuery Ajax aktualizuje pole
Jestem na innej ścieżce w tej samej witrynie i muszę pozwolić użytkownikowi na zmianę zawartości pola na węźle, które napisał w innej lokalizacji. Mam węzeł nodeid i nazwę pola oraz identyfikatory itp. Np.
Nie wierzę, że to jest zbyt trudne, ale tutorial lub wyjaśnienie byłoby wspaniałe.
Dzięki.
Edytuj: Dziękuję anschauung za pytanie, więc wyjaśnij:
Jest to textarea CCK. Jeśli chodzi o powód, dobrze jest centralny typ węzła, z wieloma połączonymi węzłami odniesienia węzła. Na stronie edycji dowolnego węzła, który odwołuje się do węzła centralnego, musi być w stanie edytować i zapisać pole węzła centralnego. Więc to moja skrzynka.
Dzięki jeszcze raz.
Dzięki bardzo googletorp, naprawdę doceniam twoją pomoc.
Oto, co mam do tej pory:
Dla pierwszego kroku:
function update_main_field_menu() {
$items = array();
$items['update_main_field/%'] = array(
'title' => 'Update Main Field',
'page callback' => 'post_to_main_node',
'page arguments' => 1,
'type' => MENU_CALLBACK
);
return $items;
}
Krok drugi:
function post_to_main_node(){
// Sorry, I'm totally lost. What do I put here?
}
Wspomniałeś również o tym:
Albo w hook_form_alter, hook_nodeapi albo innym haku, który jest wywoływany podczas generowania formularza węzła. Powinieneś zbadać, co jest najlepsze w twojej sytuacji.
Jak wygenerować formularz węzła?
Krok trzeci:
function modulename_form_mainct???_node_form_alter (&$form, &$form_state) {
// I'm not sure about which form I'm doing node form alter on. If I do it to the mainct, wouldn't that alter the regular edit page the user is viewing? I only want to load the js for the ajax submission. Is there a update_main_field node form?
drupal_add_js(drupal_get_path('module', 'modulename') ."/updateField.js");
}
Również to, co znajduje się pomiędzy funkcją w kroku 2 i otrzymaniem formularza węzła w kroku 3?
Krok 4: Myślę, że rozumiem głównie, choć z powodu innych rzeczy nie mogę jeszcze tego sprawdzić. :)
Naprawdę chcę się nauczyć, jak to zrobić w drupal, ale byłoby bardzo głośno, gdybyś mógł nieco zwiększyć poziom manekinów w swoim języku. : D Jeszcze raz bardzo dziękuję.
Edytuj ponownie:Próbowałem wczoraj wprowadzić argumenty dostępu, ale z jakiegoś powodu nie zadziałało. :( Ale teraz to robi! Yay masz magię.
Teraz, gdy wyzwalam post w ten sposób:
Drupal.behaviors.ajax_update_field = function (context) {
$("#button").click(function(){
var url = $("#edit-field-reference-0-nid-nid").val().replace(/.*?\[nid:(\d+)?]/ig, "$1");
url = "/update_main_field/"+url;
// The data is just some silly test thing
$.post(url, {data: $("#edit-field-reference-0-nid-nid-wrapper label").text()}, function(value) {
// Here you can write your js to handle a response to the user,
// or if something went wrong an error message.
// value = response data from drupal
alert(value);
});
});
}
Widzę post w adresie URL z poprawnymi danymi. Co jest dobre. Ale bez odpowiedzi. Alert jest pusty.
Również nowe puste ... coś zostało utworzone. Nic w nim nie ma, ale widzę go w widokach po filtrowaniu dla węzłów. Nie ma tytułu, żadnych pól itp. Tylko data wpisu.
Węzeł, który chcę zaktualizować, nie jest aktualizowany.
To prowadzi mnie do przekonania, że krok drugi jest prawdopodobnie nieco niepoprawny. Mam kilka pytań na ten temat.
function post_to_main_node(){
// Is this sufficient to load the node? nid doesn't have to be set as an arg for the function?
$node = node_load($_POST['nid']);
// Is the field set like this? 'field_library' is the 'machine name' of the field. This is what's needed right?
$node->field_library = $_POST['data'];
node_save($node);
}
Jeszcze raz bardzo dziękuję.