0

../content/interieur/interieur.php のページに任意のプロジェクトをロードする次のコードがあります。

<ul>
<?
if (glob('content/interieur/*.txt')) {
$files = glob('content/interieur/*.{txt}', GLOB_BRACE);

foreach ($files as $file) {

    $info = pathinfo ($file);
    $file_name = basename($file,'.'.$info['extension']);
    ?>

    <li class="crop"><a href="?topic=<?=$file_name?>" ><img src="content/interieur/<?=$file_name,'.jpg'?>" /></a>
    <p><?=include $file?></p>
    <hr /> 
    </li>
<? } //end foreach

} //end if 

else {?>
<li><img src="./img/404.jpg" />
<p><b>Sorry, </b>Geen projecten gevonden!</p>
</li>

<? ;} //end else

?> 

すべてのプロジェクトには、同じ名前の .txt、.jpg、および .html が必要であり、正常に機能します。

次に、プロジェクトをクリックして、その名前のプロジェクト コンテンツを同じ div にロードできるようにしたいと考えています。したがって、私の index.php には次のコードがあります。

<div id="mainContent">

        <?
            $files = glob('content/interieur/*.{html}', GLOB_BRACE);
            $info = pathinfo ($file);
            $file_name = basename($file,'.'.$info['extension']);

            if (isset ($_GET["topic"])) {

                foreach ($files as $file) {
                    switch($_GET['topic']){
                        case $file_name: include $file; break;
                        }
                    }

                switch($_GET['topic']){                 
                    case 'home': include("content/home.html" ); break;
                    case 'werkwijze': include("content/werkwijze.html"); break;
                    (et cetera)
                    default: include("content/home.html"); break;
                }
            }
            else
            {
                include("content/home.html");
            }
        ?>  


</div>

私が得られないのは、追加のプロジェクトごとにこれを行うルールと switch / case ステートメントを組み合わせる方法です。現在のところ、エラーは返されませんが、プロジェクトをクリックすると、div はデフォルトのケース (home.html) をロードします。

では、これらを 1 つの「スイッチ」にまとめるにはどうすればよいでしょうか。ほとんどのコードは正しいと思いますが、おそらく間違ったフォルダーにリダイレクトされるため、「include」コマンドをパス (/comtent/interieur) で定義する必要があるかもしれませんが、それがどのように機能するかわかりません... .

http://www.wgwd.nl/bedauxを見て、「投影 -> 内部」をクリックします。

これが何らかの形で明確な質問であることを願っています;-) Thx!

編集: var_dump ヒントの thx! これを試してみたところ、「project1」をクリックしたときに返される文字列は実際に「project1」であるため、適切なトピックを取得するとうまくいきます。「project1.html」を参照していないだけです。

したがって、基本的に私が必要だと思うのは、未定義のケースが別のケースと一緒に入れられるものです:

            if (isset ($_GET["topic"])) {

                    case $file_name: include $file; break;
                    case 'home': include("content/home.html" ); break;
                    case 'werkwijze': include("content/werkwijze.html"); break;
                    (et cetera)
                    default: include("content/home.html"); break;
                }
            }
            else
            {
                include("content/home.html");
            }

しかし、もちろんそれはうまくいきません

OR: コードは問題ないので、次のようなパスを追加する必要があります。

foreach ($files as $file) {
    switch($_GET['topic']){
     case $file_name: include './content/interieur/'$file; break;
    }
}

しかし、私はその構文が間違っていると思います.....

編集2 - 解決済み:

わかった!

コードの最初の部分を見ると、ここで $files を定義し、次に最初のスイッチを定義しています。

 <?
        $files = glob('content/interieur/*.{html}', GLOB_BRACE);
        $info = pathinfo ($file);
        $file_name = basename($file,'.'.$info['extension']);

        if (isset ($_GET["topic"])) {

            foreach ($files as $file) {
                switch($_GET['topic']){
                    case $file_name: include $file; break;
                    }
                }

foreach ステートメントで $file が作成される前に参照していることに気付きました (それはあなたの言い方ですか?)。

        <?
            $files = glob('content/interieur/*.{html}', GLOB_BRACE);

            if (isset ($_GET["topic"])) {

                $file_included=0;
                foreach ($files as $file) {
                    $info = pathinfo ($file);

うまくいっています!助けてくれてありがとう!

4

2 に答える 2

0

100% の回答ではないかもしれませんが、コメントに入れるにはテキストが多すぎます

foreach ($files as $file) {
    switch($_GET['topic']){
         case $file_name: include $file; break;
    }
}

まず、1 つの条件を持つ swith は基本的にifであり、このループでは$_GETとの両方$file_nameがループの外側に設定されます。したがって、この比較は、すべてのファイルに当てはまるか、またはどのファイルにも当てはまらないかのいずれかになります。だからそれは本当にこれを言っている:

if ($_GET['topic'] == $file_name) {
    foreach ($files as $file) {
         include $file;
    }
}

default常にデフォルトの「ホーム」を取得するという点に関しては、これは、ステートメントになってしまうためだと思います。var_dump($_GET['topic'])実際に何が入っているか試してみましたか?期待した価値を受け取っていない可能性があります。

于 2012-07-13T08:19:35.427 に答える
0

以下のセクションに置き換えます

 $file_included=0;
    foreach ($files as $file) {
                        switch($_GET['topic']){
                            case $file_name: include $file;$file_included=1; break;
                            }
                        }

    if($file_included==0){
                    switch($_GET['topic']){                 
                        case 'home': include("content/home.html" ); break;
                        case 'werkwijze': include("content/werkwijze.html"); break;
                        (et cetera)
                        default: include("content/home.html"); break;
                    }
    }
于 2012-07-13T08:02:57.243 に答える