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

Почему не работает изменение системной настройки не из-под админа?

У меня есть системная настройка (число). Мне нужно, чтобы на сайте при клике на кнопку это число увеличивалось на 1. Я создал сниппет с таким содержанием:

<?php
$settingName = 'quiz_counter';
$currentCount = $modx->getOption($settingName);
$currentCount++;
	
$response = $modx->runProcessor(
	'system/settings/update',
	array(
		'key' => $settingName,
		'value' => $currentCount,
		'namespace' => 'core'
	)
);
	
$modx->reloadConfig();


Создал страницу с пустым шаблоном и вызвал на ней сниппет:

[[!quizCounter]]

И повесил обработчик на клик по кнопке. По клику происходит AJAX запрос к этой странице:

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

	$.ajax({
		url: '/system/quiz-counter-increment/',
		data: ''
	})
});


У меня всё работает, но только из-под админа. В режиме инкогнито или просто в разлогиненном состоянии не работает. Почему? Удалял полностью содержимое папки core/cache, нажимал Ctrl + F5 - не помогает.
  • Вопрос задан
  • 104 просмотра
Решения вопроса 1
alelunegov
@alelunegov
Фрилансер. Разработка сайтов на MODX, верстка
Добрый день!
Попробуйте мой сниппет. Получаем и меняем системную настройку как объект MODX.
$settingName = 'quiz_counter';
$currentCountArray = $modx->getObject('modSystemSetting', $settingName);
$currentCount = $currentCountArray->get('value');
$currentCount++;
$currentCountArray->set('value', $currentCount);
$currentCountArray->set('editedon', date("Y-m-d H:i:s"));  // Не обязательно, но коли есть такое поле, почему не использовать?
$currentCountArray->save();
$cacheRefreshOptions =  array( 'system_settings' => array() );
$modx->cacheManager-> refresh($cacheRefreshOptions);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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