px-files/_sys/php/site.php
public function get_children( $path = null, $opt = array() ){
		if( is_null( $path ) ){
			$path = $this->px->req()->get_request_file_path();
		}
		$filter = true;
		if(!array_key_exists('filter', @$opt)){
			$opt['filter'] = null;
		}
		if(!is_null(@$opt['filter'])){ $filter = !empty($opt['filter']); }

		$page_info = $this->get_page_info( $path );

		if( $filter && array_key_exists( $page_info['path'], $this->sitemap_page_tree ) && is_array($this->sitemap_page_tree[$page_info['path']]) && array_key_exists( 'children', $this->sitemap_page_tree[$page_info['path']] ) && is_array( @$this->sitemap_page_tree[$page_info['path']]['children'] ) ){
			//  ページキャッシュツリーがすでに作られている場合
			return $this->sitemap_page_tree[$page_info['path']]['children'];
		}
		if( !$filter && array_key_exists( $page_info['path'], $this->sitemap_page_tree ) && is_array($this->sitemap_page_tree[$page_info['path']]) && array_key_exists( 'children_all', $this->sitemap_page_tree[$page_info['path']] ) && is_array( @$this->sitemap_page_tree[$page_info['path']]['children_all'] ) ){
			//  ページキャッシュツリーがすでに作られている場合
			return $this->sitemap_page_tree[$page_info['path']]['children_all'];
		}

		$tmp_children_orderby_manual = array();
		$tmp_children_orderby_auto = array();
		$tmp_children_orderby_listed_manual = array();
		$tmp_children_orderby_listed_auto = array();


		if( $this->pdo !== false ){
			// PDO+SQLiteの処理
			// INSERT文をストア
			$tmpWhere = 'parent_page_id = '.json_encode($page_info['id']);
			$actors = $this->get_actors( $page_info['id'] );
			foreach( $actors as $actor ){
				$tmpWhere .= ' OR parent_page_id = '.json_encode($actor);
			}
			$sth = $this->pdo->prepare(
				'SELECT * FROM sitemap WHERE id != \'\' AND ('.$tmpWhere.') ;'
			);
			$sth->execute(array());
			$results = $sth->fetchAll(\PDO::FETCH_ASSOC);
			// var_dump($results);
			foreach( $results as $row ){
				if(@strlen($row['role'])){continue;}//役者はリストされない。

				if(@strlen($row['orderby'])){
					array_push( $tmp_children_orderby_manual , $row['id'] );
				}else{
					array_push( $tmp_children_orderby_auto , $row['id'] );
				}
				if( $row['list_flg'] ){
					if(@strlen($row['orderby'])){
						array_push( $tmp_children_orderby_listed_manual , $row['id'] );
					}else{
						array_push( $tmp_children_orderby_listed_auto , $row['id'] );
					}
				}
			}

		}else{
			// 非PDO+SQLiteの処理
			$actors = $this->get_actors( $page_info['id'] );

			foreach( $this->get_sitemap() as $row ){
				if(@strlen($row['role'])){continue;}//役者はリストされない。

				if( !strlen( trim($row['id']) ) ){
					continue;
				}

				// $target_layer = '';
				$parent_page_id = '';
				$tmp_breadcrumb = @explode( '>', $row['logical_path'] );
				$tmp_page_info = $this->get_page_info( trim($tmp_breadcrumb[count($tmp_breadcrumb)-1]) );
				$parent_page_id = trim($tmp_page_info['id']);
				$parent_page_role = $this->get_role($parent_page_id);
				if( !is_null($parent_page_role) ){
					$parent_page_id = $parent_page_role;
				}
				unset($tmp_breadcrumb,$tmp_path,$tmp_page_info);

				if( $page_info['id'] != $parent_page_id && array_search( $parent_page_id, $actors ) === false ){
					continue;
				}

				if( $page_info['id'] == $parent_page_id ){
					if(@strlen($row['role'])){continue;}//役者はリストされない。

					if(@strlen($row['orderby'])){
						array_push( $tmp_children_orderby_manual , $row['id'] );
					}else{
						array_push( $tmp_children_orderby_auto , $row['id'] );
					}
					if( $row['list_flg'] ){
						if(@strlen($row['orderby'])){
							array_push( $tmp_children_orderby_listed_manual , $row['id'] );
						}else{
							array_push( $tmp_children_orderby_listed_auto , $row['id'] );
						}
					}
				}
			}
		}

		//  ページキャッシュを作成しなおす
		usort( $tmp_children_orderby_listed_manual , array( $this , 'usort_sitemap' ) );
		$this->sitemap_page_tree[$page_info['path']]['children'] = array_merge( $tmp_children_orderby_listed_manual , $tmp_children_orderby_listed_auto );
		usort( $tmp_children_orderby_manual , array( $this , 'usort_sitemap' ) );
		$this->sitemap_page_tree[$page_info['path']]['children_all'] = array_merge( $tmp_children_orderby_manual , $tmp_children_orderby_auto );

		//  return value
		$rtn = null;
		if($filter){
			$rtn = $this->sitemap_page_tree[$page_info['path']]['children'];
		}else{
			$rtn = $this->sitemap_page_tree[$page_info['path']]['children_all'];
		}

		return $rtn;
	}
