【freo】page_recentlyの改造 (07/04追記)
(久しぶりのネタがこんなんであれですけど)
思いついた時に思いついたようにせっせとfreoのカスタマイズ準備(だけ)を進めているのですが、新着ページ表示にね、やっぱり親の情報とかつけてやりたいなと。カテゴリ的な意味合いで。
しかしfreoのページ構造として、自分の直接の親はわかっても、2世代以上手前のところは再帰して行かないとわからないわけです。というか、裏ワザとかあるのかなとか思ったらなかったんです(topic_pathプラグインを眺めてため息)。
というわけで、こりゃ諦めてプラグイン作成だなや…というつぶやきでした。それだけです。備忘録です。
その前にfreoのバージョン上げもしななー
17:49追記
舌の根もかわかぬうちにあっさりできました。ありがとうtopic_path。
荒削りの状態ですけど、とりあえずこれで $割り当てられたやつ.parent に、親ページのタイトルが配列で返ってきます。
ぶっこむのは、diplay.page_recentlyうんちゃらのsmarty変数割り当て直前くらいが、わかりやすくていいかと。
//■追加■ページの親共を配列で取得
foreach ($page_keys as $page) {
$page_parents = array();
if (!$pages[$page]['pid']) { continue; }
$p['pid']=$pages[$page]['pid'];
//以下、topicpathからのパクリ
while ($p['pid']) {
//ページ取得
$stmt = $freo->pdo->prepare('SELECT id, pid, title FROM ' . FREO_DATABASE_PREFIX . 'pages WHERE id = :id AND approved = \'yes\' AND (status = \'publish\' OR (status = \'future\' AND datetime <= :now1)) AND (close IS NULL OR close >= :now2)');
$stmt->bindValue(':id', $p['pid']);
$stmt->bindValue(':now1', date('Y-m-d H:i:s'));
$stmt->bindValue(':now2', date('Y-m-d H:i:s'));
$flag = $stmt->execute();
if (!$flag) { freo_error($stmt->errorInfo()); }
if ($data = $stmt->fetch(PDO::FETCH_ASSOC)) {
$p = $data;
} else {
return;
}
//ページフィルター取得
$fs = freo_filter_page('user', array($p['id'])); $f = $fs[$p['id']];
if ($f) $p['title'] = str_replace('[$title]', $p['title'], $freo->config['page']['filter_title']);
//ページ保護データ取得
$ss = freo_security_page('user', array($p['id'])); $s = $ss[$p['id']];
if ($s) $p['title'] = str_replace('[$title]', $page['title'], $freo->config['page']['restriction_title']);
array_unshift($page_parents, $p['title']);
}
$pages[$page]['parent'] = $page_parents;
}//foreach
07/04追記
元の方では、こんなかんじで拾ってます。
<!--{if false} ↓親カテを3つ目まで表示 {/if}{if $plugin_page_recently.parent}{foreach from=$plugin_page_recently.parent|smarty:nodefaults item=prnt name=prn}{if $smarty.foreach.prn.index < 3 }-->
<span class="page_name">{$prnt}</span>
<!--{/if}{/foreach}{else}-->
匿名
はじめまして突然にすみません。freoのカスタマイズを探していた時にこちらにたどり着き、まさに「親」ではなく二世代前などの情報取得できないかで迷っていたのでビンゴでした。
こうして「方法」も丁寧に残してくださることがありがたく、メモを取らせていただきます。
本当にありがとうございました!