Было бы неплохо сделать конвертер MODX в Fenom. Я начал, но вряд ли смогу доделать
Надо как-то обрабатывать &параметры=значения,: модификаторы и чтобы при этом все работало слаженно, поэтому чувствую лично для меня уйдет на него много времени на то, чтобы учесть все моменты. Если эта тема конвертера тоже интересна, вот моя недоработанная наработка:
fenom.php:
fenom.php:
<?php
header('Content-Type: text/html; charset=utf-8');
$fenom = '';
if (isset($_POST['modx'])) {
function process_params($p) {
$r = preg_replace('/\&([A-Za-z0-9а-яА-ЯёЁ_\-]+)(\r\n\t\s)?\=(\r\n\t\s)?\`(.*?)\`(.*?)/u', '\'\\1\' => \'\\4\',\\5', $p);
return $r;
}
function process_chunk($m) {
$r = '{include \''.$m[1].'\'';
if (isset($m[2])) {
$p = ltrim($m[2]);
if (isset($p[0]) && $p[0] == '?')
$r .= ' : ['.process_params(substr($p[0], 1)).']';
}
return $r.'}';
}
function process_snippet($m) {
if (empty($m) || !isset($m[1])) return false;
$r = '{\''.$m[1].'\' | snippet';
if (isset($m[2])) {
$p = ltrim($m[2]);
if (isset($p[0]) && $p[0] == '?')
$r .= ' : ['.process_params(substr($p[0], 1)).']';
}
return $r.'}';
}
function process_tv($m) {
return false;
}
function process_link($m) {
return false;
}
function process_lang($m) {
return false;
}
function process_setting($m) {
return false;
}
function process_placeholder($m) {
return false;
}
function convert($matches) {
$m = $matches[1];
$r = null;
if ($m[0] == '-')
return '{*'.substr($m, 1).'*}';
if ($m[0] == '+') {
if ($m[1] == '+') $r = preg_replace_callback('/^([a-zA-Zа-яА-ЯёЁ0-9_\-\.]+)(.*?)/u', 'process_setting', substr($m, 2));
else $r = preg_replace_callback('/^([a-zA-Zа-яА-ЯёЁ0-9_\-\.]+)(.*?)/u', 'process_placeholder', substr($m, 1));
}
else if ($m[0] == '*') {
$r = preg_replace_callback('/^([a-zA-Zа-яА-ЯёЁ0-9_\-\.]+)(.*?)/u', 'process_tv', substr($m, 1));
}
else if ($m[0] == '%') {
$r = preg_replace_callback('/^([a-zA-Zа-яА-ЯёЁ0-9_\-\.]+)(.*?)/u', 'process_lang', substr($m, 1));
}
else if ($m[0] == '~') {
$r = preg_replace_callback('/^([a-zA-Zа-яА-ЯёЁ0-9_\-\.]+)(.*?)/u', 'process_link', substr($m, 1));
}
else if ($m[0] == '$') {
$r = preg_replace_callback('/^([a-zA-Zа-яА-ЯёЁ0-9_\-\.]+)(.*?)/u', 'process_chunk', substr($m, 1));
}
else {
$snippet = preg_replace_callback('/^(\!?[a-zA-Zа-яА-ЯёЁ0-9_\-\.]+)(.*?)/u', 'process_snippet', $m);
if ($snippet) $r = $snippet;
}
return $r ? $r : ($m ? '[['.$m.']]' : $matches[0]);
}
$fenom = preg_replace_callback('/\[\[(.*?)\]\]/u', 'convert', $_POST['modx']);
}
?><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>MODX to Fenom</title>
<meta name="robots" content="noindex, nofollow">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="padding: 20px; margin: 0; font: 12px/normal 'SFMono-Regular','Menlo','Consolas','Liberation Mono','Courier New',monospace;">
<style>
textarea { width: 100%; height: 500px; font: inherit; }
</style>
<form action="" method="post">
<textarea name="modx"><?php if (isset($_POST['modx'])) echo $_POST['modx']; else echo '
[[$asd?
¶m=`val`
¶m=`val`
]]
[[+placeholder]]
[[*template:is=`3`:then=`a`:else=`b`]]
[[- comment ]]
'; ?></textarea>
<button type="submit">Конвертировать</button>
</form>
<?php
if (isset($_POST['modx'])) echo '
<hr>
<textarea>' . $fenom . '</textarea>';
?>
</body>
</html>
Комментарии: 40
Хотя сейчас пришла мысль, как сделать подход полегче:
1. Заменяем сначала чисто все &параметры=…
2. Потом заменяем названия сниппетов, чанков и т.д. на Fenom'овские
3. Заменяем все ]] на }
А вот с условиями надо пока подумать… О них бы просто сообщать (например номер строки), а дальше они бы уже вручную менялись. Так как их автоматизация не так уж целесообразна. Если нет условных модификаторов, то обрабатываем. Если есть условные модификаторы — пишем об этом в результате конвертации
1. Заменяем сначала чисто все &параметры=…
2. Потом заменяем названия сниппетов, чанков и т.д. на Fenom'овские
3. Заменяем все ]] на }
А вот с условиями надо пока подумать… О них бы просто сообщать (например номер строки), а дальше они бы уже вручную менялись. Так как их автоматизация не так уж целесообразна. Если нет условных модификаторов, то обрабатываем. Если есть условные модификаторы — пишем об этом в результате конвертации
Это нереально и бессмысленно. Если только в качестве сервиса — ввёл тег MODX, получил варианты на Fenom. Потом вставил куда надо.
Именно как сервис было бы здорово, наподобие webstool.ru/generator-migx.html
На скорую руку накидал свой вариант m2f.zencod.ru/
Если у кого то есть предложения по более лучшему варианту, велком с пуллреквестом))) github.com/alexsoin/modx2fenom
Если у кого то есть предложения по более лучшему варианту, велком с пуллреквестом))) github.com/alexsoin/modx2fenom
Круто! Единственное, он преобразует только сниппеты
Выводится сниппет если не понять что за тег, а так пока переводит чанки, сниппеты, системные значения. Доработать даный конвертер не трудно, но не хотелось бы тратить время на сервис, который никому не нужен. Хотелось бы услышать, нужен ли он кому-то (например лайк/дизлайк вот этого моего коммента, или в гитхабе плюсами). Если нужно, выделю время на доработки.
Мне часто приходится делать подобную работу, когда достается старый сайт, обычно почти всегда при его обновлении я перехожу на Fenom. Так что с меня плюсик)
Однозначно будет в закладках, просто не так часто будет он нужен
Вот сюда бы еще добавить доку по феному (ссылкой на гит как вариант) и шпаргалку по самым часто исп вещам.
И если можно, цвет фона менее душераздирающий. )
Могу поверстать если требуется помощь.
И если можно, цвет фона менее душераздирающий. )
Могу поверстать если требуется помощь.
Как мне кажется, переполнять моносервис множеством доп функционала не очень хорошая идея, тем кому данный сервис нужен и так знают, где доки находятся, а ссылку на доку я добавил пока только при наличии в теге модификаторов и набором свойств.
Чем так цвет фона душу раздерает?) Мне в дизайне всё нравится))
Чем так цвет фона душу раздерает?) Мне в дизайне всё нравится))
Идея была, чтоб при необходимости можно было новичкам в чате ссыль давать.)
Сразу в одном месте, все по теме)
Про цвет, это так))
Сразу в одном месте, все по теме)
Про цвет, это так))
Уже лучше, супер! Нужны маленькие доработочки:
Иногда нужны пустые параметры, они вырезаются:
Ссылки вида [[~123]] не конвертируются.
Параметры сниппетов и чанков Fenom было бы лучше конвертировать с одинарными кавычками ' вместо двойных ".
Параметры [[+modx_setting]] должны преобразовываться в {'modx_setting' | option}.
Плейсхолдеры надо не {'pholder' | placeholder}, а просто {$pholder}, но если в его имени есть точки, то {$_pls['pholder']}.
Также было бы круто, чтобы можно было вставлять целый HTML-шаблон с тегами MODX и чтобы конвертировались только они, а не вставлять каждое по отдельности
Если есть: конструкции=`условий`, то просто писать о их наличии (и номерах строк), но не блокировать все конвертирование.
Иногда нужны пустые параметры, они вырезаются:
Ссылки вида [[~123]] не конвертируются.
Параметры сниппетов и чанков Fenom было бы лучше конвертировать с одинарными кавычками ' вместо двойных ".
Параметры [[+modx_setting]] должны преобразовываться в {'modx_setting' | option}.
Плейсхолдеры надо не {'pholder' | placeholder}, а просто {$pholder}, но если в его имени есть точки, то {$_pls['pholder']}.
Также было бы круто, чтобы можно было вставлять целый HTML-шаблон с тегами MODX и чтобы конвертировались только они, а не вставлять каждое по отдельности
Если есть: конструкции=`условий`, то просто писать о их наличии (и номерах строк), но не блокировать все конвертирование.
Ссылки вида [[~123]] не конвертируются.а что же с ними происходит?)) [[~123]] -> {'123' | url}
Параметры [[+modx_setting]] должны преобразовываться в {'modx_setting' | option}.[[+modx_setting]] — плейсхолдер, с чего вдруг он должен стать опцией? если имелось ввиду [[++modx_setting]] то он преобразуется в {'modx_setting' | config}
Плейсхолдеры надо не {'pholder' | placeholder}, а просто {$pholder}, но если в его имени есть точки, то {$_pls['pholder']}.В любом случае, сказать точно что понадобится из вариантов вывода плейсхолдеров не получится, это надо уже самому смотреть и по ситуации применять один из выводов.
Также было бы круто, чтобы можно было вставлять целый HTML-шаблон с тегами MODXТочно нет, не хватало потом выслушивать жалобы, что закинули в конвертер шаблон, а потом сайт не работает, надо смотреть, что именно правишь на сайте, а не бездумно пихать весь шаблон страницы и смотреть что получится.
Если есть: конструкции=`условий`, то просто писать о их наличии (и номерах строк), но не блокировать все конвертирование.Если имеется ввиду модификаторы, то повторяюсь, тотже :default уже не имеет смысла использовать в fenom заместо него надо использовать {if ...}.
Параметры сниппетов и чанков Fenom было бы лучше конвертировать с одинарными кавычками ' вместо двойных ".Какой практический смысл в этом? Я пользуюсь всегда двойными кавычками.
Есть же метод parsePropertyString — он как раз составит массив из MODX-синтаксиса. То есть что-то типа такого
Там же можно подсмотреть, как MODX определяет тип элемента — в методе processTag
<?php
$parser = $modx->getParser();
$html = '[[!pdoResources?
&parents=`1`
&depth=`0`
&tpl=`ListRowTpl`
&tplWrapper=`@INLINE [[+output]]`
&includeTVs=`image`
]]';
$properties = $parser->parsePropertyString($html);
Там же можно подсмотреть, как MODX определяет тип элемента — в методе processTag
Думаю, это бессмыслено конвертировать одно в другое, тем более код!
По мне удобнее работать с родным парсером из коробки!
По мне удобнее работать с родным парсером из коробки!
Он не на всех сайтах применим. На простых — да. А что-то более менее гибкое уже не разработаешь. Или когда стоит (особенно ребром) вопрос скорости сайта
Fenom, даже если и влияет на скорость сайта, то совсем не в положительную сторону. Вот сам pdoTools да. Там много чего оптимизировано по сравнению с кодом MODX.
По-моему, просто достаточно примера как перевести теги чанка, сниппета и плейсхолдера из MODX формата в Fenom. Что-то типа cheat sheet. Ибо данный вариант сервиса способен переводить только простые конструкции.
У Fenom больше возможностей. Например, в параметрах можно указать число, массив, сделать конкатенацию. Также различные управляющие конструкции. Этого нет в MODX синтаксисе.
А банальный перевод тега на Fenom (просто чтоб было) ничего не даёт. Даже хуже — MODX теги работают лучше и меньше нагружают парсер.
У Fenom больше возможностей. Например, в параметрах можно указать число, массив, сделать конкатенацию. Также различные управляющие конструкции. Этого нет в MODX синтаксисе.
А банальный перевод тега на Fenom (просто чтоб было) ничего не даёт. Даже хуже — MODX теги работают лучше и меньше нагружают парсер.
Ну тут он будет полезен новичкам, или если нашёл где то решение в интернете или в документации, а там родной синтаксис, быстро его перевёл.
У Fenom больше возможностей. Например, в параметрах можно указать число, массив, сделать конкатенацию. Также различные управляющие конструкции. Этого нет в MODX синтаксисе.Ну тут всё таки односторонний конвертер из стандартного в феном, так что это не проблема
Ну тут он будет полезен новичкам, или если нашёл где то решение в интернете или в документации, а там родной синтаксис, быстро его перевёл.Хотел бы я посмотреть на такого новичка. Уверен, такого не найдётся.
Ещё раз повторю — феном имеет смысл использовать только ради его функциональных возможностей. Простая смена синтаксиса вызовов чанка или сниппета не только лишние затраты по времени, но и негативно сказывается на производительности сайта.
Где то была статья и там сравнивали работу смешанного режима и чистого фенома, и вроде как был вывод что лучше писать всё на феноме. С тех пор стараюсь так и делать. Это бессмысленно? Я как то не интересовался больше
Я сравнивал главную страницу простого сайта.
На чистом модикс и чистом феном.
В быстродействии, тем более из Кеша победил парсер модикса.
Перевес не значительный, но есть.
На чистом модикс и чистом феном.
В быстродействии, тем более из Кеша победил парсер модикса.
Перевес не значительный, но есть.
а смешанный? и то и то если использовать? Как тут выше писали феном для сложных условий для шаблонов и файловых чанков, а для вызова полей или ещё чего простого стандартный парсер.
Проблема смешанного в том, что очень хорошо нужно понимать что делаешь, потому что при передачах плейсов, переменных начинаются проблемы того что переменная ещё не запарсена модиксом, например или наоборот.
Дело в том что при запуске фенома тратятся ресурсы на срабатывание фенома и смешанный режим будет примерно как феномовских ну и + сюрпризы Кеша и доступности плейсов.
Ну и парсеры работают по очереди. Сначала один потом второй ( не помню в какой последовательности) Сергей Шлоков писал об этом по-моему.
Дело в том что при запуске фенома тратятся ресурсы на срабатывание фенома и смешанный режим будет примерно как феномовских ну и + сюрпризы Кеша и доступности плейсов.
Ну и парсеры работают по очереди. Сначала один потом второй ( не помню в какой последовательности) Сергей Шлоков писал об этом по-моему.
Смешанный режим — это зло. Даже опытные разработчики путают последовательность при работе в этом режиме. Сначала работает феном, потом стандартный.
Плейсы в микс-режиме это проблема, да.
Срабатывают только при первой загрузке страницы, а потом пропадают…
Срабатывают только при первой загрузке страницы, а потом пропадают…
Вроде была статья. Но в ней как раз и писали, что феном не даёт прирост скорости. В документации есть тест по pdoTools. Вот он даёт. А феном — это лишняя нагрузка. Он не заменяет стандартный шаьлонизатор, а дополняет. Т.е. работают 2 шаблонизатора. Кроме того, кэшируемые теги MODX, написанные на феном, MODX переводит в свой формат (дополнительная нагрузка). Чтобы было понятно — кэшируемый тег MODX на странице превращается в результат и при следующем запросе страницы уже не вызывается (он распарсен). А феном тег остаётся и MODX должен дополнительно его обработать, перевести в MODX формат и проверить кэш.
Ну и плюс ещё разные неувязки. Я уже много раз о них писал.
Ну и плюс ещё разные неувязки. Я уже много раз о них писал.
Ну в итоге то что? Что лучше? Совсем плохо если используешь где то стандартный парсер? Ведь сейчас писать шаблон без фенома даже и мыслей нет. Сайт до 500 страниц не ощутит этот смешанный режим? У меня вот сейчасс не получается на феноме вывести [[!+ss_meta]] из дополнения Seo Suite, и он у меня один в шаблоне. Из за этого одного тега я ведь ничего особо не теряю?
У меня вот сейчасс не получается на феноме вывести [[!+ss_meta]] из дополнения Seo Suite
{'ss_meta' | placeholder}
Варианты с $_pls $_modx->getPlace… Пробовали?
точно ко мне вопрос?)))
блин. промазал по кнопке… перепутал цитату с сообщением — плохо видно было.
Да, это вопрос к Михаилу.
Простите. )
Да, это вопрос к Михаилу.
Простите. )
Спасибо, так помогло. Пробывал до этого через m2f.zencod.ru/ не вышло. Сейчас нормально. Кстати есть ли возможность проверить используется ли на странице где то стандартный парсер?
Кстати есть ли возможность проверить используется ли на странице где то стандартный парсер?Он используется всегда.
В принципе у меня начало получаться новым путем делать мой конвертер. Еще предстоят работы, но вот это уже неплохо так действует:
$r = $_POST['modx'];
//$r = mb_convert_encoding($_POST['modx'], 'utf-8', mb_detect_encoding($r));
// [[- Комментарий ]]
$r = mb_ereg_replace('\[\[\-(.*?)\]\]', '{*\1*}', $r);
// [[~URL]]
$r = mb_ereg_replace('\[\[\~([0-9]+)\]\]', '{\1 | url}', $r);
// [[++системная_настройка]]
$r = mb_ereg_replace('\[\[\+\+([a-zA-Z0-9\._]+)\]\]', '{\'\1\' | option}', $r);
// [[+плейс.холдер]]
$r = mb_ereg_replace('\[\[(\!)?\+([a-zA-Z0-9\._]+\.[a-zA-Z0-9\._]+)\]\]', '{$_pls[\'\2\']}', $r);
// [[+плейсхолдер]]
$r = mb_ereg_replace('\[\[(\!)?\+([a-zA-Z0-9\._]+)\]\]', '{$\2}', $r);
// [[$чанк]]
$r = mb_ereg_replace('\[\[\$([a-zA-Z0-9\._]+)\]\]', '{include \'\1\'}', $r);
$r = mb_ereg_replace('\[\[\$([a-zA-Z0-9\._]+)\?', '{\'\1\' | chunk : [', $r);
// &параметр=`значение`
$r = mb_ereg_replace('\&([a-zA-Z0-9\._]+)=`?([^\[\]\&]+)`', '\'\1\' => \'\2\',', $r);
$r = str_replace('=> \'`\'', '=> \'\'', $r);
$r = mb_ereg_replace('\',([\r\n\s\t]+)?\]\]', '\'\1]}', $r);
$r = mb_ereg_replace('\=\> \'(.*?)\'\]\}', '=> \'\1\' ]}', $r);
$r = str_replace('&', '&', $r);
Блин, из-за вставленного кода в данный топик в самом его начале (в первом посте), не могу изменить этот пост… Верстка modx.pro едет.
Вставлю сюда обновленный код:
fenom.php:
Вместо странного символа должен быть знак & (амперсанда)
Вставлю сюда обновленный код:
fenom.php:
<?php
header('Content-type: text/html; charset=utf-8');
$r = '';
if (isset($_POST['modx'])) {
/*function process_params($p) {
$r = preg_replace('/\&([A-Za-z0-9а-яА-ЯёЁ_\-]+)(\r\n\t\s)?\=(\r\n\t\s)?\`(.*?)\`(.*?)/u', '\'\\1\' => \'\\4\',\\5', $p);
return $r;
}
function process_chunk($m) {
$r = '{include \''.$m[1].'\'';
if (isset($m[2])) {
$p = ltrim($m[2]);
if (isset($p[0]) && $p[0] == '?')
$r .= ' : ['.process_params(substr($p[0], 1)).']';
}
return $r.'}';
}
function process_snippet($m) {
if (empty($m) || !isset($m[1])) return false;
$r = '{\''.$m[1].'\' | snippet';
if (isset($m[2])) {
$p = ltrim($m[2]);
if (isset($p[0]) && $p[0] == '?')
$r .= ' : ['.process_params(substr($p[0], 1)).']';
}
return $r.'}';
}
function process_tv($m) {
return false;
}
function process_link($m) {
return false;
}
function process_lang($m) {
return false;
}
function process_setting($m) {
return false;
}
function process_placeholder($m) {
return false;
}
function convert($matches) {
$m = $matches[1];
$r = null;
if ($m[0] == '-')
return '{*'.substr($m, 1).'*}';
$r = preg_replace('/\&([a-zA-Zа-яА-ЯёЁ0-9_\-\.]+)(.*?)\=(.*?)\`(.*?)\`/u', '\'\1\'\2 => \3\'\4\',', $m);
if ($m[0] == '+') {
if ($m[1] == '+') $r = preg_replace_callback('/^([a-zA-Zа-яА-ЯёЁ0-9_\-\.]+)(.*?)/u', 'process_setting', substr($m, 2));
else $r = preg_replace_callback('/^([a-zA-Zа-яА-ЯёЁ0-9_\-\.]+)(.*?)/u', 'process_placeholder', substr($m, 1));
}
else if ($m[0] == '*') {
$r = preg_replace_callback('/^([a-zA-Zа-яА-ЯёЁ0-9_\-\.]+)(.*?)/u', 'process_tv', substr($m, 1));
}
else if ($m[0] == '%') {
$r = preg_replace_callback('/^([a-zA-Zа-яА-ЯёЁ0-9_\-\.]+)(.*?)/u', 'process_lang', substr($m, 1));
}
else if ($m[0] == '~') {
$r = preg_replace_callback('/^([a-zA-Zа-яА-ЯёЁ0-9_\-\.]+)(.*?)/u', 'process_link', substr($m, 1));
}
else if ($m[0] == '$') {
$r = preg_replace_callback('/^([a-zA-Zа-яА-ЯёЁ0-9_\-\.]+)(.*?)/u', 'process_chunk', substr($m, 1));
}
else {
$snippet = preg_replace_callback('/^(\!?[a-zA-Zа-яА-ЯёЁ0-9_\-\.]+)(.*?)/u', 'process_snippet', $m);
if ($snippet) $r = $snippet;
}
return $r ? $r : ($m ? '[['.$m.']]' : $matches[0]);
}
$r = preg_replace_callback('/\[\[(.*?)\]\]/u', 'convert', $_POST['modx']);*/
$r = $_POST['modx'];
//$r = mb_convert_encoding($_POST['modx'], 'utf-8', mb_detect_encoding($r));
// [[- Комментарий ]]
$r = mb_ereg_replace('\[\[\-(.*?)\]\]', '{*\1*}', $r);
// [[~URL]]
$r = mb_ereg_replace('\[\[\~([0-9]+)\]\]', '{\1 | url}', $r);
// [[%язык]]
$r = mb_ereg_replace('\[\[\%([a-zA-Z0-9\._]+)\]\]', '{$_modx->lexicon(\'\1\')}', $r);
// [[++системная_настройка]]
$r = mb_ereg_replace('\[\[\+\+([a-zA-Z0-9\._]+)\]\]', '{\'\1\' | option}', $r);
// [[+плейс.холдер]]
$r = mb_ereg_replace('\[\[(\!)?\+([a-zA-Z0-9\._]+\.[a-zA-Z0-9\._]+)\]\]', '{$_pls[\'\2\']}', $r);
// [[+плейсхолдер]]
$r = mb_ereg_replace('\[\[(\!)?\+([a-zA-Z0-9\._]+)\]\]', '{$\2}', $r);
// [[*поле_ресурса]]
$r = mb_ereg_replace('\[\[\*([a-zA-Z0-9\._]+)\]\]', '{$_modx->resource.\1}', $r);
// [[$чанк]]
$r = mb_ereg_replace('\[\[\$([a-zA-Z0-9\._]+)\]\]', '{include \'\1\'}', $r);
$r = mb_ereg_replace('\[\[\$([a-zA-Z0-9\._]+)\?', '{\'\1\' | chunk : [', $r);
// [[сниппет]]
$r = mb_ereg_replace('\[\[(\!)?([a-zA-Z0-9\._]+)\]\]', '{\'\1\2\' | snippet}', $r);
$r = mb_ereg_replace('\[\[(\!)?([a-zA-Z0-9\._]+)\?', '{\'\1\2\' | snippet : [', $r);
// &параметр=`значение`
$r = mb_ereg_replace('\&([a-zA-Z0-9\._]+)=`?([^\[\]\&]+)`', '\'\1\' => \'\2\',', $r);
$r = str_replace('=> \'`\'', '=> \'\'', $r);
$r = mb_ereg_replace('\',([\r\n\s\t]+)?\]\]', '\' \1]}', $r);
//$r = mb_ereg_replace('\=\> \'(.*?)\'\]\}', '=> \'\1\' ]}', $r);
$r = str_replace('&', '&', $r);
}
?><!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>MODX to Fenom</title>
<meta name="robots" content="noindex, nofollow">
</head>
<body style="padding: 20px; margin: 0; font: 12px/normal 'SFMono-Regular','Menlo','Consolas','Liberation Mono','Courier New',monospace;">
<style>
textarea { width: 100%; height: 500px; font: inherit; }
</style>
<form action="" method="post">
<textarea name="modx"><?php echo ''; echo str_replace('&', '&', isset($_POST['modx']) ? $_POST['modx'] :
'[[$chunk_name]]
[[$asd? ¶m=`value`]]
[[$asd?
¶m=`Hello`
&a_s_d=`ыфавыавыа`
]]
[[!+ph]]
[[!+place.holder]]
[[*parent]]
[[*template:is=`3`:then=`a`:else=`b`]]
[[- comment ]]
[[!uncached]]
[[cached]]
[[phpcode? ¶m=`Значение`]]
[[!snipp?
¶m=`Привет`
&PARAM=`Здравствуй`
]]
[[~123]]
[[%lang_var]]'); ?></textarea>
<button type="submit">Конвертировать</button>
</form>
<?php
if ($r) echo '
<hr>
<textarea>' . $r . '</textarea>';
?>
</body>
</html>
Вместо странного символа должен быть знак & (амперсанда)
Добрый день.
Ресурс однозначно в закладки кучу времени экономит. Подскажите а от обратного как перевести синтаксис Fenom на Modx, как синтаксисом Modx записать
Ресурс однозначно в закладки кучу времени экономит. Подскажите а от обратного как перевести синтаксис Fenom на Modx, как синтаксисом Modx записать
{$total.cost}
и {$total.count}
В данном случае достаточно просто:
[[+total.cost]] и [[+total.count]]
Спасибо, если у кого-то дойдут руки доделать ресурс перевода синтаксиса в обратном порядке было бы здорово. В сети много примеров всяких вкусностей для сайта с использованием Fenom, а на ресурсах запущенных при царе горохе, теги Modx очень актуальны, пока не найдешь времени функционал сайта перевести под Fenom, чтобы он не поплыл.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.