We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 17052
    • 41 Posts
    Есть самописный сниппет который лежит по адресу http://localhost/test, можно ли сделать как-то, чтобы адрес http://localhost/test/somevar/somevar2 обрабатывался сниппетом на странице http://localhost/test?
      • 4379
      • 23 Posts
      Можно. Совсем недавно задавал этот вопос и сам нашел на него ответ. Правда, хороший способ решения этой проблемы возможен лишь при невключенном параметре "Использовать вложенные URL" или точнее, можно и с включенным, но просто все реальные документы в дереве, которые должны срабатывать при обращении, должны находится четко на одном уровне вложенности или же прийдется писать чуть более сложные правила mod_rewrite. Если же параметр не включен, то вполне можно обойтись таким правилом:
      RewriteRule ^([\w\.-]+)(\/[\w\.-]+)*$ index.php?q=$1&p=$2 [L,QSA]
      

      т. е. мы видим, что url разбивается на 2 части: до первого слэша и после, первую часть мы, как положено, отдаем параметру q, который обрабатывается самим движком, а второй некоему параметру, например, p, который мы можем обработать в сниппете через $_GET[’p’].
      И еще в связи с этим вылезла одна проблемка, в quickedit испольпользуются относительные пути к стилям и некоторым файлам, а при использовании параметров относительный url как бы смещается и тогда quickedit теряет эти файлы и работоспособность нарушается.
      Для исправления данной проблемы надо в каталоге assets/modules/quick_edit/ в файлах editor.class.inc.php и output.class.inc.php подправить пути к файлам. А поскольку там вывод идет через heredoc, то я делал это так: сначала назначил переменную $bvn_su = MODX_SITE_URL, а потом вставил ее в нужных местах:
      <link type="text/css" rel="stylesheet" href="{$bvn_su}{$qe_path}/styles/editor.css" />
      
      <script type="text/javascript" src="{$bvn_su}manager/media/script/mootools/mootools.js"></script>
      <script type="text/javascript" src="{$bvn_su}manager/media/script/datefunctions.js"></script>
      <script type="text/javascript" src="{$bvn_su}{$qe_path}/javascript/QuickEditor.js"></script>
      

      и соответственно
      <script type="text/javascript" src="{$bvn_su}manager/media/script/mootools/mootools.js"></script>
      <script type="text/javascript" src="{$bvn_su}{$qe_path}/javascript/QuickEdit.js"></script>
      <link type="text/css" rel="stylesheet" href="{$bvn_su}{$qe_path}/styles/toolbar.css" />
      

      Вот и все.
        • 785
        • 2,113 Posts
        Не совсем понятны исходные данные. Ответ выше предполагает, что MODx установлен на localhost в корне, имеется страница test, в которой вызывается сниппет, генерирующий самостоятельно ссылки типа somevar/somevar2. И совсем иная ситуация, если MODx установлен в localhost/test/somevar, но требуется вызвать внешнюю программу с localhost/test. В последнем случае также возможны варианты. Если при загрузке конкретной страницы localhost/test/somevar/somevar2 нужно, чтобы в действительности загружалась localhost/test, нужно в месте somevar2 добавить документ MODx типа ссылки, а не типа обычного документа. Если же нужно, чтобы при генерации страницы somevar2 выполнялась программа, расположенная на localhost/test, нужно вставить сниппет, в котором будет соответствующий include. Правда¸ для этого требуется установить в настройках PHP allow_url_fopen. Возможны и другие варианты.
          Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
          Статьи о MODx, регулярно новые публикации