Skip to main content
added 2 characters in body
Source Link
Ryan Szrama
  • 7.1k
  • 18
  • 27

While you probably ought to actually disable the Add to Cart button, you'd actually put logic for determining whether or not a product should be added to the cart in a submitvalidate handler.

The first step us to add a form_alter hook that adds a validation handler to the add to cart forms.

/**
 * Implements hook_form_FORM_ID_alter().
 */
function MYMODULE_form_commerce_cart_add_to_cart_form_alter(&$form, &$form_state) {
  // Add a validate hook so that the order can be checked to ensure that the
  // our constraints are met.
  array_unshift($form['#validate'], 'MYMODULE_validate_some_stuff');
}

Note: this works because of commerce_cart_forms() which adds the generic form callback instead of requiring us to look for the string in the $form_id.

Now, you just need to implement your logic:

/*
 * Check the product/order against my constraints.
 */
function MYMODULE_validate_some_stuff(&$form, &$form_state) {
  $order = commerce_cart_order_load($form_state['values']['uid']);
  $line_item = $form_state['line_item'];

  if (/* your logic here */) {
    form_set_error('product_id', t('Sorry, you can\'t do that!'));
  }
}

You'll notice that the commerce_order is loaded by the user's UID and you've got access to the commerce_line_item that you can then use to grab the product (use $line_item->commerce_product). Also, there is no need to return TRUE or FALSE. Just set an error.

While you probably ought to actually disable the Add to Cart button, you'd actually put logic for determining whether or not a product should be added to the cart in a submit handler.

The first step us to add a form_alter hook that adds a validation handler to the add to cart forms.

/**
 * Implements hook_form_FORM_ID_alter().
 */
function MYMODULE_form_commerce_cart_add_to_cart_form_alter(&$form, &$form_state) {
  // Add a validate hook so that the order can be checked to ensure that the
  // our constraints are met.
  array_unshift($form['#validate'], 'MYMODULE_validate_some_stuff');
}

Note: this works because of commerce_cart_forms() which adds the generic form callback instead of requiring us to look for the string in the $form_id.

Now, you just need to implement your logic:

/*
 * Check the product/order against my constraints.
 */
function MYMODULE_validate_some_stuff(&$form, &$form_state) {
  $order = commerce_cart_order_load($form_state['values']['uid']);
  $line_item = $form_state['line_item'];

  if (/* your logic here */) {
    form_set_error('product_id', t('Sorry, you can\'t do that!'));
  }
}

You'll notice that the commerce_order is loaded by the user's UID and you've got access to the commerce_line_item that you can then use to grab the product (use $line_item->commerce_product). Also, there is no need to return TRUE or FALSE. Just set an error.

While you probably ought to actually disable the Add to Cart button, you'd actually put logic for determining whether or not a product should be added to the cart in a validate handler.

The first step us to add a form_alter hook that adds a validation handler to the add to cart forms.

/**
 * Implements hook_form_FORM_ID_alter().
 */
function MYMODULE_form_commerce_cart_add_to_cart_form_alter(&$form, &$form_state) {
  // Add a validate hook so that the order can be checked to ensure that the
  // our constraints are met.
  array_unshift($form['#validate'], 'MYMODULE_validate_some_stuff');
}

Note: this works because of commerce_cart_forms() which adds the generic form callback instead of requiring us to look for the string in the $form_id.

Now, you just need to implement your logic:

/*
 * Check the product/order against my constraints.
 */
function MYMODULE_validate_some_stuff(&$form, &$form_state) {
  $order = commerce_cart_order_load($form_state['values']['uid']);
  $line_item = $form_state['line_item'];

  if (/* your logic here */) {
    form_set_error('product_id', t('Sorry, you can\'t do that!'));
  }
}

You'll notice that the commerce_order is loaded by the user's UID and you've got access to the commerce_line_item that you can then use to grab the product (use $line_item->commerce_product). Also, there is no need to return TRUE or FALSE. Just set an error.

Added note about commerce_cart_forms().
Source Link
nvahalik
  • 3.6k
  • 2
  • 15
  • 37

While you probably ought to actually disable the Add to Cart button, you'd actually put logic for determining whether or not a product should be added to the cart in a submit handler.

The first step us to add a form_alter hook that adds a validation handler to the add to cart forms.

/**
 * Implements hook_form_FORM_ID_alter().
 */
function MYMODULE_form_commerce_cart_add_to_cart_form_alter(&$form, &$form_state) {
  // Add a validate hook so that the order can be checked to ensure that the
  // our constraints are met.
  array_unshift($form['#validate'], 'MYMODULE_validate_some_stuff');
}

