0

さて、Webページのタブのように機能するリンクを描画する機能があります。基本的に、私はタブとして使用するリンクの配列を持っています、この性質のすべて:

$aTabs[] = array("Mode" => "something", "Title" => "Something Else");

すべてのタブを追加したら、この関数を使用してタブを印刷します。

function drawTabs($aTabs, $sFilename) {
global $iMode;

foreach ($aTabs as $aTab) {
    $sClass = "Tab";
    if ($iMode == $aTab["Mode"]) {
        $sClass .= " CurTab";
    }
    echo "<a class=\"{$sClass}\" href=\"{$sFilename}?Mode={$aTab["Mode"]}\">{$aTab["Title"]}</a>\n";
}

}

ですから、それはすべて問題なく、ダンディなようです。それはうまく機能します。

また、URLの書き換えを利用して、見た目をすっきりさせているサイトの別の場所でも使用したいと思います。サイトのその部分では、出力は次のようになります。

echo "<a class=\"{$sClass}\" href=\"{$sFilename}/{$aTab["Mode"]}/\">{$aTab["Title"]}</a>\n";

私は次のようなことをする文字列置換を追加することを考えていました:

str_replace("[mode]", $aTab["Mode"], $sFilename);

電話できるように

drawTabs($aTabs, "/some/place/on/my/site/[mode]/");

ほとんどの場合、条件付きで追加して、$sFilenameに'[mode]'がない場合は、'?Mode = $aTab["Mode"]'を使用して最後に追加します。

私の質問は、私の論理は正しいように見えますか、それともこれを行うためのより簡単な方法がありますか?

4

1 に答える 1

1

解決策は次のようなものである可能性があります

function drawTabs($aTabs, $sFilename, $sFormat = null) {
    global $iMode;

    $sFormat = $sFormat ?: "<a class=\"[class]\" href=\"[fileName]?Mode=[mode]\">[title]</a>\n";

    foreach ($aTabs as $aTab) {
        $sClass = "Tab";
        if ($iMode == $aTab["Mode"]) {
            $sClass .= " CurTab";
        }

        $replacements = array(
            '[class]' => $sClass,
            '[fileName]' => $sFilename,
            '[mode]' => $aTab["Mode"],
            '[title]' => $aTab['Title'],
            );
            echo strtr($sFormat, $replacements);

    }
}

次にそれを使用するには

$sFormat = "<a class=\"[class]\" href=\"[fileName]/[mode]/\">[title]</a>\n";

drawTabs($aTabs, $sFilename, $sFormat);
于 2012-09-06T02:58:58.960 に答える