Arahort

Arahort

С нами с 12 января 2019; Место в рейтинге пользователей: #385
10 апреля 2020, 11:29
0
Здравствуйте, стоит задача дать возможность вносить в админке цены в рубля\долларах\евро и на сайте везде выводить в рублях, установил на modhost тестовую версию, не с первого раза но всё таки обновились курсы валют, ввожу цену в долларах, в поле price как и должно быть появляется цена в рублях по курсу. Но я так понял при смене курса цены не меняются? Вручную изменил курс — цены остались те же?
01 сентября 2019, 21:12
+1
Закинул символическую сумму дабы просто поддержать развитие Modx компонентов
15 августа 2019, 14:21
+2
Теперь ссылка в меню отправляет на очень активный телеграм-канал @ru_modx, можно писать вопросы там.
Зашёл, много умных людей, ничего не понятно, но весело!))
01 июля 2019, 09:37
+1
Помогло, спасибо!
27 мая 2019, 15:03
0
Спасибо! Это вроде то что нужно…
15 января 2019, 09:44
0
Спасибо, развернул jevix на локальной копии для теста. Изначально просто хотелось фильтровать контент только внутри тегов pre\code, т.к иногда бывает полезно использовать теги Modx внутри текста (те же ссылки через id например) + когда переносил старый сайт на Modx и читал различные материалы — люди иногда сталкивались с проблемами из-за Jevix, да и как правило стараюсь не использовать большие плагины\библиотеки для решения маленьких простых задач в целях оптимизации)
Заметил уже пару недочётов в своем скрипте, поробую допилить возможно в будущем.
Сейчас как временное решение поставил
[[*content:replace=`[==[`:replace=`]==]`]]
К сожалению :tag и :esc отказываются работать на сниппетах
15 января 2019, 07:29
0
Опять я)) Вернулся к этой проблеме, переписал ещё раз скрипт (уверен что в глазах тех, кто нормально знает php он выглядит ужасно, но сильно не пинайте =) ) в консоли от отрабатывает нормально, но на странице после применения плагина результатов нету, в консоли я вместо
$id = $modx->resource->get('id');
Подставляю сразу числовое значение, а эту строку комментирую, в чем проблема? У меня предположение что либо я неправильно получаю id ресурса или же как то неправильно сохраняю.
Скрипт
<?php
/*Функция поиска кода по регулярному выражению*/
function CodeScreening($res){
	$pattern = "/<pre(.*?)>(.*?)<code(.*?)>(.*?)<\/code>(.*?)<\/pre>/s";
	preg_match_all($pattern, $res, $matches);
	foreach ($matches as $keyCodes){
	    return $keyCodes;
    }
}
/*Получаем id страницы*/
$id = $modx->resource->get('id');
/*Получаем страницу по её id*/
$res = $modx->getObject('modResource',$id);
/*Получаем контент страницы*/
$res = $res->get('content');
/*Ищем код в контенте страницы*/
$codes = CodeScreening($res);
$codes = (isset($codes)) ? $codes : array();
/*Функция замены символов*/
function CodeScreeningResult($codes){
    $codeScrArr = [];
    foreach ($codes as &$code){
        $codeScr = $code;
        $codeScr = htmlentities($codeScr);
        $codeScr = str_replace("[", '&#91;', $codeScr);
        $codeScr = str_replace("]", '&#93;', $codeScr);
        $codeScrArr[] = $codeScr;
    }
    return $codeScrArr;
}
/*Получаем результат замены символов*/
$codeScrResult = CodeScreeningResult($codes);
/*Меняем в тексте старый код на новый*/
$resResult = str_replace($codes, $codeScrResult, $res);
/*Отсылаем изменённый текст обратно в контент*/
$resSend = $modx->getObject('modResource',$id);
$resSend->set('content', $resResult);
$resSend->save();
Событие OnWebPagePrerender
13 января 2019, 17:51
0
В PHP не силён, но поставил Consloe и набросал свой код, операясь на пример Михаила, вот что получилось
<?php
function CodeScreening($res){
	$pattern = "/<pre><code(.*?)>(.*?)<\/code><\/pre>/s";
	preg_match_all($pattern, $res, $matches);
	return $matches;
}

$id = $modx->resource->get('id');
$res = $modx->getObject('modResource',$id);
$res = $res->get('content');
$codes = CodeScreening($res);
$codes = (isset($codes[2])) ? $codes[2] : array();

