1

次のコードがあります。(1)URLからページ/セクション名を取得します。(2)文字列をクリーンアップしてから変数に割り当てます。

このコードをより効率的に、おそらくif / elseステートメントを減らすように改善する方法について、何か提案があるかどうか疑問に思いました。

また、URL構造内のサブディレクトリのx個を占めるようにこれをコーディングする方法についての提案。今、私はかなり手動の方法で最大3つをチェックします。

たとえば、www.domain.com / level1 / level2 / level3 / level4 /levelx/..のような任意のURLを処理したいのですが。

これが私の現在のコードです:

<?php

    $prefixName = 'www : ';
    $getPageName = explode("/", $_SERVER['PHP_SELF']);
    $cleanUpArray = array("-", ".php");

    for($i = 0; $i < sizeof($getPageName); $i++) {
        if ($getPageName[1] == 'index.php')
        {
            $pageName = $prefixName . 'homepage';
        }
        else
        {
            if ($getPageName[1] != 'index.php')
            {                   
                $pageName = $prefixName . trim(str_replace($cleanUpArray, ' ', $getPageName[1]));
            } 
            if (isset($getPageName[2]))
            {
                if ( $getPageName[2] == 'index.php' )
                {
                    $pageName = $prefixName . trim(str_replace($cleanUpArray, ' ', $getPageName[1]));
                }               
                else
                {
                    $pageName = $prefixName . trim(str_replace($cleanUpArray, ' ', $getPageName[2]));
                }
            }
            if (isset($getPageName[3]) )
            { 
                if ( $getPageName[3] == 'index.php' )
                {
                    $pageName = $prefixName . trim(str_replace($cleanUpArray, ' ', $getPageName[2]));
                }               
                else
                {
                    $pageName = $prefixName . trim(str_replace($cleanUpArray, ' ', $getPageName[3]));
                }
            }   
        }           
    }
?>
4

2 に答える 2

0

あなたは現在for-loop を使用していますが、$iイテレータを何にも使用していません - 私にとっては、ループを完全に削除することができます。私が見ることができることから、ファイルの前のディレクトリ名を にしたいだけで、$pageName前のディレクトリがない場合は として設定しhomepageます。

に渡し$_SERVER['PHP_SELF']basename()、インデックスをチェックする代わりに正確なファイル名/を取得したり、「最後のディレクトリ」を取得するために現在行っているように分割することもできます。最後のディレクトリを取得するには、インデックスをスキップして直接使用できますarray_pop()

<?php

$prefixName = 'www : ';
$cleanUpArray = array("-", ".php");

$script = basename($_SERVER['PHP_SELF']);
$exploded = explode('/', substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/')));
$count = count($exploded);

if (($count == 1) && ($script == 'index.php')) {
    // the current page is "/index.php"
    $pageName = $prefixName . 'homepage';
} else if ($count > 1) {
    // we are in a sub-directory; use the last directory as the current page
    $pageName = $prefixName . trim(str_replace($cleanUpArray, ' ', array_pop($exploded)));
} else {
    // there is no sub-directory and the script is not index.php?
}

?>

よりパンくず感が必要な場合は、個々のディレクトリを保持することをお勧めします。この場合、中間if else条件を次のように更新できます。

} else if ($count > 1) {
    // we are in a sub-directory; "breadcrumb" them all together
    $pageName = '';
    $separator = ' : ';
    foreach ($exploded as $page) {
        if ($page == '') continue;
        $pageName .= (($pageName != '') ? $separator : '') . trim(str_replace($cleanUpArray, ' ', $page));
    }
    $pageName = $prefixName . $pageName;
} else {
于 2012-09-13T20:01:33.963 に答える