footprint.inc.php

サマリ足跡表示プラグイン
リビジョン0.2
対応バージョン1.4.5
投稿者choi
投稿日2005-02-14 (月) 20:29:51

概要

ユーザの足跡(訪問ページ)を表示します。

PHPのことはまだよくわかってません。なので至らない点があるかと思いますがご了承下さい。

自作プラグイン/topicpath.inc.phpを拡張して作りましたので、ライセンスはGPLです。

パンくずリストを自動生成する自作プラグイン/topicpath_related.inc.phpもご覧下さい。

ダウンロード

footprint http://slashmall.s203.xrea.com/pukiwiki/myplugin/footprint.zip

  • 2006-02-22 v 0.3公開
    • (足跡を元に戻さない設定の場合で)トップに戻った時に足跡がクリアされるのを修正しました。

インストール

  1. どこかにSession_Start();を入れる。
    • スキンファイルの// Output HTTP headers の前あたりが本体に影響を及ぼさないので良いと思われます。
  2. MenuBarまたはスキンから呼び出す。

スキンに書くならこんな感じで

<?php require_once(PLUGIN_DIR. 'footprint.inc.php');
      echo plugin_footprint_convert() ?>

プラグインとしてページ内に記述するなら

#footprint
&footprint;

また、ブロック要素として呼んだ場合

<div class="footprint">足跡の内容</div>

となるように出力されます(スタイルシート用に)

設定

PLUGIN_FOOTPRINT_PAGE_SEPARATOR
表示される足跡の区切り(default : ' > ')
PLUGIN_FOOTPRINT_BACK
すでに通ったページを踏んだ時の処理(default : 1)
1 : そのページまでの足跡を消す(パンくずリスト風)
0 : 二重に表示されないように追加する
-1 : 消さない
PLUGIN_FOOTPRINT_TOPICPATH
topicpath機能を使用する(default : 1)

表示例

「FrontPage -> 質問箱 -> PukiWiki -> PukiWiki/Install -> 質問箱」の順で踏んで
PLUGIN_FOOTPRINT_BACK が 1, PLUGIN_FOOTPRINT_TOPICPATH が 1 のとき

FrontPage
FrontPage > 質問箱
FrontPage > 質問箱 > PukiWiki
FrontPage > 質問箱 > PukiWiki / Install
FrontPage > 質問箱

PLUGIN_FOOTPRINT_BACK が 0, PLUGIN_FOOTPRINT_TOPICPATH が 1 のとき

FrontPage
FrontPage > 質問箱
FrontPage > 質問箱 > PukiWiki
FrontPage > 質問箱 > PukiWiki / Install
FrontPage > PukiWiki / Install > 質問箱

PLUGIN_FOOTPRINT_BACK が -1, PLUGIN_FOOTPRINT_TOPICPATH が 0 のとき

FrontPage
FrontPage > 質問箱
FrontPage > 質問箱 > PukiWiki
FrontPage > 質問箱 > PukiWiki > PukiWiki/Install
FrontPage > 質問箱 > PukiWiki > PukiWiki/Install > 質問箱

