К содержанию

[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
17 020
Поблагодарить автора Отправить деньги
Реклама

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

Сергей Шлоков
Сергей Шлоков Эксперт
15 марта 2015, 14:28
Хорошая весчь.
    Wassi Wassinen
    Wassi Wassinen Проверенный
    15 марта 2015, 14:54
    Володя, а у тебя, случаем, руки до userProfile не дошли? А то денег я заплатил за компонент, а он через пень колоду работает.
      Володя
      Володя Эксперт
      15 марта 2015, 15:08
      Если бы ты включил голову — ты бы не задавал таких вопросов.
      Как платил — так и работает… Еще вопросы есть?
        Wassi Wassinen
        Wassi Wassinen Проверенный
        15 марта 2015, 16:37
        Володя, оно не работает, если установлен Office. Заплатил я тебе в полной мере. Вопросов к тебе после этого комментария больше нет.
          Володя
          Володя Эксперт
          15 марта 2015, 17:04
          вот и отлично!
          Николай
          Николай Проверенный
          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
              Что я делаю не так?
                Володя
                Володя Эксперт
                24 марта 2015, 18:41
                fastroute: «php»: ">=5.4.0"
                Алексей Карташов
                Алексей Карташов Проверенный
                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
                        С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
                            С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
                              Spam Проверенный
                              14 апреля 2015, 16:15
                              с русскими буквами работает?
                              /page/letter-{get:[A-Za-zА-Яа-я0-9]}
                              не работает с рус буквой, а с англ/цифрам работает
                                Дмитрий Иванов
                                Дмитрий Иванов Старожил
                                14 апреля 2015, 16:24
                                у меня так работает
                                А-Па-пР-Яр-я
                                  Spam
                                  Spam Проверенный
                                  14 апреля 2015, 16:46
                                  страно конечно, но не работает у меня. вы бы не могли бы ещё у себя протестировать
                                  /food/{food:(eda|cat|cat_dog)}
                                    Дмитрий Иванов
                                    Дмитрий Иванов Старожил
                                    14 апреля 2015, 17:15
                                    раньше тестировал подобную конструкцию, работала. А какая версия php у вас?
                                      Spam
                                      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}
                                        Володя
                                        Володя Эксперт
                                        14 апреля 2015, 19:56
                                        не нужно выделять конструкцию в группу. Пользуйте
                                        /food/{food:eda|cat|cat_dog}
                                        или же ставьте тогда
                                        /food/{food:(?:eda|cat|cat_dog)}
                                          Дмитрий Иванов
                                          Дмитрий Иванов Старожил
                                          14 апреля 2015, 21:02
                                          Да уже разобрались, просто забыл как там правильно, смотрел же в доках по фастроутеру)
                                          По поводу ссылок для разных контекстов, нет в планах?
                                            Spam
                                            Spam Проверенный
                                            14 апреля 2015, 21:49
                                              Володя
                                              Володя Эксперт
                                              14 апреля 2015, 22:25
                                              вот же ответ modx.pro/components/5035-virtualpage-virtual-page/#comment-38237
                                              могу сказать что у меня тоже работает…
                                              Или давайте подробнее поясняйте. Какая регулярка, какой адрес и тд… Что не работает.
                                              ps. Пример подробного вопроса — modx.pro/components/5035-virtualpage-virtual-page/#comment-36865

                                                Spam
                                                Spam Проверенный
                                                15 апреля 2015, 00:59



                                                Сайт: http://s1581.h3.modhost.pro/test/letter-(ТУТ БУКВА)

                                                регулярка: /test/letter-{get:[a-zа-пр-я0-9]}
                                                  Володя
                                                  Володя Эксперт
                                                  15 апреля 2015, 09:07
                                                  ага, вижу что работает не так как надо…
                                                  Я не спец по регуляркам, но думаю это из за кирилицы.
                                                  Попробуйте решение в лоб
                                                  letter-{get:[абвгдеёжзийклмнопрстуфхцчшщъыьэюя]{2}|[a-z0-9]{1}}
                                                    Spam
                                                    Spam Проверенный
                                                    15 апреля 2015, 19:08
                                                    del
                                      Spam
                                      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
                                      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
                                          Sergey Leleko Проверенный
                                          30 мая 2015, 12:54
                                          Благодарю за ответ.
                                          Вообщем глюк да только с отображением названия, то что показано на скринах.

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

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

                                                    Если кто-то чирканет фрагмент кода буду очень благодарен.
                                                    Фрагментом кода здесь не ограничишься. Нужны проверки при загрузке, ресайз после загрузки, и удаление старых автарок при обновлении.
                                                      Rrp2010
                                                      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
                                                      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
                                                            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
                                                                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
                                                                              Katya Larionova Старожил
                                                                              01 марта 2016, 15:19
                                                                              У меня обработки VirtualPage стоит Ресурс (http://prntscr.com/a9srij)
                                                                              Событие стоит OnHandleRequest (http://prntscr.com/a9srqd)
                                                                              Плагин vpOnResourceAfterCreate не срабатывает.
                                                                              Куда дальше копать?
                                                                                Сергей Фещуков
                                                                                Сергей Фещуков Проверенный
                                                                                01 марта 2016, 15:29
                                                                                Не срабатывает, потому что стоит тип обработки Ресурс, а нужен Динамический ресурс, а в поле Запись выбрать нужно шаблон.
                                                                                  Katya Larionova
                                                                                  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
                                                                                  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
                                                                                  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
                                                                  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
                                                                      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
                                                                        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
                                                                            Katya Larionova Старожил
                                                                            09 марта 2016, 15:33
                                                                            а для pdo плагин не работает?
                                                                      Николай
                                                                      Николай Проверенный
                                                                      31 марта 2016, 23:37
                                                                      Правильно понимаю, что компонент гибкая альтернатива решению с плагином: bezumkin.ru/sections/tips_and_tricks/2918/?

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

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

                                                                        В шаблоне выводим [[*content]], вижу только текст.
                                                                          lexikon
                                                                          lexikon Проверенный
                                                                          30 мая 2016, 23:19
                                                                          разобрался, пардон… префикс vp у плейсхолдеров [[+vp.uri]]
                                                                          lexikon
                                                                          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
                                                                              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'];
                                                                                  Так задумано?
                                                                                    Володя
                                                                                    Володя Эксперт
                                                                                    04 августа 2016, 15:34
                                                                                    специально не задумывалось, сейчас посмотрю этот момент.
                                                                                      Володя
                                                                                      Володя Эксперт
                                                                                      04 августа 2016, 15:44
                                                                                      +
                                                                                Александр Толстенко
                                                                                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
                                                                                                        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
                                                                                                            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
                                                                                                                yani Проверенный
                                                                                                                05 апреля 2017, 10:10
                                                                                                                Спасибо!
                                                                                                                yani
                                                                                                                yani Проверенный
                                                                                                                06 апреля 2017, 08:38
                                                                                                                А подскажите еще, пожалуйста, а как перестроить мне нужные pagetitle?
                                                                                                                как сделать хлебные крошки? а то сейчас показывает ГЛАВНАЯ
                                                                                                                Это полностью переписывать шаблон, получать по uri id ресурса, получать его поля и выставлять их плейсхолдерами?
                                                                                                                То есть если на странице у меня было [[*pageitle]], то будет [[+pagetitle]]?
                                                                                            Константин
                                                                                            Константин Старожил
                                                                                            13 апреля 2017, 13:34
                                                                                            Какие ограничения для демо версии?
                                                                                              serg
                                                                                              serg Старожил
                                                                                              23 июня 2017, 15:28
                                                                                              Если пытаться получить ресурс по ajax, то выполняются все плейсхолдеры, Fenom, но не !pdoPage. Есть какой-то вариант обойти это ограничение?
                                                                                                Володя
                                                                                                Володя Эксперт
                                                                                                23 июня 2017, 15:30
                                                                                                в пакете нет никаких ограничений, проблема думаю в другом…
                                                                                                  serg
                                                                                                  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
                                                                                                    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
                                                                                                    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
                                                                                                        Brezhnev Ivan Старожил
                                                                                                        04 мая 2020, 10:52
                                                                                                        Вам нужно настроить редиректы, выглядит как классический редирект.

                                                                                                        Можно сделать средствами MODX или веб-сервера
                                                                                                        Роман
                                                                                                        Роман Старожил
                                                                                                        30 апреля 2019, 11:15
                                                                                                        Перечитал весь топик, не до конца понял принцип работы. Модуль очень интересный, хочу реализовать вывод опций товаров на отдельной странице. Как я вижу.
                                                                                                        Есть опции: Амперы(amper), Вольты(volt), Давление(davlenie) и хотелось бы вывести
                                                                                                        /options/amper/
                                                                                                        /options/volt/
                                                                                                        /options/davlenie/
                                                                                                        Реально ли так реализовать?
                                                                                                          slavkovladymyr
                                                                                                          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
                                                                                                              Stepan Проверенный
                                                                                                              18 июня 2021, 16:42
                                                                                                              продукт еще поддерживается?
                                                                                                              а то очень хотельбы узнать а как быть с заголовками и все такое?
                                                                                                              можно как-то после такого кастомного роутинга вернуться к стандартному
                                                                                                              ну чтобы в один маршрут обрабатывался и VP и modx стандартными способами
                                                                                                                Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                                                                                                                183