We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 1747
    • 24 Posts
    Как создать ТВ переменную, равную другой ТВ переменной из этого же документа?
    Может кто знает где найти подробную документацию по ТВ, включая @Bindings.
    Спасибо.
      • 33694
      • 742 Posts
      Подробная документацая по ТВ, включая @Bindings: http://modxcms.com/template-variables.html
        • 1747
        • 24 Posts
        Quote from: [e
        Bu$ter link=topic=15571.msg100420#msg100420 date=1181248652]
        Подробная документацая по ТВ, включая @Bindings: http://modxcms.com/template-variables.html
        Эту документацию я изучила. Но не нашла в ней, как одну ТВ сделать равной другой. Объясню подробнее, что мне нужно. На сайте публикуются мероприятия, у каждого из которых есть "дата начала" (ТВ тип ДАТА + виджет для человеческого отображения), вводимая юзерами. Список мероприятий формируется с помощью ДИТТО. Мне нужно, чтобы сортировка в этом списке была по "дате начала" - &sortBy=`tvEVENT_DATE_START`. Так вот почемуто дитто воспринимает эту самую дату как простой текст и сортирует соответствующим образом. А мне надо чтоб сортировал как по дате. Единственное, что мне пришло в голову - сделать еще одну ТВ, которая по умолчанию равна EVENT_DATE_START, но без виджета, и сортировать по ней. Воможно, есть более легкий способ?
        Спасибо.
          • 897
          • 1,620 Posts
          я бы убрал виджет и сделал сниппет который использует для форматирования чанк, на входе получает значение ТВ в программном виде, преобразует его в нужный вам (это одна строчка с date())
            "Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein."

            Не используйте Revo для "просто сайтов". Используйте Evo

            Who can defeat the Russian bear?
            • 19164
            • 1,215 Posts
            Для форматирования даты лучще воспользоваться PHx. Получится примерно так [*tvEVENT_DATE_START:date=`%d.%m.%Y`*]
              DirectResize 0.9 beta. PHPThumb, sets of configurations, configuration, binded to specific path. No backward compatibility. | DirectResize 0.9. PHPThumb, наборы параметров, параметры, привязанные к определенным путям. Без обратной совместимости.

              Unfortunately, DirectResize project is closed. If you want to continue development, PM me for access to project page on Google Code. К сожалению, проект DirectResize закрыт. Если вы желаете продолжить разработки, обращайтесь через ПМ для получения доступа к репозиторию на Google Code.

              [PLUGIN] DirectResize - as Maxigallery but for single images :: Download :: [url=http://modxcms.com/forums/index.php/topic,21490]
              • 1747
              • 24 Posts
              Оказывается, все сложнее. ТВ (тип дата) с виджетом или без - это строка. Боюсь тут РНх бессилен и date() не поможет. Ума не приложу, как теперь в Дитто сделать сортировку по дате. Единственное, что приходит на ум - это с помощью виджета отформатировать дату в виде: год, месяц, число. А для отображения сделать сниппет который поменяет местами число и год. Правда както это undecided. Но другого выхода не вижу.
                • 19164
                • 1,215 Posts
                Тогда пожалуй идея создания второй TV была не такая уж плохая.

                Делаете первую TV с именем например date. Виджет Date, назначение - ввод даты от пользователей. Делаете вторую TV date2, тип text, виджет - нет, назначение - служебное, для сортировки.

                В качестве значения по умолчанию используете:
                @EVAL
                $doc = $modx->getDocument();
                $tv = $modx->getTemplateVar("date", '*', $doc['id']); // date - имя исходной TV
                $date_match = '^([0-9]{2})-([0-9]{2})-([0-9]{4}) ([0-9]{2}):([0-9]{2}):([0-9]{2})$';
                ereg($date_match, $tv['value'], $matches);
                $timestamp = mktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[1], $matches[3]);
                return $timestamp;

                Это автоматически вставит в значение данной TV юниксштамп даты из первой TV
                  DirectResize 0.9 beta. PHPThumb, sets of configurations, configuration, binded to specific path. No backward compatibility. | DirectResize 0.9. PHPThumb, наборы параметров, параметры, привязанные к определенным путям. Без обратной совместимости.

                  Unfortunately, DirectResize project is closed. If you want to continue development, PM me for access to project page on Google Code. К сожалению, проект DirectResize закрыт. Если вы желаете продолжить разработки, обращайтесь через ПМ для получения доступа к репозиторию на Google Code.

                  [PLUGIN] DirectResize - as Maxigallery but for single images :: Download :: [url=http://modxcms.com/forums/index.php/topic,21490]
                  • 1747
                  • 24 Posts
                  спасибо smiley
                    • 19164
                    • 1,215 Posts
                    Quote from: annet_1409 at Jun 08, 2007, 08:08 AM

                    Объясню подробнее, что мне нужно. На сайте публикуются мероприятия, у каждого из которых есть "дата начала" (ТВ тип ДАТА + виджет для человеческого отображения), вводимая юзерами. Список мероприятий формируется с помощью ДИТТО. Мне нужно, чтобы сортировка в этом списке была по "дате начала" - &sortBy=`tvEVENT_DATE_START`. Так вот почемуто дитто воспринимает эту самую дату как простой текст и сортирует соответствующим образом. А мне надо чтоб сортировал как по дате. Единственное, что мне пришло в голову - сделать еще одну ТВ, которая по умолчанию равна EVENT_DATE_START, но без виджета, и сортировать по ней. Воможно, есть более легкий способ?
                    Спасибо.

                    Сам вплотную столкнулся с этой проблемой и пришлось ковырять. Способ со копированием значения TV как предложил выше, отбросил сразу, как неизящный.

                    Самый очевидный вариант - поковырял 2 файла ядра, в результате после сохранения TV с типом даты, вместо строки в базу сохранялся юникс таймштамп. При редактировании документа этот таймштамп опять преобразовывался в человекопонятное представление даты. Способ простой и хороший, но ковыряние ядра не есть гуд - оптимально реализовать это в виде плагина и привязать подобные замены на системные события сохранения и редактирования документа. Моих знаний на это не хватило, бросил.

                    Второй вариант - изящный. Создем TV с типом дата, выбираем виджет - unixtime. Ну и почти все - в базе параметр по прежнему хранится в виде строки, но все сниппеты запрашивают значение сниппета не напрямую, а через функции движка, которые в конечном счете отдают уже обработанное значение, т.е. в виде unixtimestamp.

                    Я все это проводил на дитто - дитто вполне устраивает этот TV, его можно использовать и для сортировки (только не указывайте префикс tv, если реальное имя параметра EVENT_DATE_START - &sortBy=`EVENT_DATE_START`. Если указать этот TV как источник для плейсхолдера [+date+] через &datesource то дитто сам отформатирует таймштамп в человекопонятную дату.

                    В ином случае можно использовать плагин PHx [+EVENT_DATE_START:date=`%d.%m.%Y`+]
                      DirectResize 0.9 beta. PHPThumb, sets of configurations, configuration, binded to specific path. No backward compatibility. | DirectResize 0.9. PHPThumb, наборы параметров, параметры, привязанные к определенным путям. Без обратной совместимости.

                      Unfortunately, DirectResize project is closed. If you want to continue development, PM me for access to project page on Google Code. К сожалению, проект DirectResize закрыт. Если вы желаете продолжить разработки, обращайтесь через ПМ для получения доступа к репозиторию на Google Code.

                      [PLUGIN] DirectResize - as Maxigallery but for single images :: Download :: [url=http://modxcms.com/forums/index.php/topic,21490]
                      • 36823
                      • 334 Posts