public function get_children( $path = null, $opt = array() ){
		if( is_null( $path ) ){
			$path = $this->px->req()->get_request_file_path();
		}
		$filter = true;
		if(!array_key_exists('filter', @$opt)){
			$opt['filter'] = null;
		}
		if(!is_null(@$opt['filter'])){ $filter = !empty($opt['filter']); }

		$page_info = $this->get_page_info( $path );

		if( $filter && array_key_exists( $page_info['path'], $this->sitemap_page_tree ) && is_array($this->sitemap_page_tree[$page_info['path']]) && array_key_exists( 'children', $this->sitemap_page_tree[$page_info['path']] ) && is_array( @$this->sitemap_page_tree[$page_info['path']]['children'] ) ){
			//  ページキャッシュツリーがすでに作られている場合
			return $this->sitemap_page_tree[$page_info['path']]['children'];
		}
		if( !$filter && array_key_exists( $page_info['path'], $this->sitemap_page_tree ) && is_array($this->sitemap_page_tree[$page_info['path']]) && array_key_exists( 'children_all', $this->sitemap_page_tree[$page_info['path']] ) && is_array( @$this->sitemap_page_tree[$page_info['path']]['children_all'] ) ){
			//  ページキャッシュツリーがすでに作られている場合
			return $this->sitemap_page_tree[$page_info['path']]['children_all'];
		}

		$tmp_children_orderby_manual = array();
		$tmp_children_orderby_auto = array();
		$tmp_children_orderby_listed_manual = array();
		$tmp_children_orderby_listed_auto = array();


		if( $this->pdo !== false ){
			// PDO+SQLiteの処理
			// INSERT文をストア
			$tmpWhere = 'parent_page_id = '.json_encode($page_info['id']);
			$actors = $this->get_actors( $page_info['id'] );
			foreach( $actors as $actor ){
				$tmpWhere .= ' OR parent_page_id = '.json_encode($actor);
			}
			$sth = $this->pdo->prepare(
				'SELECT * FROM sitemap WHERE id != \'\' AND ('.$tmpWhere.') ;'
			);
			$sth->execute(array());
			$results = $sth->fetchAll(\PDO::FETCH_ASSOC);
			// var_dump($results);
			foreach( $results as $row ){
				if(@strlen($row['role'])){continue;}//役者はリストされない。

				if(@strlen($row['orderby'])){
					array_push( $tmp_children_orderby_manual , $row['id'] );
				}else{
					array_push( $tmp_children_orderby_auto , $row['id'] );
				}
				if( $row['list_flg'] ){
					if(@strlen($row['orderby'])){
						array_push( $tmp_children_orderby_listed_manual , $row['id'] );
					}else{
						array_push( $tmp_children_orderby_listed_auto , $row['id'] );
					}
				}
			}

		}else{
			// 非PDO+SQLiteの処理
			$actors = $this->get_actors( $page_info['id'] );

			foreach( $this->get_sitemap() as $row ){
				if(@strlen($row['role'])){continue;}//役者はリストされない。

				if( !strlen( trim($row['id']) ) ){
					continue;
				}

				// $target_layer = '';
				$parent_page_id = '';
				$tmp_breadcrumb = @explode( '>', $row['logical_path'] );
				$tmp_page_info = $this->get_page_info( trim($tmp_breadcrumb[count($tmp_breadcrumb)-1]) );
				$parent_page_id = trim($tmp_page_info['id']);
				$parent_page_role = $this->get_role($parent_page_id);
				if( !is_null($parent_page_role) ){
					$parent_page_id = $parent_page_role;
				}
				unset($tmp_breadcrumb,$tmp_path,$tmp_page_info);

				if( $page_info['id'] != $parent_page_id && array_search( $parent_page_id, $actors ) === false ){
					continue;
				}

				if( $page_info['id'] == $parent_page_id ){
					if(@strlen($row['role'])){continue;}//役者はリストされない。

					if(@strlen($row['orderby'])){
						array_push( $tmp_children_orderby_manual , $row['id'] );
					}else{
						array_push( $tmp_children_orderby_auto , $row['id'] );
					}
					if( $row['list_flg'] ){
						if(@strlen($row['orderby'])){
							array_push( $tmp_children_orderby_listed_manual , $row['id'] );
						}else{
							array_push( $tmp_children_orderby_listed_auto , $row['id'] );
						}
					}
				}
			}
		}

		//  ページキャッシュを作成しなおす
		usort( $tmp_children_orderby_listed_manual , array( $this , 'usort_sitemap' ) );
		$this->sitemap_page_tree[$page_info['path']]['children'] = array_merge( $tmp_children_orderby_listed_manual , $tmp_children_orderby_listed_auto );
		usort( $tmp_children_orderby_manual , array( $this , 'usort_sitemap' ) );
		$this->sitemap_page_tree[$page_info['path']]['children_all'] = array_merge( $tmp_children_orderby_manual , $tmp_children_orderby_auto );

		//  return value
		$rtn = null;
		if($filter){
			$rtn = $this->sitemap_page_tree[$page_info['path']]['children'];
		}else{
			$rtn = $this->sitemap_page_tree[$page_info['path']]['children_all'];
		}

		return $rtn;
	}
