CMSのポテンシャルを引き出す─MODxで作る商用サイト

第9回 MODxとMySQLの関係 + おまけスニペット

この記事を読むのに必要な時間:およそ 8.5 分

試しに,⁠テンプレート」⁠⁠ページタイトル」⁠⁠エイリアス」⁠⁠ページコンテンツ」の4つを入力したリソースを作成し,mysqlコマンドで情報を取得すると次のような結果が得られます。

作成済みリソースの確認

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) 

逆にテーブルの構造を見てみると,次のようになっています。

modx_site_contentテーブルの構造

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側から作成するのも容易です。

MySQL側からリソースを作成

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) 

これを応用していけば,スクリプトを使って静的なHTMLサイトをMODx化させることも不可能ではありません。データを挿入した後で,最終的には画像や各リンクなど手動で修正すべき点はあるでしょうが,コピー&ペーストで移行を行うよりははるかに手軽です。

著者プロフィール

中満英生(なかみつひでお)

大学時代に出会ったSolarisがきっかけでUNIXの世界へ。その後ホスティングプロバイダ,データセンターで実務経験を積む傍ら,雑誌記事の執筆や技術セミナーの講師を務める。サーバ設定の他,セキュリティに関する著作や技術者エッセイも執筆経験あり。