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

Добрый день. только начал изучать 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
522
0

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

Артур Шевченко
07 апреля 2021, 20:08
0
Клик по кнопке происходит явно не в php, следовательно нужно как-то уведомить сервер о том, что клик состоялся, обычно используют ajax запросы, у тебя он где? На сервере нужен скрипт который запрос примет и обработает, у тебя он где? Я вижу только сниппет который возвращает какой-то файл, точнее путь к нему, по клику на кнопку он работать точно не будет.
    Руслан
    07 апреля 2021, 21:05
    0
    клик происходит в хтмл файле, где в action указан сниппет "[[~post]]". так не будет в modx работать?
    Руслан
    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