[VirtualPage] - Виртуальные страницы.

Реализует виртуальные страницы для MODx.
Планировался для modstore.pro/packages/users/userprofile, но руки дошли только сейчас.
Роутинг реализован на github.com/nikic/FastRoute


cоздание маршрута

  • метод запроса (GET | POST)
  • маршрут (согласно FastRoute)
  • событие
  • обработчик
метод запроса
Определены:
  • GET,POST
  • GET
  • POST
маршрут
согласно FastRoute
например нам нужно задать страницу пользователя, пишем в маршрут
/users/{id:[0-9]+}.html
{id:[0-9]+} именованный параметр принимающий только цифры

событие
Событие по наступлении которого срабатывает роутинг.


обработчик
Определены:
  • ресурс — задействует метод sendForward
  • динамический ресурс
  • сниппет — обработает указанный сниппет и отдаст через exit
  • чанк — обработает указанный чанк и отдаст через exit
параметры
Все именованные параметры fastrouter можно получить в $_REQUEST. Ключ по умолчанию 'fastrouter'
при обработчике тип — ресурс, параметры также доступны в плейсходерах с префиксом vp.

Внимание
Пакет не рекомендую пока ставить на рабочие проекты. Подлежит обкатке…

ps. замечания и предложения по коду пожалуйста оставляйте тут — github.com/vgrish/virtualpage/issues
for php: ">=5.4.0"
Володя
Володя
15 марта 2015, 10:25
modx.pro
16 517
Поблагодарить автора Отправить деньги

Комментарии: 183

