Меню

Настройка времени в modx



MODX. Даты и их форматирование в MODX

Отредактировано: 15 Декабря 2019

В стандартных ресурсах MODX предусмотрены следующие плейсхолдеры с датами:

  • createdon — дата создания;
  • deletedon — дата удаления;
  • editedon — дата последнего редактирования;
  • publishedon — дата когда ресурс был опубликован;
  • pub_date — дата когда ресурс должен появиться в публикации;
  • unpub_date — дата снятия с публикации.

Выведем дату редактирования текущего ресурса в формате день, месяц прописью, год:

Если возникла проблема с выводом русского языка, в начале шаблона, или в системных параметрах попробуйте добавить локаль (подробнее о локалях):

Если возникла проблема с правильностью отображения даты, попробуйте преобразовать с помощью модификатора :strtotime

Формат вывода даты задается с использованием функции strftime.

strftime — форматирует текущую дату / время с учетом текущих настроек локали.

Параметры функции strftime

format Описание Пример возвращаемых значений
День
%a Сокращенное название дня недели От Sun до Sat
%A Полное название дня недели От Sunday до Saturday
%d Двухзначное представление дня месяца (с ведущими нулями) От 01 до 31
%e День месяца, с ведущим пробелом, если он состоит из одной цифры. На Windows реализован не так, как описано. Подробнее смотрите ниже. От 1 до 31
%j Порядковый номер в году, 3 цифры с ведущими нулями От 001 до 366
%u Порядковый номер дня недели согласно стандарту ISO-8601 От 1 (понедельник) до 7(воскресенье)
%w Порядковый номер дня недели От (воскресенье) до 6(суббота)
Неделя
%U Порядковый номер недели в указанном году, начиная с первого воскресенья в качестве первой недели 13 (для полной 13-й недели года)
%V Порядковый номер недели в указанном году в соответствии со стандартом ISO-8601:1988, счет начинается с той недели, которая содержит минимум 4 дня, неделя начинается с понедельника От 01 до 53 (где 53 указывает на перекрывающуюся неделю)
%W Порядковый номер недели в указанном году, начиная с первого понедельника в качестве первой недели 46 (для 46-й недели года, начинающейся с понедельника)
Месяц
%b Аббревиатура названия месяца, в соответствии с настройками локали От Jan до Dec
%B Полное название месяца, в соответствии с настройками локали От January до December
%h Аббревиатура названия месяца, в соответствии с настройками локали (псевдоним %b) От Jan до Dec
%m Двухзначный порядковый номер месяца От 01 (январь) до 12(декабрь)
Год
%C Двухзначный порядковый номер столетия (год, деленный на 100, усеченный до целого) 19 для 20-го века
%g Двухзначный номер года в соответствии со стандартом ISO-8601:1988 (см. %V) Пример: 09 для недели 6 января 2009
%G Полная четырехзначная версия %g Пример: 2009 для недели 3 января 2009
%y Двухзначный порядковый номер года Пример: 09 для 2009, 79для 1979
%Y Четырехзначный номер года Пример: 2038
Время
%H Двухзначный номер часа в 24-часовом формате От 00 до 23
%k Часы в 24-часовом формате, с пробелом перед одиночной цифрой От до 23
%I Двухзначный номер часа в 12-часовом формате От 01 до 12
%l (строчная ‘L’) Час в 12-часовом формате, с пробелом перед одиночной цифрой От 1 до 12
%M Двухзначный номер минуты От 00 до 59
%p ‘AM’ или ‘PM’ в верхнем регистре, в зависимости от указанного времени Пример: AM для 00:31, PMдля 22:23
%P ‘am’ или ‘pm’ в зависимости от указанного времени Пример: am для 00:31, pmдля 22:23
%r То же что и «%I:%M:%S %p» Пример: 09:34:17 PM для 21:34:17
%R То же что и «%H:%M» Пример: 00:35 для 12:35 AM, 16:44 для 4:44 PM
%S Двухзначный номер секунды От 00 до 59
%T То же что и «%H:%M:%S» Пример: 21:34:17 для 09:34:17 PM
%X Предпочитаемое отображение времени в зависимости от локали, без даты Пример: 03:59:16 или 15:59:16
%z Смещение временной зоны относительно UTC. Не реализовано в Windows, подробности см. ниже. Пример: -0500 для US Eastern Time
%Z Аббревиатура временной зоны. Не реализовано в Windows, подробности см. ниже. Пример: EST для Eastern Time
Метки даты и времени
%c Предпочитаемое отображение даты и времени, в зависимости от текущей локали Пример: Tue Feb 5 00:45:10 2009 для 5 февраля 2009 00:45:10
%D То же что и «%m/%d/%y» Пример: 02/05/09 для 5 февраля 2009
%F То же что и «%Y-%m-%d» (обычно используется в метках времени баз данных) Пример: 2009-02-05 для 5 февраля 2009
%s Метка времени Эпохи Unix (то же что и функция time()) Пример: 305815200 для 10 сентября 1979 08:40:00
%x Предпочитаемое отображение даты, без времени Пример: 02/05/09 для 5 февраля 2009
Различное
%n Символ перевода строки («\n»)
%t Символ табуляции («\t»)
%% Символ процента («%»)

