Entry

【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}-->

Pagination

Comment

匿名

はじめまして突然にすみません。freoのカスタマイズを探していた時にこちらにたどり着き、まさに「親」ではなく二世代前などの情報取得できないかで迷っていたのでビンゴでした。
 こうして「方法」も丁寧に残してくださることがありがたく、メモを取らせていただきます。
 本当にありがとうございました!

  • 2013/07/23 13:23:24

ゆっく

こちらこそ、ご報告ありがとうございました!(今更)
わかりやすいソースで書いていただけているので、なんとかなっちゃうのがfreoのいいところですよね。

  • 2014/02/25 14:15:17

Post Your Comment

  • コメントを入力してください。
登録フォーム
Name
Mail
URL
Comment
閲覧制限
投稿キー(スパム対策に、投稿キー を半角で入力してください。)

Utility

Calendar

11 2024.12 01
SMTWTFS
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -

Tag Crouds