We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 4403
    • 64 Posts
    Возможно ли как то сделать, и если возможно так, нижеследующее:
    создать список слов, которые при встрече в контенте страницы будут заменяться на другой текст, т.е. надо просто слова сделать ссылками на определенные страницы.
      • 19164
      • 1,215 Posts
      Возможно через создание простого плагина, который можно повесить на событие OnWebPagePrerender и делать обычный str_replace по всему выводу.
        DirectResize 0.9 beta. PHPThumb, sets of configurations, configuration, binded to specific path. No backward compatibility. | DirectResize 0.9. PHPThumb, наборы параметров, параметры, привязанные к определенным путям. Без обратной совместимости.

        Unfortunately, DirectResize project is closed. If you want to continue development, PM me for access to project page on Google Code. К сожалению, проект DirectResize закрыт. Если вы желаете продолжить разработки, обращайтесь через ПМ для получения доступа к репозиторию на Google Code.

        [PLUGIN] DirectResize - as Maxigallery but for single images :: Download :: [url=http://modxcms.com/forums/index.php/topic,21490]
        • 4403
        • 64 Posts
        Quote from: Metaller at Oct 11, 2007, 04:25 AM

        Возможно через создание простого плагина, который можно повесить на событие OnWebPagePrerender и делать обычный str_replace по всему выводу.

        Если честно мало что понял и не представляю как это осуществить... Можно поподробнее?!
          • 19164
          • 1,215 Posts
          Если замена нужна только в контенте документа, а не по всему шаблону, можно даже повесить плагин на событие OnParseDocument и тогда вывод даже будет кешироваться. Ну вкратце примерно так (сразу говорю, пишу экспромтом, тестируйте и проверяйте сами, возможны ошибки, тут главное принцип). Создаете плагин со следующим кодом:
          $e = &$modx->Event;
          switch ($e->name) {
              
          	case "OnParseDocument":
          				
          			$modx->documentObject[content] = str_replace("слово", "<a href=''>слово</a>", $modx->documentObject[content]);
          	break;
          }


          И не забыть поставить галочку на это же событие в закладки события.
            DirectResize 0.9 beta. PHPThumb, sets of configurations, configuration, binded to specific path. No backward compatibility. | DirectResize 0.9. PHPThumb, наборы параметров, параметры, привязанные к определенным путям. Без обратной совместимости.

            Unfortunately, DirectResize project is closed. If you want to continue development, PM me for access to project page on Google Code. К сожалению, проект DirectResize закрыт. Если вы желаете продолжить разработки, обращайтесь через ПМ для получения доступа к репозиторию на Google Code.

            [PLUGIN] DirectResize - as Maxigallery but for single images :: Download :: [url=http://modxcms.com/forums/index.php/topic,21490]
            • 4403
            • 64 Posts
            Большое спасибо за помощь!!!
              • 4403
              • 64 Posts
              Quote from: Metaller at Oct 11, 2007, 05:29 AM

              Если замена нужна только в контенте документа, а не по всему шаблону, можно даже повесить плагин на событие OnParseDocument и тогда вывод даже будет кешироваться. Ну вкратце примерно так (сразу говорю, пишу экспромтом, тестируйте и проверяйте сами, возможны ошибки, тут главное принцип). Создаете плагин со следующим кодом:
              $e = &$modx->Event;
              switch ($e->name) {
                  
              	case "OnParseDocument":
              				
              			$modx->documentObject[content] = str_replace("слово", "<a href=''>слово</a>", $modx->documentObject[content]);
              	break;
              }


              И не забыть поставить галочку на это же событие в закладки события.

              Работает все отлично в таком виде как вы привели (никаких ошибок нет). Только есть одна проблема:
              Например берем слово "дуб" если в тексте будет слово "дубовый", то он его заменит на "<a href=’’>дуб</a>овый"... Как можно справиться с этой проблемой?!
                • 897
                • 1,620 Posts
                Aleksey Stepanov Reply #7, 19 years ago
                использовать регулярные выражения вместо str_replace
                  "Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein."

                  Не используйте Revo для "просто сайтов". Используйте Evo

                  Who can defeat the Russian bear?
                  • 4403
                  • 64 Posts
                  Quote from: aleksey.stepanov at Oct 24, 2007, 04:00 PM

                  использовать регулярные выражения вместо str_replace

                  В PHP я разбераюсь совсем плохо, точнее даже сказать совсем не разбираюсь... Понимаю что готовое решение за меня делать никто не будет, но может объясните общие принципы что и как делать с этими регулярными выражениями!?
                    • 1788
                    • 1,103 Posts
                    Quote from: Byjan at Oct 11, 2007, 04:10 AM

                    Возможно ли как то сделать, и если возможно так, нижеследующее:
                    создать список слов, которые при встрече в контенте страницы будут заменяться на другой текст, т.е. надо просто слова сделать ссылками на определенные страницы.
                    Возможно этот вариант подойдет http://www.modxcms.com/TooltipX-1277.html
                      • 4403
                      • 64 Posts
                      С горем пополам решил проблему. Может кому-нибудь еще понадобиться:
                      //Слова и фразы которые будем превращать в ссылки. Разделитель "|"
                      $word="время|пакет услуг|фонд"; 
                      
                      //Адреса ссылок. Разделитель "|"
                      $url="http://www.forex.ru/|http://www.host.ru/|http://www.ya.ru/"; 
                      
                      //Дополнительные параметры ссылки
                      $par="target=_blank class=nolink";
                      
                      ////////////////////////////////////
                      
                      $word=explode("|", $word);
                      $url=explode("|", $url);
                      $link=array();
                      $i=0;
                      $e = &$modx->Event;
                      switch ($e->name) {
                      case "OnParseDocument":	
                      foreach ($url as $value) {
                      $link[$i]="<a href=".$value." ".$par.">".$word[$i]."</a>";
                      $modx->documentObject[content] = preg_replace('/'.$word[$i].'(\W{1})/', $link[$i]."\\1", $modx->documentObject[content]);
                      $i++;
                      }			
                      break;
                      }
                      


                      Данный плагин заменяет введенные слова и фразы на ссылки. При желание легко переделать чтобы заменял просто на другие слова. Это мой первый опыт на PHP, так что прошу не судить строго если что не так. Но у меня работает нормально.

                      Есть только один вопрос:
                      Данный плагин обрабатывает только текст из поля "контент". Можно ли сделать чтобы он также обрабатывал и выводимый Ditto текст?