Если необходимо вывести месяц на русском полностью, или в формате не доступном на сервере, можно использовать подобный сниппет для преобразования:

Условное выражение с использованием тегов MODX:

Тоже самое но в сниппете:

Для установки даты через xPDO или для TV полей с типом data можно использовать следующие сущности:

  • today — будет установлена сегодняшняя дата.
  • now — текущая дата и время.
  • yesterday — вчера.
  • tomorrow — завтра.
  • + / — (любое число)h — почему-то в перепутанном порядке, +24h высчитывается как (сегодня — 24 часа), и наоборот со знаком минус.

Позвольте представиться, меня зовут Марина. Более 10 лет я занимаюсь обслуживанием сайтов и развитием интернет проектов. Если вы хотите избавиться от хлопот связанных с созданием и поддержкой сайта, тогда вы попали по адресу. При работе с сайтами я предоставляю качественные услуги, ориентируясь на ваши индивидуальные потребности. Для связи со мной воспользуйтесь формой обратной связи .

Источник

Настройка времени в modx revo

Со временем в modx полностью никак не разберусь.
1. Если в настройках modx задать [server_offset_time = 1], то modx должен считать, что локальное время, отображаемое в админке, должно на час превышать локальное время сервера. В частности, время изменения файла, отображаемое на странице редактирования файла в modx, должно на (server_offset_time) часов превышать серверное время изменения файла. Что получаем на практике (всё наоборот):

а) время изменения файла, отображаемое на странице редактирования файла в modx, отображается серверное, независимо от значения (server_offset_time)
б) время изменения файла, отображаемое в WinSCP, на (server_offset_time) превышает серверное время изменения файла. Как такое может быть? Ведь время изменения файла фиксирует операционная система (Debian) и никакие настройки modx на это время повлиять не могут. Не уж то modx вручную корректирует время изменения файла, подстраивая его под (server_offset_time)?

Здесь под серверным временем изменения файла понимается время изменения, зафиксированное в свойствах файла ОС (UTC) и откорректированное под локальное время сервера в соответствии с date.timezone сервера.

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

а) время изменения файла, отображаемое на странице редактирования файла в modx, отображается серверное, независимо от значения (server_offset_time)

Как оказалось, время изменения файла, отображаемое на странице редактирования файла в modx, — это не серверное время и не локальное время админа. Это время, соответствующее php-настройке date.timezone (в моём случае оно совпадает с серверным временем). Т.е. modx просто считывает дату файла с помощью filemtime (все php-функции, работающие со временем, используют date.timezone) и отображает её в строковом виде. Никаких преобразований времени не производит.
Хотя логичнее было бы преобразовать это время сначала в UTC, затем в серверное, затем в локальное админское (с учётом server_offset_time) и только после этого отображать.

