In-Portal Developers Guide

This is a wiki-based Developers Guide for In-Portal Open Source CMS. The purpose of this guide is to provide advanced users, web developers and programmers with documentation on how to expand, customize and improve the functionality and the code the In-Portal software. Please consider contributing to our documentation writing effort.

K4:Что находится в кеше

From In-Portal Developers Guide

Jump to: navigation, search
Кеширование Кеширование
Статьи в этой категории
  • Что находится в кеше

Contents

K4 задуман, как механизм для решения широкого спектра задач. С увеличением его возможностей рос и объём оперативной памяти, использовавшейся скриптом. А это непосредственным образом отражалось на скорости выполнения скрипта. Конечно это не совсем хорошо, поэтому было принято решение всю статическую (не изменяющуюся в процессе выполнения скрипта) информацию записать в cache, находящийся в базе данных.

Для этого используется таблица Cache. Каждая запись в данной таблице представляет определённого рода cache, и не зависит от других записей.

Image:Infobox Icon.gif В данной статье слово пользователь означает пользователя K4 - программиста.

Системный cache

Для успешного функционирования K4 использует следующие caches (значения из поля VarName):

  • config_files - относительные пути (без пути к директории проекта, т.е. значения FULL_PATH константы) ко всем найденным в проекте unit config файлам
  • configs_parsed - разного рода информация из всех найденных unit configs (об этом ниже)
  • sections_parsed - собранное со всех найденных unit configs меню (navigation tree), видное в левом frame в административной консоли
  • cms_menu - все страницы, помеченные как IsMenu из секции "Content Management -> Structure"
  • mod_rw_* - mapping между mod-rewrite url и эквивалентной ему переменной окружения (уже разобранной)
  • RegularEventRuns - mapping между regular event alias и временем (timestamp), когда оно было последний раз выполнено.

Если изменить ту часть unit config, которая находиться в cache, то изменение не вступит в силу, пока связанный cache не будет перестроен. Для того, чтобы перестроить определённый cache достаточно стереть его запись из таблицы Cache и при следующем запуске скрипта он построится по новой уже учитывая сделанные в unit config изменения.

Image:Tipbox Icon.gif Понять что находиться в cache, а что нет можно воспользовавшись этой ссылкой.

Ключ "config_files"

Ниже приведён фрагмент данного cache. В базе данных он конечно храниться в serialized виде.

Array (
	0 => '/in-edit/units/form_fields/form_fields_config.php',
	1 => '/in-edit/units/forms/forms_config.php',
	2 => '/in-edit/units/content/content_config.php',
	3 => '/in-edit/units/pages/pages_config.php',
	4 => '/in-edit/units/form_submissions/form_submissions_config.php',
	5 => '/core/units/theme_files/theme_files_config.php',
	6 => '/core/units/permissions/permissions_config.php',
	7 => '/core/units/user_groups/user_groups_config.php',
	8 => '/core/units/translator/translator_config.php',
	9 => '/core/units/themes/themes_config.php',
	10 => '/core/units/skins/skins_config.php',
	11 => '/core/units/general/general_config.php',
	12 => '/core/units/general/helpers/helpers_config.php',
	13 => '/core/units/groups/groups_config.php',
	14 => '/core/units/configuration/configuration_config.php',
	15 => '/core/units/email_messages/email_messages_config.php',
	16 => '/core/units/users/users_config.php',
	17 => '/core/units/phrases/phrases_config.php',
)

Ключ "configs_parsed"

Далее приведено краткое описание того, что находиться в данном cache, а также фрагмент данного cache. В базе данных он конечно храниться в serialized виде.

  • Factory.Files - mapping между названием класса и пути файла, где его искать
  • Factory.realClasses - mapping между pseudo и названием класса, который будет подгружен при использовании этого pseudo
  • Factory.Dependencies - mapping между названием класса и тех классов, которые надо подгрузить когда вызывают его
  • ConfigReader.prefixFiles - mapping между Prefix и файлом unit config, где он описан
  • EventManager.buildEvents - mapping между pseudo и методом класса, который является конструктором для класса связанного с этим pseudo
  • EventManager.beforeRegularEvents - regular events, которые будут выполняться до показа страницы
  • EventManager.afterRegularEvents - regular events, которые будут выполняться после показа страницы
  • EventManager.beforeHooks - hooks, которые будут выполнены до указанных events
  • EventManager.afterHooks - hooks, которые будут выполнены после указанных events
  • TagsAggregator.data - запутанная технология, которую использовать НЕ НАДО
  • Application.Caches.ConfigVariables -
  • Application.ConfigCacheIds -
  • Application.ConfigHash -
  • Application.ReplacementTemplates - подменённые шаблоны (только в административной консоли)
  • Application.ModuleInfo - информация о инсталлированных модулях в проекте (т.к. K4 это модульная система)
