ВопросКак удалить строки из таблицы при помощи AJAX

Здравствуйте Евгений
С удовольствием посмотрел Ваше выступление "Всё об AJAX в Drupal 7".

Проблема такая. Есть таблица в базе данных. Допустим только одно поле ID. Выводим таблицу на экран. В строке 2 колоки: Поле ID и ссылка или иконка "Удалить строку". При нажатии на кнопку "Удалить строку" нужно удалить строку с экрана и из базы данных без перезагрузки страницы. Как сделать это при помощи JQuery представляю. А вот как это все встроить в Drupal 7 не совсем ясно.

1) Как оформить кнопку "Удалить строку" ?
Сделать ее формой или ссылкой? Или ловить Click в файле JS
2) Если ловить событие #ajax['callback'] , то как передать сюда параметр ID
3) Можно ли обойтись только средствами AJAX в Drupal 7 или без JQuery не обойтись ?
Спасибо

Комментарии

Аватар пользователя Spleshka
Spleshka написал:

Можно обойтись и обычным AJAX в Drupal 7. Единственное, что вам нужно добавить в форму - это правильное создание ссылки (не формы) "Удалить строку". Например, сейчас она у вас такие:

<a href = "/mymodule_delete_smth/31">Удалить строку</a>
<a href = "/mymodule_delete_smth/42">Удалить строку</a>
и т.д.

Сделайте их такими:

<a href = "/mymodule_delete_smth/31/0">Удалить строку</a>
<a href = "/mymodule_delete_smth/42/1">Удалить строку</a>
и т.д.

Здесь 0 и 1 - это порядковый номер строки в таблице, начиная с нуля. Далее вы легко получите этот номер в колбэке страницы, на которую ссылается линк. Это будет нашим порядковым номером (eq, если вы знакомы с js). По этому порядковому номеру вы всегда сможете получить доступ к вашей строке. А дальше вам всего -то надо сделать так на ответе от сервера:

$commands[] = ajax_command_remove('table tr:eq(' . $eq . ')');
$commands[] = ajax_command_restripe_table('table');

Вместо table, конечно, лучше прописать её ID.

12.05.2012 16:44
Аватар пользователя Виктор
Виктор написал:

Как удалить строки из таблицы при помощи AJAX

Не получилось
Возврат из процедуры не знаю как сделать.

Обратно в таблицу не возвращается после вызова
функции callback_ajax_order_item_del($item_id)

// Создал ссылку кнопки удаления строки в таблице
$del_link = l('Удалить строку', 'tao_action/order_item_del/'.$row->item_id); 
 
// Сформировал строку в таблице. $item_id - Уникальный код строки
'<tr id="n' . $item_id . '">' .
            '<td>' . $product_name . '</td>' .  // Наименование товара
            '<td>' . $del_link . '</td>' .           // Ссылка
'</tr>';
 
 
 // Создал элемент меню в hook_menu
  $items['tao_action/order_item_del/%'] = array(
    'title' => 'Удалить товар',
    'page callback' => 'callback_ajax_order_item_del', 
    'page arguments' => array(2),
    'delivery callback' => 'ajax_deliver',  // Для правильной работы AJAX
    'theme callback' => 'ajax_base_page_theme',
    'type' => MENU_CALLBACK,
    'file' => 'tao.order_item.inc',
  );
 
/**
 * Callback AJAX. Удаление строки из таблицы
 */
function callback_ajax_order_item_del($item_id) {
 
    $commands[] = ajax_command_remove('#n'.$item_id');  
 
    return array('#type' => 'ajax', '#commands' => $commands);  
}
12.05.2012 20:22
Аватар пользователя Spleshka
Spleshka написал:
// Создал ссылку кнопки удаления строки в таблице
$del_link = l('Удалить строку', 'tao_action/order_item_del/'.$row->item_id, array('class' => array('use-ajax')));
drupal_add_library('system', 'drupal.ajax');

Я надеюсь, что здесь $row->item_id - это не ID материала, а его порядковый номер в таблице.

Дальше:

function callback_ajax_order_item_del($item_id) { 
    $commands[] = ajax_command_remove('#n:eq(' . $item_id . ')');
    $commands[] = ajax_command_restripe_table('table'); 
    return array('#type' => 'ajax', '#commands' => $commands);  
}

Вот так лучше)

16.05.2012 01:17
Аватар пользователя Виктор
Виктор написал:

Как удалить строки из таблицы при помощи AJAX

"Я надеюсь, что здесь $row->item_id - это не ID материала, а его порядковый номер в таблице."

$row->item_id это ID товара в строке заказа. Нужно добавлять, Изменять и удалять данные в строке на экране и в базе данных. Реальный код function callback_ajax_order_item занимает примерно 600 строк.

Не совсем понимаю почему Вы против использования ID товара и почему предпочтительнее использовать порядковый нор в таблице. И как связать тогда строку с базой данных ? Поясните, пожалуйста...

15.06.2012 16:04
Аватар пользователя Spleshka
Spleshka написал:

>> Не совсем понимаю почему Вы против использования ID товара
В данном случае это вам не надо. Вам надо получить порядковый номер строки таблицы и её удалить. Его и надо выводить! С базой данных это вообще никак связывать не надо, т.к. это будет просто какое-то число для отображения на экране, по которому js будет определять позицию каждой строки в таблице.

21.06.2012 10:33

Комментировать