はじめに
連載開始からしばらく経ちました。今では多くの皆さんが快適なMODxライフをお過ごしかと思います
今回は、
前回紹介したように、
MySQLのテーブル構造
さっそくですが、
# mysql -u root modx mysql> show tables; +------------------------------------+ | Tables_in_modx | +------------------------------------+ | modx_access_actiondom | | modx_access_actions | | modx_access_category | | modx_access_context | | modx_access_elements | | modx_access_menus | | modx_access_permissions | | modx_access_policies | | modx_access_policy_template_groups | | modx_access_policy_templates | | modx_access_resource_groups | | modx_access_resources | | modx_access_templatevars | | modx_actiondom | | modx_actions | | modx_actions_fields | | modx_active_users | | modx_categories | | modx_categories_closure | | modx_class_map | | modx_content_type | | modx_context | | modx_context_resource | | modx_context_setting | | modx_document_groups | | modx_documentgroup_names | | modx_element_property_sets | | modx_event_log | | modx_fc_profiles | | modx_fc_profiles_usergroups | | modx_fc_sets | | modx_keyword_xref | | modx_lexicon_entries | | modx_lexicon_topics | | modx_manager_log | | modx_member_groups | | modx_membergroup_names | | modx_menus | | modx_namespaces | | modx_property_set | | modx_register_messages | | modx_register_queues | | modx_register_topics | | modx_session | | modx_site_content | | modx_site_content_metatags | | modx_site_htmlsnippets | | modx_site_keywords | | modx_site_metatags | | modx_site_plugin_events | | modx_site_plugins | | modx_site_snippets | | modx_site_templates | | modx_site_tmplvar_access | | modx_site_tmplvar_contentvalues | | modx_site_tmplvar_templates | | modx_site_tmplvars | | modx_system_eventnames | | modx_system_settings | | modx_transport_packages | | modx_transport_providers | | modx_user_attributes | | modx_user_group_roles | | modx_user_messages | | modx_user_roles | | modx_user_settings | | modx_users | | modx_workspaces | +------------------------------------+ 68 rows in set (0.00 sec)
このように、
テーブル名からも大体の用途が想像できるかもしれませんが、
テーブル名 | 内容 |
---|---|
modx_ | 詳細不明 |
modx_ | アクションのアクセス設定 |
modx_ | カテゴリのアクセス設定 |
modx_ | コンテキストのアクセス設定 |
modx_ | エレメントのアクセス設定 |
modx_ | メニューのアクセス設定 |
modx_ | アクセスパーミッションの設定 |
modx_ | アクセスポリシーの設定 |
modx_ | アクセステンプレートのテンプレートグループ設定 |
modx_ | アクセスポリシーテンプレートの設定 |
modx_ | リソースグループのアクセス設定 |
modx_ | リソースのアクセス設定 |
modx_ | カスタムテンプレート変数のアクセス設定 |
modx_ | 詳細不明 |
modx_ | アクションの内容 |
modx_ | アクションフィールドの内容 |
modx_ | 現在ログイン中のユーザ情報 |
modx_ | スニペットなどのカテゴリ情報 |
modx_ | 上記カテゴリの親子関係など |
modx_ | ドキュメントやリンク、 |
modx_ | コンテンツタイプ |
modx_ | コンテキスト |
modx_ | コンテキストのリソース |
modx_ | コンテキストの設定 |
modx_ | リソースグループとリソースの関係 |
modx_ | リソースグループの情報 |
modx_ | エレメントのプロパティセット |
modx_ | イベントログ |
modx_ | 管理画面カスタマイズのためのプロファイル |
modx_ | 上記のユーザグループ設定 |
modx_ | 管理画面カスタマイズのためのセット |
modx_ | キーワードのクロスリファレンス? |
modx_ | 語彙 |
modx_ | 語彙のトピック情報 |
modx_ | 管理者ログ |
modx_ | メンバーグループの情報 |
modx_ | メンバーグループの名前や説明 |
modx_ | トップメニューの構成 |
modx_ | プラグインやスニペットのネームスペース |
modx_ | 設定をまとめたプロパティセット |
modx_ | 登録時のメッセージ |
modx_ | 登録キュー |
modx_ | 詳細不明 |
modx_ | MODxのログインセッション |
modx_ | 各リソースの内容 |
modx_ | メタタグの管理。最近では使用されない。 |
modx_ | チャンクの内容 |
modx_ | キーワードの管理。最近では使用されない。 |
modx_ | メタタグの管理。最近では使用されない。 |
modx_ | プラグインのイベント |
modx_ | TinyMCEのようなプラグイン |
modx_ | 独自スニペットやWayFinderのようなスニペット |
modx_ | テンプレート |
modx_ | カスタムテンプレート変数のアクセス許可 |
modx_ | カスタムテンプレート変数の実データ |
modx_ | カスタムテンプレート変数とテンプレートの対応 |
modx_ | カスタムテンプレート変数の定義 |
modx_ | プラグインなどが使用するシステムイベント名 |
modx_ | システム設定 |
modx_ | パッケージ情報 |
modx_ | パッケージのプロバイダ情報 |
modx_ | メールアドレスや氏名などのユーザ情報 |
modx_ | グループロール |
modx_ | メッセージ |
modx_ | ユーザロール |
modx_ | ユーザ設定 |
modx_ | ユーザ名、 |
modx_ | MODxコアが使用するワークスペース |
MODxの管理画面を操作する中で最も日常的に発生するのは、
試しに、
mysql> select * from modx_site_content where pagetitle='testtitle'\G *************************** 1. row *************************** id: 13 type: document contentType: text/html pagetitle: testtitle longtitle: description: alias: testalias link_attributes: published: 0 pub_date: 0 unpub_date: 0 parent: 0 isfolder: 0 introtext: content: testcontent richtext: 1 template: 3 menuindex: 3 searchable: 1 cacheable: 1 createdby: 1 createdon: 1308665190 editedby: 0 editedon: 0 deleted: 0 deletedon: 0 deletedby: 0 publishedon: 0 publishedby: 0 menutitle: donthit: 0 privateweb: 0 privatemgr: 0 content_dispo: 0 hidemenu: 0 class_key: modDocument context_key: web content_type: 1 uri: testalias.html uri_override: 0 1 row in set (0.00 sec)
逆にテーブルの構造を見てみると、
mysql> show create table modx_site_content\G *************************** 1. row *************************** Table: modx_site_content Create Table: CREATE TABLE `modx_site_content` ( `id` int(10) unsigned NOT NULL auto_increment, `type` varchar(20) NOT NULL default 'document', `contentType` varchar(50) NOT NULL default 'text/html', `pagetitle` varchar(255) NOT NULL default '', `longtitle` varchar(255) NOT NULL default '', `description` varchar(255) NOT NULL default '', `alias` varchar(255) default '', `link_attributes` varchar(255) NOT NULL default '', `published` tinyint(1) unsigned NOT NULL default '0', `pub_date` int(20) NOT NULL default '0', `unpub_date` int(20) NOT NULL default '0', `parent` int(10) NOT NULL default '0', `isfolder` tinyint(1) unsigned NOT NULL default '0', `introtext` text, `content` mediumtext, `richtext` tinyint(1) unsigned NOT NULL default '1', `template` int(10) NOT NULL default '0', `menuindex` int(10) NOT NULL default '0', `searchable` tinyint(1) unsigned NOT NULL default '1', `cacheable` tinyint(1) unsigned NOT NULL default '1', `createdby` int(10) NOT NULL default '0', `createdon` int(20) NOT NULL default '0', `editedby` int(10) NOT NULL default '0', `editedon` int(20) NOT NULL default '0', `deleted` tinyint(1) unsigned NOT NULL default '0', `deletedon` int(20) NOT NULL default '0', `deletedby` int(10) NOT NULL default '0', `publishedon` int(20) NOT NULL default '0', `publishedby` int(10) NOT NULL default '0', `menutitle` varchar(255) NOT NULL default '', `donthit` tinyint(1) unsigned NOT NULL default '0', `privateweb` tinyint(1) unsigned NOT NULL default '0', `privatemgr` tinyint(1) unsigned NOT NULL default '0', `content_dispo` tinyint(1) NOT NULL default '0', `hidemenu` tinyint(1) NOT NULL default '0', `class_key` varchar(100) NOT NULL default 'modDocument', `context_key` varchar(100) NOT NULL default 'web', `content_type` int(11) unsigned NOT NULL default '1', `uri` text, `uri_override` tinyint(1) NOT NULL default '0', PRIMARY KEY (`id`), KEY `alias` (`alias`), KEY `published` (`published`), KEY `pub_date` (`pub_date`), KEY `unpub_date` (`unpub_date`), KEY `parent` (`parent`), KEY `isfolder` (`isfolder`), KEY `template` (`template`), KEY `menuindex` (`menuindex`), KEY `searchable` (`searchable`), KEY `cacheable` (`cacheable`), KEY `hidemenu` (`hidemenu`), KEY `class_key` (`class_key`), KEY `context_key` (`context_key`), KEY `uri` (`uri`(333)), KEY `uri_override` (`uri_override`), FULLTEXT KEY `content_ft_idx` (`pagetitle`,`longtitle`,`description`,`introtext`,`content`) ) ENGINE=MyISAM AUTO_INCREMENT=14 DEFAULT CHARSET=utf8
このように、
mysql> INSERT INTO modx_site_content (pagetitle, alias, content, published) values ('testtitle2', 'testalias2', 'testcontent2', 1); Query OK, 1 row affected (0.00 sec)
ここまでくればご想像のとおりですが、
mysql> INSERT INTO modx_site_content (pagetitle, alias, content, published, template, parent) values ('testtitle2', 'testalias2', 'testcontent2', 1, 3, 5); Query OK, 1 row affected (0.00 sec)
これを応用していけば、
カスタムテンプレート変数の構造
通常のリソース同様、
こちらもデータベース構造を把握しておけば、
例のごとく、
mysql> select * from modx_site_tmplvars where name = 'price'\G *************************** 1. row *************************** id: 1 type: text name: price caption: price description: editor_type: 0 category: 0 locked: 0 elements: rank: 0 display: default default_text: 100? properties: a:0:{} input_properties: NULL output_properties: NULL 1 row in set (0.00 sec)
次に、
mysql> select id,templatename from modx_site_templates; +----+--------------+ | id | templatename | +----+--------------+ | 1 | BaseTemplate | | 3 | mytpl | +----+--------------+ 2 rows in set (0.00 sec)
「mytpl」
mysql> select * from modx_site_tmplvar_templates; +-----------+------------+------+ | tmplvarid | templateid | rank | +-----------+------------+------+ | 1 | 3 | 0 | +-----------+------------+------+ 1 row in set (0.00 sec)
tmplvaridはテンプレート変数ID、
- 「テンプレート変数IDが1であるpriceテンプレートはテンプレートIDが3であるmytplテンプレート内で使用可能」
を意味します。最後に、
mysql> select * from modx_site_tmplvar_contentvalues; +----+-----------+-----------+--------+ | id | tmplvarid | contentid | value | +----+-----------+-----------+--------+ | 1 | 1 | 10 | 1,050円 | | 2 | 1 | 11 | 1,575円 | +----+-----------+-----------+--------+ 2 rows in set (0.00 sec)
contentidとは各リソースのIDを表すため、
リソースやカスタムテンプレート変数以外にも、
おまけ
もう1つおまけとして、
$doc = $modx->getDocument(..);
といった構文もサポートされなくなってしまいました。Summary of Legacy Code Removed in 2.
$doc = $modx->getObject(..);
という形でオブジェクトの情報を取得します。実際の例として、
- 「この記事を読むのに必要な時間:およそ ○分」
といった表示がありますが、
<?php
// 自身のリソースIDを取得
$resourceId = $modx->resource->get('id');
// リソースを配列で取得。$docをprint_rしてみると何が入っているのかよくわかります。
$doc = $modx->getObject('modResource', $resourceId);
// タグを除去
$stripped = strip_tags($doc->get('content'));
// 結果を整数で表示。0分と表示されないよう、1をプラス(手抜き!!)
return (int)(mb_strlen($stripped) / 1000) + 1;
getObjectというメソッドは多くのスニペットから使用することが多いので、
最後に
今回はデータベース側から見たMODxということで、
もし価格や内容量を含む商品データベースが別サーバに存在する場合、
データベースを操作しすぎて管理画面との整合性がとれなくなっては元も子もありませんが、