Сергей Шлоков
15 марта 2015, 14:28
Хорошая весчь.
    Wassi Wassinen
    15 марта 2015, 14:54
    Володя, а у тебя, случаем, руки до userProfile не дошли? А то денег я заплатил за компонент, а он через пень колоду работает.
      Володя
      15 марта 2015, 15:08
      Если бы ты включил голову — ты бы не задавал таких вопросов.
      Как платил — так и работает… Еще вопросы есть?
        Wassi Wassinen
        15 марта 2015, 16:37
        Володя, оно не работает, если установлен Office. Заплатил я тебе в полной мере. Вопросов к тебе после этого комментария больше нет.
        Николай
        15 марта 2015, 20:10
        Не самый удачный ответ человеку. Он бы может еще что то у тебя заказал и денюжку за работу дал. Не делается так. Это я как разработчик и как человек говорю.
          Володя
          15 марта 2015, 20:35
          у меня нет никакого желания продолжать какие либо выяснения… И ответ возможно не самый удачный, но я мотивирован так ответить.

          Всем спасибо за мнение, что то объяснять я не намерен.
        Владимир
        15 марта 2015, 15:38
        Хм..., а разве userProfile был платным?
          Василий Наумкин
          15 марта 2015, 15:49
          Ты не поверишь, но разработку бесплатных дополнений всегда кто-то оплачивает.

          Или заказчик, деньгами, или разработчик, своим временем.
            Владимир
            15 марта 2015, 16:08
            Отчего же, весьма верю) И с удовольствием оплачиваю.
        Павел Левин
        16 марта 2015, 00:37
        А в чем суть виртуальных страниц?
        Какова была задумка заказчика/исполнителя?
          Володя
          16 марта 2015, 09:00
          Вывести по какому либо заданному маршруту страницу с данными, при этом как таковой самой страницы в дереве ресурсов не имеется.
            Павел Левин
            16 марта 2015, 09:33
            т.е. это тот же документ с show_in_tree = 0 с отдельной страницей управления данными страницами/документами?
              Наумов Алексей
              16 марта 2015, 09:54
              Нет.

              В статье есть очень наглядный пример: /users/{id:[0-9]+}.html, это страница пользователя. Вы же не будете заводить отдельную страницу для каждого пользователя.
                Володя
                16 марта 2015, 09:56
                есть два обработчика:
                ресурс — задействует метод sendForward
                сниппет — обработает указанный сниппет и отдаст через exit

                в первом случае это ресурс (указываете в настройках обработчика), в котором вы вызываете какой либо сниппет, и в зависимости от полученных параметров у вас выводит информацию.

                во втором случае даже нет ресурса, просто отдача результата сниппета на страницу.
            Даниил Рачин
            24 марта 2015, 18:18
            Установил через репозитарий modstore.pro, на сайте такая ошибка:



            Версия MODX 2.3.3, PHP 5.3.29
            Что я делаю не так?
            Алексей Карташов
            26 марта 2015, 18:22
            Только что столкнулся вот с таким поведением.

            Допустим, нужно вывести форму редатирования профиля пользователя (или любого кастомного объекта).
            Урл страницы имеет вид:
            /objects/100500/update
            Прописываю в vp.конфиге вот такой маршрут:
            /objects/{itemId:[0-9]+}/{update}
            выбираю метод GET и любое из событий.

            На нужном ресурсе грузится форма редактирования, в которую подставляются значения нужного объекта (который был предварительно найден и отрендерен собственным сниппетом).

            Т.е. я к чему — всё работает, всё супер.

            Но.
            Как только я нажимаю кнопку сабмита в форме — всё, пиши пропало — отдаётся 404.

            В массиве REQUEST лежат и данные из формы, и параметр q с урлом.
            Метод $virtualpage->getMethod() возвращает $_SERVER['REQUEST_METHOD'].
            И вот нюанс — если request-метод равен POST, то в этом массиве параметра q нету. Оно и понятно — в этот момент он спокойно лежит в $_GET. И, соответственно, VP подцепить урл уже не может.
            Вот и валится на 404.

            Но ведь это же не правильно!
            Как же быть?

            Предлагаю свой вариант решения такой ситуации.
            Там добавилась константа и немного дописан метод doRoutes. По коду, в принципе, всё понятно, но, в случае чего, пишите.

            Надеюсь, что коммит примите и мне не нужно будет держать свою ветку VirtualPage)

            p.s. А компонент очень полезный. Так что, спасибо за него!
              Володя
              26 марта 2015, 22:18
              Думаю что правильнее будет указание схожего обработчика только с другим методом запроса.
              То есть если нам нужна еще и отправка форм — то добавить такой же обработчик с POST и все…

              а вот этим
              case FastRoute\Dispatcher::NOT_FOUND:
              вы прерываете дальнейшую обработку возможных маршрутов…
              У нас же несколько событий, не только notfound.

              Спасибо огромное за обкатку!
              ps. Добавил создание одинаковых маршрутов с разными методами, добавил чанк в обработчики.
              Новую версию можно собрать с гитхаб.
                Алексей Карташов
                27 марта 2015, 19:44
                Вов, спасибо, всё работает!

                Думаю что правильнее будет указание схожего обработчика только с другим методом запроса.
                Это было первым, что я попробовал сделать) Да только вот в тот момент получал ae-ошибку. Already exists, тобишь.

                Спасибо огромное за обкатку!
                Вам спасибо)

                Добавил создание одинаковых маршрутов с разными методами
                И всё-таки мне кажется, что логичнее было бы сделать третий вариант — POST/GET, который бы реагировал на оба этих request-метода, чтобы не дублировать и не плодить одинаковые маршруты с одинаковыми обработчиками.
                Т.е. исключительно POST, исключительно GET и вариант, реагирующий на всё, который бы был включён по умолчанию.
                Когда у меня в компонентах по несколько десятков сущностей, с каждой из которых нужны crud-операции с фронта — конфиг сильно раздуется. Это, конечно, не смертельно. Так, просто пожелание :-)

                Кстати. Мы тут недавно канонические урлы обсуждали и я там сниппет для seo-шного тега meta rel=canonical накидал. Так вот встал вопрос — а как получить сработавший маршрут из VirtualPage, чтобы подставлять их в этот тег, вместо [[~[[*id]]]]? Есть какие-нибудь варианты как это можно сделать? Может сработавший урл в плейсхолдер помещать? Имя которому задавать в настройках компонента. Тогда можно было бы делать как-то так:
                $vpUri = $modx->getPlaceholder($modx->getOption('vp.uri_placeholder'));
                  Дмитрий Иванов
                  27 марта 2015, 21:00
                  Многие компоненты используют свои урл, которые плагинами генерируют, и их никак не узнать для построения каноникала, vp — только капля в море)
                    Алексей Карташов
                    28 марта 2015, 16:00
                    Понятное дело, но всеми ими я не пользуюсь, а вот vp теперь будет постоянным гостем на моих сервисах)
                    Володя
                    28 марта 2015, 02:11
                    Вполне логично да, просто со временем напряг немного…
                    Добавил POST/GET и плейсходер uri.
                    Новая версия пока на гитхаб. Пробуй.
                      Алексей Карташов
                      28 марта 2015, 16:02
                      Круто, спасибо! Всё работает)

                      p.s. если бы имя плейсхолдеру можно было бы в настройках задавать — то было бы прям ваще :)
                      А то ж ситуации разные бывают — мало ли где названия перекрываться смогут, всякое возможно.
                        Володя
                        29 марта 2015, 00:04
                        Пожалуйста! )
                        Забирай с префиксами…
                Володя
                31 марта 2015, 09:57
                Очередное обновление.
                настройка плейсходеры
                В маршруты добавлена настройка плейсходеры, запись в формате json (плейсходер: значение). Соответственно плейсходеры будут доступны в обработчике.

                динамический ресурс
                Добавлен новый обработчик — «динамический ресурс». Идея заимствована у Василия, подробности тут.
                  Володя
                  02 апреля 2015, 11:14
                  обновление — 1.0.5-beta
                  Добавил кэширование динамических страниц. Тестируем, отписываемся…
                    Сuriosity
                    04 апреля 2015, 22:49
                    Володя, по-прежнему выдает ошибку:
                    Parse error: syntax error, unexpected '[' in… \core\components\virtualpage\model\lib\fastroute\src\functions.php on line 12
                    Ваш компонент очень нужный, но, к сожалению, множество проектов стоит на PHP 5.3.
                    21 марта Вы говорили, что поправите код. Скажите, когда примерно ожидать этих изменений?
                      Володя
                      04 апреля 2015, 23:00
                      для роутинга используется библиотека fastRouter работает она на php >=5.4.0
                        Сuriosity
                        05 апреля 2015, 00:03
                        Понял. Спасибо
                      Дмитрий Иванов
                      05 апреля 2015, 20:46
                      неплохо бы как-то реализовать поддержку разных контекстов. Например, ресурс-обработчик выбирается свой для каждого контекста. Иначе, когда несколько контекстов и нужны в них одинаковые ссылки, приходится их делать разными для каждого контекста…
                      и вообще можно ссылки разделять на контексты, выбирать в каком они будут работать)
                        Володя
                        05 апреля 2015, 21:08
                        Пока что не вижу смысла засовывать эту логику в компонент.
                        Объясните подробнее где и с какой целью это необходимо…
                        Спасибо!
                          Дмитрий Иванов
                          05 апреля 2015, 21:14
                          К примеру, если переключается контекст для мультиязычных сайтов и там одинаковые ссылки, но обработать их надо ресурсом из соответствующего языку контекста, естественно.
                            Алексей
                            15 апреля 2015, 10:16
                            Переключение контекста в мультидоменном сайте.
                            К примеру, у меня два контекста:
                            1. web - адрес http://domain1.com
                            2. web2 - адрес http://somain2.com
                            В разных контекстах работают разные правила маршрутизации.
                            Либо в параметр «маршрут» надо указать хост, вот так:
                            Маршрут: "http://domain1.com/users/{id:[0-9]+}.html"
                            А для второго контекста маршруты будут прописываться так:
                            Маршрут: "http://domain2.com/users/{id:[0-9]+}.html"
                          Spam
                          14 апреля 2015, 16:15
                          с русскими буквами работает?
                          /page/letter-{get:[A-Za-zА-Яа-я0-9]}
                          не работает с рус буквой, а с англ/цифрам работает
                            Дмитрий Иванов
                            14 апреля 2015, 16:24
                            у меня так работает
                            А-Па-пР-Яр-я
                              Spam
                              14 апреля 2015, 16:46
                              страно конечно, но не работает у меня. вы бы не могли бы ещё у себя протестировать
                              /food/{food:(eda|cat|cat_dog)}
                                Дмитрий Иванов
                                14 апреля 2015, 17:15
                                раньше тестировал подобную конструкцию, работала. А какая версия php у вас?
                                  Spam
                                  14 апреля 2015, 17:20
                                  PHP 5.5.23 (cli) (built: Mar 19 2015 09:03:54)
                                  Дмитрий Иванов
                                  14 апреля 2015, 17:32
                                  Сейчас проверил эту конструкцию, получил какой-то бред. Обрабатывается совсем другим обработчиком, не тем, что указан для этого урл. вот так работает
                                  /food/{food:eda|cat|cat_dog}
                              Spam
                              14 апреля 2015, 16:49
                              ну и такое ещё выдаёт ошибку
                              /food/{food:(eda|cat|cat_dog)}

                              [2015-04-14 16:49:08] (ERROR @ /var/www/foodcafe/www/core/components/virtualpage/model/lib/fastroute/src/Dispatcher/GroupCountBased.php : 20) PHP warning: Invalid argument supplied for foreach()
                              Андрей Копп
                              21 апреля 2015, 14:15
                              Помогите разобраться с работой VirtualPage. На сервере PHP 5.5 стоит, поставил UserProfile2 и VirtualPage. Пользователи выводятся, но не возможно перейти на страницы с их профайлами, последними тикетами и топиками. Нужно ли какие-то записи в .htaccess производить? Вот сайт где наблюдаются проблемы www.horrorstory.ru

                              P.S. По мимо cURL, какие-то дополнительные обновления для PHP нужно устанавливать? cURL я вчера поставил.
                                Андрей Копп
                                21 апреля 2015, 14:27
                                Всё заработало. Я понял почему не работало. Элементарно события не повесил. Только почему-то шаблон не выводится полностью, а выводится чанк с выводом пользовательской инфы. Я явно что-то делаю не так. Нужно ли в чанке с выводом данных весь шаблон прописывать?
                                  Володя
                                  21 апреля 2015, 14:29
                                  шаблон к UserProfile2 берет основу от modstore.pro/packages/other/theme.bootstrap
                                  Скорее всего у вас этот пакет не стоит.

                                  Или ручками создайте нужные чанки или установите Theme.Bootstrap
                                    Андрей Копп
                                    21 апреля 2015, 16:39
                                    Всё заработало. Оказывается полезно скидывать кэш))) Очень радует компонент. Спасибо огромное автору)
                                      Володя
                                      21 апреля 2015, 17:23
                                      на здоровье!
                                        Сергей Лим
                                        09 июля 2015, 02:26
                                        Володя, у меня такая же проблема, но у меня все настроено itmages.ru/image/view/2731566/3a6c3439
                                          Володя
                                          09 июля 2015, 09:12
                                          какая, такая же проблема?
                                            Сергей Лим
                                            09 июля 2015, 09:29
                                            Пользователи выводятся, но не возможно перейти на страницы с их профайлами, последними тикетами и топиками
                                              Володя
                                              09 июля 2015, 09:31
                                              проверьте маршрут на страницу профиля, событие…
                                                Сергей Лим
                                                09 июля 2015, 09:35
                                                itmages.ru/image/view/2731566/3a6c3439

                                                А вот же я скинул, все норм вроде там
                                                  Володя
                                                  09 июля 2015, 13:28
                                                  если есть возможность скинь доступ в скайп: vgrish_vgrish
                                                  Посмотрю в чем дело.
                                                  Сергей Лим
                                                  09 июля 2015, 17:20
                                                  Володя направил меня на нужное направление.
                                                  1) Надо было включить ЧПУ
                                                  2) в файл .htaccess вставил
                                                  RewriteEngine On
                                                  RewriteBase /

                                                  RewriteCond %{REQUEST_FILENAME} !-f
                                                  RewriteCond %{REQUEST_FILENAME} !-d
                                                  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

                                                  Action php5.4-script /cgi-bin/php5.4.cgi
                                                  AddType php5.4-script .php
                              Sergey Leleko
                              30 мая 2015, 11:12
                              Похоже глючит раздел настройки обработчиков, прилагаю скрины
                              1) clip2net.com/s/3ivIc4I тут я создаю новый обработчик типа «Динамический ресурс», задаю ему имя, тип Динамический ресурс, предлагается выбрать по какому шаблону будет генерится видимо, выбираю свой шаблон, и пишу описание, которое я так понял ни где не должно во фронте фигурировать. Сохраняю

                              2) clip2net.com/s/3ivIo1v получаю страницу оформленную в своем шаблоне, но вместо результата работы сниппета, текст описания (?)…

                              3)Иду снова в обработчики, открываю свой созданный обработчик и там вижу: clip2net.com/s/3ivIyGk
                              где селект запись почему уже не перечень шаблонов а перечень ресурсов сайта.

                              Кстати пробовал с остальными типами, все так же глючат кроме типа «Ресурс», который работает корректно без проблем.

                              Может чтото не так делаю или не так понял?
                                Володя
                                30 мая 2015, 12:51
                                там есть глюк с отображение названия, но id стоит все же верный и глюка обработчика я не заметил.
                                будет время поправлю.
                                  Sergey Leleko
                                  30 мая 2015, 12:54
                                  Благодарю за ответ.
                                  Вообщем глюк да только с отображением названия, то что показано на скринах.

                                  А работы динамического ресурса получилось добиться, проставив вместо сниппета чанк в котором вызывается сниппет. И вроде заработало, только все равно зачем-то в теге h1 дополнительно выше вывода чанка на страницу вставляется содержимое «Описания».

                                  Впринципе можно тупо не писать описания обработчику да и все :)
                                  Володя
                                  30 июня 2015, 14:34
                                  поправил в новой версии.
                                  Rrp2010
                                  31 мая 2015, 21:35
                                  Не работает VirtualPage, в процессе установки ошибок нет, не успел выйти из установщика пакетов и вот:
                                  Parse error: syntax error, unexpected '[' in /home/aqq13706/public_html/мой сайт.ru/core/components/virtualpage/model/lib/fastroute/src/functions.php on line 12

                                  Подскажите пожалуйста, может кто-то сталкивался? Может из-за контекстов? MODX Revolution 2.3.3-pl. Пакет пробовал переустанавливать, не помогло. А вообще цель установки VirtualPage это UserProfile.

                                  Спасибо!
                                    Rrp2010
                                    31 мая 2015, 22:12
                                    Извините за вопрос, кажется нашел в чем проблема. Версия PHP наверное ниже 5.4, В С-panel нет настроек, написал в тех. хостинга. Если не так поправьте пожалуйста, куда смотреть.
                                      Rrp2010
                                      31 мая 2015, 22:37
                                      Ответ тех. хостинга (Для работы с PHP 5.4 (+MySQL 5.6) технически возможно перенести текущий аккаунт на новый сервер, но там есть технические различия не только в версии PHP 5.2, но и в кодировке по умолчанию для MySQL: на старых серверах используется cp1251, а на новых utf-8. В этих же кодировках создаются и разархивируются (при необходимости) резервные копии. Таким образом после переноса, сайты с базами данных в старой cp1251, могут стать не читаемы. И даже при успешном переносе, но при неправильно записанной кодировке в таблице, такие базы при резервном копировании могут стать полностью поврежденными после первого же восстановления из такой резервной копии.):
                                        Василий Наумкин
                                        01 июня 2015, 06:45
                                        Сурово.
                                          Rrp2010
                                          01 июня 2015, 08:16
                                          :) Очень сурово! И решения никакого нет. Вообще мне банально, нужно чтобы менялась аватарка из фронтенда. Стоит уже HybridAuth и Login. Если кто-то чирканет фрагмент кода буду очень благодарен.
                                            Василий Наумкин
                                            01 июня 2015, 08:28
                                            И решения никакого нет.
                                            В Office аватарка меняется из коробки. Он работает на PHP 5.3 и дружит с HybridAuth. Ты его, кстати, видишь на id.modx.pro.

                                            Если кто-то чирканет фрагмент кода буду очень благодарен.
                                            Фрагментом кода здесь не ограничишься. Нужны проверки при загрузке, ресайз после загрузки, и удаление старых автарок при обновлении.
                                              Rrp2010
                                              03 июня 2015, 11:44
                                              Спасибо! Обязательно воспользуюсь вашим предложением.
                                    Сергей Лим
                                    16 июля 2015, 05:18
                                    Подскажите, как задать шаблон под динамические страницы?
                                      Володя
                                      16 июля 2015, 08:40
                                        Сергей Лим
                                        16 июля 2015, 09:33
                                        Спасиб, Вольдь, разобрался уже, теперь письмо регистрации не приходит.
                                      Илья
                                      30 августа 2015, 15:21
                                      Подскажите, как сделать адреса такого плана: вместо /users/1/ было /users/admin/?
                                      Пробовал менять маршруты со стандартного:
                                      /users/{user_id:[0-9]+}/
                                      на:
                                      /users/{user_firstname:[A-Za-z0-9]}/
                                        Павел Гвоздь
                                        30 августа 2015, 18:30
                                        А "+" не забыли?

                                        /users/{user_firstname:[A-Za-z0-9]+}/
                                          Илья
                                          30 августа 2015, 19:00
                                          Пробовал, ошибка «500 Internal Server Error»
                                          Хостинг modhost, Modx 2.4.0-pl
                                          Сейчас хотел попробовать на тестовом modhost, блин, userprofile2 не ставится пишет останавливается на: Trying to install pdoTools. Please wait…
                                            Илья
                                            30 августа 2015, 19:11
                                            Попробовал на 2.3.6, та же ошибка «500 Internal Server Error», у всего сайта, кроме админки
                                          Любовь
                                          03 сентября 2015, 11:54
                                          Не могу удалить компонент: при обновлении кэша пишет
                                          Could not load class: virtualpage from virtualpage.
                                          Problem getting service virtualpage, instance of class virtualpage, from path /home/n/nashasemru/bank/public_html/core/components/virtualpage/model/virtualpage/
                                          Еще остается в верхнем меню в приложениях:


                                          Как удалить его окончательно? И связан ли компонент userprofile2 с этим? Его тоже не могу корректно удалить.
                                          В базе таблицы остались:
                                            Володя
                                            03 сентября 2015, 12:18
                                            — удалите/ отключите плагины virtualpage
                                            — пункты меню удалите в админке /manager/?a=system/action
                                            — userprofile2 связан с virtualpage. удалить аналогично virtualpage. Таблицы удалить руками в базе.
                                              Любовь
                                              03 сентября 2015, 12:23
                                              up_extendes и up_extended_setting тоже удалять?
                                              Удалила, но все равно пишет при обновлении кэша:
                                                Роман Садоян
                                                03 сентября 2015, 13:01
                                                Попробуйте Деинсталляцию компонента
                                                  Любовь
                                                  03 сентября 2015, 13:02
                                                  его уже нет в списке…
                                                    Роман Садоян
                                                    03 сентября 2015, 13:05
                                                    Всё равно установите и сделайте деинсталляцию!
                                                      Любовь
                                                      03 сентября 2015, 13:13
                                                      Помогло! Огромное спасибо!
                                              Maxim
                                              18 апреля 2025, 14:17
                                              Здравствуйте. И у меня проблема, повторная установка не работает, видимо, плагина больше нет в магазине. Как удалить окончательно? Чистил папку с кэшем, удалял остатки вручную, удалил us2. Не помогло — Problem getting service virtualpage.virtualpage.

                                              Причина удаления: устаревший плагин стал мешать отрисовке тикетов в админке. После удаления проблемы не стало, но в логах остались ошибки
                                                Володя
                                                18 апреля 2025, 16:30
                                                Добрый день.
                                                Удалите плагин vpSystem от пакета.
                                              Андрей
                                              10 сентября 2015, 02:08
                                              Если маршрут начинается с /text не работает. Пример маршрута /text/{name} Меняешь на /tex2t/{name} и работает
                                              У меня одного так?
                                                Володя
                                                10 сентября 2015, 09:20
                                                там наверно буква из другого языка затесалась… вот и не работает. Проверяйте лучше!
                                                  Андрей
                                                  10 сентября 2015, 10:46
                                                  Володя, это я первым делом проверил и добавление «2» тогда бы не решало проблему.
                                                Якуб
                                                20 января 2016, 20:38
                                                Использую маршрут
                                                /users/{user_id:[0-9]+}
                                                для страницы «информация», набираю адрес типа:
                                                /users/155666
                                                ( т.е id не существующего юзера), открывается пустая страница «информация». Подскажите, как от этого избавиться?
                                                  Володя
                                                  20 января 2016, 21:01
                                                  в сниппете при отсутствии объекта редиректить на 404
                                                    Якуб
                                                    20 января 2016, 22:52
                                                    Где его взять?)) В php не особо…
                                                  Василий Столейков
                                                  01 февраля 2016, 20:12
                                                  При переносе с модхоста на другой хостинг страница с профилем пользователя, например /users/18 выдаёт следующие ошибки:
                                                  Notice: Undefined index: cacheTime in /home/****/public_html/core/components/virtualpage/model/virtualpage/virtualpage.class.php on line 612
                                                  Notice: Undefined index: cacheTime in /home/****/public_html/core/components/virtualpage/model/virtualpage/virtualpage.class.php on line 613
                                                  Это если пользователь авторизован. У гостей всё нормально. Нотисы на хостинге отключены.
                                                  Откуда эта ошибка и как её исправить?
                                                    Володя
                                                    01 февраля 2016, 21:08
                                                    Notice: Undefined index: cacheTime in /home/****/public_html/core/components/virtualpage/model/virtualpage/virtualpage.class.php on line 612
                                                    Notice: Undefined index: cacheTime in /home/****/public_html/core/components/virtualpage/model/virtualpage/virtualpage.class.php on line 613
                                                    Нотисы на хостинге отключены
                                                    значит не отключены наверно.

                                                    ps. поправлю в ближайшее время.
                                                    pps. А нечего с модхоста было переходить)))
                                                      Василий Столейков
                                                      01 февраля 2016, 21:11
                                                      значит не отключены наверно.
                                                      На хостинге отключены однозначно. Может в самом скрипте включены где-то… Может и в других сниппетах на той же странице, я ещё проверю…
                                                      А нечего с модхоста было переходить)))
                                                      Я точно то же самое заказчику твержу…
                                                    Katya Larionova
                                                    20 февраля 2016, 13:19
                                                    вопрос выше задавался. VirtualPage используется со сниппетом easyComm (вопрос/ответ). Для каждого вопроса создается своя страница. Если удаляется вопрос, которые был опубликован, то появлються пустые страницы по этим же адресам.
                                                    В базе этих строк не нахожу, как избавится от этого бага?
                                                    Было предложено такое решение — в сниппете при отсутствии объекта редиректить на 404
                                                    В каком именно сниппете?
                                                      Володя
                                                      20 февраля 2016, 14:28
                                                      если у вас динамические страницы, то можно поступить так.
                                                      создать плагин на vpOnResourceAfterCreate
                                                      в нем проверяйте актуальность своих данных и если их нет то просто отправляете пользоваетля на страницу ошибок.
                                                      <?php
                                                      switch ($modx->event->name) {
                                                      	case 'vpOnResourceAfterCreate':
                                                      
                                                      	    $fastrouter = $modx->getOption('fastrouter', $_REQUEST, array());
                                                      	    /* ваша проверка */
                                                      	    if (false) {
                                                      	        $modx->sendErrorPage();
                                                      	    }
                                                      	    
                                                              break;	    
                                                      }
                                                        Katya Larionova
                                                        24 февраля 2016, 10:14
                                                        В php не сильна. Подскажите, как правильно прописать проверку? Пустые страницы выглядят так altravita-ivf.ru/voprosy-i-otvety/voprosy-reprotuktologu/4089.html
                                                          Володя
                                                          24 февраля 2016, 11:10
                                                          я так понимаю 4089 — id объекта easyComm.
                                                          то есть ваша проверка будет выглядеть примерно так
                                                          $fastrouter = $modx->getOption('fastrouter', $_REQUEST, array());
                                                          $id = $modx->getOption('id', $fastrouter);
                                                          if (!$modx->getCount('easyComm', $id)) {
                                                               $modx->sendErrorPage();
                                                          }
                                                          написано приблизительно, с easyComm не имел дела.
                                                          ps. можете скинуть доступ к сайту на почту, я посмотрю.
                                                            Сергей Фещуков
                                                            29 февраля 2016, 08:28
                                                            $modx->sendErrorPage();
                                                            Приводит к циклическому редиректу.
                                                            Нашёл также такой вариант вызова:
                                                            $modx->sendErrorPage(array('stop' => true));
                                                            Но также приводит к циклическому редиректу.

                                                            Как правильно то перебросить на страницу 404?
                                                              Сергей Фещуков
                                                              29 февраля 2016, 08:38
                                                              Забыл указать, что в своём случае я использую сниппет в качестве обработчика. Хотя я попробовал всё сделать через плагин, как указано немного выше, и всё равно получаю цикличный редирект.
                                                                Володя
                                                                29 февраля 2016, 09:15
                                                                Ну если вы используете сниппет, то плагин тут и не отработает.
                                                                Скорее всего у вас обработчик на событие OnPageNotFound и в нем же вы посылаете снова на sendErrorPage.
                                                                Смените событие на OnHandleRequest и думаю все будет ок.
                                                                  Сергей Фещуков
                                                                  29 февраля 2016, 09:19
                                                                  Плагин я пробовал, когда выставил в качестве обработчика динамический ресурс.
                                                                  На OnPageNotFound вроде своего ничего не висит. Но вариант сменить событие на OnHandleRequest сработал и теперь появляется страница 404.
                                                                  Спасибо за помощь.
                                                                    Володя
                                                                    29 февраля 2016, 09:24
                                                                    Плагин я пробовал, когда выставил в качестве обработчика динамический ресурс.
                                                                    у меня такая конструкция работает, скорее всего вы где то недосмотрели.

                                                                    На OnPageNotFound вроде своего ничего не висит.
                                                                    Я имел ввиду что у вас обработчик висел на нем. И в нем же вы вызывали sendErrorPage, а что такое sendErrorPage смотрим тут github.com/modxcms/revolution/blob/d79ec5e8c24df577cb6064f6d5468ec776207bd1/core/model/modx/modx.class.php#L1162

                                                                    и что он делает вот тут github.com/modxcms/revolution/blob/d79ec5e8c24df577cb6064f6d5468ec776207bd1/core/model/modx/modx.class.php#L1174?
                                                                    вызывает снова OnPageNotFound — вот вы и получали рекурсию.
                                                                      Katya Larionova
                                                                      01 марта 2016, 15:19
                                                                      У меня обработки VirtualPage стоит Ресурс (http://prntscr.com/a9srij)
                                                                      Событие стоит OnHandleRequest (http://prntscr.com/a9srqd)
                                                                      Плагин vpOnResourceAfterCreate не срабатывает.
                                                                      Куда дальше копать?
                                                                        Сергей Фещуков
                                                                        01 марта 2016, 15:29
                                                                        Не срабатывает, потому что стоит тип обработки Ресурс, а нужен Динамический ресурс, а в поле Запись выбрать нужно шаблон.
                                                                          Katya Larionova
                                                                          01 марта 2016, 15:46
                                                                          Пустые страницы остаются altravita-ivf.ru/voprosy-i-otvety/voprosy-embriolog/3323.html
                                                                          Вот мои настройки?
                                                                          Маршруты — prntscr.com/a9t2in
                                                                          Обработчик — prntscr.com/a9t1xa
                                                                          Плагин vpOnResourceAfterCreate
                                                                          <?php
                                                                          switch ($modx->event->name) {
                                                                          case 'vpOnResourceAfterCreate':

                                                                          $fastrouter = $modx->getOption('fastrouter', $_REQUEST, array());
                                                                          $id = $modx->getOption('id', $fastrouter);
                                                                          if (!$modx->getCount('easyComm', $id)) {
                                                                          $modx->sendErrorPage();
                                                                          }

                                                                          break;
                                                                          }
                                                                          Володя
                                                                          01 марта 2016, 16:11
                                                                          по скрину не видно, есть ли там параметр id что вы используете в плагине.
                                                                          ps. не забывайте оформляйте код.
                                                                          Katya Larionova
                                                                          01 марта 2016, 18:49
                                                                          А если id много, как их все в один плагин запихнуть?
                                                                          Володя
                                                                          01 марта 2016, 19:30
                                                                          не, не… смотрите, у вас есть маршрут например
                                                                          /voprosy/{cat:tralala|blalala}/{id:[0-9]+}
                                                                          в $_REQUEST у вас будет массив, в fastrouter — будут лежать переменные cat и id
                                                                          и вот по этим переменных можно осуществлять вывод каких то данных.

                                                                          если предположить что у вас есть переменная id в маршруте плагин будет выглядеть таким образом как вы и написали
                                                                          <?php
                                                                          switch ($modx->event->name) {
                                                                          case 'vpOnResourceAfterCreate':
                                                                          
                                                                          $fastrouter = $modx->getOption('fastrouter', $_REQUEST, array());
                                                                          $id = $modx->getOption('id', $fastrouter);
                                                                          if (!$modx->getCount('easyComm', $id)) {
                                                                          	$modx->sendErrorPage();
                                                                          } 
                                                                          
                                                                          break; 
                                                                          }
                                                                          думаю у вас нет параметра id в маршруте.

                                                                          ps. опять же это все предположения. Задавая вопросы подробнее описывайте проблему.
                                                                          Katya Larionova
                                                                          02 марта 2016, 11:50
                                                                          Маршрут такой — /voprosy-i-otvety/{cat:voprosy-reprotuktologu|voprosy-ginekologu|voprosy-urologu|voprosy-endokrinologu|voprosy-genetiku|voprosy-embriolog}/{id:[0-9]+}.html

                                                                          Более 1000 пустых страниц. Надо их всех на 404 переадресовать
                                                      Андрей
                                                      28 февраля 2016, 00:07
                                                      А как заставить работать VirtualPage с Redirector и AutoRedirector?
                                                        Алексей
                                                        05 марта 2016, 20:54
                                                        Добрый вечер. Работает ли rank в табличке маршрутов?
                                                        Непосредственно в таблице строчки хорошо drug-n-drop'ятся, но вот на порядок обработки маршрутов это совсем не влияет. Приходится создавать по-новой все маршруты в порядке, в котором они должны отрабатывать (видимо порядок обработки всета-ки идет по полю ID, а не по полю RANK). Вот такие вот дела. Никто больше не сталкивался с таким странным поведением дополнения?
                                                          Володя
                                                          05 марта 2016, 22:32
                                                          не чистится кэш после сортировки наверно…
                                                            Алексей
                                                            06 марта 2016, 07:59
                                                            а куда он пишет кэш? удалял полностью директорию /core/cache/, системная настройка
                                                            cache_handler='xPDOFileCache'
                                                            А также чистил кэш через «Управление» ->«Обновить сайт»
                                                          Katya Larionova
                                                          09 марта 2016, 11:45
                                                          Вопрос остается открытым. Как пустые страницы переадресовать на 404 страницу?
                                                          плагин vpOnResourceAfterCreate:
                                                          <?php
                                                          switch ($modx->event->name) {
                                                          case 'vpOnResourceAfterCreate':
                                                          $fastrouter = $modx->getOption('fastrouter', $_REQUEST, array());
                                                          $id = $modx->getOption('id', $fastrouter);
                                                          if (!$modx->getCount('easyComm', $id)) {
                                                          $modx->sendErrorPage();}
                                                          break;
                                                          }

                                                          Обработчик — prntscr.com/aczgxn
                                                            Володя
                                                            09 марта 2016, 12:10
                                                            дак все так же — modx.pro/components/5035-virtualpage-virtual-page/#comment-56714
                                                            вот тут тестовый сайт — s4692.h2.modhost.pro/
                                                            s4692
                                                            0aDvdt5CPorB

                                                            страница 1 — s4692.h2.modhost.pro/test/1
                                                            страница 2 — s4692.h2.modhost.pro/test/2
                                                            страница 3 — s4692.h2.modhost.pro/test/3 и тд

                                                            как видите если нет ресурса то идет редирект на 404.
                                                            плагин тут — s4692.h2.modhost.pro/manager/?a=element/plugin/update&id=5
                                                            вам нужно лишь заменить modResource
                                                              Katya Larionova
                                                              09 марта 2016, 12:41
                                                              у меня PDO стоит.
                                                              Виртуальные страницы используются для easyComm (вопрос-ответ). Для каждого вопроса, своя страница (
                                                              http://prntscr.com/aczy11
                                                              ).
                                                              Страница с вопросом и ответом —
                                                              http://altravita-ivf.ru/voprosy-i-otvety/voprosy-ginekologu/7037.html
                                                              Пустая страница выглядит так —
                                                              http://altravita-ivf.ru/voprosy-i-otvety/voprosy-ginekologu/5371.html
                                                              ID пустой страницы нет в списке easyComm (вопросов), так же и в базе данных.
                                                              Пустые страницы появляются после удаления вопросы из easyComm —
                                                              http://prntscr.com/aczyub
                                                                Katya Larionova
                                                                09 марта 2016, 15:18
                                                                Обработчик — /voprosy-i-otvety/{cat:voprosy-reprotuktologu|voprosy-ginekologu|voprosy-urologu|voprosy-endokrinologu|voprosy-genetiku|voprosy-embriolog}/{id:[0-9]+}.html
                                                                  Володя
                                                                  09 марта 2016, 15:29
                                                                  я вам выше написал как это работает, дал готовый пример, разбирайтесь…
                                                                    Katya Larionova
                                                                    09 марта 2016, 15:33
                                                                    а для pdo плагин не работает?
                                                              Николай
                                                              31 марта 2016, 23:37
                                                              Правильно понимаю, что компонент гибкая альтернатива решению с плагином: bezumkin.ru/sections/tips_and_tricks/2918/?

                                                                lexikon
                                                                30 мая 2016, 15:52
                                                                Плейсхолдеры с Динамическими страницами не работают?

                                                                Тоже самое только [[+page]]

                                                                В шаблоне выводим [[*content]], вижу только текст.
                                                                  lexikon
                                                                  30 мая 2016, 23:19
                                                                  разобрался, пардон… префикс vp у плейсхолдеров [[+vp.uri]]
                                                                  lexikon
                                                                  30 мая 2016, 17:16
                                                                  Как виртуальным динамическим страницам можно указать заголовки, мета тэги или динамичные описания?
                                                                    Володя
                                                                    30 мая 2016, 22:06
                                                                    <?php
                                                                    switch ($modx->event->name) {
                                                                    	case 'vpOnResourceAfterCreate':
                                                                    
                                                                    	$fastrouter = $modx->getOption('fastrouter', $_REQUEST, array());
                                                                    	$resource->set('description', 'трали вали, тоси боси');
                                                                    
                                                                    	break; 
                                                                    }
                                                                      lexikon
                                                                      30 мая 2016, 23:30
                                                                      спасибо! то что надо, только вот этот плагин будет срабатывать на все страницы)
                                                                      я же спрашивал возможно ли менять динамично, к примеру в описании страницы и заголовке использовать данные из самой страницы, на каждую же не будешь делать свой сниппет и вызывать для обозначения заголовков, ключевых слов. Понимаю что нужно в таком случае воспользоваться ресурсами, а не виртуальными страницами, но все же вопрос остается открытым)
                                                                    Дмитрий
                                                                    26 июля 2016, 16:11
                                                                    Володя, компонент отличный! Без него как без рук.
                                                                    Но есть один баг в админке, который есть довольно давно.

                                                                    Проблема в графе «Запись» в обработчике. После пролистывания списка записей, данные не меняются:
                                                                      Володя
                                                                      01 августа 2016, 13:44
                                                                      Обновил, поправил все косяки, возможно добавил новые… Проверяй!
                                                                      Григорий Коленько
                                                                      04 августа 2016, 14:09
                                                                      Привет! после обновления конструкция:
                                                                      /search-by-authors/{letter:[áčďéěíňóřšťúůýž]{2}|[a-z]{1}}.html
                                                                      Перестала работать :( 404 всегда



                                                                        Володя
                                                                        04 августа 2016, 15:27
                                                                        Поправил, проверяй!
                                                                          Григорий Коленько
                                                                          04 августа 2016, 15:31
                                                                          Спасибо большое!
                                                                          Еще заметил, что изменился массив. Теперь получать надо так:
                                                                          $searchLetter = $_REQUEST['fastrouter']['fastroute']['letter'];
                                                                          Раньше достаточно было:
                                                                          $_REQUEST['fastrouter']['letter'];
                                                                          Так задумано?
                                                                      Александр Толстенко
                                                                      10 ноября 2016, 14:20
                                                                      Добрый день. Владимир, подскажите пожалуйста, а как вытащить нужные поля документа, если я делаю те же услуги, только в другом регионе?
                                                                      т.е. есть услуги, их мне надо продублировать в раздел:
                                                                      работаем по районам->район->url_услуга_из_раздела_услуг.

                                                                      в обработчике Тип: динамический, Запись: шаблон конкретной услуги

                                                                      чтобы не плодить ресурсы, как достать поля pagetitle и другие нужного документа? заранее спасибо.
                                                                        Володя
                                                                        10 ноября 2016, 16:38
                                                                        создаете нужный вам маршрут, вешаете обработчик.
                                                                        если используете шаблонизатор то можно прям в нем получить ресурс и вывести нужные поля, если нет то простенький сниппет в котором получаете ресурс.
                                                                          Александр Толстенко
                                                                          10 ноября 2016, 17:28
                                                                          вот что я сделал:

                                                                          prntscr.com/d5ja79

                                                                          prntscr.com/d5jak1

                                                                          что мне дальше делать?
                                                                          не совсем понял вот это:
                                                                          если используете шаблонизатор то можно прям в нем получить ресурс и вывести нужные поля,
                                                                          т.е. в шаблоне? я не силен в php подскажите пожалуйста как получить.
                                                                            Володя
                                                                            10 ноября 2016, 17:36
                                                                            все верно. нужно теперь получить ресурс например с помощью docs.modx.pro/components/pdotools/snippets/pdoresources
                                                                            id ресурса у вас будет в плейсходере [[!+vp.id]]
                                                                              Александр Толстенко
                                                                              10 ноября 2016, 19:12
                                                                              сделал выборку чтобы посмотреть то ли выводит

                                                                              [[!pdoResources?
                                                                              	&parents=`[[!+vp.id]]`
                                                                              	&tpl=`@INLINE [[+pagetitle]]`
                                                                              ]]
                                                                              выводит не то что надо. у меня тут есть ее кое какие ресурсы в районе, выводит все их pagetitle.
                                                                              в логах появляется:
                                                                              core/xpdo/om/xpdoquery.class.php : 739) Encountered empty IN condition with key id
                                                                              проверил что в [[!+vp.id]] — alias района но не id нужного ресурса.

                                                                              пробывал заменить маршрут на /rajon/{page}/{alias}.html перестал его выводить, вообще не чего не вывел.

                                                                              структура админки у меня такая: prntscr.com/d5kt1l
                                                                                Володя
                                                                                10 ноября 2016, 21:55
                                                                                &parents=`[[!+vp.id]]`
                                                                                в маршруте параметр id — id ресурса? Если да то вам не parents надо указывать.
                                                                                проверил что в [[!+vp.id]] — alias района но не id нужного ресурса.
                                                                                значит вы где то неправильно формируете ссылку…
                                                                                если вы плаваете в таких вещах то попросите кого то помочь…
                                                                                  Александр Толстенко
                                                                                  11 ноября 2016, 10:54
                                                                                  ссылку я формирую правильно, поэтому и параметры передаются не id а alias ресурса, т.к. он и указан в адресе строки. мне не нужны id в ссылке, поэтому получил ресурс вот так
                                                                                  [[pdoResources?
                                                                                  	&parents=`3` // id знаю от куда надо))
                                                                                  	&tpl=`@INLINE [[+pagetitle]]`
                                                                                  	&where=`{"alias":"[[!+vp.alias]]"}`
                                                                                  ]]
                                                                                  спасибо. сразу не сообразил
                                                                                    Александр Толстенко
                                                                                    29 ноября 2016, 13:13
                                                                                    Владимир, подскажите пожалуйста а как избавиться от пустых страниц.
                                                                                    К сожалению, не силен в пхп поэтому вынужден задавать тупые вопросы))
                                                                                    страницу вывожу через шаблон вот так:
                                                                                    [[!pdoResources?&parents=`3`&tpl=`tpl.VirtualPageRajonUsluga`&where=`{"alias":"[[!+vp.alias]]"}`&includeContent=`1`]]
                                                                                    создал плагин на событие: vpOnResourceAfterCreate
                                                                                    <?php
                                                                                    switch ($modx->event->name) {
                                                                                    case 'vpOnResourceAfterCreate':
                                                                                    $fastrouter = $modx->getOption('fastrouter', $_REQUEST, array());
                                                                                    $alias = $modx->getOption('alias', $fastrouter);
                                                                                    if (!$modx->getCount('easyComm', $alias)) { //здесь не знаю что писать в место плагина easyComm
                                                                                    	$modx->sendErrorPage();
                                                                                    } 
                                                                                    break; 
                                                                                    }
                                                                                    Спасибо.
                                                                                      Володя
                                                                                      29 ноября 2016, 14:03
                                                                                      вы выводите ресурс, значит и нужно проверять есть ли такой в наличии.
                                                                                      if (!$modx->getCount('modResource', array('alias'=>$alias))) {
                                                                                      	$modx->sendErrorPage();
                                                                                      }
                                                                                        Александр Толстенко
                                                                                        29 ноября 2016, 15:45
                                                                                        Спасибо.
                                                                                        что то выводится просто белый экран. а не 404. не отрабатывает по ходу sendErrorPage, с чем это может быть связано? Знаете? Шаблон 404 задан в сист. настройках error_page (id ресурса).
                                                                                          Володя
                                                                                          29 ноября 2016, 15:55
                                                                                          пример кода рабочий, значит что то еще не так.
                                                                                          Попробуйте повторить ситуацию на тестовом сайте.
                                                                          Александр Толстенко
                                                                          10 ноября 2016, 14:33
                                                                          Владимир, и еще один вопрос: эти же страницы будут ли эти страницы индексироваться?
                                                                            Володя
                                                                            10 ноября 2016, 16:38
                                                                            будут индексироваться
                                                                            Виталий Володько
                                                                            11 ноября 2016, 09:11
                                                                            У меня странная проблема при установке. В консоли вывод:
                                                                            Skipping vehicle object of class modSystemSetting (data object exists and cannot be upgraded); criteria: Array ( [key] => virtualpage_active ) 
                                                                            Skipping vehicle object of class modSystemSetting (data object exists and cannot be upgraded); criteria: Array ( [key] => virtualpage_exclude_event_groupname ) 
                                                                            Skipping vehicle object of class modSystemSetting (data object exists and cannot be upgraded); criteria: Array ( [key] => virtualpage_fastrouter_key ) 
                                                                            Skipping vehicle object of class modSystemSetting (data object exists and cannot be upgraded); criteria: Array ( [key] => virtualpage_prefix_placeholder ) 
                                                                            Skipping vehicle object of class modAction (data object exists and cannot be upgraded); criteria: Array ( [namespace] => virtualpage [controller] => index )
                                                                            Skipping vehicle object of class modMenu (data object exists and cannot be upgraded); criteria: Array ( [text] => virtualpage ) 
                                                                            Trying to download fastroute. Please wait...
                                                                            Could not extract fastroute from fastroute.zip to /home/test/public_html/core/components/virtualpage/vendor/. Error: Invalid End of Central Dir Record size : 15 [code -10]
                                                                            Сможете объяснить в чем может быть проблема?
                                                                              Наумов Алексей
                                                                              18 января 2017, 16:47
                                                                              Владимир, обновление с версии 1.0.9-beta до последней на рабочем сайте безопасно?

                                                                              У меня созданы с десяток маршрутов, обработчиков, висящих на OnHandleRequest.
                                                                                Володя
                                                                                18 января 2017, 16:57
                                                                                Сейчас уже не скажу… Сделайте тестовый сайт и попробуйте.
                                                                                Наумов Алексей
                                                                                01 марта 2017, 15:25
                                                                                Владимир, привет.

                                                                                Стокнулся с непонятностью, кратко:
                                                                                Маршрут: /users/{user:[0-9]+}/
                                                                                Т.е. страницы вида /users/1532/, на которых я показываю информацию о пользователе, метод — GET, событие — логично, что onHandleRequest.

                                                                                Обработчик — Ресурс, в котором вызывается некий сниппет, получающие данные пользователя.
                                                                                Делаю в сниппете простую проверку, что пользователь существует, и если его нет — то хочу показать 404
                                                                                return $modx->sendErrorPage();
                                                                                так вот это приводит к зацикливанию, скрипт или вываливается по времени или по памяти).

                                                                                Как правильно 404 ошибку то показать в таком случае?.. Выше похожий случай разбирали и пришли в итоге к тому, что нужно событие поменять на OnHandleRequest, но мне не помогает это.

                                                                                И MODX и VirtualPage последних версий.
                                                                                  Володя
                                                                                  01 марта 2017, 15:49
                                                                                  у меня все работает…
                                                                                  по тому описанию что вы дали так же должно все работать.
                                                                                  Создайте тестовый сайт и продемонстрируйте проблему там.
                                                                                  Спасибо!
                                                                                    Наумов Алексей
                                                                                    01 марта 2017, 16:31
                                                                                    Fenom-чик виноват-то…

                                                                                    Сделал все:
                                                                                    s8738.h7.modhost.pro/

                                                                                    Админка s8738 / ZEnzfcpZMFXA

                                                                                    Если в шаблоне используется
                                                                                    [[*content]]
                                                                                    то все работает, а если
                                                                                    {$_modx->resource.content}
                                                                                    то труба, не фурычит.

                                                                                    Можешь зайти, попробовать, постарался все максимально упростить, обработчик на странице page, сниппет — snippet.
                                                                                      Наумов Алексей
                                                                                      01 марта 2017, 16:36
                                                                                      А-ха-ха, прости, бес попутал меня, в имени твоем дважды уже ошибся, извини)))) Первый раз случайно, а второй еще и скопировал.
                                                                                        Володя
                                                                                        01 марта 2017, 16:38
                                                                                        не могу зайти/ скинь в личку.
                                                                                          Наумов Алексей
                                                                                          01 марта 2017, 16:42
                                                                                          Пардон, пароль от админки g11ICNoM47hH
                                                                                            Володя
                                                                                            01 марта 2017, 16:58
                                                                                            ну так правилльно вы используете ресурс — задействует метод sendForward и в нем же снова фигачите sendErrorPage который делает что? опять делает sendForward.

                                                                                            Либо смените тип на динамический, либо делайте например
                                                                                            $options= array(
                                                                                                        'error_type' => '404'
                                                                                                        ,'error_header' => $modx->getOption('error_page_header', null,'HTTP/1.1 404 Not Found')
                                                                                                        ,'error_pagetitle' => $modx->getOption('error_page_pagetitle', null,'Error 404: Page not found')
                                                                                                        ,'error_message' => $modx->getOption('error_page_message', null,'<h1>Page not found</h1><p>The page you requested was not found.</p>')
                                                                                                );
                                                                                                return $modx->sendError(1,$options);
                                                                                            выдаст просто сообщение Page not found
                                                                                              yani
                                                                                              04 апреля 2017, 23:27
                                                                                              Володя, а подскажите,
                                                                                              Есть запись типа
                                                                                              /shkola/treneryi/{pagetitle}/kariera.html
                                                                                              /shkola/treneryi/{pagetitle}/nagradi.html
                                                                                              а что если сменят alias — «shkola» и «treneryi»? по идее будет 404?
                                                                                              пробовала указать /{pagetitle}/nagradi.html — перестает работать, 404.
                                                                                              Спасибо!)
                                                                                                Володя
                                                                                                04 апреля 2017, 23:44
                                                                                                не понял о чем вопрос…
                                                                                                  yani
                                                                                                  05 апреля 2017, 07:52
                                                                                                  как укоротить путь до
                                                                                                  /{pagetitle}/nagradi.html
                                                                                                  или как сделать первую часть динамической?
                                                                                                  типа
                                                                                                  /{id_ресурса.alias}/{id_ресурса.alias}/{pagetitle}/nagradi.html
                                                                                                  Предполагаю, а вдруг изменять Alias у контейнера?
                                                                                                  ЕДинственное, пришедшее в голову решение — писать плагин
                                                                                                    Володя
                                                                                                    05 апреля 2017, 09:04
                                                                                                    или как сделать первую часть динамической?

                                                                                                    так задайте маршрут типа
                                                                                                    /{param1}/{param2}/{id}.html
                                                                                                    и все
                                                                                                      yani
                                                                                                      05 апреля 2017, 10:10
                                                                                                      Спасибо!
                                                                                                      yani
                                                                                                      06 апреля 2017, 08:38
                                                                                                      А подскажите еще, пожалуйста, а как перестроить мне нужные pagetitle?
                                                                                                      как сделать хлебные крошки? а то сейчас показывает ГЛАВНАЯ
                                                                                                      Это полностью переписывать шаблон, получать по uri id ресурса, получать его поля и выставлять их плейсхолдерами?
                                                                                                      То есть если на странице у меня было [[*pageitle]], то будет [[+pagetitle]]?
                                                                                  Константин
                                                                                  13 апреля 2017, 13:34
                                                                                  Какие ограничения для демо версии?
                                                                                    serg
                                                                                    23 июня 2017, 15:28
                                                                                    Если пытаться получить ресурс по ajax, то выполняются все плейсхолдеры, Fenom, но не !pdoPage. Есть какой-то вариант обойти это ограничение?
                                                                                      Володя
                                                                                      23 июня 2017, 15:30
                                                                                      в пакете нет никаких ограничений, проблема думаю в другом…
                                                                                        serg
                                                                                        23 июня 2017, 15:52
                                                                                        Может есть какие-то идеи насчет возможной проблемы?
                                                                                        Чанк-шаблон страницы pastebin.com/z8hJrFCy. Всё вызывается как надо, s9939.h8.modhost.pro/users/33. Элемент с комментариями #user_comments_ajax_row
                                                                                        При попытке подгрузить методом .get Jquery приходит всё, но на месте вызова !pdoPage пустота. s9939.h8.modhost.pro/blog-glavnogo-vracha/ клик на «запись 2», клик на пользователя.
                                                                                          serg
                                                                                          23 июня 2017, 16:26
                                                                                          Да, косяк вряд ли в VP, потому что вызов pdoPage БЕЗ &ajaxMode=`button`работает как надо.
                                                                                            Володя
                                                                                            23 июня 2017, 16:33
                                                                                            Незнаю, исходный код компонентов доступен на гитхаб, если вам интересно можно попробовать выяснить в чем дело.
                                                                                      Илья
                                                                                      10 мая 2018, 13:42
                                                                                      Здравствуйте, коллеги.
                                                                                      Подскажите пожалуйста как правильно прописать в маршрут артикул товара, если он является опцией msoptionprice?
                                                                                      как вообще правильно организовать виртуальные страницы из опций?
                                                                                        Олег
                                                                                        01 июня 2018, 11:14
                                                                                        Добрый день, есть пример как работают не виртуальные страницы, а sendforward с ресурсом?
                                                                                        Выпадает в 500 ошибку.
                                                                                        Нужен конкретный ресурс, чтобы привязать комментарии к реальной странице, а не к виртуальной.
                                                                                        Либо как виртуальной задать id, чтобы по нему выводить комментарии
                                                                                          g0dzilla
                                                                                          26 июля 2018, 17:05
                                                                                          Параметр «request_alias» вроде как уже звучит по-другому.
                                                                                          Метод getUri(),
                                                                                          $alias = $this->modx->getOption('request_alias', null, 'q');
                                                                                          Ныне он называется «request_param_alias».
                                                                                            Кирилл Киселев
                                                                                            16 августа 2018, 09:26
                                                                                            А я могу как-то на входе изменить параметр и отдать его по-другому?
                                                                                            Например, пришёл параметр {par1} из маршрута как catalog, меняю его на shop и на выходе должен получится не domain/catalog/, а domain/shop/. Есть ли какой-то метод?
                                                                                              Brezhnev Ivan
                                                                                              04 мая 2020, 10:52
                                                                                              Вам нужно настроить редиректы, выглядит как классический редирект.

                                                                                              Можно сделать средствами MODX или веб-сервера
                                                                                              Роман
                                                                                              30 апреля 2019, 11:15
                                                                                              Перечитал весь топик, не до конца понял принцип работы. Модуль очень интересный, хочу реализовать вывод опций товаров на отдельной странице. Как я вижу.
                                                                                              Есть опции: Амперы(amper), Вольты(volt), Давление(davlenie) и хотелось бы вывести
                                                                                              /options/amper/
                                                                                              /options/volt/
                                                                                              /options/davlenie/
                                                                                              Реально ли так реализовать?
                                                                                                slavkovladymyr
                                                                                                19 июня 2019, 17:40
                                                                                                После последних коммитов разработчиков FastRoute — github.com/nikic/FastRoute дополнение не работает. Был удален bootstrap.php файл и много изменений в других файлах библиотеки. Новые установки VirtualPage с измениями FastRoute не будут работать.
                                                                                                Просим Володю обновить модуль ;)
                                                                                                  Abu
                                                                                                  Abu
                                                                                                  30 июня 2019, 00:32
                                                                                                  Да уж, пришлось вручную скачать и распаковать старый FastRoute в директорию core/components/virtualpage/vendor/fastroute
                                                                                                  Владимир
                                                                                                  24 августа 2019, 09:17
                                                                                                  А вот этот аналог modx.com/extras/package/?id=modxfastrouter кто-нибудь использует? Раз уж VirtualPage больше недоступен.
                                                                                                  Доки github.com/vanchelo/modxFastRouter
                                                                                                    Stepan
                                                                                                    18 июня 2021, 16:42
                                                                                                    продукт еще поддерживается?
                                                                                                    а то очень хотельбы узнать а как быть с заголовками и все такое?
                                                                                                    можно как-то после такого кастомного роутинга вернуться к стандартному
                                                                                                    ну чтобы в один маршрут обрабатывался и VP и modx стандартными способами
                                                                                                      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                                                                                                      183