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ę.

questionAnswers(1)

yourAnswerToTheQuestion