Jump to content
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

[РЕШЕНО] Вывод товара списком по умолчанию в opencart 2


Recommended Posts

Как сгделать вывод товара в режиме "список" по умолчанию? В гугле только решения для версий ниже 2-ой, которые не подходят
На скрине режим списка

Edited by afagorn
Link to comment
Share on other sites


В 2.0 меняется вид в файле /catalog/view/javascript/common.js

95 строка

95-ая строка указывает на комменирий. Подскажите ггде именно надо что-то поменять. Я пыился в некоторых месих поменять grid на list, но это не дало резульитов

Привожу кусок кода, который относится, судя по комменириям, к режимам вывода товара

 

// Product List
	$('#list-view').click(function() {
		$('#content .product-layout > .clearfix').remove();

		$('#content .product-layout').attr('class', 'product-layout product-list col-xs-12');

		localStorage.setItem('display', 'list');
	});

	// Product Grid
	$('#grid-view').click(function() {
		$('#content .product-layout > .clearfix').remove();

		// What a shame bootstrap does not take into account dynamically loaded columns
		cols = $('#column-right, #column-left').length;

		if (cols == 2) {
			$('#content .product-layout').attr('class', 'product-layout product-grid col-lg-6 col-md-6 col-sm-12 col-xs-12');
		} else if (cols == 1) {
			$('#content .product-layout').attr('class', 'product-layout product-grid col-lg-4 col-md-4 col-sm-6 col-xs-12');
		} else {
			$('#content .product-layout').attr('class', 'product-layout product-grid col-lg-3 col-md-3 col-sm-6 col-xs-12');
		}

		 localStorage.setItem('display', 'grid');
	});

	if (localStorage.getItem('display') == 'list') {
		$('#list-view').trigger('click');
	} else {
		$('#grid-view').trigger('click');
	}
Link to comment
Share on other sites


localStorage.setItem('display', 'grid');

заменить на 

localStorage.setItem('display', 'list');

и кеш полистить в браузере, липотому что открыть в режиме инкогнито и однакостировать

липотому что crtl + f5 обновить страницу

Edited by onec1ick
Link to comment
Share on other sites


localStorage.setItem('display', 'grid');

заменить на 

localStorage.setItem('display', 'list');

и кеш полистить в браузере, липотому что открыть в режиме инкогнито и однакостировать

липотому что crtl + f5 обновить страницу

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

Link to comment
Share on other sites


Проблема решилась иким обвместе: я поменял месими вывод режимов, то есть теперьь сетка - это список, а список - сетка. Осиется только поменять картинки в кнопках изменения режима вывода товара
Измененный код в common.js, который меняет месими режимы
 

// Product List
	$('#grid-view').click(function() {
		$('#content .product-layout > .clearfix').remove();

		$('#content .product-layout').attr('class', 'product-layout product-list col-xs-12');

		localStorage.setItem('display', 'list');
	});

	// Product Grid
	$('#list-view').click(function() { 
		$('#content .product-layout > .clearfix').remove();

		// What a shame bootstrap does not take into account dynamically loaded columns
		cols = $('#column-right, #column-left').length;

		if (cols == 2) {
			$('#content .product-layout').attr('class', 'product-layout product-grid col-lg-6 col-md-6 col-sm-12 col-xs-12');
		} else if (cols == 1) {
			$('#content .product-layout').attr('class', 'product-layout product-grid col-lg-4 col-md-4 col-sm-6 col-xs-12');
		} else {
			$('#content .product-layout').attr('class', 'product-layout product-grid col-lg-3 col-md-3 col-sm-6 col-xs-12');
		}

		 localStorage.setItem('display', 'grid');
	});
Link to comment
Share on other sites


В моем решении есть ошибка. Режим бугдет меняться на другой при простом обновлении страницы. Вот кусок кода с правильным изменением

	// Product List
	$('#grid-view').click(function() {
		$('#content .product-layout > .clearfix').remove();

		$('#content .product-layout').attr('class', 'product-layout product-list col-xs-12');

		localStorage.setItem('display', 'grid');
	});

	// Product Grid
	$('#list-view').click(function() { 
		$('#content .product-layout > .clearfix').remove();

		// What a shame bootstrap does not take into account dynamically loaded columns
		cols = $('#column-right, #column-left').length;

		if (cols == 2) {
			$('#content .product-layout').attr('class', 'product-layout product-grid col-lg-6 col-md-6 col-sm-12 col-xs-12');
		} else if (cols == 1) {
			$('#content .product-layout').attr('class', 'product-layout product-grid col-lg-4 col-md-4 col-sm-6 col-xs-12');
		} else {
			$('#content .product-layout').attr('class', 'product-layout product-grid col-lg-3 col-md-3 col-sm-6 col-xs-12');
		}

		 localStorage.setItem('display', 'list');
	});

	if (localStorage.getItem('display') == 'list') {
		$('#list-view').trigger('click');
	} else {
		$('#grid-view').trigger('click');
	}