Аналогично modx поступает и с отображением даты публикации/создания/модификации ресурса — считывает из БД и отображает без всяких преобразований (этот факт делает нецелесообразным использование настройки date.timezone = UTC, которая в определённом смысле является более корректным вариантом).

Здесь возникает 2 вопроса:
1) Зачем нужна настройка server_offset_time?
2) Почему (и каким образом) при задании ненулевого server_offset_time время изменения файла, отображаемое в WinSCP, на server_offset_time превышает серверное время изменения файла?

Источник

Форматирование даты и времени в MODX Revolution на русском

MODX написана на языке программирования PHP, поэтому для вывода дат используются функции PHP strtotime и strftime. В основном взаимодействие с датами ограничивается следующими стандартными полями ресурса (createdon, publishedon, editedon и т.д.)

Навигация по статье:

Поля ресурсов с выводом даты

В основном взаимодействие с датами ограничивается следующими стандартными полями ресурса:

  • createdon — дата создания;
  • publishedon — дата публикации;
  • editedon — дата редактирования;
  • unpub_date — дата отмены публикации;
  • deletedon — дата удаления.

Помимо стандартных полей можно создать TV-поле с типом ввода дата.

Примеры вывода даты

Пример Вывод
[ [*createdon:strtotime:date=`%a %b %e, %Y`]] Fri Jan. 01, 2016
[ [*createdon:strtotime:date=`%e %B %Y`]] 01 January 2016
[ [*createdon:strtotime:date=`%A, %B %e, %Y`]] Friday, January 01, 2016
[ [*createdon:strtotime:date=`%d.%m.%Y`]] 01.01.2016

Вывод даты сниппетами

Некоторые сниппеты по-разному обрабатывают дату, к примеру, в шаблонах (плейсхолдерах) pdoResources функция strtotime не нужна, т. е. вывод будет таким:

В getResources же — нужна, вызов для getResources будет уже таким:

Русский язык и мультиязычность

В случаях, когда требуется выводить русские названия месяцев или дней недели, нужно в «Системных настройках» у ключа под названием locale задать ru_RU.UTF8, соответственно, для нужных языковых контекстов задаем свой, например, для английской версии сайта задаем en_US.UTF8.

Однако полный месяц даты на русском будет выводиться в именительном падеже, например, «01 Январь 2018», для того, чтобы перевести месяц в родительный падеж «01 Января 2016» можно использовать сниппет: [ [+publishedon:dateRU]]

Сам код сниппета dateRU:

‘Января’,
’02’ => ‘Февраля’,
’03’ => ‘Марта’,
’04’ => ‘Апреля’,
’05’ => ‘Мая’,
’06’ => ‘Июня’,
’07’ => ‘Июля’,
’08’ => ‘Августа’,
’09’ => ‘Сентября’,
’10’ => ‘Октября’,
’11’ => ‘Ноября’,
’12’ => ‘Декабря’
);

$d = $input;
$month = strftime(«%m»,$d);
$year = strftime(«%Y»,$d);
$day = strftime(«%d»,$d);
$month = $month_arr[$month];

return «$day $month $year»;
?>

Если же после форматирования вместо русского формата даты выводится английская, то создайте сниппет setLocale и вставьте код:

После вставьте этот сниппет в начало шаблона, где нужно выводить форматирование даты. Если русская дата отображается вопросиками, проверьте кодировку сайта, должна быть такой же как и в базе (желательно использовать UTF-8).

Источник

MODX — Кэширование

В этой статье познакомимся с процессом кэширования и его реализацией в MODX Revolution.

Что такое кэширование?

Кэширование — это механизм в CMS MODX Revolution и не только, который позволяет сохранить некоторый результат в определённое место (кэш) для того чтобы в будущем (при следующих запросах) его можно было использовать.

MODX — Время генерации страницы

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

MODX — Как работает кэширование