Note: this works because of commerce_cart_forms() which adds the generic form callback instead of requiring us to look for the string in the $form_id.

Now, you just need to implement your logic:

/*
 * Check the product/order against my constraints.
 */
function MYMODULE_validate_some_stuff(&$form, &$form_state) {
  $order = commerce_cart_order_load($form_state['values']['uid']);
  $line_item = $form_state['line_item'];

  if (/* your logic here */) {
    form_set_error('product_id', t('Sorry, you can\'t do that!'));
  }
}

You'll notice that the commerce_order is loaded by the user's UID and you've got access to the commerce_line_item that you can then use to grab the product (use $line_item->commerce_product). Also, there is no need to return TRUE or FALSE. Just set an error.

While you probably ought to actually disable the Add to Cart button, you'd actually put logic for determining whether or not a product should be added to the cart in a submit handler.

The first step us to add a form_alter hook that adds a validation handler to the add to cart forms.

/**
 * Implements hook_form_FORM_ID_alter().
 */
function MYMODULE_form_commerce_cart_add_to_cart_form_alter(&$form, &$form_state) {
  // Add a validate hook so that the order can be checked to ensure that the
  // our constraints are met.
  array_unshift($form['#validate'], 'MYMODULE_validate_some_stuff');
}

Now, you just need to implement your logic:

/*
 * Check the product/order against my constraints.
 */
function MYMODULE_validate_some_stuff(&$form, &$form_state) {
  $order = commerce_cart_order_load($form_state['values']['uid']);
  $line_item = $form_state['line_item'];

  if (/* your logic here */) {
    form_set_error('product_id', t('Sorry, you can\'t do that!'));
  }
}

You'll notice that the commerce_order is loaded by the user's UID and you've got access to the commerce_line_item that you can then use to grab the product (use $line_item->commerce_product). Also, there is no need to return TRUE or FALSE. Just set an error.

While you probably ought to actually disable the Add to Cart button, you'd actually put logic for determining whether or not a product should be added to the cart in a submit handler.

The first step us to add a form_alter hook that adds a validation handler to the add to cart forms.

/**
 * Implements hook_form_FORM_ID_alter().
 */
function MYMODULE_form_commerce_cart_add_to_cart_form_alter(&$form, &$form_state) {
  // Add a validate hook so that the order can be checked to ensure that the
  // our constraints are met.
  array_unshift($form['#validate'], 'MYMODULE_validate_some_stuff');
}

Note: this works because of commerce_cart_forms() which adds the generic form callback instead of requiring us to look for the string in the $form_id.

Now, you just need to implement your logic:

/*
 * Check the product/order against my constraints.
 */
function MYMODULE_validate_some_stuff(&$form, &$form_state) {
  $order = commerce_cart_order_load($form_state['values']['uid']);
  $line_item = $form_state['line_item'];

  if (/* your logic here */) {
    form_set_error('product_id', t('Sorry, you can\'t do that!'));
  }
}

You'll notice that the commerce_order is loaded by the user's UID and you've got access to the commerce_line_item that you can then use to grab the product (use $line_item->commerce_product). Also, there is no need to return TRUE or FALSE. Just set an error.

Source Link
nvahalik
  • 3.6k
  • 2
  • 15
  • 37

While you probably ought to actually disable the Add to Cart button, you'd actually put logic for determining whether or not a product should be added to the cart in a submit handler.

The first step us to add a form_alter hook that adds a validation handler to the add to cart forms.

/**
 * Implements hook_form_FORM_ID_alter().
 */
function MYMODULE_form_commerce_cart_add_to_cart_form_alter(&$form, &$form_state) {
  // Add a validate hook so that the order can be checked to ensure that the
  // our constraints are met.
  array_unshift($form['#validate'], 'MYMODULE_validate_some_stuff');
}

Now, you just need to implement your logic:

/*
 * Check the product/order against my constraints.
 */
function MYMODULE_validate_some_stuff(&$form, &$form_state) {
  $order = commerce_cart_order_load($form_state['values']['uid']);
  $line_item = $form_state['line_item'];

  if (/* your logic here */) {
    form_set_error('product_id', t('Sorry, you can\'t do that!'));
  }
}

You'll notice that the commerce_order is loaded by the user's UID and you've got access to the commerce_line_item that you can then use to grab the product (use $line_item->commerce_product). Also, there is no need to return TRUE or FALSE. Just set an error.