We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 32959
    • 8 Posts
    Здравствуйте, други.
    Систему начал изучать не так давно и вот возник вопрос, решения которому пока не нашел.
    Нужно хранить некоторые данные, касающиеся сайта целиком и данные, касающиеся групп страниц или даже отдельных страниц. Данные эти планируется использовать в сниппетах.
    TV-переменные не всегда для этого подходят. Например есть всего 2 страницы, использующие этот тип данных, а остальным страницам эти данные в принципе не нужны (например на двуязычном сайте нет смысла присваивать язык страницы каждому документу, если русские страницы лежат в одной папке, а английские - в другой). Использование же tv для этой цели мало того, что постоянно глаза мозолит, так еще и базу перегружает. Особенно на сложных выборках.
    А бывает нужно сохранить целую структуру, которая по определению в tv не хранится, например ассоциированный массив или массив в массиве.
    Пробовал для этого приспособить сниппет, типа setGlobalParameters, в котором устанавливаются глобальные переменные и вызывать его в самом начале шаблона. Но он отрабатывает только раз и отваливается, так как данные работы сниппета попадают в кэш, после чего он перестает отрабатывать и данные перестают быть доступными.
    Некэшируемый же вызов сниппета почему-то не работает в шаблоне.
    Лезть в код системы, прицепляя к ней свои строки с данными тоже вариант не самый правильный.
    Может быть есть специальные файлы для подобных целей, ну, скажем, какой-нибудь user.config.php.inc ?
    А может быть запись в файл config.php.inc относительно безопасна? Хотя, конечно, неудобно каждый раз снимать защиту от записи, ставить обратно, светить логин/пароль к базе...

    Есть мысли?
      • 32959
      • 8 Posts
      Появилась мысль создать плагин и воткнуть данные в него. Вот непонятно только к какому событию его подцепить.
      Должно быть перед разбором шаблона, чтобы к моменту запуска сниппетов все было готово.

      Жаль, доки по событиям крайне скудны и отрывчаты.
        • 28814 ☆ A M B ☆
        • 1,086 Posts
        Quote from: xumpopena at Aug 29, 2007, 02:30 AM

        Появилась мысль создать плагин и воткнуть данные в него. Вот непонятно только к какому событию его подцепить.
        Должно быть перед разбором шаблона, чтобы к моменту запуска сниппетов все было готово.

        Жаль, доки по событиям крайне скудны и отрывчаты.
        Думаю, что это будет вполне нормальным способом решения вашей проблемы. А насчет события - может быть стоит попробовать OnDocFormPrerender.
          Разработка сайтов и программных модулей на MODX.
          Опыт работы на MODx с 2005 года. Высокое качество.
          Компания Baltic Design Colors: http://www.bdcolors.ru.
          • 32959
          • 8 Posts
          Igor:
          Я тоже так думал. Не работает. Переменные остаются неопределенными.
            • 28814 ☆ A M B ☆
            • 1,086 Posts
            Тогда уточните, как или где именно вы хотите использовать данные переменные: внутри системы управления или уже при выводе данных на веб-странице?
              Разработка сайтов и программных модулей на MODX.
              Опыт работы на MODx с 2005 года. Высокое качество.
              Компания Baltic Design Colors: http://www.bdcolors.ru.
              • 32959
              • 8 Posts
              При выводе страницы. Но сниппеты должны эти данные видеть.
              Тот же пример: две страницы самого верхнего уровня должны иметь параметр "язык". И где-то его надо определить. Языков не может быть много и редактор сайта новый язык тоже сам не введет. Остальным же страницам этот параметр уже не нужен. Поэтому TV не лучший выбор.
              Пример этот упрощен, потому вариант использования стандартных полей страницы не подойдет.

              P.S. Кстати, установил практически, что событие OnDocFormPrerender наступает после запроса в админке на редактирование страницы, после вывода полей страницы, но перед передачей управления пользователю. Во как!
                • 32959
                • 8 Posts
                Второй день бьюсь над темой.
                А пока придется воткнуть свои данные в свой собственный конфиг-файл на серваке и воткнуть инклюд-строчку в manager/includes/config.php.inc
                Не очень удобно, конечно, но пока что это единственный работающий и относительно безопасный вариант. Опасность может быть только при обновлении движка, но, думаю, config.php.inc если и подвергнется изменениям, то незначительным.
                  • 28814 ☆ A M B ☆
                  • 1,086 Posts
                  Мне в принципе понятно, что вы хотите получить. Все-же на мой взгляд надо пробывать идею с плагином.
                  А пример я не понял smiley. Ну есть у нас скажем три языка, разделили их по папкам с алиасами ru, en, de, а дальше помещаем содержимое согласно переводам в соотвествующие поддиректории. Язык нам больше вроде-как не понадобится.
                    Разработка сайтов и программных модулей на MODX.
                    Опыт работы на MODx с 2005 года. Высокое качество.
                    Компания Baltic Design Colors: http://www.bdcolors.ru.
                    • 32959
                    • 8 Posts
                    Пример упрощен.
                    А один из реальных примеров применения заключается в поиске страниц в разных папках с несколькими критериями выборки. Поиск диттой с фильтрацией мне показался неподходящим, потому как фильтры дитты имхо предназначены для примитивной фильтрации, да и соединяются только оператором "и".
                    Я же планирую для получения списка документов использовать sql-запросы. При этом если хранить данные в TV, то sql-запрос усложняктся настолько, что даже при почти пустом сайте время выборки значительно увеличивается.
                    Использование же внешних данных позволит еще на этапе конструирования запроса определить критерии поиска так, что запрос не будет столь тяжел.
                    Как-то так.
                    Может быть для задачи такого рода поиска существуют другие методы? Просто я еще не дошел до них?
                      • 28814 ☆ A M B ☆
                      • 1,086 Posts
                      Quote from: xumpopena at Aug 29, 2007, 08:08 AM

                      При этом если хранить данные в TV, то sql-запрос усложняктся настолько, что даже при почти пустом сайте время выборки значительно увеличивается.
                      Использование же внешних данных позволит еще на этапе конструирования запроса определить критерии поиска так, что запрос не будет столь тяжел.
                      Наверное, на текущий момент это единственный выход.
                      TV в MODx довольно неудобная и негибкая штука. Они мне напоминают сниппет комментариев, который использовался в MODx до появления Jot, - это было реальным костылем, хотя и до сих пор работает на одном из наших сайтов. В идеале желательно иметь возможность назначать дополнительные типы данных не только для шаблонов, но и для отдельных страниц.
                        Разработка сайтов и программных модулей на MODX.
                        Опыт работы на MODx с 2005 года. Высокое качество.
                        Компания Baltic Design Colors: http://www.bdcolors.ru.