foreach ($codes as &$code)
{
	$codeNew = $code;
	$codeNew = htmlentities($codeNew);
	$codeNew = str_replace("[", '&#91;', $codeNew);
	$codeNew = str_replace("]", '&#93;', $codeNew);
	$res = str_replace($code, $codeNew, $res);
}
$newRes = $modx->getObject('modResource',$id);
$newRes = $newRes->set('content', $res);
Вопрос 1 — Как правильно вернуть получившуюся замену в данном случае обратно в content?
Вопрос 2 — как правильно сделать форич в функции CodeScreening что бы возвращался в массив не только первый тег?
13 января 2019, 16:28
0
Так и не удалось заставить заменять символы в CKEditor нашёл статью Михаила , к сожалению плагин отказался работать, пробовал вешать его на событие OnLoadWebDocument вместо OnWebPagePrerender, но тогда возвращается пустой контент.
Упростил и чуть-чуть изменил скрипт что бы попытаться найти причину проблемы, может у кого то есть идеи?
<?
$templates = [2];
if (!in_array($modx->resource->get('template'), $templates)) {
    return;
}

if (!function_exists('getTextBetweenCodeTags')) {
	function getTextBetweenCodeTags($text)
	{
    	$pattern = "/<pre><code(.*?)>(.*?)<\/code><\/pre>/s";
    	preg_match_all($pattern, $text, $matches);
    	return $matches;
	}
}

$html = &$modx->resource->_output;
$codes = getTextBetweenCodeTags($html);
$codes = (isset($codes[1])) ? $codes[1] : array();

foreach ($codes as &$code)
{
	$codeNew = $code;
	$codeNew = htmlentities($codeNew);
	$codeNew = str_replace("&amp;#91;", '[', $codeNew);
	$codeNew = str_replace("&amp;#93;", ']', $codeNew);
	$html = str_replace($code, $codeNew, $html);
}
$modx->resource->set('content', $html);
13 января 2019, 00:31
0
UPD 2
В manager\assets\components\ckeditor\ckeditor\config.js
Подключил autocorrect
config.extraPlugins = 'codesnippet,autocorrect';
Добавляю в
CKEDITOR.config.autocorrect_replacementTable = {
        "--\>": "→",
        "-+": "∓",
        "->": "→",
        "...": "…",
        "©": "©",
        "(e)": "€",
        "®": "®",
        "(tm)": "™",
        "(o)": "˚",
        "+-": "±",
        "<-": "←",
        "<--": "←",
        "<--\>": "↔",
        "<->": "↔",
        "<<": "«",
        ">>": "»",
        "~=": "≈",
        "1/2": "½",
        "1/4": "¼",
        "3/4": "¾"
    };
Через config.js
CKEDITOR.config.autocorrect_replacementTable["["] = "&#91;";
CKEDITOR.config.autocorrect_replacementTable["]"] = "&#93;";
Но увы не работает, что я делаю не так?)
При этом например автозамена ( c ) => © работает нормально
12 января 2019, 22:13
0
Это вроде можно делать и просто
[[*content:tag]]
Но каждому тегу всегда дописывать :tag долго, хочется автоматизировать
12 января 2019, 21:27
0
UPD Возможно достаточно просто сделать автозамену в CKEditor [ и ] на спецсимволы, пока что ищу как…
12 января 2019, 19:01
0
Спасибо, попробовал, увы работает он очень криво, у него свой тег который вставлять геморно вручную каждый раз и он ломает табуляцию итд
Я использую CKEditor + codesnippet. Т.е в админке я вставляю код через codesnippet например
<form class="sisea-search-form" action="[[~[[+landing:default=`[[*id]]`]]]]" method="[[+method:default=`get`]]">
  <fieldset>
    <label for="[[+searchIndex]]"></label>
    <input type="text" name="[[+searchIndex]]" id="[[+searchIndex]]" value="[[+searchValue]]" autocomplete="off" />
    <input type="hidden" name="id" value="[[+landing:default=[[*id]]]]" /> 
    <input type="submit" value="Поиск" />
  </fieldset>
</form>
<div id="site-search-results" class="site-search-results"></div>
Выглядит следующим образом:
Вставка joxi.ru/1A5BZnlHnqJoWr
Админка joxi.ru/eAO9eK3cx1Dyzm
joxi.ru/KAgaYzlt4z7Rzm
Сайт (подсветка синтаксиса через JS) joxi.ru/nAyGYwPSYxbOEm
Приходится вручную в коде убирать [[ ]] что бы он не интерпритировался