コメント

  • これは面白いですね! ttp://wiki.youjing.ws/ (dead) に導入させていただきました。ローカルなテスト環境(PHP4.2.2、Apache1.3、WinXP)では訪問済みページが表示されなかったのですが、サーバ(XREA)にアップしてみたら表示されるようになりました(PHPのバージョンが問題?)。session_start();は、skin/pukiwiki.skin.phpの「Output HTTP headers」の前に入れました。 -- ありぃ 2005-02-14 (月) 21:55:25
  • ありがとうございます。私のところはPHP4.3.8ですけど動作します。session_start()は訳も分からずlib/init.phpに入れたんですけど、どこが一番適切なんでしょうかね? -- choi 2005-02-15 (火) 11:22:28
  • どこが適切かは分からないのですが、PHPのマニュアルを見たら、ブラウザに出力する前に入れる必要があると書いてありましたので、スキン(HTTP headerの前)に入れてみました。スキンでしたら、PukiWiki本体のアップデートがあっても対応しやすいですし。でも基本的には、アクセスがあったときに必ず呼び出されるとこなら、どこでも良いんじゃないでしょうか(無責任)。 -- ありぃ 2005-02-15 (火) 21:52:20
  • 試してみました。おー、確かに面白いですねえ。
    session_start(); はありぃさん同様、skin/pukiwiki.skin.php の 「// Output HTTP headers」 のあたりに入れてみました。ついでに、260行目前後の 「<?php if ($lastmodified != '') { ?>」 の上あたりに、
    <span class="small">
    Footprints: <?php require_once(PLUGIN_DIR . 'footprint.inc.php'); echo plugin_footprint_inline(); ?>
    </span>
    <br /><br />
    と入れて、常にページ下部に表示するようにしてみたり。&smile; -- sagen 2005-02-16 (水) 14:18:13
  • 一度通ったページに再アクセスすると、足跡がその位置まで戻るのですね。たとえば(省略)>自作プラグイン>Pukiwiki>FAQと通ってきて、自作プラグインにもう一度いった場合、(省略)>自作プラグイン>Pukiwiki>FAQ>自作プラグインでなく、(省略)>自作プラグインになりますね。また、同じようにFAQまで通ってきて今度は自作プラグイン/footprint.inc.phpにいくと、(省略)>自作プラグイン/footprint.inc.phpに、つまり親ページ(この場合、自作プラグイン)があるところまで足跡が戻るんですね。すごく面白いプラグインですが、この仕様の利点・難点がそれぞれありそうです… -- 2005-05-01 (日) 23:40:23
  • 一応は前者については PLUGIN_FOOTPRINT_BACK を-1にすることで足跡が戻らないようにできます。後者にも対応するにはその設定に PLUGIN_FOOTPRINT_TOPICPATH を0にすると戻らないようになりますが、この設定でどうでしょう? -- choi 2005-05-02 (月) 19:34:11
  • dev:BugTrack2/63 (セッション関係のリンク) -- 2005-05-03 (火) 12:37:11
  • あぁ! ごめんなさい。ファイルの中に設定する箇所があったんですね。その可能性を考えるのを忘れていました。前者についても、後者についても、対応することができました。ありがとうございます。ちなみに、「すでに通ったページをまた通った場合はそこまで足跡を戻して、すでに通ったページを親ページとする別のページの場合は足跡を一番後ろに追加する」というのも対応できましたので報告しておきます。(PLUGIN_FOOTPRINT_BACKを1、PLUGIN_FOOTPRINT_TOPICPATH を0)PLUGIN_FOOTPRINT_BACKを0というのも試してみました。一度通ったページの場合、そのページを抜かして足跡が表示されて、そのページが足跡の一番最後に移動して表示されるのですね。おもしろくてつい遊んでしまいました&smile; -- 2005-05-03 (火) 18:54:33
  • いえいえ使っていただいてありがとうございます。今更ですが設定について軽く書いておきました。 -- choi 2005-05-04 (水) 20:58:17
  • > は,Validator に引っかかるので,define で,' > 'とするべきだと思うのですが... あと,サンプルがないようなので設置例として晒します。http://opentetri.net/ -- bbb? 2006-06-04 (日) 09:59:21
  • ' &gt; ' ですね。&を小文字へ。 -- bbb? 2006-06-04 (日) 10:34:56
  • リンク切れになっていてダウンロードできませんでした。どなたかファイルをお持ちではないでしょうか? -- 2006-11-04 (土) 19:54:55
  • 良いのかどうか・・・とりあえず下に貼り付けておきました。。。 -- 2006-11-04 (土) 20:46:48
  • ありがとうございました -- 2006-11-09 (木) 23:32:27
  • 導入させていただきましたが、このツール凄いですね。自分のサイトのようにあまり階層化してないサイトでパンくずを使用したい人には非常に便利なツールです -- 2007-10-08 (月) 20:35:33
  • リンク切れ放置しててすいません…。代わりアップしてくださった方ありがとうございます。自作プラグイン/topicpath_related.inc.phpも自動パンくず生成できるので是非お試し下さい -- choi 2008-04-27 (日) 05:33:35

  • v 0.2 filefootprint.inc.php.2
    <?php
    // $Id: footprint.inc.php,v 0.2 2005/02/12 17:59:26 choi Exp $
    //
    // show user's footprint, available under GPL
    // extend topicpath.inc.php v 1.6
    
    //--------------------------------------------
    // ページ間のセパレータ
    define('PLUGIN_FOOTPRINT_PAGE_SEPARATOR',' > ');
    
    // Separetor / of / topic / path
    define('PLUGIN_FOOTPRINT_TREE_SEPARATOR', ' / ');
    
    // すでに通ったページを踏んだとき
    //  1 : そのページまでの足跡を消す
    //  0 : 二重に表示されないように追加する
    // -1 : 消さない
    define('PLUGIN_FOOTPRINT_BACK',1);
    
    // topicpath機能を使用する
    define('PLUGIN_FOOTPRINT_TOPICPATH',1);
    
    // Show a link to $defaultpage or not
    define('PLUGIN_FOOTPRINT_TOP_DISPLAY', 1);
    
    // Label for $defaultpage ('' as disable)
    define('PLUGIN_FOOTPRINT_TOP_LABEL', '');
    
    // Show the page itself or not
    define('PLUGIN_FOOTPRINT_THIS_PAGE_DISPLAY', 1);
    
    // If PLUGIN_TOPICPATH_THIS_PAGE_DISPLAY, add a link to itself
    define('PLUGIN_FOOTPRINT_THIS_PAGE_LINK', 0);
    //--------------------------------------------
    
    function plugin_footprint_convert()
    {
    	return '<div class="footprint">' . plugin_footprint_inline() . '</div>';
    }
    function plugin_footprint_inline()
    {
    	global $script, $vars, $defaultpage;
    
    	//セッション変数から取得
    	$footprints = '';
    	if($_SESSION['footprints']){
    		$footprints = $_SESSION['footprints'];
    	}
    	$page = $vars['page'];
    	
    	$splited = explode(PKWK_SPLITTER,$footprints);
    	$str = '';
    	$newfootprints = array();
    	
    	//新しいfootprintを作成する
    	foreach($splited as $passedpage){
    		//すでに通ったページ
    		if($passedpage == $page || $page == $defaultpage){
    			if( PLUGIN_FOOTPRINT_BACK == 1){
    				break;
    			}else if( PLUGIN_FOOTPRINT_BACK == 0){
    				continue;
    			}
    		}
    		//すでに通った階層
    		if( PLUGIN_FOOTPRINT_TOPICPATH and 
    			( strstr($passedpage,'/') or strstr($page,'/') ) ){
    			$a = explode('/',$passedpage);
    			$b = explode('/',$page);
    			if($a[0] == $b[0]){
    				break;
    			}
    		}
    		if($passedpage){
    			array_push($newfootprints,$passedpage);
    		}
    	}
    	array_push($newfootprints,$page);
    	$_SESSION['footprints'] = join(PKWK_SPLITTER,$newfootprints);
    
    	//トップページをつけるかどうか
    	if(PLUGIN_FOOTPRINT_TOP_DISPLAY){
    		if($newfootprints[0] != $defaultpage){
    			array_unshift($newfootprints,$defaultpage);
    		}
    	}else{
    		if($newfootprints[0] == $defaultpage){
    			array_shift($newfootprints);
    		}
    	}
    	//現在ページを取り除く場合
    	if(!PLUGIN_FOOTPRINT_THIS_PAGE_DISPLAY){
    		array_pop($newfootprints);
    	}
    	$str = '';
    	
    	foreach($newfootprints as $p){
    		if( PLUGIN_FOOTPRINT_TOPICPATH and strstr($p,'/')){
    			$str .= topicpath($p);
    		}else{
    			$label = $p;
    			//トップページのラベルを任意のラベルにする
    			if($p == $defaultpage and PLUGIN_FOOTPRINT_TOP_LABEL){
    				$label = PLUGIN_FOOTPRINT_TOP_LABEL;
    			}
    			//現在ページにリンクをつけるかどうか
    			if($p == $page and !PLUGIN_FOOTPRINT_THIS_PAGE_LINK){
    				$str .= $label;
    			}else{
    			//それ以外
    				$str .= make_pagelink($p,$label);
    			}
    		}
    		$str .= PLUGIN_FOOTPRINT_PAGE_SEPARATOR;
    	}
    	//最後の余分なseparatorをとっぱらって返す
    	return substr($str,0,strlen(PLUGIN_FOOTPRINT_PAGE_SEPARATOR) * -1);
    }
    function topicpath($page)
    {
    	global $script, $vars, $defaultpage;
    
    	$parts = explode('/', $page);
    
    	$b_link = TRUE;
    	if($page == $vars['page']){
    		if (PLUGIN_FOOTPRINT_THIS_PAGE_DISPLAY) {
    			$b_link = PLUGIN_FOOTPRINT_THIS_PAGE_LINK;
    		} else {
    			array_pop($parts); // Remove the page itself
    		}
    	}
    	$topic_path = array();
    	while (! empty($parts)) {
    		$_landing = join('/', $parts);
    		$landing  = rawurlencode($_landing);
    		$element = htmlspecialchars(array_pop($parts));
    		if (! $b_link)  {
    			// This page ($_landing == $page)
    			$b_link = TRUE;
    			$topic_path[] = $element;
    		} else if (PKWK_READONLY && ! is_page($_landing)) {
    			// Page not exists
    			$topic_path[] = $element;
    		} else {
    			// Page exists or not exists
    			$topic_path[] = '<a href="' . $script . '?' . $landing . '">' .
    				$element . '</a>';
    		}
    	}
    	return join(PLUGIN_FOOTPRINT_TREE_SEPARATOR, array_reverse($topic_path));
    
    }
    ?>

添付ファイル: filefootprint.inc.php.2 1226件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-11-02 (月) 21:51:52
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.266 sec.

OSDN