子階層のページの一覧を取得する。

このメソッドは、指定したページの子階層のページの一覧を返します。`$path` を省略した場合は、カレントページのパスを起点に一覧を抽出します。

カレントページの子階層のリンクを作成する例 :
<pre>&lt;?php
// カレントページの子階層のリンクを作成する
$children = $px-&gt;site()-&gt;get_children();
print '&lt;ul&gt;';
foreach( $children as $child ){
print '&lt;li&gt;'.$px-&gt;mk_link($child).'&lt;/li&gt;';
}
print '&lt;/ul&gt;';
?&gt;</pre>

カレントページの子階層のリンクを、list_flg を無視してすべて表示する例 :
<pre>&lt;?php
// カレントページの子階層のリンクを作成する
// (list_flg を無視してすべて表示する)
$children = $px-&gt;site()-&gt;get_children(null, array('filter'=&gt;false));
print '&lt;ul&gt;';
foreach( $children as $child ){
print '&lt;li&gt;'.$px-&gt;mk_link($child).'&lt;/li&gt;';
}
print '&lt;/ul&gt;';
?&gt;</pre>

@param string $path 起点とするページのパス または ページID。省略時、カレントページから自動的に取得します。
@param array $opt オプション(省略可)
<dl>
<dt>$opt['filter'] (初期値: `true`)</dt>
<dd>フィルターの有効/無効を切り替えます。`true` のとき有効、`false`のとき無効となります。フィルターが有効な場合、サイトマップで `list_flg` が `0` のページが一覧から除外されます。</dd>
</dl>
@return array ページの一覧