Рассмотрим пример. Допустим у вас на всех страницах сайта в сайдбаре есть блок «Последние статьи». Для того чтобы его вывести на страницу вам необходимо подготовить запрос, получить данные из базы и обработать их. Вся эта операция не происходит мгновенно, на её выполнение требуется время. А если у вас в сутки запрашивается не одна, а сотни или тысячи страниц. То, представьте, сколько раз заново приходится строить один и тот же блок, т.е. при каждом запросе страницы, на которой он есть. Правильно конечно было бы создать блок «Последние статьи» только один раз (при первом вызове) и сохранить его кэш. А затем (при следующих запросах) просто использовать его. Тем самым можно не только увеличить быстродействие (загрузку) страниц, но и значительно уменьшить нагрузку на процессор и сервер баз данных. Последнее действие, которое ещё останется осуществить — это определить момент обновления кэша этого блока. В данном случае в момент выхода (публикации) новой статьи.

Как кэширование организовано в MODX Revo

По умолчанию кэш в CMS MODX Revolution находится в файлах и расположен в директории core/cache/ .

Для обработки кэша в MODX используется провайдеры (по умолчанию: xPDOFileCache ). Файлы кэша в данном каталоге находится не в корне, они распределены по разделам.

Раздел — это кэш с данными определённого вида (например, ресурсами). Раздел можно представить как директорию в каталоге core/cache/ .

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

Например, одним разделам кэша можно назначить провайдер xPDOFileCache , а другим xPDOMemCache .

В MODX Revolution доступны следующие провайдеры: xPDOFileCache (по умолчанию), xPDOAPCCache (для Alternative PHP Cache), xPDOMemCache (для memcache), xPDOMemCached (для memcached), xPDOWinCache (для WinCache).

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

Кэш менеджеры ( xPDOFileCache , xPDOAPCCache , xPDOMemCache , xPDOMemCached и xPDOWinCache ) являются производными от класса xPDOCache и предоставляют единую API для записи, чтения и удаления кэш записей.

Основные разделы кэша и их краткое описание

MODX Revolution имеет следующие разделы (справочная информация):

action_map Содержит массив всех идентификаторов контроллеров и пространств имён, доступных в менеджере. auto_publish Содержит штамп времени, который определяет момент, при наступлении которого необходимо будет автоматически опубликовать ресурс или снять его с публикации. context_settings Этот раздел используется для хранения настроек контекстов. Каждый контекст в этом разделе имеет свой файл, в котором содержится карта ресурсов (идентификаторы родителей и детей), карта псевдонимов, плагины, используемые в контексте и политика доступа. db Раздел кэша db предназначен для хранения результирующих наборов, запрошенных из базы данных с помощью методов getObject , getCollection и т.п. Этот кэш используется при включении параметра cache_db в настройках системы или тогда, когда данный параметр активирован в настройках контекста.
Этот кэш обычно применяется тогда, когда доступ к базе является более затратным действием, чем использование процессорного времени. includes Данный раздел используется как временное хранилище для исходных кодов php файлов (сниппетов и плагинов). Используется ядром MODX во время их выполнения. Файлы в этом кэше имеют формат: 23.include.cache.php (23 — это id сниппета или плагина). logs Данный раздел используется в качестве хранилища log файлов системы. menu Этот раздел содержит кэш меню менеджера (админки). mgr Данный раздел использует Smarty в качестве своего хранилища для записи в него временных файлов. resource Содержит кэш ресурсов, организованный с учётом контекста и id (файлы в этом кэше имеют формат 7.cache.php (7 — это id ресурса)). Каждый файл содержится метаданные ресурса, его кэшированное представление с не кэшированными тегами (_content), политику доступа для ресурса и элементов, а также их исходные коды (используются в процессе обработки ресурса). rss Данный раздел использует MagpieRSS в качестве каталога для записи своих временных файлов. scripts Содержит исходные коды сниппетов и плагинов, которые впоследствии будут записаны в кэш директорию includes . setup Используется системой MODX при установке. system_settings Содержит настройки системы MODX. Этот раздел загружается первым. Для его обработки нельзя назначить альтернативный кэшер (т.е. всегда используется только xPDOFileCache ).