Array (
	'Factory.Files' => Array (
		'kTempTablesHandler' => 'core/kernel/utility/temp_handler.php',
		'kEventManager' => 'core/kernel/event_manager.php',
		'kUnitConfigReader' => 'core/kernel/utility/unit_config_reader.php',
		'kArray' => 'core/kernel/utility/params.php',
	),
 
	'Factory.realClasses' => Array (
		'kTempTablesHandler' => 'kTempTablesHandler',
		'EventManager' => 'kEventManager',
		'kUnitConfigReader' => 'kUnitConfigReader',
		'kArray' => 'kArray',
		'Params' => 'Params',
		'kHelper' => 'kHelper',
		'Cache' => 'kCache',
		'HTTPQuery' => 'kHTTPQuery',
		'Session' => 'InpSession',
		'SessionStorage' => 'InpSessionStorage',
		'formflds' => 'kDBItem',
		'formflds_List' => 'kDBList',
		'formflds_EventHandler' => 'FormFieldsEventHandler',
		'formflds_TagProcessor' => 'FormFieldsTagProcessor',
		'form' => 'kDBItem',
		'form_List' => 'kDBList',
		'form_EventHandler' => 'FormsEventHandler',
		'form_TagProcessor' => 'FormsTagProcessor',
		'content' => 'kDBItem',
		'content_List' => 'kDBList',
		'content_EventHandler' => 'kDBEventHandler',
		'content_TagProcessor' => 'kDBTagProcessor',
		'gwfv' => 'kDBItem',
		'gwfv_List' => 'kDBList',
		'gwfv_EventHandler' => 'kDBEventHandler',
		'gwfv_TagProcessor' => 'kDBTagProcessor',
	),
 
	'Factory.Dependencies' => Array (
		'kCache' => Array (0 => 'Params'),
		'kHTTPQuery' => Array (0 => 'Params'),
		'kMainTagProcessor' => Array (0 => 'kTagProcessor'),
		'kDBTagProcessor' => Array (0 => 'kTagProcessor'),
	),
 
	'ConfigReader.prefixFiles' => Array (
		'formflds' => 'in-edit/units/form_fields/form_fields_config.php',
		'form' => 'in-edit/units/forms/forms_config.php',
		'content' => 'in-edit/units/content/content_config.php',
		'cms' => 'in-edit/units/pages/pages_config.php',
		'formsubs' => 'in-edit/units/form_submissions/form_submissions_config.php',
		'theme-file' => 'core/units/theme_files/theme_files_config.php',
		'perm' => 'core/units/permissions/permissions_config.php',
		'ug' => 'core/units/user_groups/user_groups_config.php',
		'trans' => 'core/units/translator/translator_config.php',
		'theme' => 'core/units/themes/themes_config.php',
		'skin' => 'core/units/skins/skins_config.php',
		'm' => 'core/units/general/general_config.php',
		'helpers' => 'core/units/general/helpers/helpers_config.php',
		'g' => 'core/units/groups/groups_config.php',
		'conf' => 'core/units/configuration/configuration_config.php',
		'emailmessages' => 'core/units/email_messages/email_messages_config.php',
		'u' => 'core/units/users/users_config.php',
	),
 
	'EventManager.buildEvents' => Array (
		'kTempTablesHandler' => 'OnTempHandlerBuild',
		'formflds' => 'OnItemBuild',
		'formflds_List' => 'OnListBuild',
		'formflds_EventHandler' => 'OnBuild',
		'form' => 'OnItemBuild',
		'form_List' => 'OnListBuild',
		'form_EventHandler' => 'OnBuild',
		'form_TagProcessor' => 'OnBuild',
		'content' => 'OnItemBuild',
		'content_List' => 'OnListBuild',
		'content_EventHandler' => 'OnBuild',
		'content_TagProcessor' => 'OnBuild',
	),
 
	'EventManager.beforeRegularEvents' => Array (
		'store_affiliate' => Array ('EventName' => 'affil:OnStoreAffiliate', 'RunInterval' => 0,),
		'reset_affiliate_stats' => Array ('EventName' => 'affil:OnResetStatistics', 'RunInterval' => 0,),
	),
 
	'EventManager.afterRegularEvents' => Array (
		'listings_expiration' => Array ('EventName' => 'ls:OnCheckExpiredPaidListings', 'RunInterval' => 1800),
		'membership_expiration' => Array ('EventName' => 'u:OnCheckExpiredMembership', 'RunInterval' => 1800),
	),
 
	'EventManager.beforeHooks' => Array (
		'phrases.oncreate' => Array (
			0 => Array (
				'DoPrefix' => 'phrases',
				'DoSpecial' => '', 
				'DoEvent' => 'OnBeforePhraseCreate',
				'Conditional' => false,
			),
 
			1 => Array (
				'DoPrefix' => 'phrases',
				'DoSpecial' => '', 
				'DoEvent' => 'OnBeforePhraseCreate',
				'Conditional' => false,
			),
		),
 
		'adm.onstartup' => Array (
			0 => Array (
				'DoPrefix' => 'visits',
				'DoSpecial' => '',
				'DoEvent' => 'OnRegisterVisit',
				'Conditional' => false,
			),
		),
	),
 
	'EventManager.afterHooks' => Array (
		'form.*.onafterconfigread' => Array (
			0 => Array (
				'DoPrefix' => 'form',
				'DoSpecial' => '',
				'DoEvent' => 'OnCreateSubmissionNodes',
				'Conditional' => false,
			),
		),
	),
 
    'TagsAggregator.data' => Array (
		'p' => Array (
			'Image' => Array (0] => 'img', 1 => 'ItemImageTag', 2 => '-item',),
			'ImageSrc' => Array (0 => 'img', 1 => 'ItemImageTag', 2 => '-item',),
		),
 
		'ord' => Array (
			'PrintShippingTypes' => Array (0 => 's', 1 => 'Order_PrintShippingTypes', 2 => '',),
		),
	),
 
	'Application.Caches.ConfigVariables' => Array (
		0 => 254,
		1 => 267,
		2 => 274,
		3 => 251,
		4 => 359,
		5 => 117,
	),
 
	'Application.ConfigCacheIds' => Array (
		0 => 254,
		1 => 267,
		2 => 274,
		3 => 251,
		4 => 359,
		5 => 117,
	),
 
    'Application.ConfigHash' => Array (
		'Site_Name' => 'In-Portal',
		'UseModRewrite' => 0,
		'SessionTimeout' => 3600,
		'SessionCookieName' => 'sid',
		'Config_Server_Time' => 14,
		'Config_Site_Time' => 14,
	),
 
	'Application.ReplacementTemplates' => Array (
	),
 
	'Application.ModuleInfo' => Array (
		'In-Portal' => Array (
			'Name' => 'In-Portal',
			'Path' => 'kernel/',
			'Var' => 'm',
			'Version' => '4.2.0',
			'Loaded' => 1.
			'LoadOrder' => 0
			'TemplatePath' => '',
			'RootCat' => 0.
			'BuildDate' => 1054738405,
		),
 
		'Core' => Array (
			'Name' => 'Core',
			'Path' => 'core/',
			'Var' => 'adm',
			'Version' => '4.2.0',
			'Loaded' => 1,
			'LoadOrder' => 1,
			'TemplatePath' => '',
			'RootCat' => 0,
			'BuildDate' => 0,
		),
	),
)

