We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 30588
    • 7 Posts
    Мне нужно сделать так, чтобы все ссылки автоматически становились активными.
    К примеру, "[email protected]" заменялось на "<a href="[email protected]">[email protected]</a>".
    Я знаю, что это несложно пишется с помощью регулярных выражений, но хотелось бы
    найти способ сделать это не изменяя исходников.
    Кто-нибудь уже сталкивался с подобной проблемой?
    Спасибо
      • 785
      • 2,113 Posts
      Все автоматические замены можно описать в плагине, который должен быть привязан к событию OnWebPageComplete или OnWebPagePrerender. Однако описание замены не так просто, как могло бы показаться. В примере "[email protected]" не является корректным адресом (то есть является адресом почты), и единственное, на что можно ориентироваться – это наличие www в начале. Если же написать mysite.ru, такой адрес выделить не получится.
        Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
        Статьи о MODx, регулярно новые публикации
        • 30588
        • 7 Posts
        Конечно в примере, имелось ввиду "[email protected]" заменялось на "<a href="mailto:[email protected]">[email protected]</a>".
        Просто было уже поздно и голова плохо варила smiley
        Спасибо за совет писать плагин, я даже не знал о существовании событий.
        Но мне кажется, разумнее заменять ссылки не каждый раз, а один раз при добавлении документа.
        Я правильно понимаю, что событие OnParseDocument (http://wiki.modxcms.com/index.php/API:Template_Service_Events#OnParseDocument) как раз для этого?
        PS о, нашел еще одно замечательное событие: OnBeforeDocFormSave!
        Variable Scope

        * $modx - the document parser
        * $etomite - deprecated - Use $modx
        * $mode - either upd or new
        * $id - Unique ID of the document. Note: this is empty if new document
        Правда, не совсем понятно, как получить само содержание документа, чтобы его затем обрабатывать.
          • 785
          • 2,113 Posts
          Quote from: Tremor at Oct 18, 2008, 04:23 AM

          PS о, нашел еще одно замечательное событие: OnBeforeDocFormSave!
          Это если ссылки непосредственно в тексте документа. А если в чанке или сниппете, то придется менять текст после генерации готовых страниц.

          Quote from: Tremor at Oct 18, 2008, 04:23 AM

          Правда, не совсем понятно, как получить само содержание документа, чтобы его затем обрабатывать.
          Для события сохранения поставить global $content; и все. А если после генерации документа, то $output = &$modx->documentOutput;
            Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
            Статьи о MODx, регулярно новые публикации
            • 30588
            • 7 Posts
            решил все-таки делать после генерации документа.
            написал код, который работает (проверял отдельно) и поставил события: OnBeforeDocFormSave и OnBeforeChunkFormSave.
            При этом ничего не происходит. Сначала подумал, что дело в коде, поэтому добавил туда запись в файл, чтобы проверить, запускается ли плагин вообще:
            $handle = fopen("/test.txt", "w");
            $cont=’Содержание документа:\n’.$output;
            fwrite($handle, $cont);
            fclose($handle);
            Однако, файла не создается. Видимо, почему-то плагин не выполняется. В чем может быть дело?
            Спасибо
              • 785
              • 2,113 Posts
              Трудно что-то предположить. Надо убедиться, что нужные события действительно назначены (в некоторых случаях выбор события может не сохраняться). Можно попробовать для события OnBeforeDocFormSave создать плагин:
              global $content;
              $content=’<------>’.$content;
              Он однозначно должен работать, по крайней мере у меня работает.
                Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
                Статьи о MODx, регулярно новые публикации
                • 30588
                • 7 Posts
                действительно, убрал <?php и ?> и все заработало
                вот только global $content; не работает с чанками. есть ли еще способы получить содержание чанков?
                  • 785
                  • 2,113 Posts
                  Quote from: Tremor at Oct 20, 2008, 03:39 PM

                  вот только global $content; не работает с чанками
                  Естественно, $content – поле контента сохраняемого документа. Аналогично можно обратиться к другим полям документа. При сохранении чанка такого поля нет. Для содержимого чанка используется переменная $snippet (global $snippet;). Кстати, рекомендуется проверять, какое событие вызвало работу плагина (посмотреть, как это делается, можно в других плагинах).
                    Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
                    Статьи о MODx, регулярно новые публикации