Чтобы изменить провайдер кэша для определенного раздела кэша, просто создайте новый системный (или контекстный) параметр с именем cache_PARTITION_handler (например, cache_resource_handler — для раздела resource ) и присвойте ему значение обработчика кэша, который вы хотите использовать для его обработки (например, xPDOMemCache ).

Настройка кэширования в MODX Revo

В MODX Revolution управление кэшированием может осуществляться посредством:

  • изменения значений системных настроек (область действия — весь сайт);
  • кэшированного или не кэшированного (с восклицательным знаком) вызова чанков, сниппетов и плейсхолдеров (область действия — указанный элемент);
  • установки или снятия флажка в поле ресурса «Кэшируемый» (область действия — указанный ресурс);
  • методов modCacheManager (программное управление кэшированием).

Управление кэшированием посредством изменения системных настроек

Общие настройки кэширования, влияющие на весь сайт, устанавливаются в системных настройках. Для этого необходимо нажать в админке MODX (в главном меню) на значок шестерёнки -> выбрать пункт «Системные настройки» -> раздел «Core» -> подраздел «Кэширование».

MODX — Системные настройки кэширования

Название ключей и их назначение:

cache_action_map (по умолчанию: да) Включает кэширование карты контроллеров (для ускорения загрузки страниц панели управления). cache_alias_map (по умолчанию: да) Включает кэширование карты ресурсов (добавление URI ресурсов в кэш контекста). Эту опцию рекомендуется устанавливать в положение «Да» только для небольших сайтов. А для сайтов с огромных количеством ресурсов её отключать. cache_context_settings (по умолчанию: да) Включает кэширование настроек контекстов для более быстрой загрузки страниц. cache_db (по умолчанию: нет) При включении, объекты и необработанные результаты наборов, запрашиваемые посредством SQL запросов будут кэшироваться (используется для уменьшения нагрузки на базу данных). Для хранения этого кэша может потребоваться достаточно большой объём дискового пространства. cache_db_expires (по умолчанию: 0) Время (в секундах) для хранения кэша db. Если установить значение, равное 0, то время жизни кэша будет не ограниченным. cache_db_session (по умолчанию: нет) При включении данной опции и cache_db, сессии, хранящиеся в базе данных, тоже будут кэшироваться. cache_db_session_lifetime (по умолчанию: нет) Время (в секундах), которое определяет период жизни кэша сессий. cache_default (по умолчанию: да) Устанавливает, необходимо ли при создании ресурса, делать его кэшируемым (устанавливать флажок cacheable в положение «Да»). cache_disabled (по умолчанию: нет) Если установить данному параметру значение «Да», то он отключить весь механизм кэширования MODX Revolution (не рекомендуется). cache_expires (по умолчанию: 0) Это значение (в секундах) устанавливает время жизни кэша MODX. Значение 0 задаёт неограниченное время его жизни. cache_format (по умолчанию: 0) Формат хранения кэша. 0 — в формате массива PHP, 1 — в JSON, 2 — в сериализованном виде. cache_handler (по умолчанию: xPDOFileCache) Имя провайдера, используемого по умолчанию для обработки всех разделов кэша. cache_lang_js (по умолчанию: да) При включении данной опции будут использоваться серверные заголовки для кэширования строк лексикона загружаемые в JavaScript и используемые интерфейсом менеджера. cache_lexicon_topics (по умолчанию: да) Когда включено, все темы словарей будут кэшироваться. Это позволит значительно снизить нагрузку при интернациональном использовании системы. MODX рекомендует оставлять эту опцию включенной, иначе работа менеджера может быть сильно замедлена. cache_noncore_lexicon_topics (по умолчанию: да) При отключении данной опции темы словарей дополнений (не принадлежащих ядру) кэшироваться не будут. Эта опция может быть очень полезна при разработке дополнений. cache_resource (по умолчанию: Да) Включает частичное кэширование ресурсов. Будут задействованы только те ресурсы, у которых параметр «Кэшируемый» установлен. Выключение данной опции отключит кэширование всех ресурсов. cache_resource_expires (по умолчанию: 0) Устанавливает период жизни кэша ресурсов (в секундах). Значение 0 позволяет хранить кэш ресурсов неограниченное время. cache_scripts (по умолчанию: да) Если включено, то MODX будет кэшировать все скрипты (сниппеты и плагины) в кэш (файлы) для увеличения скорости их загрузки. MODX рекомендует оставить эту настройку включённой. cache_system_settings (по умолчанию: Да) Если выбрано «Да», то настройки системы будут кэшироваться, тем самым уменьшая время загрузки страниц. MODX рекомендует оставить эту настройку включённой, т.е. в положение «Да». clear_cache_refresh_trees (по умолчанию: Нет) Если включено, то после обновления кэша сайта активные древовидные меню менеджера будут автоматически обновляться. syncsite_default (по умолчанию: Да) Если параметр имеет значение «Да», то сохранение ресурса будет приводить к автоматической очистке кэша.