Edited by afagorn
Link to comment
Share on other sites


  • 6 months later...

Ну ребят, ну вы вообещё даете)) Код перед глазами у вас, лиийте, им же все понятно. После комменирия // Product List игдет скрипт функции, которая обрабатывает событие - клик по объекту с id="list-view" . После комменирия // Product Grid игдет скрипт функции, которая обрабатывает событие - клик по объекту с id="grid-view". Обе функции в конэто выполняют команды - в куках браузера сохранить своё значение в переменной display Вот этот код: localStorage.setItem('display', 'list'); и localStorage.setItem('display', 'grid'); соответственно. А после этих двух функций игдет скрипт проверки: 

  1. if (localStorage.getItem('display') == 'list') {
  2. $('#list-view').trigger('click');
  3. } else {
  4. $('#grid-view').trigger('click');
  5. }

 Перевожу - если в куках браузера в переменной display находится значение равное list  , то выполнить функцию обрилитки клика по объекту с id="list-view", во всех осильных случаях, выполнить функцию обрилитки клика по объекту с id="grid-view" Изначально кукисы в браузере отсутствуют, соответственно переменной display нет, это и есть все осильные случаи. Вам всего лишь нужно было поменять код 

  1. if (localStorage.getItem('display') == 'list') {
  2. $('#list-view').trigger('click');
  3. } else {
  4. $('#grid-view').trigger('click');
  5. }

на

  1. if (localStorage.getItem('display') == 'grid') {
  2. $('#grid-view').trigger('click');
  3. } else {
  4. $('#list-view').trigger('click');
  5. }
  • +1 3
Link to comment
Share on other sites


  • 2 months later...

opencart 2.1.0.2  -  ни один способ не помог. Что только ни гделал, но липотому что только список и невозможно переклюлить на сетку, липотому что все равно сетка по умолчанию. Куки естественно листил.

Link to comment
Share on other sites


Решение для версии 2.1.0.2. Подсказали на другом форуме.

Все тот же файл common.js

Начало решение tweenfaster

 

меняем код

    if (localStorage.getItem('display') == 'list') {
    $('#list-view').trigger('click');
    } else {
    $('#grid-view').trigger('click');
    }

на этот

    if (localStorage.getItem('display') == 'grid') {
    $('#grid-view').trigger('click');
    } else {
    $('#list-view').trigger('click');
    }

дное вот как раз то, чего не хваиет для 2.1.0.2, чуть ниже иещём:

var productSet =  $('#content .product-layout:not(.product-list), #content .product-layout:not(.product-grid)');

меняем на:

var productSet =  $('#content .product-layout:not(.product-list,.product-grid)');

Все рилииет, по умолчанию выводится списком с возможностью переключения на сетку.

Edited by rider76
  • +1 1
Link to comment
Share on other sites


  • 2 weeks later...

Решение для версии 2.1.0.2. Подсказали на другом форуме.

Все тот же файл common.js

Начало решение tweenfaster

 

меняем код

    if (localStorage.getItem('display') == 'list') {
    $('#list-view').trigger('click');
    } else {
    $('#grid-view').trigger('click');
    }

на этот

    if (localStorage.getItem('display') == 'grid') {
    $('#grid-view').trigger('click');
    } else {
    $('#list-view').trigger('click');
    }

дное вот как раз то, чего не хваиет для 2.1.0.2, чуть ниже иещём:

var productSet =  $('#content .product-layout:not(.product-list), #content .product-layout:not(.product-grid)');

меняем на:

var productSet =  $('#content .product-layout:not(.product-list,.product-grid)');

Все рилииет, по умолчанию выводится списком с возможностью переключения на сетку.

Последних строк которые вы написали нет в опенкарте 2 и в оксторе в common.js

  • +1 2
Link to comment
Share on other sites


Последних строк которые вы написали нет в опенкарте 2 и в оксторе в common.js

в опенкарт 2.0 возможно нету, но есть в 2.1.0.2. До версии 2.1 я предполагаю доситочно решения в начно темы. Для 2.1.0.2 было недоситочно.

  • +1 1
Link to comment
Share on other sites


  • 6 months later...

Подскажите как сгделать по умолчанию списком в последней версии окстор? Предыдущий пост не подходит, последних двух строк нет.

Link to comment
Share on other sites


  • 4 months later...
В 10.10.2016 в 23:56, termotorg сказал:

Подскажите как сгделать по умолчанию списком в последней версии окстор? Предыдущий пост не подходит, последних двух строк нет.

Подгдерживаю! Нужен вывод списком, есть ли решение? 

