書き直し終わり(暫定)
とりあえず書きなおしてみた。ただ、あまり以前と変わらない気がしないでもない・・・。
テーブル
CREATE TABLE site ( `name` TEXT UNIQUE, `label` TEXT, `title` TEXT, -- サイト タイトル `url` TEXT, -- サイトURL `dev_url` TEXT, -- 開発環境URL `category_filename_prefix` TEXT DEFAULT 'category_', -- Categoryファイル名接頭語 `category_filename_suffix` TEXT DEFAULT '', -- Categoryファイル名接尾語 `tag_filename_prefix` TEXT DEFAULT 'tag_', -- Tagファイル名接頭語 `tag_filename_suffix` TEXT DEFAULT '', -- Tagファイル名接尾語 `page_filename_prefix` TEXT DEFAULT '', -- Pageファイル名接頭語 `page_filename_suffix` TEXT DEFAULT '', -- Pageファイル名接尾語 `added_at` TEXT DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE pages ( `page_id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` TEXT UNIQUE, -- ページ名(識別用) `filename` TEXT, -- 自動生成 生成するファイル名(name + html もしくはindex.html) `pathname` TEXT UNIQUE, -- 自動生成 パス(filename OR page_group.dirname +filename) `url` TEXT UNIQUE, -- 自動生成 フルURL(site.url + pathname) `label` TEXT, -- このページへリンクする場合のアンカーテキスト `title` TEXT, -- ページタイトル `disabled` INTEGER DEFAULT 0, -- 1でdisabled `description` TEXT, -- Description記述 `template` TEXT, -- ページに適用するテンプレート名記述 `type` TEXT, -- index(TOP)/page/category/tag/page_groupの5つ `type_id` TEXT, -- typeに対応するID(pageとindexは無し) `page_group_id` INTEGER, -- 所属page_group_id記述(page) `category` TEXT, -- カンマ区切りでカテゴリID記述(page) `tags` TEXT, -- カンマ区切りでタグID記述(page) `place_holder_1` TEXT, -- 予約:ヘッダ上(header_top) `place_holder_2` TEXT, -- 予約:ヘッダコンテンツ(header_main) `place_holder_3` TEXT, -- 予約:ヘッダ下(header_bottom) `place_holder_4` TEXT, -- 予約:メインコンテンツ(XX_main) `place_holder_5` TEXT, -- 予約:サイドコンテンツ(side1) `place_holder_6` TEXT, -- 予約:サイドコンテンツ2(side2) `place_holder_7` TEXT, -- 予約:フッタコンテンツ(footer) `place_holder_8` TEXT, -- 任意 `place_holder_9` TEXT, -- 任意 `place_holder_10` TEXT, -- 任意 `place_holder_11` TEXT, -- 任意 `place_holder_12` TEXT, -- 任意 `place_holder_13` TEXT, -- 任意 `place_holder_14` TEXT, -- 任意 `place_holder_15` TEXT, -- 任意 `place_holder_16` TEXT, -- 任意 `place_holder_17` TEXT, -- 任意 `place_holder_18` TEXT, -- 任意 `place_holder_19` TEXT, -- 任意 `place_holder_20` TEXT, -- 任意 `added_at` TEXT DEFAULT CURRENT_TIMESTAMP ); CREATE VIEW enable_pages AS SELECT * FROM pages WHERE `disabled` = 0; CREATE TABLE page_group ( `page_group_id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` TEXT UNIQUE, --ページグループ名(識別用) `dirname` TEXT UNIQUE, --ページグループ ディレクトリ名 `label` TEXT, --ページグループ表示名 `disabled` INTEGER DEFAULT 0, -- 1 でdisabled `added_at` TEXT DEFAULT CURRENT_TIMESTAMP ); CREATE VIEW enable_page_group AS SELECT * FROM page_group WHERE `disabled` = 0; CREATE TABLE category ( `category_id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` TEXT UNIQUE, --カテゴリ名(識別用) `label` TEXT, --表示名 `disabled` INTEGER DEFAULT 0, -- 1 でdisabled `added_at` TEXT DEFAULT CURRENT_TIMESTAMP ); CREATE VIEW enable_category AS SELECT * FROM category WHERE `disabled` = 0; CREATE TABLE tags ( `tag_id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` TEXT UNIQUE, --カテゴリ名(識別用) `label` TEXT, --表示名 `disabled` INTEGER DEFAULT 0, -- 1 でdisabled `added_at` TEXT DEFAULT CURRENT_TIMESTAMP ); CREATE VIEW enable_tags AS SELECT * FROM tags WHERE `disabled` = 0; CREATE TABLE ext_link ( `ext_link_id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` TEXT UNIQUE, `label` TEXT, `disabled` INTEGER DEFAULT 0, `url` TEXT, `added_at` TEXT DEFAULT CURRENT_TIMESTAMP ); CREATE VIEW enable_ext_link AS SELECT * FROM ext_link WHERE `disabled` = 0; CREATE TABLE contents ( `contents_id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` TEXT UNIQUE, --コンテンツ名(識別用) `label` TEXT, --コンテンツ表示名 `disabled` INT DEFAULT 0, -- 1 でdisabled `type` TEXT, -- コンテンツの種類を記述(menu等) `template` TEXT, -- コンテンツ表示テンプレート `data` TEXT, -- content_typeによってdataの扱いを変える。menuの場合はmenuawwqs_items_id列記等 `added_at` TEXT DEFAULT CURRENT_TIMESTAMP, `updated_at` TEXT ); CREATE TABLE contents_group ( `contents_group_id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` TEXT UNIQUE, --コンテンツグループ名(識別用) `label` TEXT, --コンテンツグループ表示名 `contents_ids` TEXT, --所属するコンテンツ(カンマ区切りでcontents_idを表示順に列記) `added_at` TEXT DEFAULT CURRENT_TIMESTAMP, `updated_at` TEXT ); CREATE TABLE menu_items ( `menu_item_id` INTEGER PRIMARY KEY AUTOINCREMENT, `menu_item_name` TEXT, -- メニュー項目名(識別用) `menu_item_label` TEXT, -- メニュー表示名 `menu_item_disabled` INTEGER DEFAULT 0, -- 1 でdisabled `menu_item_type` TEXT, -- 種別判別(index/page/tag/category/page_group/ext_link) `menu_item_type_id` INTEGER, -- page_id(index/page/tag/category/page_group) or ext_link_id `menu_item_link_to` TEXT, -- リンク先 `menu_item_link_nofollow_flg` INTEGER DEFAULT 0, -- 1 でnofollow `added_at` TEXT DEFAULT CURRENT_TIMESTAMP ); CREATE VIEW enable_menu_items AS SELECT * FROM menu_items WHERE `menu_item_disabled` = 0;
tags,category,page_groupの3つのテーブルは、それぞれのワードを定義するテーブルになっている。
そしてpagesに全てのページが登録されるようになっている。tags,category,page_groupの3つのページの一覧ページもpagesに登録される。その為、pagesにtypeとtype_idというフィールドを作った。このフィールドの値で、各テーブルと関連付ける様になっている。
siteテーブルはサイト全般の情報が格納されている。contentsとcontents_groupはそれぞれコンテンツを定義しているテーブルになる。新たに追加されたext_linkは外部リンクを登録するテーブルになっている。
ext_linkとpagesに登録されているレコードは同時にmenu_itemsに登録されるようになっている。メニューを作る際には、このmenu_itemsのレコードを参照して作る感じだ。
それぞれ各テーブル間で関連付けがあるんだけども、そこら辺を全部トリガで実装している。例えば、categoryにカテゴリ名を登録すると、自動でpagesにカテゴリ一覧ページが登録され、その情報を元にmenu_itemsにもカテゴリ一覧ページが登録されるようになっている。categoryテーブルのレコードのdisabledにフラグを立てると、同様にpagesとmenu_itemsにも立つようになっている。
トリガ
site
CREATE TRIGGER tri_site_add AFTER INSERT ON site BEGIN INSERT INTO pages ( `type`, `name`, `label`, `title` ) VALUES ( 'index', new.`name`, new.`label`, new.`label` ); END; CREATE TRIGGER tri_site_url_update AFTER UPDATE OF url ON site BEGIN -- URL変更 UPDATE pages SET `url` = REPLACE(`url`, old.`url`, new.`url`) WHERE `page_id` IS NOT NULL; END;
siteテーブルに関連するトリガは2つ。insert時に同時にpagesへindex.htmlを登録するのと、urlを変更した際にpagesのurlを変更する処理だ。本当はdev_urlに開発用のurlの定義をしようと思ってるので、そのトリガも書いておきたいところだけども、まだその段階じゃないので書いてない。実際にpythonスクリプトの方の実装が始まってから書こうと思う。
pages
---------------------------- -- page追加処理(デフォルト) -- ---------------------------- CREATE TRIGGER tri_pages_add AFTER INSERT ON pages BEGIN -- プレースホルダ設定 UPDATE pages SET `place_holder_1` = 'header_top', `place_holder_2` = 'header_main', `place_holder_3` = 'header_bottom', `place_holder_5` = 'side1', `place_holder_6` = 'side2', `place_holder_7` = 'footer' WHERE ROWID = new.ROWID; INSERT OR IGNORE INTO contents_group ( `name`, `label` ) VALUES ('header_top', 'header_top'), ('header_main', 'header_main'), ('header_bottom', 'header_bottom'), ('side1', 'side1'), ('side2', 'side2'), ('footer', 'footer'); -- menu items 登録 INSERT INTO menu_items ( `menu_item_type`, `menu_item_type_id`, `menu_item_name`, `menu_item_label` ) SELECT `type`, `page_id`, `name`, `label` FROM pages WHERE ROWID = new.ROWID; END; ------------------------ -- index page追加時処理 -- ------------------------ CREATE TRIGGER tri_pages_index_page_add AFTER INSERT ON pages WHEN new.`type` = 'index' BEGIN -- ファイル名生成 UPDATE pages SET `filename` = 'index.html' WHERE ROWID = new.ROWID; -- プレースホルダ設定 UPDATE pages SET `place_holder_4` = 'index_main' WHERE ROWID = new.ROWID; INSERT OR IGNORE INTO contents_group ( `name`, `label` ) VALUES ( 'index_main', 'index_main' ); END; -- page削除処理 CREATE TRIGGER tri_pages_delete AFTER DELETE ON pages BEGIN DELETE FROM menu_items WHERE `menu_item_type` IN ('index', 'page', 'category', 'tag', 'page_group') AND `menu_item_type_id` = old.`page_id`; END; ------------------ -- page追加時処理 -- ------------------ CREATE TRIGGER tri_pages_page_add AFTER INSERT ON pages WHEN new.`type` = 'page' BEGIN -- ファイル名生成 UPDATE pages SET `filename` = (SELECT `page_filename_prefix` FROM site) || new.`name` || (SELECT `page_filename_suffix` FROM site) || '.html' WHERE ROWID = new.ROWID; -- プレースホルダ設定 UPDATE pages SET `place_holder_4` = 'page_' || new.`name` || '_main' WHERE ROWID = new.ROWID; INSERT OR IGNORE INTO contents_group ( `name`, `label` ) VALUES ( 'page_' || new.`name` || '_main', 'page_' || new.`name` || '_main' ); END; ---------------------------- -- category page 追加時処理 -- ---------------------------- CREATE TRIGGER tri_pages_category_page_add AFTER INSERT ON pages WHEN new.`type` = 'category' BEGIN -- ファイル名生成 UPDATE pages SET `filename` = (SELECT `category_filename_prefix` FROM site) || new.`name` || (SELECT `category_filename_suffix` FROM site) || '.html' WHERE ROWID = new.ROWID; -- プレースホルダ設定 UPDATE pages SET `place_holder_4` = 'category_' || new.`name` || '_main' WHERE ROWID = new.ROWID; INSERT OR IGNORE INTO contents_group ( `name`, `label` ) VALUES ( 'category_' || new.`name` || '_main', 'category_' || new.`name` || '_main' ); END; ----------------------- -- tag page 追加時処理 -- ----------------------- CREATE TRIGGER tri_pages_tag_page_add AFTER INSERT ON pages WHEN new.`type` = 'tag' BEGIN -- ファイル名生成 UPDATE pages SET `filename` = (SELECT `tag_filename_prefix` FROM site) || new.`name` || (SELECT `tag_filename_suffix` FROM site) || '.html' WHERE ROWID = new.ROWID; -- プレースホルダ設定 UPDATE pages SET `place_holder_4` = 'tag_' || new.`name` || '_main' WHERE ROWID = new.ROWID; INSERT OR IGNORE INTO contents_group ( `name`, `label` ) VALUES ( 'tag_' || new.`name` || '_main', 'tag_' || new.`name` || '_main' ); END; ------------------------------ -- page group page 追加時処理 -- ------------------------------ CREATE TRIGGER tri_pages_page_group_page_add AFTER INSERT ON pages WHEN new.`type` = 'page_group' BEGIN -- ファイル名生成 UPDATE pages SET `filename` = 'index.html' WHERE ROWID = new.ROWID; -- プレースホルダ設定 UPDATE pages SET `place_holder_4` = 'page_group_' || new.`name` || '_main' WHERE ROWID = new.ROWID; INSERT OR IGNORE INTO contents_group ( `name`, `label` ) VALUES ( 'page_group_' || new.`name` || '_main', 'page_group_' || new.`name` || '_main' ); END; --------------------------------------------------- -- index/page/category/tagページ filename変更時処理 -- --------------------------------------------------- CREATE TRIGGER tri_pages_filename_update AFTER UPDATE OF `filename` ON pages WHEN new.`type` = 'index' OR new.`type` = 'category' OR new.`type` = 'tag' OR (new.`type` = 'page' AND new.`page_group_id` IS NULL) BEGIN -- パス名変更(ファイル名のみ) UPDATE pages SET `pathname` = new.`filename` WHERE ROWID = new.ROWID; END; ------------------------------------------ -- page group 所属ページ filename変更時処理 -- ------------------------------------------ CREATE TRIGGER tri_pages_pgs_filename_update AFTER UPDATE OF `filename` ON pages WHEN new.`page_group_id` IS NOT NULL BEGIN -- パス名変更(page_group.dirname + filename) UPDATE pages SET `pathname` = ( SELECT `dirname` FROM page_group WHERE `page_group_id` = new.`page_group_id` ) || '/' || new.`filename` WHERE ROWID = new.ROWID; END; ------------------- -- パス名変更時処理 -- ------------------- CREATE TRIGGER tri_pages_pathname_update AFTER UPDATE OF `pathname` ON pages BEGIN -- URL変更 UPDATE pages SET `url` = (SELECT url FROM site) || '/' || new.`pathname` WHERE ROWID = new.ROWID; END; ----------------- -- url変更時処理 -- ----------------- CREATE TRIGGER tri_pages_url_update AFTER UPDATE OF `url` ON pages BEGIN -- menu items 変更 UPDATE menu_items SET `menu_item_link_to` = new.`url` WHERE `menu_item_type` IN ('index', 'page', 'category', 'tag', 'page_group') AND`menu_item_type_id` = new.`page_id`; END; ----------------- -- disabled処理 -- ----------------- CREATE TRIGGER tri_pages_disabled AFTER UPDATE OF `disabled` ON pages WHEN new.`disabled` = 1 BEGIN UPDATE menu_items SET `menu_item_disabled` = 1 WHERE `menu_item_type_id` = new.`page_id`; END; ---------------- -- enabled処理 -- ---------------- CREATE TRIGGER tri_pages_enabled AFTER UPDATE OF `disabled` ON pages WHEN new.`disabled` = 0 BEGIN UPDATE menu_items SET `menu_item_disabled` = 0 WHERE `menu_item_type_id` = new.`page_id`; END;
pagesに関するトリガが一番複雑になっている。上から順に説明していく。
tri_pages_add : レコード追加時の処理。プレースホルダにデフォルト値を設定しているのと、menu_items へのレコード登録を行っている。
tri_pages_index_page_add : indexページ(トップページ)追加処理。ファイル名の登録とプレースホルダの設定を行っている。
tri_pages_delete : ページ削除時の処理。menu_itemsからの削除を行っている。
tri_pages_page_add : page(普通のhtmlページ)の追加処理。ファイル名の登録とプレースホルダの設定を行っている。
tri_pages_category_page_add : category一覧ページの追加処理。ファイル名の登録とプレースホルダの設定を行っている。
tri_pages_tag_page_add : tag一覧ページの追加処理。ファイル名の登録とプレースホルダの設定を行っている。
tri_pages_page_group_page_add : page_group一覧ページの追加処理。ファイル名の登録とプレースホルダの設定を行っている。
tri_pages_filename_update : index/page/category/tagページのfilename変更時処理。page_group所属以外のページのfilename変更時処理。pathnameにファイル名を割り当てている(要するにルート直下に配置される)。
tri_pages_pgs_filename_update : page_group所属ページのfilename変更時処理。pathnameにpage_group.dirname/filenameを割り当てている。
tri_pages_pathname_update : pathname変更時処理。pathnameが変更された場合、site.urlと結合してフルURLを生成している。
tri_pages_url_update : URL変更時処理。URLが変更されたらmenu_itemsの該当urlを変更している。
tri_pages_disabled : disabled処理。pagesでdisabledされたらmenu_itemsの該当レコードをdisabledにする。
tri_pages_enabled : enabled処理。pagesでenabledされたらmenu_itemsの該当レコードをenabledにする。
page_group
CREATE TRIGGER tri_page_group_add AFTER INSERT ON page_group BEGIN INSERT INTO pages ( `type`, `type_id`, `page_group_id`, `name`, `label`, `title` ) VALUES ( 'page_group', new.`page_group_id`, new.`page_group_id`, new.`name`, new.`label`, new.`label` || 'の一覧' ); END; CREATE TRIGGER tri_page_group_update_dirname AFTER UPDATE OF `dirname` ON page_group BEGIN UPDATE pages SET `pathname` = REPLACE(`pathname`, old.`dirname`, new.`dirname`) WHERE `page_group_id` = new.`page_group_id`; END; CREATE TRIGGER tri_page_group_delete AFTER DELETE ON page_group BEGIN DELETE FROM pages WHERE `type` = 'page_group' AND `type_id` = old.`page_group_id`; UPDATE pages SET `page_group_id` = NULL, `pathname` = REPLACE(`pathname` , old.`dirname` || '/' , '') WHERE `page_group_id` = old.`page_group_id`; END; ----------------- -- disabled処理 -- ----------------- CREATE TRIGGER tri_page_group_disabled AFTER UPDATE OF `disabled` ON page_group WHEN new.`disabled` = 1 BEGIN UPDATE pages SET `disabled` = 1 WHERE `page_group_id` = new.`page_group_id`; END; ---------------- -- enabled処理 -- ---------------- CREATE TRIGGER tri_page_group_enabled AFTER UPDATE OF `disabled` ON page_group WHEN new.`disabled` = 0 BEGIN UPDATE pages SET `disabled` = 0 WHERE `page_group_id` = new.`page_group_id`; END;
tri_page_group_add : page_groupへのレコード追加時処理。pagesへpage_group一覧ページを登録している。
tri_page_group_update_dirname : dirname変更時処理。dirnameが変更されたらpagesにあるpage_group所属ページのpathnameを変更する。
tri_page_group_delete : page_groupのレコード削除時処理。pagesにあるpage_group一覧ページの削除と、page_group所属ページのpage_group_id削除とpathnameからのdirname除去を行う。
tri_page_group_disabled : disabled処理。page_groupでdisabledされたらpagesの該当レコードをdisabledにする。
tri_page_group_enabled : enabled処理。page_groupでenabledされたらpagesの該当レコードをenabledにする。
category
CREATE TRIGGER tri_category_add AFTER INSERT ON category BEGIN INSERT INTO pages ( `type`, `type_id`, `name`, `label`, `title` ) VALUES ( 'category', new.`category_id`, new.`name`, new.`label`, new.`label` || 'の一覧' ); END; CREATE TRIGGER tri_category_delete AFTER DELETE ON category BEGIN DELETE FROM pages WHERE `type` = 'category' AND `type_id` = old.`category_id`; END; ----------------- -- disabled処理 -- ----------------- CREATE TRIGGER tri_category_disabled AFTER UPDATE OF `disabled` ON category WHEN new.`disabled` = 1 BEGIN UPDATE pages SET `disabled` = 1 WHERE `type` = 'category' AND `type_id` = new.`category_id`; END; ---------------- -- enabled処理 -- ---------------- CREATE TRIGGER tri_category_enabled AFTER UPDATE OF `disabled` ON category WHEN new.`disabled` = 0 BEGIN UPDATE pages SET `disabled` = 0 WHERE `type` = 'category' AND `type_id` = new.`category_id`; END;
tri_category_add : categoryへのレコード追加時処理。pagesへカテゴリ一覧ページを追加している。
tri_category_delete : categoryのレコード削除時処理。pagesにあるカテゴリ一覧ページを削除している。
tri_category_disabled : disabled処理。categoryでdisabledされたらpagesの該当レコードをdisabledにする。
tri_category_enabled : enabled処理。categoryでenabledされたらpagesの該当レコードをenabledにする。
tags
CREATE TRIGGER tri_tags_add AFTER INSERT ON tags BEGIN INSERT INTO pages ( `type`, `type_id`, `name`, `label`, `title` ) VALUES ( 'tag', new.`tag_id`, new.`name`, new.`label`, new.`label` || 'の一覧' ); END; CREATE TRIGGER tri_tag_delete AFTER DELETE ON tags BEGIN DELETE FROM pages WHERE `type` = 'tag' AND `type_id` = old.`tag_id`; END; ----------------- -- disabled処理 -- ----------------- CREATE TRIGGER tri_tags_disabled AFTER UPDATE OF `disabled` ON tags WHEN new.`disabled` = 1 BEGIN UPDATE pages SET `disabled` = 1 WHERE `type` = 'tag' AND `type_id` = new.`tag_id`; END; ---------------- -- enabled処理 -- ---------------- CREATE TRIGGER tri_tag_enabled AFTER UPDATE OF `disabled` ON tags WHEN new.`disabled` = 0 BEGIN UPDATE pages SET `disabled` = 0 WHERE `type` = 'tag' AND `type_id` = new.`tag_id`; END;
tri_tags_add : tagsへのレコード追加時処理。pagesへタグ一覧ページを追加している。
tri_tag_delete : tagsのレコード削除時処理。pagesにあるタグ一覧ページを削除している。
tri_tags_disabled : disabled処理。tagsでdisabledされたらpagesの該当レコードをdisabledにする。
tri_tag_enabled : enabled処理。tagsでenabledされたらpagesの該当レコードをenabledにする。
ext_link
CREATE TRIGGER tri_ext_link_add AFTER INSERT ON ext_link BEGIN -- menu items 登録 INSERT INTO menu_items ( `menu_item_type`, `menu_item_type_id`, `menu_item_name`, `menu_item_label`, `menu_item_link_to` ) SELECT 'ext_link', `ext_link_id`, `name`, `label`, `url` FROM ext_link WHERE ROWID = new.ROWID; END; CREATE TRIGGER tri_ext_link_delete AFTER DELETE ON ext_link BEGIN DELETE FROM menu_items WHERE `menu_item_type` = 'ext_link' AND `menu_item_type_id` = old.`ext_link_id`; END; ----------------- -- disabled処理 -- ----------------- CREATE TRIGGER tri_ext_link_disabled AFTER UPDATE OF `disabled` ON ext_link WHEN new.`disabled` = 1 BEGIN UPDATE menu_items SET `menu_item_disabled` = 1 WHERE `menu_item_type` = 'ext_link' AND `menu_item_type_id` = new.`ext_link_id`; END; ---------------- -- enabled処理 -- ---------------- CREATE TRIGGER tri_ext_link_enabled AFTER UPDATE OF `disabled` ON ext_link WHEN new.`disabled` = 0 BEGIN UPDATE menu_items SET `menu_item_disabled` = 0 WHERE `menu_item_type` = 'ext_link' AND `menu_item_type_id` = new.`ext_link_id`; END;
tri_ext_link_add : ext_linkへのレコード追加時処理。menu_itemsへ追加している。
tri_ext_link_delete : ext_linkのレコード削除時処理。menu_itemsから該当レコードを削除している。
tri_ext_link_disabled : disabled処理。ext_linkでdisabledされたらmenu_itemsの該当レコードをdisabledにする。
tri_ext_link_enabled : enabled処理。ext_linkでenabledされたらmenu_itemsの該当レコードをenabledにする。
contents
CREATE TRIGGER tri_contents_update AFTER UPDATE ON contents BEGIN UPDATE contents SET `updated_at` = CURRENT_TIMESTAMP WHERE `contents_id` = new.'contents_id'; UPDATE contents_group SET `updated_at` = CURRENT_TIMESTAMP WHERE (',' ||`contents_ids`||',') LIKE '%,' ||new.`contents_id` ||',%'; END;
- tri_contents_update : contentsアップデート時処理。contentsがアップデートされたら該当レコードと該当レコード所属contents_groupのupdated_atを更新する。
contents_group
今のところ無し
menu_items
CREATE TRIGGER tri_menu_items_add AFTER INSERT ON menu_items WHEN new.`menu_item_type` IN ('index', 'page', 'page_group', 'category', 'tag') BEGIN UPDATE menu_items SET `menu_item_link_to` = (SELECT `url` FROM pages WHERE `page_id` = new.`menu_item_type_id`) WHERE ROWID = new.ROWID; END;
- tri_menu_items_add : menu_items追加時処理。typeがext_link以外のレコードが追加された場合、pagesからurlを取得する。
まとめ
暫定的だが、とりあえず出来上がった。あとは作りこんでいくうちに追加されていくかもしれない。
現状で想定通りの動作はしてくれているのだけど、contentsとcontents_group辺りはまだこの先実装していく部分なのでほとんど書いてない。が、まずはサイトを構成できるのが前提なので、ベースとなる部分としてはこれでいいのではないかと思ってる。
一番面倒だったのはfilename→pathname→url→menu_itemsへの連携で、それぞれ独自に動くようにすることで一応連携されて変更してくれている。site.url変更時とpage_group.dirname変更時の一括変換とかはかなり悩んだが、今のところは問題なく動作するみたいだ。
小・中規模サイトを念頭に置いて作っているのもあって、シンプルだとは思うけど、これぐらいで必要十分だと思う。ここからもうちょい作りこんでいくことになるけども、あまり複雑だったり高機能だったりになりすぎないでシンプルさを追求していこうかなーって考えてる。