Настройка кэширования ресурсов

В MODX управление кэшированием ресурсов осуществляется:

  • посредством изменения системных настроек cache_resource , cache_resource_expires и cache_default (глобальные настройки, влияющие на все ресурсы);
  • с помощью флажка «Кэшируемый» (включает или отключает кэш отдельно взятого ресурса).

Управление кэшированием ресурса с помощью установки или снятия соответсвующего флажка

Кэш ресурсов в MODX расположен в директории /core/cache/resource/ . Он построен с учётом контекста, к которому принадлежит ресурс. Имена файлов в этом кэше имеют следующий формат:

Цифра в начале имени — это значение id ресурса.

Управление кэшированием элементов

Система MODX позволяет управлять кэшированием чанков, сниппетов и плейсхолдеров. Осуществляется это посредством флага (восклицательного знака) в конструкции вызова этого элемента.

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

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

Программное управление кэшированием

В MODX работа с кэшем осуществляется посредством modCacheManager , который является расширением класса xPDOCacheManager .

modCacheManager предоставляет следующие методы для работы с кэшем:

  • add($key, $var, $lifetime = 0, $options = array()) — необходим для добавления значения в кэш (но только если это значение не существует или срок его хранения вышел);
  • replace($key, $var, $lifetime = 0, $options = array()) — используется для замены одного (существующего) кэшированного значения на другое;
  • set($key, $var, $lifetime = 0, $options = array()) — используется для установки значения в кэш не зависимого от того есть ли оно в кэше или нет;
  • delete ($key, $options = array()) — удаляет кэшированное значение из кэша;
  • get ($key, $options = array()) — применяется для получения кэшированное значение из кэша;
  • refresh ($key, $options = array()) — предназначен для удаление всех разделов кэша или какого-то конкретного.

Массив $options может содержать следующие ключи:

  • xPDO::OPT_CACHE_KEY — указывает раздел кэша;
  • xPDO::OPT_CACHE_HANDLER — задаёт провайдер кэша (как правило, данный ключ нет смысла указывать, для назначения провайдера для раздела кэша используйте системные настройки (параметр cache_PARTITION_handler ));
  • xPDO::OPT_CACHE_EXPIRES — устанавливает длительность хранения кэша в секундах.

Примеры использования методов modCacheManager :

Удаление всего кэша MODX:

Удаление кэша контекстов web и en из раздела context_settings :

Получить значение кэша по ключу comments_17 из раздела comments :

Сохранить в кэш comments_17 , расположенный в разделе comments , значение переменной $output (время хранения данных в кэше не ограниченное):

Удалить из раздела main_menu кэш menu_11 :

Пример, как можно организовать программное кэширования главного двухуровневого меню на сайте, выполненного с помощью компонента navbar Bootstrap 3.

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

Чанк tpl.mainMenuOuter (внешняя обёртка главного меню):

Вызов сниппета MainMenu в шаблоне:

После этого в разделе main_menu будет находиться кэши главных меню ресурсов.

Источник

Читайте также:  Настройка ммс на диджусе
Adblock
detector