px-files/_sys/php/site.php
public function get_page_info( $path, $key = null ){
		if( is_null($path) ){ return null; }
		if( @array_key_exists($path, $this->sitemap_id_map) && !@is_null($this->sitemap_id_map[$path]) ){
			//ページIDで指定された場合、パスに置き換える
			$path = $this->sitemap_id_map[$path];
		}
		if( !preg_match( '/^(?:\/|[a-zA-Z0-9]+\:)/s', $path ) ){
			// $path が相対パスで指定された場合
			preg_match( '/(\/)$/s', $path, $tmp_matched );
			$path = $this->px->fs()->get_realpath( dirname( $this->px->req()->get_request_file_path() ).'/'.$path );
			if( @strlen($tmp_matched[1]) ){ $path .= $tmp_matched[1]; }
			$path = $this->px->fs()->normalize_path($path);
			unset( $tmp_matched );
		}
		switch( $this->get_path_type($path) ){
			case 'full_url':
			case 'data':
			case 'javascript':
			case 'anchor':
				break;
			default:
				$path = preg_replace('/\/'.$this->px->get_directory_index_preg_pattern().'((?:\?|\#).*)?$/si','/$1',$path);//directory_index を一旦省略
				break;
		}

		$tmp_path = $path;
		if( !array_key_exists($path, $this->sitemap_id_map) || is_null( $this->sitemap_array[$path] ) ){
			foreach( $this->px->get_directory_index() as $index_file_name ){
				switch( $this->get_path_type($path) ){
					case 'full_url':
					case 'data':
					case 'javascript':
					case 'anchor':
						break;
					default:
						$tmp_path = preg_replace('/\/((?:\?|\#).*)?$/s','/'.$index_file_name.'$1',$path);//省略された index.html を付加。
						break;
				}
				if( array_key_exists($tmp_path, $this->sitemap_array) && !is_null( @$this->sitemap_array[$tmp_path] ) ){
					break;
				}
			}
		}
		$path = $tmp_path;
		$parsed_url = parse_url($path);
		unset($tmp_path);

		if( !array_key_exists($path, $this->sitemap_array) || is_null( @$this->sitemap_array[$path] ) ){
			//  サイトマップにズバリなければ、
			//  ダイナミックパスを検索する。
			$sitemap_dynamic_path = $this->get_dynamic_path_info( $path );
			if( is_array( $sitemap_dynamic_path ) ){
				$path = $sitemap_dynamic_path['path_original'];
			}
		}
		$args = func_get_args();

		switch( $this->get_path_type($path) ){
			case 'full_url':
			case 'data':
			case 'javascript':
			case 'anchor':
				break;
			default:
				$path = preg_replace( '/\/$/si' , '/'.$this->px->get_directory_index_primary() , $path );
				if( !array_key_exists($path, $this->sitemap_array) || is_null( @$this->sitemap_array[$path] ) ){
					//  サイトマップにズバリなければ、
					//  引数からパラメータを外したパスだけで再検索
					$path = @$parsed_url['path'];
				}
				break;
		}

		$rtn = null;
		if( array_key_exists($path, $this->sitemap_array) ){
			$rtn = @$this->sitemap_array[$path];
		}
		if( is_array($rtn) && array_key_exists('role', $rtn) && @strlen( $rtn['role'] ) ){
			// $args[0] = $rtn['role'];
			$tmp_page_info_original = $rtn;
			$rtn = $this->get_page_info( $tmp_page_info_original['role'] );
			foreach($tmp_page_info_original as $tmpKey=>$tmpVal){
				if($tmpKey == 'logical_path'){
					// これらの値はrole側の値を強制採用
					continue;
				}
				if(strlen($tmpVal)){
					$rtn[$tmpKey] = $tmpVal;
				}
			}
			$rtn['id'] = $tmp_page_info_original['id'];
			$rtn['path'] = $tmp_page_info_original['path'];
			$rtn['content'] = $tmp_page_info_original['content'];
			$rtn['role'] = $tmp_page_info_original['role'];
			unset($tmp_page_info_original, $tmpKey, $tmpVal);
		}
		if( !is_array($rtn) ){ return null; }
		if( !array_key_exists('title', $rtn)            || !strlen( @$rtn['title'] ) ){ $rtn['title'] = ''; }
		if( !array_key_exists('title_breadcrumb', $rtn) || !strlen( @$rtn['title_breadcrumb'] ) ){ $rtn['title_breadcrumb'] = $rtn['title']; }
		if( !array_key_exists('title_h1', $rtn)         || !strlen( @$rtn['title_h1'] ) ){ $rtn['title_h1'] = $rtn['title']; }
		if( !array_key_exists('title_label', $rtn)      || !strlen( @$rtn['title_label'] ) ){ $rtn['title_label'] = $rtn['title']; }
		if( !array_key_exists('title_full', $rtn)       || !strlen( @$rtn['title_full'] ) ){ $rtn['title_full'] = $rtn['title'].' | '.$this->px->conf()->name; }
		if( count($args) >= 2 ){
			if( array_key_exists($args[1], $rtn) ){
				$rtn = @$rtn[$args[1]];
			}else{
				$rtn = null;
			}
		}
		return $rtn;
	}
