Drupal 6 / jQuery Ajax обновляет поле
м по другому пути на том же сайте, и мне нужно разрешить пользователю изменять содержимое поля на узле, который он / она написал в другом месте. У меня есть идентификатор узла и имя поля, а также идентификаторы и т. Д. Нп.
Я неЯ считаю, что это слишком сложно, но учебник или объяснение было бы замечательно.
Благодарю.
Изменить: Спасибо anschauung за вопрос, чтобы уточнить:
Это текстовая область CCK. Что касается того, ну что жтип центрального узла, с множеством связанных узловых узлов. На странице редактирования любого узла, который ссылается на центральный узел, он должен иметь возможность редактировать и сохранять поле центрального узла. Чтобы'с моей пользой.
Еще раз спасибо.
Спасибо вам большое googletorp, я действительно очень ценю вашу помощь.
Вот'Что я имею до сих пор:
Для первого шага:
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;
}
Шаг второй:
function post_to_main_node(){
// Sorry, I'm totally lost. What do I put here?
}
Также вы упомянули это:
Либо в hook_form_alter, hook_nodeapi, либо в каком-либо другом хуке, который вызывается при создании формы узла. Вы должны выяснить, что лучше в вашей ситуации.
Как мне сгенерировать форму узла?
Шаг третий:
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");
}
Кроме того, что находится между функцией на шаге 2 и получением формы узла на шаге 3?
Шаг 4: Я думаю, что я понимаю в основном, хотя из-за других вещей, которые я могупока не проверю. :)
Я действительно хочу научиться делать это в drupal, но было бы здорово, если бы вы немного повысили уровень своего языка. Спасибо большое еще раз.
Изменить еще раз:Я на самом деле пытался поставить аргументы доступа вчера, но по некоторым причинам это не сработало :( Но теперь это так! У тебя волшебство есть.
Теперь, когда я запускаю сообщение так:
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);
});
});
}
Я вижу сообщение на URL с правильными данными. И это хорошо. Но нет ответа. Предупреждение пусто.
Также новый бланк ... что-то было создано. Там'В нем ничего нет, но я могу видеть это в представлениях при фильтрации по узлам. У него нет заголовка, полей и т. Д. Просто дата публикации.
Узел, который я хочу обновить, не являетсят обновлен.
Так что это заставляет меня думать, что второй шаг, вероятно, несколько неверен. У меня есть несколько вопросов по этому поводу.
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);
}
Большое спасибо еще раз.