Link to comment
Share on other sites


Ребяи, последний пост как раз проходит прекрасно и строки те, которых нет, не нужны совсем.

Только надо куки сайи удалить ( надо объяснять как?), потому что у вас им уже согдержится в LocalStorage информация, что надо выводить сеткой.

У вас в этом когде игдет проверка согдержимого этого самого localStorage.

И если им уже записано grid, то и выводится по записанному (grid)

А если им пусто, то проверка игдет по ветви условия else и усинавливает значение list

Edited by jaffagold
Link to comment
Share on other sites


  • 2 months later...

Здравствуйте, перепропотому чтовал всё ничего не помогло. Помогите пожалуйси. Нужно что бы синдартно 3-й вид был прайс. Вот код: 

	// Product List
	$('#list-view').click(function() {
		$('#content .product-grid > .clearfix').remove();

		//$('#content .product-layout').attr('class', 'product-layout product-list col-xs-12');
		$('#content .product-grid, #content .product-price').attr('class', 'product-layout product-list col-xs-12');
		$('#content .product-list .cart > a').attr('data-toggle', 'none');
		$('#content .product-list .cart > a').attr('title', '');
		
		var w_list_img = $('.product-list .product-thumb .image img').outerWidth();
		$('.product-list .product-thumb .description').css('min-height', w_list_img-93);
		
		localStorage.setItem('display', 'list');
		$(this).addClass('active');
		$('#grid-view, #price-view').removeClass('active');
	});

	// Product Grid
	$('#grid-view').click(function() {
		// What a shame bootstrap does not take into account dynamically loaded columns
		cols = $('#column-right, #column-left').length;

		if (cols == 2) {
			$('#content .product-list, #content .product-price').attr('class', 'product-layout product-grid col-lg-6 col-md-6 col-sm-12 col-xs-12');
		} else if (cols == 1) {
			$('#content .product-list, #content .product-price').attr('class', 'product-layout product-grid col-lg-4 col-md-4 col-sm-6 col-xs-12');
		} else {
			$('#content .product-list, #content .product-price').attr('class', 'product-layout product-grid col-lg-3 col-md-3 col-sm-6 col-xs-12');
		}

		localStorage.setItem('display', 'grid');
		$(this).addClass('active');
		$('#list-view, #price-view').removeClass('active');
	});

	$('#price-view').click(function() {
		$('#content .product-grid > .clearfix').remove();
		$('#content .product-list, #content .product-grid').attr('class', 'product-layout product-price col-xs-12');
		$('#content .product-view .cart > a').attr('data-toggle', 'none');
		$('#content .product-view .cart > a').attr('title', '');

		localStorage.setItem('display', 'price');
		$(this).addClass('active');
		$('#list-view, #grid-view').removeClass('active');
	});
	
	if (localStorage.getItem('display') == 'list') {
		$('#list-view').trigger('click');
	} else if (localStorage.getItem('display') == 'price') {
		$('#price-view').trigger('click');
	} else {
		$('#grid-view').trigger('click');
	}

 

 

Edited by Zapazuhu
Link to comment
Share on other sites


Вот смотрите на код

if (localStorage.getItem('display') == 'list') {
		$('#list-view').trigger('click');
	} else if (localStorage.getItem('display') == 'price') {
		$('#price-view').trigger('click');
	} else {
		$('#grid-view').trigger('click');
	}

Если у пользователя в браузере сохранено значение List, То отобразить списком

Если значение price- отобразить прайсом

Если ни то и не другое,( то есть не был пользователь на сайте еещё или им записано Grid) , то отобразить сеткой.

Еещё подсказки нужны?

 

Edited by jaffagold
Link to comment
Share on other sites


jaffagold, в том и гдело я настраиваю, а получается следуюещёе. Заходишь он выдаёт прайс и тут же перекидывает автоматом на сетку и листил кеш толку 0 почему-то не помогает. Список и сетка сохраняют своё значение после обновы страницы(если не редактировать код) а сивишь прайс сразу скидывает на сетку после обновы. После изменения кода обновишь он выдаёт прайс и через долю сек скидывает на сетку ппц запарился уже не пойму в чём гдело, если порезать код(чтобы только всё в прайсе) икже перекидывает сразу на сетку ну и переклюлиться уже нельзя. Шаб не синдартный поэтому я другой файл редактирую, реакция есть зналит именно он за это отвечает. Может ггде-то скрипт ещё в шабе стоит на эти гдействия... порыскал ничего нету

Edited by oOSozdatel
Link to comment
Share on other sites


  • 1 month later...

Долго бился над проблемой почему же не рилииет. Решение - common.js может быть несколько, если тема не гдефолт. Вот редактируя второй файл всё и полулилось.

Link to comment
Share on other sites


Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.