public function get_page_info( $path, $key = null ){
		if( is_null($path) ){ return null; }
		if( @array_key_exists($path, $this->sitemap_id_map) && !@is_null($this->sitemap_id_map[$path]) ){
			//ページIDで指定された場合、パスに置き換える
			$path = $this->sitemap_id_map[$path];
		}
		if( !preg_match( '/^(?:\/|[a-zA-Z0-9]+\:)/s', $path ) ){
			// $path が相対パスで指定された場合
			preg_match( '/(\/)$/s', $path, $tmp_matched );
			$path = $this->px->fs()->get_realpath( dirname( $this->px->req()->get_request_file_path() ).'/'.$path );
			if( @strlen($tmp_matched[1]) ){ $path .= $tmp_matched[1]; }
			$path = $this->px->fs()->normalize_path($path);
			unset( $tmp_matched );
		}
		switch( $this->get_path_type($path) ){
			case 'full_url':
			case 'data':
			case 'javascript':
			case 'anchor':
				break;
			default:
				$path = preg_replace('/\/'.$this->px->get_directory_index_preg_pattern().'((?:\?|\#).*)?$/si','/$1',$path);//directory_index を一旦省略
				break;
		}

		$tmp_path = $path;
		if( !array_key_exists($path, $this->sitemap_id_map) || is_null( $this->sitemap_array[$path] ) ){
			foreach( $this->px->get_directory_index() as $index_file_name ){
				switch( $this->get_path_type($path) ){
					case 'full_url':
					case 'data':
					case 'javascript':
					case 'anchor':
						break;
					default:
						$tmp_path = preg_replace('/\/((?:\?|\#).*)?$/s','/'.$index_file_name.'$1',$path);//省略された index.html を付加。
						break;
				}
				if( array_key_exists($tmp_path, $this->sitemap_array) && !is_null( @$this->sitemap_array[$tmp_path] ) ){
					break;
				}
			}
		}
		$path = $tmp_path;
		$parsed_url = parse_url($path);
		unset($tmp_path);

		if( !array_key_exists($path, $this->sitemap_array) || is_null( @$this->sitemap_array[$path] ) ){
			//  サイトマップにズバリなければ、
			//  ダイナミックパスを検索する。
			$sitemap_dynamic_path = $this->get_dynamic_path_info( $path );
			if( is_array( $sitemap_dynamic_path ) ){
				$path = $sitemap_dynamic_path['path_original'];
			}
		}
		$args = func_get_args();

		switch( $this->get_path_type($path) ){
			case 'full_url':
			case 'data':
			case 'javascript':
			case 'anchor':
				break;
			default:
				$path = preg_replace( '/\/$/si' , '/'.$this->px->get_directory_index_primary() , $path );
				if( !array_key_exists($path, $this->sitemap_array) || is_null( @$this->sitemap_array[$path] ) ){
					//  サイトマップにズバリなければ、
					//  引数からパラメータを外したパスだけで再検索
					$path = @$parsed_url['path'];
				}
				break;
		}

		$rtn = null;
		if( array_key_exists($path, $this->sitemap_array) ){
			$rtn = @$this->sitemap_array[$path];
		}
		if( is_array($rtn) && array_key_exists('role', $rtn) && @strlen( $rtn['role'] ) ){
			// $args[0] = $rtn['role'];
			$tmp_page_info_original = $rtn;
			$rtn = $this->get_page_info( $tmp_page_info_original['role'] );
			foreach($tmp_page_info_original as $tmpKey=>$tmpVal){
				if($tmpKey == 'logical_path'){
					// これらの値はrole側の値を強制採用
					continue;
				}
				if(strlen($tmpVal)){
					$rtn[$tmpKey] = $tmpVal;
				}
			}
			$rtn['id'] = $tmp_page_info_original['id'];
			$rtn['path'] = $tmp_page_info_original['path'];
			$rtn['content'] = $tmp_page_info_original['content'];
			$rtn['role'] = $tmp_page_info_original['role'];
			unset($tmp_page_info_original, $tmpKey, $tmpVal);
		}
		if( !is_array($rtn) ){ return null; }
		if( !array_key_exists('title', $rtn)            || !strlen( @$rtn['title'] ) ){ $rtn['title'] = ''; }
		if( !array_key_exists('title_breadcrumb', $rtn) || !strlen( @$rtn['title_breadcrumb'] ) ){ $rtn['title_breadcrumb'] = $rtn['title']; }
		if( !array_key_exists('title_h1', $rtn)         || !strlen( @$rtn['title_h1'] ) ){ $rtn['title_h1'] = $rtn['title']; }
		if( !array_key_exists('title_label', $rtn)      || !strlen( @$rtn['title_label'] ) ){ $rtn['title_label'] = $rtn['title']; }
		if( !array_key_exists('title_full', $rtn)       || !strlen( @$rtn['title_full'] ) ){ $rtn['title_full'] = $rtn['title'].' | '.$this->px->conf()->name; }
		if( count($args) >= 2 ){
			if( array_key_exists($args[1], $rtn) ){
				$rtn = @$rtn[$args[1]];
			}else{
				$rtn = null;
			}
		}
		return $rtn;
	}
