Системные настройки
Последнее обновление Mar 19th, 2021 | История страницы | Улучшить эту страницу | Сообщить о проблеме
Support the team building MODX with a monthly donation.
The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.
Backers
Budget
$301 per month—let's make that $500!
Learn moreMODX поставляется с гибким набором системных настроек. Они находятся в Система -> Системные настройки и могут быть легко отредактированы и изменены. Все системные настройки доступны в ваших шаблонах с помощью обозначения [[++placeholder]]
. Посмотрите Теги шаблона для дополнительной информации.
Переопределение настроек (Наследование)¶
В то время как в этом документе в основном говорится о Системных настройках, MODX поставляется с очень мощной системой наследования, которая позволяет переопределять настройки в контексте, пользовательской группе или пользовательской настройке.
По сути, когда параметр запрашивается в сеансе определенного пользователя, параметры проверяются в следующем порядке:
- Настройка пользователя
- Настройка группы пользователей
- Настройка контекста (обратите внимание, что в менеджере контекст обычно называется mgr)
- Настройка системы
Создание новых системных настроек (через графический интерфейс)¶
Чтобы создать новый параметр системы, нажмите ссылку «Создать новые параметры» в разделе «Система» -> «Параметры системы».
Параметры¶
- Ключ: в конечном итоге это уникальное имя вашего
[[++placeholder]]
- Имя: эта метка отображается в столбце «Имя» при просмотре всех настроек системы. Это значение может быть локализовано (см. Ниже).
- Тип поля: в настоящее время поддерживаются 3 типа ввода: TextField, TextArea, Yes/No
- Пространство имен: как с Пользовательские страницы менеджера, пространство имен определяет папку внутри core/components/.
- Area Lexicon Entry: это значение влияет на группировку системных настроек; создайте несколько системных настроек, которые совместно используют «Область ввода лексики», и они будут сгруппированы вместе.
- Значение: значение по умолчанию.
- Описание: это значение может быть локализовано (см. Ниже).
Локализация¶
Значения, используемые для описания настроек системы, могут быть необязательно локализованы (т.е. переведены) путем ссылки на конкретный файл локализации. Ключи лексики следуют определенному формату:
- Имя:
setting_
+ Key - Описание:
setting_
+ Key +_desc
Например, если мы посмотрим на Quip's [[++quip.emailsFrom]]
настройки, мы видим, что он использует пространство имен quip. Ожидаемая структура папок состоит в том, чтобы искать файлы локализации в папке пространства имен, затем в папке «лексикона», затем в папках, разделенных по языковым кодам, и затем в default.inc.php файле, для примера core/components/quip/lexicon/en/default.inc.php
В нашем примере Quip мы видим имя setting_quip.emailsFrom и описание setting_quip.emailsFrom_desc. Эти два значения соответствуют ключам в $_lang массив внутри default.inc.php:
$_lang['setting_quip.emailsFrom'] = 'From Email';
$_lang['setting_quip.emailsFrom_desc'] = 'The email address to send system emails from.';
Мы рекомендуем вам щелкнуть правой кнопкой мыши существующий системный параметр и выбрать «Обновить системный параметр», чтобы получить представление о том, как это работает.
Получение настроек системы (программно)¶
Чтобы получить значение настройки из сниппета, плагина или другого PHP-кода, вы используете getOption функции и передачи ей уникальный ключ для опции, например:
$siteStartId = $modx->getOption('site_start');
В WordPress сопоставимая функция API get_option().
Эта функция извлекает значение из кэша настроек.
Сохранение настроек системы (программно)¶
Здесь все становится немного сложнее: когда мы получаем значение, используя getOption, мы получаем объект из кэша настроек. Это имеет явное преимущество в скорости, но это означает, что у нас по существу есть копия значения настройки, доступная только для чтения.
Пока есть метод setOption; это только обновляет кэш настроек в памяти.
Это по архитектурным причинам: системные настройки должны быть определены как configurations, NOT runtime dynamic values. Они обычно устанавливаются во время установки, а затем не часто обновляются. Однако могут быть законные времена, когда вам нужно обновить системные настройки программно, например, возможно, вы написали Пользовательская страница менеджера которая предлагает настраиваемую форму для ваших пользователей для своих системных настроек.
Если мы хотим обновить настройки системы, мы используем мощный xPDO getObject функция. Итак, давайте вернемся к нашему поиску простой настройки сайта и сравним ее рядом с более подробным (и более гибким) аналогом xPDO:
echo $modx->getOption('site_name');
// prints the same thing as this:
$setting = $modx->getObject('modSystemSetting', 'site_name');
if ($setting) {
echo $setting->get('value');
}
Разница в том, что использование getObject извлекает объект из базы данных без кэширования, и мы можем делать с объектом гораздо больше вещей, включая сохранение этого объекта. Итак, вот как мы должны получить и сохранить настройки системы:
$setting = $modx->getObject('modSystemSetting', 'site_name');
$setting->set('value', 'My New Site Name');
$setting->save();
Однако обратите внимание, что это не очищает кэш настроек, поэтому любые последующие вызовы getOption по-прежнему будут возвращать более старую кешированную версию настройки.
Чтобы исправить это в MODX, вы должны очистить кеш. По крайней мере, кэш system_settings, но если вы используете значение параметра во сниппете или другой код, влияющий на интерфейс, кеш ресурсов тоже:
$cacheRefreshOptions = [
'system_settings' => [],
'resource' => [],
];
$modx->cacheManager->refresh($cacheRefreshOptions);
В WordPress сопоставимая функция API update_option().
Получение метаданных настроек¶
Как только мы начнем извлекать Objects, которые представляют системные настройки, а не только их значение, мы можем увидеть все метаданные для любого заданного параметра (то есть все атрибуты). Посмотрите на этот код в качестве примера:
$Setting = $modx->getObject('modSystemSetting', 'site_name');
print_r( $Setting->toArray() );
/*
prints out something like this:
Array (
[key] => site_name
[value] => My Skiphop Site
[xtype] => textfield
[namespace] => core
[area] => site
[editedon] => 2010-10-24 21:53:55
)
*/
Как только вы поймете, как манипулировать объектами с помощью MODX и xPDO, вы сможете извлекать и изменять практически все внутри MODX, потому что практически все является объектом.
Получение списка связанных настроек¶
Если вы заметили в графическом интерфейсе выше, MODX позволяет несколько логично сгруппировать настройки системы. Самые полезные группировки - это area и префикс key. Использование xPDO getCollection Метод, мы можем легко предоставить некоторые критерии поиска, чтобы получить настройки, которые мы хотим.
Вот как мы можем получить все настройки из области «Почта»:
$relatedSettings = $modx->getCollection('modSystemSetting', array('area'=>'Mail'));
foreach ( $relatedSettings as $Setting ) {
print $Setting->get('value');
}
Это естественным образом приводит нас к одной из других особенностей xPDO: xPDOQuery объект. Мы можем использовать его для передачи более сложных критериев нашему вызову getCollection. Вот как мы можем получить все настройки, которые используют префикс «quip»:
$query = $modx->newQuery('modSystemSetting');
$query->where(array('key:LIKE' => 'quip.%') );
$relatedSettings = $modx->getCollection('modSystemSetting', $query);
foreach ( $relatedSettings as $Setting ) {
print $Setting->get('value');
}
Возможно, вы не ожидали введения в xPDO, пока вы просто пытались получить и установить системные настройки, но он там.
Создание системной настройки программно¶
Возможно, вы захотите создать Системные настройки программно, чтобы предоставить вашим пользователям более чистый UX / UI. В своем коде вы можете поместить что-то вроде следующего:
$MySetting = $modx->newObject('modSystemSetting');
$MySetting->set('key', 'mykey');
$MySetting->set('value', 'my_value');
$MySetting->set('xtype', 'textfield');
$MySetting->set('namespace', 'my_namespace');
$MySetting->set('area', 'MyArea');
$MySetting->save();
// Clear the cache:
$cacheRefreshOptions = array( 'system_settings' => array() );
$modx->cacheManager->refresh($cacheRefreshOptions);
Обратите внимание, что вы должны создать записи лексики, которые соответствуют вашему имени ключа (см. Раздел «Локализация» выше):
- Имя:
setting_
+ Key - Описание:
setting_
+ Key +_desc
Таким образом, в этом примере вам необходимо добавить следующие записи лексикона в загруженный вами лексикон:
$_lang['setting_mykey'] = 'Имя моей настройки';
$_lang['setting_mykey_desc'] = 'Описание моего ключа';
MODX заполняет значения для имени и описания на основе этих записей лексики.
Может оказаться полезным ссылаться на ваши локализованные языковые строки внутри ваших шаблонов или CMP. Это можно сделать с помощью тега лексикона, но вы должны указать тему «setting», например,
[[!%setting_emailsender? &topic=`setting` &namespace=`core` &language=`en`]]
Типы системных настроек¶
Атрибут xtype определяет, какой тип поля GUI будет использовать при рендеринге интерфейса для этого поля:
- combo-boolean : сохраненные значения 1 и 0. Будет отображать «Да» и «Нет»
- textfield : стандартное текстовое поле
- textarea : стандартная текстовая область
- text-password : стандартное поле пароля (ввод маскируется)
- numberfield : используется для ввода цифр
- modx-combo-language : позволяет пользователю выбрать язык
- modx-combo-source :
- modx-combo-template : позволяет пользователю выбрать шаблон
- modx-combo-content-type : позволяет пользователю выбрать тип контента
- modx-combo-charset : позволяет пользователю выбрать набор символов
- modx-combo-rte : как текстовая область, но с элементами управления форматированием
- modx-combo-context : позволяет пользователю выбрать контекст
- modx-combo-manager-theme : позволяет пользователю выбрать тему оформления интерфейса менеджера MODX
Список настроек¶
Описание каждого параметра следующее:
- access_category_enabled
- access_context_enabled
- access_resource_group_enabled
- allow_duplicate_alias
- allow_forward_across_contexts
- allow_manager_login_forgot_password
- allow_multiple_emails
- allow_tags_in_post
- allow_tv_eval
- anonymous_sessions
- archive_with
- automatic_alias
- automatic_template_assignment
- auto_check_pkg_updates
- auto_check_pkg_updates_cache_expire
- auto_isfolder
- auto_menuindex
- base_help_url
- blocked_minutes
- cache_action_map
- cache_alias_map
- cache_context_settings
- cache_db
- cache_db_expires
- cache_db_session
- cache_db_session_lifetime
- cache_default
- cache_disabled
- cache_format
- cache_handler
- cache_json
- cache_json_expires
- cache_lang_js
- cache_lexicon_topics
- cache_noncore_lexicon_topics
- cache_resource
- cache_resource_clear_partial
- cache_resource_expires
- cache_scripts
- cache_system_settings
- clear_cache_refresh_trees
- compress_css
- compress_js
- compress_js_groups
- compress_js_max_files
- concat_js
- confirm_navigation
- container_suffix
- context_tree_sortby
- context_tree_sortdir
- context_tree_sort
- context_tree_sort
- cultureKey
- custom_resource_classes
- date_timezone
- debug
- default_content_type
- default_context
- default_duplicate_publish_option
- default_media_source
- default_media_source_type
- default_per_page
- default_template
- default_username
- editor_css_path
- editor_css_selectors
- emailsender
- emailsubject
- enable_dragdrop
- enable_gravatar
- error_log_filename
- error_log_filepath
- error_page
- extension_packages
- failed_login_attempts
- feed_modx_news
- feed_modx_news_enabled
- feed_modx_security
- feed_modx_security_enabled
- fe_editor_lang
- filemanager_path
- filemanager_path_relative
- filemanager_url
- filemanager_url_relative
- forgot_login_email
- form_customization_use_all_groups
- forward_merge_excludes
- friendly_alias_lowercase_only
- friendly_alias_max_length
- friendly_alias_realtime
- friendly_alias_restrict_chars
- friendly_alias_restrict_chars_pattern
- friendly_alias_strip_element_tags
- friendly_alias_translit
- friendly_alias_translit_class
- friendly_alias_translit_class_path
- friendly_alias_trim_chars
- friendly_alias_urls
- friendly_alias_word_delimiters
- friendly_alias_word_delimiter
- friendly_urls
- friendly_urls_strict
- friendly_url_prefix
- friendly_url_suffix
- global_duplicate_uri_check
- hidemenu_default
- inherit_parent_template
- link_tag_scheme
- locale
- lock_ttl
- log_deprecated
- log_level
- log_snippet_not_found
- log_target
- mail_charset
- mail_encoding
- mail_smtp_auth
- mail_smtp_autotls
- mail_smtp_helo
- mail_smtp_hosts
- mail_smtp_keepalive
- mail_smtp_pass
- mail_smtp_port
- mail_smtp_prefix
- mail_smtp_single_to
- mail_smtp_timeout
- mail_smtp_user
- mail_use_smtp
- main_nav_parent
- manager_date_format
- manager_direction
- manager_favicon_url
- manager_html5_cache
- manager_js_cache_file_locking
- manager_js_cache_max_age
- manager_js_document_root
- manager_js_zlib_output_compression
- manager_language
- manager_lang_attribute
- manager_login_url_alternate
- manager_theme
- manager_time_format
- manager_use_fullname
- manager_week_start
- mgr_source_icon
- mgr_tree_icon_context
- modx_browser_default_sort
- modx_browser_default_viewmode
- modx_browser_tree_hide_files
- modx_browser_tree_hide_tooltips
- modx_charset
- new_file_permissions
- new_folder_permissions
- parser_recurse_uncacheable
- password_generated_length
- password_min_length
- phpthumb_allow_src_above_docroot
- phpthumb_cache_maxage
- phpthumb_cache_maxfiles
- phpthumb_cache_maxsize
- phpthumb_cache_source_enabled
- phpthumb_document_root
- phpthumb_error_bgcolor
- phpthumb_error_fontsize
- phpthumb_error_textcolor
- phpthumb_far
- phpthumb_imagemagick_path
- phpthumb_nohotlink_enabled
- phpthumb_nohotlink_erase_image
- phpthumb_nohotlink_text_message
- phpthumb_nohotlink_valid_domains
- phpthumb_nooffsitelink_enabled
- phpthumb_nooffsitelink_erase_image
- phpthumb_nooffsitelink_require_refer
- phpthumb_nooffsitelink_text_message
- phpthumb_nooffsitelink_valid_domains
- phpthumb_nooffsitelink_watermark_src
- phpthumb_zoomcrop
- preserve_menuindex
- principal_targets
- proxy_auth_type
- proxy_host
- proxy_password
- proxy_port
- proxy_username
- publish_default
- rb_base_dir
- rb_base_url
- request_controller
- request_method_strict
- request_param_alias
- request_param_id
- resource_tree_node_name
- resource_tree_node_name_fallback
- resource_tree_node_tooltip
- richtext_default
- search_default
- send_poweredby_header
- server_offset_time
- server_protocol
- session_cookie_domain
- session_cookie_httponly
- session_cookie_lifetime
- session_cookie_path
- session_cookie_secure
- session_enabled
- session_gc_maxlifetime
- session_handler_class
- session_name
- settings_version
- setting_static_elements_basepath
- show_tv_categories_header
- signupemail_message
- site_name
- site_start
- site_status
- site_unavailable_message
- site_unavailable_page
- static_elements_automate_chunks
- static_elements_automate_plugins
- static_elements_automate_snippets
- static_elements_automate_templates
- static_elements_automate_tvs
- static_elements_basepath
- static_elements_default_category
- static_elements_default_mediasource
- strip_image_paths
- symlink_merge_fields
- syncsite_default
- tree_default_sort
- tree_root_id
- tvs_below_content
- udperms_allowroot
- ui_debug_mode
- unauthorized_page
- upload_files
- upload_maxsize
- user_nav_parent
- use_alias_path
- use_browser
- use_context_resource_table
- use_editor
- use_frozen_parent_uris
- use_multibyte
- use_weblink_target
- welcome_action
- welcome_namespace
- welcome_screen
- welcome_screen_url
- which_editor
- which_element_editor
- xhtml_urls
Support the team building MODX with a monthly donation.
The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.
Backers
Budget
$301 per month—let's make that $500!
Learn more