r45her
@r45her
HTML-верстальщик / Frontend разработчик

Как сделать на MODX счётчик, общий для всех пользователей, увеличивающийся по клику на кнопку?

На сайте есть страница с тестом. Она состоит из 3-х секций.
В первой отображается сколько раз тест уже был пройден.
Во второй собственно сам тест с вопросами.
В третьей результаты теста.
Мне нужно, чтобы при переходе со второй секции в третью (этот переход происходит при клике на кнопку "Показать результаты") значение счётчика увеличивалось на 1.

Собственно вопрос. Где лучше хранить это значение? И как его увеличивать?
Я сейчас тупо скопировал шаблон, создал пользовательское поле типа "Число" и привязал его к новому шаблону. Задал странице с тестом этот шаблон. Число вывел, всё ок. Но как его увеличивать? Или может вообще лучше как-то по-другому сделать?

upd. Переходы между секциями происходят без перезагрузки страницы и без AJAX.

upd2. В общем делюсь одним из решений. Не знаю насколько оно правильное или убогое, но оно работает. Буду ждать комментариев.

В папке assets создал два файла:
counter.txt
counter.php

В txt хранится текущее значение счётчика.
В php код, который увеличивает значение на 1. Вот сам код:

<?php

$cnt = file_get_contents('counter.txt');
$cnt++;

$file = fopen('counter.txt', 'w');
$write = fwrite($file, $cnt);
fclose($file);


В файле script.js добавляю два куска кода.
Первый делает AJAX запрос к txt файлу, забирает его содержимое и добавляет на страницу:

$.ajax({
	url: "/assets/counter.txt",
	dataType: "text",
	async: true,
	success: function(response) {
		$('.counterWrap').text(response);
	}
});


Второй по клику просто обращается к php файлу, не передавая никаких данных:

$('.btn').one('click', function() {

	$.ajax({
		url: '/assets/counter.php',
		type: 'POST',
		data: ''
	})
});
  • Вопрос задан
  • 137 просмотров
Пригласить эксперта
Ответы на вопрос 1
ig0r74
@ig0r74
MODX-разработчик
Вместо текстового файла используй системную настройку. Вместо php-файла - сниппет, его вызови на специально созданной странице с пустым шаблоном. И уже к этой странице обращайся по Ajax.

Пример:
$Setting = $modx->getObject('modSystemSetting', 'site_name');
$Setting->set('value', 'My New Site Name');
$Setting->save();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы