В файле прикреплена часть скрина, где приведена сама идея
Имеется форма
<?phpfunction cart_form($form, &$form_state, $nid){
$form['#prefix'] = '<div id="cart_form'.$nid.'" class="cart-form">';
$form['#suffix'] = '</div>';
$form['count'] = array(
'#type' => 'textfield',
'#default_value' => '1',
'#prefix' => '<a class="minus" onclick="var input=jQuery(this).next().children(); var val=parseInt(input.val()); if (val > 1) { input.val(val-1); } return false;">-</a>',
'#suffix' => '<a class="plus" onclick="var input=jQuery(this).prev().children(); input.val(parseInt(input.val())+1); return false;">+</a>',
'#attributes' => array('size' => 2, 'maxlength' => 3),
);
$form['cart'] = array(
'#type' => 'submit',
'#value' => t('В корзину'),
'#attributes' => array('class' => array('submit-cart-form')),
'#ajax' => array(
'wrapper' => 'cart_form'.$nid,
'callback' => 'cart_form_ajax_callback',
),
);
$form_state['storage']['nid'] = $nid;
return $form;
}?>
С помощью ее с легкостью выводится "Товар добавлен в корзину" или "Ошибка ввода". Вопрос в другом. Корзина, которая располагается вверху экрана, находится далеко за пределами формы. С помощью каких методов можно изменить, а точнее как именно, содержимое блока корзины через код API.
Вложение | Размер |
---|---|
![]() | 130.87 КБ |
Комментарии
http://xandeadx.ru/blog/drupal/492 методов много, выбирайте по вкусу
И как это можно воткнуть в приведенный код?
Было подобное, делал так:
http://drupal.ru/comment/560789#comment-560789
может чем и поможет.
LEVEL UP!
Отлично! Учитывая, что сама форма никак не меняется, выкинул function cart_form_submit и валидацию.
В колбеке указал, что нужно и все летает как задумывалось.
<?php
function cart_form_ajax_callback($form, $form_state) {
if (preg_match("|^[\d]*$|", $form['count']['#value'])) {
$_SESSION['count'] += $form['count']['#value'];
$price = db_select('field_data_field_price')
->fields('field_data_field_price')
->condition('entity_id', $form_state['storage']['nid'])
->execute()
->fetchObject();
$_SESSION['summa'] += $form['count']['#value'] * $price->field_price_value;
$commands = array();
$commands[] = ajax_command_append('#cart-form', '<div class="cart-message">Товар добавлен в корзину</div>');
$commands[] = ajax_command_html('#small-cart', '<div class="text">
<div class="title">Ваш заказ</div>
<div class="value"><a href="/">'.$_SESSION['count'].' позиций</a> на <span class="summ">'.$_SESSION['summa'].' руб.</span></div>
</div>');
} else {
$commands = array();
$commands[] = ajax_command_append('#cart-form', '<div class="cart-message error">Введите целое число</div>');
}
return (array('#type' => 'ajax', '#commands' => $commands));
}
?>