Все зависит от того как у Вас сейчас реализовано.
1. Если набор данных остается тот же саммый (картинки, заголовки, описание), то с помощью js просто меняется стиль, например кол-во товара на строке. Так же с помощью js можно и разметку подвигать, но лучше по уму css прописать и менять классы при смене режима просмотра.
2. Если сами даные товаров изначально получаются ajax-ом и лежат где-то в json, то в зависимости от активной кнопки можно js-ом заполнять разные шаблоны разметки. Например, на странице два щаблона разметки, один из них display: none, второй заполняется данными. При нажатии на кнопку, меняете местами - заполняете первый блок данными, второй в display: none.
3. Если же при смене режима кол-во и тип данных может меняться, то только ajax-ом получать данные и далее по пункту 2 или получать готовую частичную разметку и в нужный блок вставлять ее. Если фронт отдельно живет, то все так же как в пункте 2.