ページ情報を取得する。

このメソッドは、指定したページの情報を連想配列で返します。対象のページは第1引数にパスまたはページIDで指定します。

カレントページの情報を取得する場合は、代わりに `$px->site()->get_current_page_info()` が使用できます。

パスで指定したページの情報を取得する例 :
<pre>&lt;?php
// ページ &quot;/aaa/bbb.html&quot; のページ情報を得る
$page_info = $px-&gt;site()-&gt;get_page_info('/aaa/bbb.html');
var_dump( $page_info );
?&gt;</pre>

ページIDで指定したページの情報を取得する例 :
<pre>&lt;?php
// トップページのページ情報を得る
// (トップページのページIDは必ず空白の文字列)
$page_info = $px-&gt;site()-&gt;get_page_info('');
var_dump( $page_info );
?&gt;</pre>

取得対象のページがアクター(role値が設定されている場合にアクターと判定される)だった場合、
返却値は一旦ロールページの情報で初期化され、アクター側に値がある項目のみ、アクター側の値で上書きされます。
ただし、id, path, content, role 列はアクター側の値が、
logical_path 列はロール側の値が、それぞれ強制的に採用されます。

@param string $path 取得するページのパス または ページID。
@param string $key 取り出す単一要素のキー。省略時はすべての要素を含む連想配列が返されます。省略可。
@return mixed 単一ページ情報を格納する連想配列、`$key` が指定された場合は、その値のみ。