2012-02-13 13 views
0

メンバーキャラクターを追跡するためのPHP cmsスタイルのアプリケーションを構築していますが、プロジェクトはうまくいきますが、ナビゲーションバーをより効率的にコーディングする方法があるのだろうかと思います。ナビゲーションバー、相対リンク

バーは、多くの異なるページに標準のように相対リンクが含まれているが、明白な理由のために動作しません、私はこの問題を回避なってきた方法は、

if (strstr($_SERVER['SCRIPT_FILENAME'], "admin/char/")) { 
$home = "../../index.php"; 
$logout = "../user/logout.php"; 
} else if (strstr($_SERVER['SCRIPT_FILENAME'], "admin/user/")) { 

など

であるので、私が持っていますこのソリューションは機能しますが、貼り付けコードをコピーして変更を加えてから、何かが足りない可能性が増し、リンクが増えるとこのチャンスが増えます。

少ないコードで同じ結果を達成するより良い方法があるのだろうか?

アドバイスをいただければ幸いです。

+0

これ以外の方法は他にありませんか? –

+0

私はページごとにどのレベルにあるか知っている変数を保持しているので、相対リンクをベースに戻すのは簡単です。 – hakre

答えて

1

定数(例:BASE_URL = 'http:// localhost/your_site /')を定義する共通の構成ファイル(すべてのスクリプトに含める)を作成することができます。

次に、構成ファイルで定義されたBASE_URL定数を使用して、ABSOLUTE値を持つすべてのリンクを変更します。常に有効なリンクになります

$home = BASE_URL . 'index.php'; 

:あなたのようなものを持っています最後に

配備時に、設定ファイルを変更してBASE_URLを新しいドメインに設定する必要があります(例:www.mysite.com)。

+0

はいポイントはこれは他のウェブサイト管理者が使用するオープンコードなので、ホストの実際のURLは変わります。 –

+0

ユーザロールに応じて異なるメニューリンクがありますが、それは一定のBASE_URLとは関係ありません。管理者用のメニューが異なる場合は、 'SCRIPT_FILENAME'ではなく、ユーザータイプに基づいて別のブロックを作成する必要があります。これらのリンクは引き続き同じ' BASE_URL':BASE_URL.'admin/logoutを使用/開始します。 php'' –

+0

あなたは配備時に何も言及していません手動の変更を意味するベースURLを変更する必要がありますが、私は管理者がこのアドレスを入力する必要なく自動的にドメインで動作するものが必要です。 –

0

私の質問に正確に答えることはできませんが、$ BASE_URLという変数を使う考えはありました。ここから私はsytaxを使用しています。ずっとある、それは、宇宙の公平なビットを取るん私は、リンクを1つのページから壊れていたときにしなければならないすべてのページが取り組むことを追加され、対応する長さながら、私は、複数のパスのためにこれを繰り返してきた

if (strstr($_SERVER['SCRIPT_FILENAME'], "admin/index.php")) { 
$BASE_URL = substr($_SERVER['SCRIPT_FILENAME'], 0, -15) 
} else if (strstr($_SERVER['SCRIPT_FILENAME'], "index.php")) { 
$BASE_URL = substr($_SERVER['SCRIPT_FILENAME'], 0, -9) 
} 

より簡単に。

私はこのコードを私のheader.phpファイルに含めました。そのため、変数はサイト全体でアクセス可能になりました。