в блонконет срабатывает, а в пандоре нет :). Тот же прикол, что и с моими попытками - замена происходит, но переносы остаются ( я вкурсе что пандору надо перезапускать).
уже советовали, но:
Не верю что нет решения как подправить ту мою регулярку :). Теоретически она же нормально работать должна. Пойду на форумы прогеров-регулярщиков искать советы, если не найдется решение :).
на том же. Напомню, что надо заставить пандору из текста типа:
<h1>Слово и пробел в конце строки точки нет в конце, она в следующей строке.</h1>
делать:
а не
<h1>Слово и пробел в конце строки точки нет в конце, она в следующей строке .</h1>
using System;using System.Text;using System.Text.RegularExpressions;namespace PandoraBox{ public class OchistkaPerenosov : IPluginMacro { public string Execute(string template, PluginMacroArgs args) { if(template.Contains("html xmlns")) return Regex.Replace(template, @"([^>])\r\n", "$1");//регулярка выше находит разрыв как раз в тех местах где нет закрывающего HTML тега «>», //то есть во всех «косяках с разрывами строк», которые я наделал макросам.//Она должна заменить «найденный символ + разрыв» на «найденный символ». //Но почему-то разрыв остается.//Можно просто удалить абсолютно все разрывы строк в коде HTML «(template, @"\r\n", "")», //но это не тру :). Хотя пойдет как крайний вариант. //Пробовал еще «template = template.Replace(Environment.NewLine, "");», //но он также во всем шаблоне удаляет разрывы, а не только в нужных строках.//пробовал и (template, @"([^>])\r\n", "$1", RegexOptions.Multiline), тот же результат. return template; } public ushort Level { get { return 10; } } public String Name { get { return "OchistkaPerenosov"; } } }}
Я точку для примера привел, случаи разные бывают, не только с точкой (браузер всегда там пробел ставит вместо разрыва). Как бы это так мягко попросить Вас удалится с диалога :), а то мы тут только флудим. Жду подсказки от ТС.
Да посмотрите внимательней на мою регулярку – она же удаляет разрыв как раз в тех местах где нет закрывающего HTML тега «>», тол есть во всех «косяках с разрывами строк», которые я наделал макросами.
[|variant1|variant2|[|varian3-1|variant3-2|variant3-3|variant3-4]|]
Вот вам пример несложного макроса с вариантами первого и второго уровня вложенности. В от только у меня обычно посложнее, на целую страницу собираются. И намного удобнее в будущем правки вносить, когда хотя бы родительские варианты расположены с новой строки.
Вы наверное не совсем вникнули в суть. Если Пандора на выходе сделает код страницы таким:
<h1>Слово: еще много слов, но точки нет в конце, она в следующей строке .</h1>
То пользователь в браузере увидит его таким (пробел лишний перед точкой в конце, так как перед ней был разрыв строк):
Слово: еще много слов, но точки нет в конце, она в следующей строке .
Как я уже говорил, часто использую сложные макросы вариации. Причем разделяю их на строки, чтобы визуально лучше ориентироваться. Типа:
[| Вариант 1|Вариант2|]
И хотя текст на выходе тоже будет с переносами строк, мне было пофиг. Ведь браузер и так соединяет в финале все в одну троку, но он добавляет пробелы в местах переноса, а это иногда лишнее. Так что решил на основе недавних подсказок ТС сделать юзермакрос удаления пропусков, при условии, что в конце строки нет закрывающего тега «>», ну и плагин обрабатывает только HTML файл (проверка на содержание «html xmlns»).
using System;using System.Text;using System.Text.RegularExpressions;namespace PandoraBox{ public class OchistkaPerenosov : IPluginMacro { public string Execute(string template, PluginMacroArgs args) { if(template.Contains("html xmlns")) return Regex.Replace(template, @"([^>])\r\n", "$1"); return template; } public ushort Level { get { return 10; } } public String Name { get { return "OchistkaPerenosov"; } } }}
Проблема: регулярка не срабатывает полноценно, то есть находит разрывы, но не соединяет строки. В блокноте Notepad++ работает, а в коде, наверное, другой синтаксис нужен для объединения строк. Подправьте плиз.
Если я все верно понял, то хватит просто создать сколько угодно юзермокросов типа PROB1, PROB2…. с одинаковым содержанием, и использовать их в будущем. Но где это содержание взять? Я сам не наштопаю. Надеюсь, TopperHarley поделится кодом, когда вернется.
Насчет глюков вложенности PROB\SPROB в самого себя (пост выше):
Не работает:
{PROB-80%}скачать {PROB-50%}бесплатно{/PROB} без регистрации{/PROB}
Работает:
{PROB-80%}скачать {SPROB-50%}бесплатно{/SPROB} без регистрации{/PROB}
{SPROB-80%}скачать {SPROB-50%}бесплатно{/SPROB} без регистрации{/SPROB}
Как я понимаю, логика программы последовательно обрабатывает закрывающие\открывающие теги этих макросов. И при нахождении открывающей скобки считает завершением тела макроса ближайшую закрывающую скобку, даже если она принадлежит другому (внутреннему) макросу.
Ничего лучше не придумал, как создать хотя бы 10 вариаций названия этих макросов в следующем апдейте. То есть логика их та же будет, только имена вызова разные, чтобы программа не путала скобки. Типа добавить:
{SPROB1-*%}{/SPROB1}{SPROB2-*%}{/SPROB2}{SPROB3-*%}{/SPROB3}……{SPROB10-*%}{/SPROB10}
И
{PROB1-*%}{/PROB1}{PROB2-*%}{/PROB2}{PROB3-*%}{/PROB3}……{PROB10-*%}{/PROB10}
Тогда заработает вот так:
{PROB1-80%}скачать {PROB2-50%}бесплатно{/PROB2} без регистрации{/PROB1}
Идея реализируемая?
Все работает. TopperHarley правильно написал: Обязательно надо отключать категории в структуре дора в настройках пандоры (ну и соотвественно с шаблоны все блоки с ними удалить).
А в .htaccess указать только:
RewriteEngine onRewriteRule ^([A-Za-z0-9\-\_]+)/$ /$1.html [L]
В итоге и ссылки перелинковки и структура дора имеют вид «door.ru/valera/»
П.С.: Еще корявость в использовании замены REPLACEMENT – если у вас очень сложный шаблон, то замена может не произойти. У меня только на чистом дефолтном шаблоне сработала замена.
П.П.С.
Если не получается с {REPLACEMENT-(.html)-(/)} ( у меня, например, на главной он срабатывает, а на внутренних страницах нет, причины не понял), то можно обойти методом через попу:
Юзермакрос, который принудительно сделает замену (я не профи C#, на основе предыдущего по регулярке сделал):
using System;using System.Text;using System.Text.RegularExpressions;namespace PandoraBox{ public class CommenterPlugin : IPluginMacro { public string Execute(string template, PluginMacroArgs args) { return Regex.Replace(template, @"\.html", "/"); } public ushort Level { get { return 10; } } public String Name { get { return "CommenterPlugin"; } } }}
Но вот только он и .htaccess покоцает, а нам это не надо (можно руками его восстановить, но при массовости это лишнии трудозатраты). Пусть бы ТС подсказал как макрос подправить.