[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
12
10 708
+11
Поблагодарить автора Отправить деньги

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

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

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

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

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

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

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



              Версия MODX 2.3.3, PHP 5.3.29
              Что я делаю не так?
                Володя
                24 марта 2015, 18:41
                0
                fastroute: «php»: ">=5.4.0"
                Алексей Карташов
                26 марта 2015, 18:22
                +2
                Только что столкнулся вот с таким поведением.

                Допустим, нужно вывести форму редатирования профиля пользователя (или любого кастомного объекта).
                Урл страницы имеет вид:
                /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
                  +1
                  Думаю что правильнее будет указание схожего обработчика только с другим методом запроса.
                  То есть если нам нужна еще и отправка форм — то добавить такой же обработчик с POST и все…

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

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

                    Думаю что правильнее будет указание схожего обработчика только с другим методом запроса.
                    Это было первым, что я попробовал сделать) Да только вот в тот момент получал 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
                      0
                      Многие компоненты используют свои урл, которые плагинами генерируют, и их никак не узнать для построения каноникала, vp — только капля в море)
                        Алексей Карташов
                        28 марта 2015, 16:00
                        0
                        Понятное дело, но всеми ими я не пользуюсь, а вот vp теперь будет постоянным гостем на моих сервисах)
                        Володя
                        28 марта 2015, 02:11
                        +1
                        Вполне логично да, просто со временем напряг немного…
                        Добавил POST/GET и плейсходер uri.
                        Новая версия пока на гитхаб. Пробуй.
                          Алексей Карташов
                          28 марта 2015, 16:02
                          +1
                          Круто, спасибо! Всё работает)

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

                    динамический ресурс
                    Добавлен новый обработчик — «динамический ресурс». Идея заимствована у Василия, подробности тут.
                      Володя
                      02 апреля 2015, 11:14
                      0
                      обновление — 1.0.5-beta
                      Добавил кэширование динамических страниц. Тестируем, отписываемся…
                        Сuriosity
                        04 апреля 2015, 22:49
                        0
                        Володя, по-прежнему выдает ошибку:
                        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
                          0
                          для роутинга используется библиотека fastRouter работает она на php >=5.4.0
                            Сuriosity
                            05 апреля 2015, 00:03
                            0
                            Понял. Спасибо
                          Дмитрий Иванов
                          05 апреля 2015, 20:46
                          0
                          неплохо бы как-то реализовать поддержку разных контекстов. Например, ресурс-обработчик выбирается свой для каждого контекста. Иначе, когда несколько контекстов и нужны в них одинаковые ссылки, приходится их делать разными для каждого контекста…
                          и вообще можно ссылки разделять на контексты, выбирать в каком они будут работать)
                            Володя
                            05 апреля 2015, 21:08
                            0
                            Пока что не вижу смысла засовывать эту логику в компонент.
                            Объясните подробнее где и с какой целью это необходимо…
                            Спасибо!
                              Дмитрий Иванов
                              05 апреля 2015, 21:14
                              0
                              К примеру, если переключается контекст для мультиязычных сайтов и там одинаковые ссылки, но обработать их надо ресурсом из соответствующего языку контекста, естественно.
                                Алексей
                                15 апреля 2015, 10:16
                                0
                                Переключение контекста в мультидоменном сайте.
                                К примеру, у меня два контекста:
                                1. web - адрес http://domain1.com
                                2. web2 - адрес http://somain2.com
                                В разных контекстах работают разные правила маршрутизации.
                                Либо в параметр «маршрут» надо указать хост, вот так:
                                Маршрут: "http://domain1.com/users/{id:[0-9]+}.html"
                                А для второго контекста маршруты будут прописываться так:
                                Маршрут: "http://domain2.com/users/{id:[0-9]+}.html"
                              Spam
                              14 апреля 2015, 16:15
                              0
                              с русскими буквами работает?
                              /page/letter-{get:[A-Za-zА-Яа-я0-9]}
                              не работает с рус буквой, а с англ/цифрам работает
                                Дмитрий Иванов
                                14 апреля 2015, 16:24
                                0
                                у меня так работает
                                А-Па-пР-Яр-я
                                  Spam
                                  14 апреля 2015, 16:46
                                  0
                                  страно конечно, но не работает у меня. вы бы не могли бы ещё у себя протестировать
                                  /food/{food:(eda|cat|cat_dog)}
                                    Дмитрий Иванов
                                    14 апреля 2015, 17:15
                                    0
                                    раньше тестировал подобную конструкцию, работала. А какая версия php у вас?
                                      Spam
                                      14 апреля 2015, 17:20
                                      0
                                      PHP 5.5.23 (cli) (built: Mar 19 2015 09:03:54)
                                      Дмитрий Иванов
                                      14 апреля 2015, 17:32
                                      +1
                                      Сейчас проверил эту конструкцию, получил какой-то бред. Обрабатывается совсем другим обработчиком, не тем, что указан для этого урл. вот так работает
                                      /food/{food:eda|cat|cat_dog}
                                        Володя
                                        14 апреля 2015, 19:56
                                        0
                                        не нужно выделять конструкцию в группу. Пользуйте
                                        /food/{food:eda|cat|cat_dog}
                                        или же ставьте тогда
                                        /food/{food:(?:eda|cat|cat_dog)}
                                  Spam
                                  14 апреля 2015, 16:49
                                  1
                                  0
                                  ну и такое ещё выдаёт ошибку
                                  /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
                                  0
                                  Помогите разобраться с работой VirtualPage. На сервере PHP 5.5 стоит, поставил UserProfile2 и VirtualPage. Пользователи выводятся, но не возможно перейти на страницы с их профайлами, последними тикетами и топиками. Нужно ли какие-то записи в .htaccess производить? Вот сайт где наблюдаются проблемы www.horrorstory.ru

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                                            /users/{user_firstname:[A-Za-z0-9]+}/
                                              Илья
                                              30 августа 2015, 19:00
                                              0
                                              Пробовал, ошибка «500 Internal Server Error»
                                              Хостинг modhost, Modx 2.4.0-pl
                                              Сейчас хотел попробовать на тестовом modhost, блин, userprofile2 не ставится пишет останавливается на: Trying to install pdoTools. Please wait…
                                                Илья
                                                30 августа 2015, 19:11
                                                0
                                                Попробовал на 2.3.6, та же ошибка «500 Internal Server Error», у всего сайта, кроме админки
                                              Любовь
                                              03 сентября 2015, 11:54
                                              0
                                              Не могу удалить компонент: при обновлении кэша пишет
                                              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
                                                0
                                                — удалите/ отключите плагины virtualpage
                                                — пункты меню удалите в админке /manager/?a=system/action
                                                — userprofile2 связан с virtualpage. удалить аналогично virtualpage. Таблицы удалить руками в базе.
                                                  Любовь
                                                  03 сентября 2015, 12:23
                                                  0
                                                  up_extendes и up_extended_setting тоже удалять?
                                                  Удалила, но все равно пишет при обновлении кэша:
                                                    Роман Садоян
                                                    03 сентября 2015, 13:01
                                                    +1
                                                    Попробуйте Деинсталляцию компонента
                                                      Любовь
                                                      03 сентября 2015, 13:02
                                                      0
                                                      его уже нет в списке…
                                                        Роман Садоян
                                                        03 сентября 2015, 13:05
                                                        +1
                                                        Всё равно установите и сделайте деинсталляцию!
                                                          Любовь
                                                          03 сентября 2015, 13:13
                                                          0
                                                          Помогло! Огромное спасибо!
                                                Андрей
                                                10 сентября 2015, 02:08
                                                0
                                                Если маршрут начинается с /text не работает. Пример маршрута /text/{name} Меняешь на /tex2t/{name} и работает
                                                У меня одного так?
                                                  Володя
                                                  10 сентября 2015, 09:20
                                                  0
                                                  там наверно буква из другого языка затесалась… вот и не работает. Проверяйте лучше!
                                                    Андрей
                                                    10 сентября 2015, 10:46
                                                    0
                                                    Володя, это я первым делом проверил и добавление «2» тогда бы не решало проблему.
                                                  Якуб
                                                  20 января 2016, 20:38
                                                  0
                                                  Использую маршрут
                                                  /users/{user_id:[0-9]+}
                                                  для страницы «информация», набираю адрес типа:
                                                  /users/155666
                                                  ( т.е id не существующего юзера), открывается пустая страница «информация». Подскажите, как от этого избавиться?
                                                    Володя
                                                    20 января 2016, 21:01
                                                    0
                                                    в сниппете при отсутствии объекта редиректить на 404
                                                      Якуб
                                                      20 января 2016, 22:52
                                                      0
                                                      Где его взять?)) В php не особо…
                                                    Василий Столейков
                                                    01 февраля 2016, 20:12
                                                    0
                                                    При переносе с модхоста на другой хостинг страница с профилем пользователя, например /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
                                                      0
                                                      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
                                                        0
                                                        значит не отключены наверно.
                                                        На хостинге отключены однозначно. Может в самом скрипте включены где-то… Может и в других сниппетах на той же странице, я ещё проверю…
                                                        А нечего с модхоста было переходить)))
                                                        Я точно то же самое заказчику твержу…
                                                      Katya Larionova
                                                      20 февраля 2016, 13:19
                                                      0
                                                      вопрос выше задавался. VirtualPage используется со сниппетом easyComm (вопрос/ответ). Для каждого вопроса создается своя страница. Если удаляется вопрос, которые был опубликован, то появлються пустые страницы по этим же адресам.
                                                      В базе этих строк не нахожу, как избавится от этого бага?
                                                      Было предложено такое решение — в сниппете при отсутствии объекта редиректить на 404
                                                      В каком именно сниппете?
                                                        Володя
                                                        20 февраля 2016, 14:28
                                                        1
                                                        0
                                                        если у вас динамические страницы, то можно поступить так.
                                                        создать плагин на vpOnResourceAfterCreate
                                                        в нем проверяйте актуальность своих данных и если их нет то просто отправляете пользоваетля на страницу ошибок.
                                                        <?php
                                                        switch ($modx->event->name) {
                                                        	case 'vpOnResourceAfterCreate':
                                                        
                                                        	    $fastrouter = $modx->getOption('fastrouter', $_REQUEST, array());
                                                        	    /* ваша проверка */
                                                        	    if (false) {
                                                        	        $modx->sendErrorPage();
                                                        	    }
                                                        	    
                                                                break;	    
                                                        }
                                                          Katya Larionova
                                                          24 февраля 2016, 10:14
                                                          0
                                                          В php не сильна. Подскажите, как правильно прописать проверку? Пустые страницы выглядят так altravita-ivf.ru/voprosy-i-otvety/voprosy-reprotuktologu/4089.html
                                                            Володя
                                                            24 февраля 2016, 11:10
                                                            0
                                                            я так понимаю 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
                                                              0
                                                              $modx->sendErrorPage();
                                                              Приводит к циклическому редиректу.
                                                              Нашёл также такой вариант вызова:
                                                              $modx->sendErrorPage(array('stop' => true));
                                                              Но также приводит к циклическому редиректу.

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

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

                                                                      и что он делает вот тут github.com/modxcms/revolution/blob/d79ec5e8c24df577cb6064f6d5468ec776207bd1/core/model/modx/modx.class.php#L1174?
                                                                      вызывает снова OnPageNotFound — вот вы и получали рекурсию.
                                                                        Katya Larionova
                                                                        01 марта 2016, 15:19
                                                                        0
                                                                        У меня обработки VirtualPage стоит Ресурс (http://prntscr.com/a9srij)
                                                                        Событие стоит OnHandleRequest (http://prntscr.com/a9srqd)
                                                                        Плагин vpOnResourceAfterCreate не срабатывает.
                                                                        Куда дальше копать?
                                                                          Сергей Фещуков
                                                                          01 марта 2016, 15:29
                                                                          0
                                                                          Не срабатывает, потому что стоит тип обработки Ресурс, а нужен Динамический ресурс, а в поле Запись выбрать нужно шаблон.
                                                                            Katya Larionova
                                                                            01 марта 2016, 15:46
                                                                            0
                                                                            Пустые страницы остаются 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
                                                                            0
                                                                            по скрину не видно, есть ли там параметр id что вы используете в плагине.
                                                                            ps. не забывайте оформляйте код.
                                                                            Katya Larionova
                                                                            01 марта 2016, 18:49
                                                                            0
                                                                            А если id много, как их все в один плагин запихнуть?
                                                                            Володя
                                                                            01 марта 2016, 19:30
                                                                            0
                                                                            не, не… смотрите, у вас есть маршрут например
                                                                            /voprosy/{cat:tralala|blalala}/{id:[0-9]+}
                                                                            в $_REQUEST у вас будет массив, в fastrouter — будут лежать переменные cat и id
                                                                            и вот по этим переменных можно осуществлять вывод каких то данных.

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

                                                                            ps. опять же это все предположения. Задавая вопросы подробнее описывайте проблему.
                                                                            Katya Larionova
                                                                            02 марта 2016, 11:50
                                                                            0
                                                                            Маршрут такой — /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
                                                        0
                                                        А как заставить работать VirtualPage с Redirector и AutoRedirector?
                                                          Алексей
                                                          05 марта 2016, 20:54
                                                          0
                                                          Добрый вечер. Работает ли rank в табличке маршрутов?
                                                          Непосредственно в таблице строчки хорошо drug-n-drop'ятся, но вот на порядок обработки маршрутов это совсем не влияет. Приходится создавать по-новой все маршруты в порядке, в котором они должны отрабатывать (видимо порядок обработки всета-ки идет по полю ID, а не по полю RANK). Вот такие вот дела. Никто больше не сталкивался с таким странным поведением дополнения?
                                                            Володя
                                                            05 марта 2016, 22:32
                                                            0
                                                            не чистится кэш после сортировки наверно…
                                                              Алексей
                                                              06 марта 2016, 07:59
                                                              0
                                                              а куда он пишет кэш? удалял полностью директорию /core/cache/, системная настройка
                                                              cache_handler='xPDOFileCache'
                                                              А также чистил кэш через «Управление» ->«Обновить сайт»
                                                            Katya Larionova
                                                            09 марта 2016, 11:45
                                                            0
                                                            Вопрос остается открытым. Как пустые страницы переадресовать на 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
                                                              0
                                                              дак все так же — modx.pro/components/5035-virtualpage-virtual-page/#comment-56714
                                                              вот тут тестовый сайт — s4692.h2.modhost.pro/
                                                              s4692
                                                              0aDvdt5CPorB

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

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

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

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

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

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



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

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

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

                                                                            prntscr.com/d5ja79

                                                                            prntscr.com/d5jak1

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

                                                                                [[!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
                                                                                  0
                                                                                  &parents=`[[!+vp.id]]`
                                                                                  в маршруте параметр id — id ресурса? Если да то вам не parents надо указывать.
                                                                                  проверил что в [[!+vp.id]] — alias района но не id нужного ресурса.
                                                                                  значит вы где то неправильно формируете ссылку…
                                                                                  если вы плаваете в таких вещах то попросите кого то помочь…
                                                                                    Александр
                                                                                    11 ноября 2016, 10:54
                                                                                    0
                                                                                    ссылку я формирую правильно, поэтому и параметры передаются не id а alias ресурса, т.к. он и указан в адресе строки. мне не нужны id в ссылке, поэтому получил ресурс вот так
                                                                                    [[pdoResources?
                                                                                    	&parents=`3` // id знаю от куда надо))
                                                                                    	&tpl=`@INLINE [[+pagetitle]]`
                                                                                    	&where=`{"alias":"[[!+vp.alias]]"}`
                                                                                    ]]
                                                                                    спасибо. сразу не сообразил
                                                                                      Александр
                                                                                      29 ноября 2016, 13:13
                                                                                      0
                                                                                      Владимир, подскажите пожалуйста а как избавиться от пустых страниц.
                                                                                      К сожалению, не силен в пхп поэтому вынужден задавать тупые вопросы))
                                                                                      страницу вывожу через шаблон вот так:
                                                                                      [[!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
                                                                                        1
                                                                                        0
                                                                                        вы выводите ресурс, значит и нужно проверять есть ли такой в наличии.
                                                                                        if (!$modx->getCount('modResource', array('alias'=>$alias))) {
                                                                                        	$modx->sendErrorPage();
                                                                                        }
                                                                                          Александр
                                                                                          29 ноября 2016, 15:45
                                                                                          0
                                                                                          Спасибо.
                                                                                          что то выводится просто белый экран. а не 404. не отрабатывает по ходу sendErrorPage, с чем это может быть связано? Знаете? Шаблон 404 задан в сист. настройках error_page (id ресурса).
                                                                                            Володя
                                                                                            29 ноября 2016, 15:55
                                                                                            +1
                                                                                            пример кода рабочий, значит что то еще не так.
                                                                                            Попробуйте повторить ситуацию на тестовом сайте.
                                                                            Александр
                                                                            10 ноября 2016, 14:33
                                                                            0
                                                                            Владимир, и еще один вопрос: эти же страницы будут ли эти страницы индексироваться?
                                                                              Володя
                                                                              10 ноября 2016, 16:38
                                                                              +2
                                                                              будут индексироваться
                                                                              Виталий Володько
                                                                              11 ноября 2016, 09:11
                                                                              0
                                                                              У меня странная проблема при установке. В консоли вывод:
                                                                              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
                                                                                0
                                                                                Владимир, обновление с версии 1.0.9-beta до последней на рабочем сайте безопасно?

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

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

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

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

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

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

                                                                                      Админка s8738 / ZEnzfcpZMFXA

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

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

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

                                                                                                      так задайте маршрут типа
                                                                                                      /{param1}/{param2}/{id}.html
                                                                                                      и все
                                                                                                        yani
                                                                                                        05 апреля 2017, 10:10
                                                                                                        0
                                                                                                        Спасибо!
                                                                                                        yani
                                                                                                        06 апреля 2017, 08:38
                                                                                                        0
                                                                                                        А подскажите еще, пожалуйста, а как перестроить мне нужные pagetitle?
                                                                                                        как сделать хлебные крошки? а то сейчас показывает ГЛАВНАЯ
                                                                                                        Это полностью переписывать шаблон, получать по uri id ресурса, получать его поля и выставлять их плейсхолдерами?
                                                                                                        То есть если на странице у меня было [[*pageitle]], то будет [[+pagetitle]]?
                                                                                    Константин
                                                                                    13 апреля 2017, 13:34
                                                                                    -1
                                                                                    Какие ограничения для демо версии?
                                                                                      serg
                                                                                      23 июня 2017, 15:28
                                                                                      0
                                                                                      Если пытаться получить ресурс по ajax, то выполняются все плейсхолдеры, Fenom, но не !pdoPage. Есть какой-то вариант обойти это ограничение?
                                                                                        Володя
                                                                                        23 июня 2017, 15:30
                                                                                        0
                                                                                        в пакете нет никаких ограничений, проблема думаю в другом…
                                                                                          serg
                                                                                          23 июня 2017, 15:52
                                                                                          0
                                                                                          Может есть какие-то идеи насчет возможной проблемы?
                                                                                          Чанк-шаблон страницы pastebin.com/z8hJrFCy. Всё вызывается как надо, s9939.h8.modhost.pro/users/33. Элемент с комментариями #user_comments_ajax_row
                                                                                          При попытке подгрузить методом .get Jquery приходит всё, но на месте вызова !pdoPage пустота. s9939.h8.modhost.pro/blog-glavnogo-vracha/ клик на «запись 2», клик на пользователя.
                                                                                            serg
                                                                                            23 июня 2017, 16:26
                                                                                            0
                                                                                            Да, косяк вряд ли в VP, потому что вызов pdoPage БЕЗ &ajaxMode=`button`работает как надо.
                                                                                              Володя
                                                                                              23 июня 2017, 16:33
                                                                                              0
                                                                                              Незнаю, исходный код компонентов доступен на гитхаб, если вам интересно можно попробовать выяснить в чем дело.
                                                                                        Илья
                                                                                        10 мая 2018, 13:42
                                                                                        0
                                                                                        Здравствуйте, коллеги.
                                                                                        Подскажите пожалуйста как правильно прописать в маршрут артикул товара, если он является опцией msoptionprice?
                                                                                        как вообще правильно организовать виртуальные страницы из опций?
                                                                                          Олег
                                                                                          01 июня 2018, 11:14
                                                                                          0
                                                                                          Добрый день, есть пример как работают не виртуальные страницы, а sendforward с ресурсом?
                                                                                          Выпадает в 500 ошибку.
                                                                                          Нужен конкретный ресурс, чтобы привязать комментарии к реальной странице, а не к виртуальной.
                                                                                          Либо как виртуальной задать id, чтобы по нему выводить комментарии
                                                                                            g0dzilla
                                                                                            26 июля 2018, 17:05
                                                                                            0
                                                                                            Параметр «request_alias» вроде как уже звучит по-другому.
                                                                                            Метод getUri(),
                                                                                            $alias = $this->modx->getOption('request_alias', null, 'q');
                                                                                            Ныне он называется «request_param_alias».
                                                                                              Кирилл Киселев
                                                                                              16 августа 2018, 09:26
                                                                                              0
                                                                                              А я могу как-то на входе изменить параметр и отдать его по-другому?
                                                                                              Например, пришёл параметр {par1} из маршрута как catalog, меняю его на shop и на выходе должен получится не domain/catalog/, а domain/shop/. Есть ли какой-то метод?
                                                                                                Роман
                                                                                                30 апреля 2019, 11:15
                                                                                                0
                                                                                                Перечитал весь топик, не до конца понял принцип работы. Модуль очень интересный, хочу реализовать вывод опций товаров на отдельной странице. Как я вижу.
                                                                                                Есть опции: Амперы(amper), Вольты(volt), Давление(davlenie) и хотелось бы вывести
                                                                                                /options/amper/
                                                                                                /options/volt/
                                                                                                /options/davlenie/
                                                                                                Реально ли так реализовать?
                                                                                                  slavkovladymyr
                                                                                                  19 июня 2019, 17:40
                                                                                                  0
                                                                                                  После последних коммитов разработчиков FastRoute — github.com/nikic/FastRoute дополнение не работает. Был удален bootstrap.php файл и много изменений в других файлах библиотеки. Новые установки VirtualPage с измениями FastRoute не будут работать.
                                                                                                  Просим Володю обновить модуль ;)
                                                                                                    Abu
                                                                                                    Abu
                                                                                                    30 июня 2019, 00:32
                                                                                                    0
                                                                                                    Да уж, пришлось вручную скачать и распаковать старый FastRoute в директорию core/components/virtualpage/vendor/fastroute
                                                                                                    Владимир
                                                                                                    24 августа 2019, 09:17
                                                                                                    0
                                                                                                    А вот этот аналог modx.com/extras/package/?id=modxfastrouter кто-нибудь использует? Раз уж VirtualPage больше недоступен.
                                                                                                    Доки github.com/vanchelo/modxFastRouter
                                                                                                      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                                                                                                      179