ブランド戦略のフレイバーズ

コンクリート5(concrete5)のバグ報告:ページを新規で作成すると、「ページ設定」のページパス「正式URL」が、保存されない件

あるクライアントサイトをコンクリート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 />

ちょっと腑に落ちないところもあるが、とりあえずこれで問題解決!

モバイルバージョンを終了