Drupal 7 - Обновление полей узла через ajax / frontpage - PullRequest
1 голос
/ 08 марта 2011

У меня есть несколько перетаскиваемых объектов jQueryUI, которые представляют узлы, сгенерированные на моей главной странице в Drupal.

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

Я создал два целочисленных поля, homex и homey, но я не могу найти или найти достаточно документации, чтобы узнать, как сказать Drupal обновить значения для данного узла.

Я довольно знакомс тем, как создавать модули в Drupal и ajax в целом - но объединение этих двух в этом случае вызывает недоумение.

Может кто-нибудь помочь мне понять, как подключиться к Drupal, чтобы я мог сохранять координаты динамически?

Что было бы предпочтительнее, если бы я мог просто написать простой модуль-обработчик для Drupal, который принимает пару x / y в запросе get / post, затем обновляет их в базе данных и отвечает success / json.На самом деле, если бы это не было сделано в Drupal, это было бы довольно простой установкой.

Ответы [ 2 ]

3 голосов
/ 09 марта 2011

Кажется, все, что мне нужно было сделать, это создать hook_menu () и hook_ajax_callback () (извините, не удалось найти ссылку) в модуле.

Вот что у меня получилось (более менее, оставив три различных метода возврата, с которыми я играл):

<?php

function homepage_coords_menu(){
    return array(//$items
        'homepage_coords/%node/%/%' => array(
            'page callback' => 'homepage_coords_ajax_callback',
            'page arguments' => array(1,2,3),
            'access callback' => TRUE,
            'type' => MENU_CALLBACK,
        )
    );
}

function homepage_coords_ajax_callback($node,$x=0,$y=0){    
    if(!is_numeric($x) || !is_numeric($y)){
        ajax_deliver(json_encode(array(
            'status'=>'fail'
        )));            
    }

    $node->field_homepagex = array('und'=>array(array('value'=>$x)));
    $node->field_homepagey = array('und'=>array(array('value'=>$y)));

    node_save($node);

    ajax_deliver(json_encode(array(
        'status'=>'win'
    )));
}

?>
1 голос
/ 08 марта 2011

Когда вы говорите, что знакомы с ajax, вы имеете в виду ajax jquery или фреймворк Drupal 7 ajax. Вы можете прочитать больше о Drupal 7 Ajax здесь http://drupal.org/node/752056

Полагаю, homex - это скрытый элемент формы. Может быть, вы могли бы перехватить его, добавив атрибут #ajax с обратным вызовом ajax, вызванным, например, событием «change» или любым другим событием Jquery , и в этом обратном вызове ajax выполните node_form_submit_build_node

...