We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 1772
    • 19 Posts
    Здравствуйте.

    Продолжаю изучение МОДикс. Столкнулся с необходимостью в типографировании текстов для сайта.

    Поискав по форуму нашел он-лайн типограф и тему где пытались сделать офф-лайн версию, но так и не доделали.

    по ходу родился такой плагин
    $e = &$modx->Event;
    switch ($e->name) {
    case "OnParseDocument":
    
    // Copyright (c) Spectator.ru
    
    // замена кавычек в html-тэгах на символ "¬"
    $modx->documentObject['content']=preg_replace ( "/<([^>]*)>/es", "'<'.str_replace ('\\\"', '¬','\\1').'>'", $modx->documentObject['content']); 
    
    // замена кавычек внутри <code> на символ "¬"
    $modx->documentObject['content']=preg_replace ( "/<code>(.*?)<\/code>/es", "'<code>'.str_replace ('\\\"', '¬','\\1').'</code>'", $modx->documentObject['content']); 
    
    // расстановка кавычек: кавычка, перед которой идет ( или > или пробел = начало слова,
    // кавычка, после которой не идет пробел = это конец слова.
    
    $modx->documentObject['content']=preg_replace ( "/([>(\s])(\")([^\"]*)([^\s\"(])(\")/", "\\1«\\3\\4»", $modx->documentObject['content']); 
    
    // что, остались в тексте нераставленные кавычки? значит есть вложенные!
    if (stristr ($modx->documentObject['content'], '"')):
    
    // расставляем оставшиеся кавычки (еще раз).
    $modx->documentObject['content']=preg_replace ( "/([>(\s])(\")([^\"]*)([^\s\"(])(\")/", "\\1«\\3\\4»", $modx->documentObject['content']); 
    
    // расставляем вложенные кавычки
    // видим: комбинация из идущих двух подряд открывающихся кавычек без закрывающей
    // значит, вторая кавычка - вложенная. меняем ее и идущую после нее, на вложенную (132 и 147)
    while (preg_match ("/(«)([^»]*)(«)/", $modx->documentObject['content'])) $modx->documentObject['content']=preg_replace ( "/(«)([^»]*)(«)([^»]*)(»)/", "\\1\\2&#132;\\4&#147;", $modx->documentObject['content']);
    
    // конец вложенным кавычкам
    endif;
    
    // кавычки снаружу
    $modx->documentObject['content'] = preg_replace("/\<a\s+href([^>]*)\>\s*\«([^<^«^»]*)\»\s*\<\/a\>/", "«<a href\\1>\\2</a>»", $modx->documentObject['content']); 
    
    // расстанавливаем правильные коды, тире и многоточия
    
    $modx->documentObject['content'] = str_replace ('«','«', $modx->documentObject['content']); 
    $modx->documentObject['content'] = str_replace ('»','»', $modx->documentObject['content']); 
    $modx->documentObject['content'] = str_replace (' - ',' &#151; ', $modx->documentObject['content']); 
    $modx->documentObject['content'] = str_replace ('...','…', $modx->documentObject['content']); 
    
    
    // тире в начале строки (диалоги)
    $modx->documentObject['content'] = preg_replace ('/([>|\s])- /',"\\1&#151; ", $modx->documentObject['content']); 
    
    // меняем  "¬" обратно на кавычки
    $modx->documentObject['content'] = str_replace ('¬','"', $modx->documentObject['content']); 
    
    // предлоги вместе со словом (слово не переносится на другую строку отдельно от предлога)
    $modx->documentObject['content'] = preg_replace("/ (.) (.)/", " \\1 \\2", $modx->documentObject['content']); 
    
    $modx->documentObject['content'] = preg_replace("'((?:mailto:)?[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+\.[a-zA-Z]{2,3})'e",'encode_email("$1")', $modx->documentObject['content']); 
    
    
    // дефисы
    // $modx->documentObject['content'] = preg_replace("/(\s[^- >]*)-([^ - >]*\s)/", "<span style='white-space: nowrap;'>\\1-\\2</span>", $modx->documentObject['content']); 
    
    return $modx->documentObject['content'];
    
    }
    


    повесил на OnBeforeDocFormSave.

    Пересохраняю старые документы и ничего не происходит.

    Опишите пожалуйста процесс создания подобных плагинов с нуля, что к сему относится, какие шаги для вызова событий и т.п.??? В PHP не силен...
    Спасибо заранее wink
      • 33694
      • 742 Posts
      Посмотрите исходинк того онлайн-типографа который вы нашли на форуме — всё станет понятно.
        • 1772
        • 19 Posts
        спасибо. попробую.
          • 1772
          • 19 Posts
          пока без перемен... ;( копаемс дальше.