переписать путь к файлу стилей

Добрый день. только начал изучать modx. стоит задача по клике на кнопку менять подключаемые файлы стилей. просто используя php я это сделал. но как это сделать в modx не понимаю.
это нативный php

$css = 'style.css';
$css2 = 'style2.css';

$filename = 'index.php';
$file = file_get_contents($filename);
$title_pattern = $css;
$test = preg_replace("~$title_pattern~", $css2, $file);
file_put_contents($filename, $test);

header('Location: index.php');

а это уже код внутри modx

кнопка на странице, где 124 это номер сниппета



а это сам сниппет

<?php

function getStyle() {

$css = '[[$styles]]'; // чанк исходного файла css
$css2 = '[[$styles2]]'; //чанк файла на который надо поменять

$filename = [[$head]]; //чанк — место где происходит замена css файлов
$file = file_get_contents($filename);
$title_pattern = $css;
$test = preg_replace("~$title_pattern~", $css2, $file);
return file_put_contents($filename, $test);

}
Руслан
07 апреля 2021, 15:30
modx.pro
85
0

Комментарии: 7

Артур
07 апреля 2021, 20:08
0
Клик по кнопке происходит явно не в php, следовательно нужно как-то уведомить сервер о том, что клик состоялся, обычно используют ajax запросы, у тебя он где? На сервере нужен скрипт который запрос примет и обработает, у тебя он где? Я вижу только сниппет который возвращает какой-то файл, точнее путь к нему, по клику на кнопку он работать точно не будет.
    Руслан
    07 апреля 2021, 21:05
    0
    клик происходит в хтмл файле, где в action указан сниппет "[[~post]]". так не будет в modx работать?
      Артур
      07 апреля 2021, 21:28
      0
      А сниппет у тебя где лежит?
      Руслан
      07 апреля 2021, 21:37
      0
      в сниппетах
        Артур
        07 апреля 2021, 21:44
        0
        В MODX сниппеты, которые в левом меню на вкладке Элементы, хранятся в БД. Чтобы всё заработало, как я и говорил, нужен файл который будет принимать ajax ( это более правильный вариант) или сниппет, который будет ловить все ajax'ы
        Руслан
        07 апреля 2021, 21:48
        0
        а файл делать в Filesystem? и без аякса никак не обойтись?
          Артур
          07 апреля 2021, 21:48
          0
          Вот пример сниппета для приема ajax
          <?php
          // Откликаться будет ТОЛЬКО на ajax запросы методом POST
          if($_SERVER['REQUEST_METHOD'] != 'POST' ) {return;}
          
          // Сниппет будет обрабатывать не один вид запросов, поэтому работать будем по запрашиваемому действию
          // Если в массиве POST нет действия - выход
          if (empty($_POST['action'])) {return;}
          
          // А если есть - работаем
          $res = '';
          $action = $_POST['action'];
          switch ($action) {
              case 'search':
          	    $res = $modx->runSnippet('searchResources');
              break;
          	
          	// А вот сюда потом добавлять новые методы prodFastView
          }
          
          // Если у нас есть, что отдать на запрос - отдаем и прерываем работу парсера MODX
          if (!empty($res)) {
          	die($res);
          }
          Вызывать некешированным в самом верху страницы
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            7