Blog

Goodbye, Multi Add!

Multi Add Social Card

We're officially retiring our Multi Add plugin, co-created by Jeremy Daalder, but for all the right reasons. It's certainly proved useful for Commerce 1 and Craft 2, at the time, filling a gap in functionality for many.

With Commerce 2 (beta), all of Multi Add's functionality can be achieved natively - great news! Let's recap what Multi Add does, and how to transition.

Adding Multiple Items To Your Cart

Commerce 2 follows a similar pattern, but major changes are:

  • Changing the "action" hidden input value.
  • Changing the hidden input names from "items[]" to "purchasables[]"

And also some other minor Craft 3 changes as shown.

Commerce 1 with Multi Add:

<form method="POST">
    <input type="hidden" name="action" value="multiAdd/multiAdd">
    <input type="hidden" name="redirect" value="/cart">
    {{ getCsrfInput() }}

    {% for product in craft.commerce.products.find() %}
        <input type="hidden" name="items[{{ loop.index }}][purchasableId]" value="{{ product.defaultVariant.id }}">
        <input type="hidden" name="items[{{ loop.index }}][qty]" value="1">
        <input type="text" name="items[{{ loop.index }}][note]">
        
        <select name="items[{{ loop.index }}][options][color]">
            <option value="blue">Blue</option>
            <option value="white">White</option>
            <option value="red">Red</option>
        </select>
    {% endfor %}

    <input type="submit" value="Add to cart">
</form>

Commerce 2:

<form method="POST">
    <input type="hidden" name="action" value="commerce/cart/update-cart">
    {{ redirectInput('cart') }}
    {{ csrfInput() }}

    {% for product in craft.products.all() %}
        <input type="hidden" name="purchasables[{{ loop.index }}][id]" value="{{ product.defaultVariant.id }}">
        <input type="hidden" name="purchasables[{{ loop.index }}][qty]" value="1">
        <input type="text" name="purchasables[{{ loop.index }}][note]">
        
        <select name="purchasables[{{ loop.index }}][options][color]">
            <option value="blue">Blue</option>
            <option value="white">White</option>
            <option value="red">Red</option>
        </select>
    {% endfor %}

    <input type="submit" value="Add to cart">
</form>

Updating Multiple Items In Your Cart

Often you'll need a button on your cart page to update multiple aspects of your customers cart at once. Commerce 2 follows a similar pattern, but major changes are:

  • Changing the "action" hidden input value.
  • Changing the hidden input names from "items[]" to "lineItems[]"

And also some other minor Craft 3 changes as shown.

Commerce 1 with Multi Add:

<form method="POST">
    <input type="hidden" name="action" value="multiAdd/updateCart">
    <input type="hidden" name="redirect" value="/cart">
    {{ getCsrfInput() }}

    {% for item in cart.lineItems %}
        <input type="text" size="4" name="items[{{ item.id }}][qty]" value="{{ item.qty }}">
    {% endfor %}

    <button type="submit">Update Cart</button>
</form>

Commerce 2:

<form method="POST">
    <input type="hidden" name="action" value="commerce/cart/update-cart">
    {{ redirectInput('cart') }}
    {{ csrfInput() }}

    {% for item in cart.lineItems %}
        <input type="text" size="4" name="lineItems[{{ item.id }}][qty]" value="{{ item.qty }}">
    {% endfor %}

    <button type="submit">Update Cart</button>
</form>

Thanks for the good times!

We've officially stopped support for Multi Add for Craft 2, effective immediately. You'll always be able to have access to the plugin code on the Github repository, along with still being able to post issues. We'll do our best to help out any issues that creep up (along with the community being able to help), but we want to make it clear we're well and truly leaving Craft 2 behind, and looking forward to the future with Craft 3 + Commerce 2.

Thanks to everyone who has found Multi Add useful, and of course a shout out to Jeremy Daalder again!