переписать путь к файлу стилей
Добрый день. только начал изучать 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);
}
это нативный 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);
}
Комментарии: 7
Клик по кнопке происходит явно не в php, следовательно нужно как-то уведомить сервер о том, что клик состоялся, обычно используют ajax запросы, у тебя он где? На сервере нужен скрипт который запрос примет и обработает, у тебя он где? Я вижу только сниппет который возвращает какой-то файл, точнее путь к нему, по клику на кнопку он работать точно не будет.
клик происходит в хтмл файле, где в action указан сниппет "[[~post]]". так не будет в modx работать?
А сниппет у тебя где лежит?
в сниппетах
В MODX сниппеты, которые в левом меню на вкладке Элементы, хранятся в БД. Чтобы всё заработало, как я и говорил, нужен файл который будет принимать ajax ( это более правильный вариант) или сниппет, который будет ловить все ajax'ы
а файл делать в Filesystem? и без аякса никак не обойтись?
Вот пример сниппета для приема 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);
}
Вызывать некешированным в самом верху страницы
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.