あるクライアントサイトをコンクリート5(concrete5)で構築。
本番を迎えて、クライアント自身でページを追加し始めたところ、「ページ設定のURLが設定されない!」とクレーム発生。
よくよく調べると、新規にページを作成して、そのまま本番公開してしまうと、特に問題なくいくみたい。
もんだいは、「下書き保存」したときに、ページパスの「正式URL」が、保存されない事を突き止める。
さらに調査を進めると、実は、入力したページパスの「正式URL」は、保存されていないのではなく、再表示した際に正しく表示されていないことが判明。
これは、下書き保存した際は、pagesテーブルに情報がまだ書き込まれていないために、pagesテーブルに対し存在しないcIDでselectしてしまっているのが原因だ。
仕方ないので、本番公開されていようが、下書き保存されていようが、今編集中のページのcIDから、自分に設定されているページパスの情報を取得し、また、親ページのパス文字列も取得し、その値で画面表示するように改修した。
改修箇所は以下の通り。
(1)/models/page.phpに以下のファンクションを追加
これは、編集中の自分のcIDから親ページのパスを取得する
page.phpを編集の際は、concreteディレクトリ内から、/modelsの下へコピーして編集する方が良い。
function getParentPagePaths() {
$db = Loader::db();
$q = “select t2.cPath as pPath from Pages as t1, PagePaths as t2 where t1.cID = {$this->cID} and t2.cID = t1.cParentID”;
$r = $db->query($q, $v);
if ($r) {
$row = $r->fetchRow();
$paths = $row[“pPath”];
$r->free();
}
return $paths;
}
(2)次にelements/collection_metadata.phpを一部修正
同様に/elementsへコピーして編集
152行目を以下のように修正
print htmlentities($c->getParentPagePaths(),ENT_QUOTES,APP_CHARSET)?>/<input type=”text” name=”cHandle” value=”<?php echo htmlentities($c->getCollectionHandle(),ENT_QUOTES,APP_CHARSET)?>” id=”cHandle”><input type=”hidden” name=”oldCHandle” value=”<?php echo $c->getCollectionHandle()?>”><br /><br />
ちょっと腑に落ちないところもあるが、とりあえずこれで問題解決!