WordPressユーザーのbaserCMS覚え書き


httpから始まるURLを取得する

WordPress

該当する関数(テンプレートタグ)はありません。よく似た挙動をする関数に home_url() や site_url() などがあります。

baserCMS(2系)

$bcBaser->getUri( [$url] , [$sessionId] )

[getUri] httpから始まるURLを取得する|baserCMS 2系関数リファレンス

baserCMS(3系)

$this->BcBaser->getUri( [$url] , [$sessionId] )

[getUri] httpから始まるURLを取得する|baserCMS 3系関数リファレンス

メモ

テンプレートファイル内で、特定ページの絶対URLを文字列として取得したいときに使います。よく似た関数に getUrl() がありますが、下記のコード・出力結果のような違いがあります。

《コード》(3系の場合)

<?php echo 'getUrl: ' . $this->BcBaser->getUrl('/foo') ?>
<?php echo 'getUri: ' . $this->BcBaser->getUri('/foo') ?>

《出力結果》※スマートURL OFFの場合

getUrl: /index.php/foo
getUri: http://example.com/index.php/foo

getUrl() のリファレンス(3系)(2系)にもあるように、getUrl() でも第2引数を true に設定することで getUri() と同様の結果を取得できます。

《コード》(3系の場合)

<?php echo 'getUrl: ' . $this->BcBaser->getUrl('/foo', true) ?>
<?php echo 'getUri: ' . $this->BcBaser->getUri('/foo') ?>

《出力結果》※スマートURL OFFの場合

getUrl: http://example.com/index.php/foo
getUri: http://example.com/index.php/foo

二つの関数の関係は /lib/Baser/View/Helper/BcBaserHelper.php(3系)にある getUri メソッドの記述をみると、より理解が深まるかとおもいます。

/**
 * httpから始まるURLを取得する
 *
 * @param string $url
 * @param boolean $sessionId
 * @return string
 * @access public
 * @manual
 */
function getUri($url, $sessionId = true){
if(preg_match('/^http/is', $url)) {
return $url;
}else {
if(empty($_SERVER['HTTPS'])) {
$protocol = 'http';
}else {
$protocol = 'https';
}
return $protocol . '://'.$_SERVER['HTTP_HOST'].$this->getUrl($url, false, $sessionId);
}
}

getUri() は、サーバ環境変数から割り出したプロトコルやホスト名に getUrl() の取得結果を結合して返すものだったのですね。