Ключ "sections_parsed"

Ниже приведён фрагмент данного cache. В базе данных он конечно храниться в serialized виде. Более подробная информация о том из чего состоит данный cache и как добавлять новые секции в меню административной консоли доступна в этом разделе.

Array (
	'in-link:listing_types' => Array (
		'parent' => 'in-link:paid_listings_folder',
		'icon' => 'paid_listings',
		'label' => 'la_tab_ListingTypes',
		'url' => Array ('t' => 'in-link/paid_listings/paid_listing_types_list', 'pass' => 'm', 'm_opener' => 'r', 'no_pass_through' => 1,),
		'permissions' => Array (0 => 'view', 1 => 'add', 2 => 'edit', 3 => 'delete',),
		'priority' => 8.2,
		'type' => 2,
		'SectionPrefix' => 'lst',
		'onclick' => 'checkEditMode()',
		'container' => 0,
	),
 
	'in-commerce:affiliate_payment_types' => Array (
		'parent' => 'in-commerce:affiliates_folder',
		'icon' => 'affiliates',
		'label' => 'la_tab_AffiliatePaymentTypes',
		'url' => Array ('t' => 'in-commerce/affiliate_plans/affiliate_payment_types_list', 'pass' => 'm', 'm_opener' => 'r', 'no_pass_through' => 1,),
		'permissions' => Array (
			0 => 'view',
			1 => 'add',
			2 => 'edit',
			3 => 'delete',
			4 => 'advanced:approve',
			5 => 'advanced:decline',
			6 => 'advanced:set_primary',
			7 => 'advanced:move_up',
			8 => 'advanced:move_down',
		),
		'priority' => 8.3,
		'type' => 2,
		'SectionPrefix' => 'apt',
		'onclick' => 'checkEditMode()',
		'container' => 0,
	),
)