We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 785
    • 2,113 Posts
    Сделать вывод страниц, «продолжающих» дерево MODx, можно разными способами, приведу некоторые отдельные моменты, используемые мною.

    Я предпочитаю в .htaccess прописывать правила для разделов, создаваемых в дополнение к MODx. Например, есть страница MODx с названием offer, на которой вызывается сниппет, выводящий разную информацию. Добавив правило

    RewriteRule ^offer/(.*)$ index.php?q=offer&otp=$1 [L,QSA]

    я разбираю $_GET[’otp’] в сниппете, чтобы вывести нужную информацию. При этом вложенность может быть достаточно глубокой, например

    offer/all/egypt/dbl/usual/bb

    Всего вариантов, то есть страниц на сайте, несколько тысяч (с дополнительными вариантами при введенной в поле ввода дате – десятки тысяч). При выводе информация берется из достаточно большой базы – сейчас в ней около миллиона записей, а летом было более двух миллионов. Если подбирать нужные записи во время обращения пользователя, время генерации может составить несколько минут, и традиционным кэшированием не обойтись – обновления происходят несколько раз в день, и достаточно много пользователей после обновления будут долго ждать ответа страницы. В результате я сделал, что при каждом обновлении (выполняемом по cron) ищутся нужные данные для каждой страницы и сохраняются номера этих записей. Вывод записей с известными номерами (но номерам таблица проиндексирована) происходит достаточно быстро, так что работает все без задержек.

    Поиск по этим страницам отсутствует, так как такой задачи не стояло. В принципе в последних версиях AjaxSearch имеется поиск по дополнительным таблицам в базе, но документации на это нет и пример не совсем понятен.

    Реализацию описанного можно посмотреть здесь: Витрина туров

    В html-коде внизу можно увидеть скоростные характеристики генерации страницы, вроде этого:

    <!-- MySQL: 0,0061 с, запросов: 4, PHP: 0,0672 с, всего: 0,0733 с, памяти 6 МБ, документ взят из кэша. -->

    Кстати, ссылки на отели на этой странице в большинстве случаев (когда начинаются на hotels?hotelid=) отправляют на другой раздел, также генерируемый программно и состоящий, с точки зрения MODx, из одной страницы – здесь тоже некэшируемое обращение к базе выполняется быстро.

    Вообще вопрос кэширования обращений к базе достаточно спорный – в большинстве случаев на запросы тратится намного меньше времени, чем на обработку в PHP. Если не нужны сложные запросы, и в базе хранится информация, готовая к выводу и не требующая значительной обработки, некэшированные сниппеты практически не уменьшат скорость работы. При этом трудоемкие операции по обработке данных лучше выполнять заранее, когда данные редактируются (или в административной части сайта или периодически по cron).

    Полностью внешний скрипт использовать лично мне не нравится, удобнее подключать сниппет (основная часть которого во внешних файлах) и задавать значения через плейсхолдеры, то есть написать $modx->setPlaceholder(’myvar’, ’Значение’); и в шаблоне или на странице поставить [+myvar+]. Чанки тоже при этом можно использовать, хотя мне нравится, как подключаются шаблоны в AjaxSearch и некоторых других сниппетах с помощью функции getTemplate.
      Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
      Статьи о MODx, регулярно новые публикации
      • 1035
      • 81 Posts
      Quote from: AKots at Dec 17, 2010, 07:39 AM

      Реализацию описанного можно посмотреть здесь: Витрина туров

      В html-коде внизу можно увидеть скоростные характеристики генерации страницы, вроде этого:

      <!-- MySQL: 0,0061 с, запросов: 4, PHP: 0,0672 с, всего: 0,0733 с, памяти 6 МБ, документ взят из кэша. -->


      Я восхищен)
        Чем я занят на данный момент, читайте в этой теме: [EVO] Ресурс-контроллер?
        • 1035
        • 81 Posts
        Ну что ж, буду пробовать делать модуль блога, для старта информации хватает с головой, посмотрим, получится ли у меня реализовать эту идею... Сейчас больше склоняюсь к 1-му пути - связке модуль+сниппет.

        Спасибо всем за дельные советы)))
          Чем я занят на данный момент, читайте в этой теме: [EVO] Ресурс-контроллер?
          • 1035
          • 81 Posts
          Приношу свои извинения за столь долгое отсутствие признаков жизни в данном посте, но у меня просто нет времени - совсем - все отнимает сессия.
          Но хочу заверить, что тема еще не умерла smiley и я все равно буду заниматься вопросом ресурса-контроллера.
          Хотя кое что могу сказать уже сейчас - я не буду и не хочу (ну вот так вот smiley) создавать что то универсальное и легко настраиваемое, то есть кое-что придется подправить ручками, но зато один раз.
          Просто универсальность и легконастраиваемость это:
          Во-первых, это отнимет еще больше времени.
          Во-вторых, это больше кода.

          Так как все таки в первую очередь делаю под себя, а у меня не будет много категорий, то я буду делать каждую категорию в виде ресурс-контроллера, то есть одна категория - один ресурс-контроллер.
          Не знаю правда что из этого выйдет, но хочется надеяться на лучшее smiley
            Чем я занят на данный момент, читайте в этой теме: [EVO] Ресурс-контроллер?