質問箱/4452

カテゴリ
サマリトップ、read、それ以外の3パターンの表示をスキン内部でしたい
バージョン1.4.7
投稿者ジャイアン?
状態完了
投稿日2009-04-23 (木) 04:08:00

質問

タイトルの通り、トップ、read、それ以外の3パターンでそれぞれ違う物を表示したいです。

<?php if ($title !== $defaultpage) { ?>
aaa
<?php if (arg_check('read')) { ?>
bbb
<?php } else {?>
ccc
<?php } ?>
<?php } ?>

としいるのですがデフォルト(トップ)ページだけうまくいきませんでした。
トップページにはaaa、トップ&編集画面以外の通常のページにはbbb、それ以外(編集画面など)ではcccと表示したいです。
どこを直せばよいかご指摘してもらえないでしょうか。

回答

  • 質問の構成だと、「トップページ以外の場合」という大枠の中に「閲覧画面かどうか」の分岐があるので、トップページには何も表示されず、それ以外には必ずaaa が表示されさらにbbb かccc が表示されるようになっていますね。
    ってアレ?!$title を使って分岐していますか・・・。コメントした直後の閲覧時などタイトルにメッセージが含まれている場合*1も「それ以外」にしたいのならかまいませんが、そうでないのならQ. FrontPageのみ左サイドにサブメニューをつけたい と同じように$_page を使うほうがいいですよ。ってこの質問、スキンを改造する話ですよね?(そうでなければ、このQ&A の内容は使えません)
    トップページに関して質問ですが、トップページであれば閲覧以外の画面を表示している場合も、aaa と表示させたいのでしょうか?もしそうなら、PHP: 制御構造 のelseif/else if を使って3段組にするか、大枠にelse を追加して「トップページ以外じゃない場合(= トップページの場合)」を追加してそこにaaa を移すか、しないといけませんよ。 -- 2009-04-23 (木) 14:44:48
  • スキンを改造が目的ですね。
    $titleと$_pageは同じ様なものなだと思っていましたので、$_pageとしておきます。ご指摘ありがとうございます。
    トップページは閲覧以外の画面もaaaと表示させたいです。昨日配置する順番を変えて色々試してみたんですがどうしても理想通りに動いてくれませんでした。正直、上の並び順で何が違うのかまったくわからない状況です。PHPのサイトをみましても、大きい、小さい、同等とかになってるので大きさや小ささが何の関係があるのかさっぱりでした。 -- ジャイアン? 2009-04-23 (木) 15:13:39
  • if の条件文($a > $b など)をあまり読み解けませんでしたか。条件文に関してはPHP: 比較演算子 などを見てもらうとして、
    if ~ else if ~ else の構文の意味としてはこんな感じです。(注意: 下のままPHP で実行してもエラーが出ます)
    <?php
    if (条件A) { // 必ず判定
        条件A に該当する場合にのみ動作
    
    } else if (条件B) { // 条件A に該当しない場合にのみ判定
        条件B に該当する場合にのみ動作
    
    } else if (条件C) { // 条件A と条件B に該当しない場合にのみ判定
        条件C に該当する場合にのみ動作
    
    } else { // これまでのif やelse if にすべて該当しなかった場合
        // この例では、条件A と条件B と条件C 、すべてに該当しない場合
        その他の場合にのみ動作
    }
    ?>
    実はこれは、
    <?php
    if (条件A) { // 必ず判定
        条件A に該当する場合にのみ動作
    
    } else { // 条件A に該当しない場合
        if (条件B) {  // 条件A に該当しない場合、必ず判定
            条件B に該当する場合にのみ動作
    
        } else { // 条件B に該当しない場合
            if (条件C) {  // 条件A と条件B に該当しない場合、必ず判定
                条件C に該当する場合にのみ動作
    
            } else { // 条件C に該当しない場合
                その他の場合にのみ動作
            }
        }
    }
    ?>
    と同じ意味です。*2 -- 2009-04-23 (木) 16:47:16
    • 質問で「トップ&編集画面以外の通常のページにはbbb」とされていますが、ひょっとして要望は 「1. トップページであれば必ずaaa を表示」と「2. (トップページを含む)すべてのページの閲覧時にはbbb を、それ以外ではccc を、表示」の2本立てですか?もしそうなら、単純に
      <?php if ($title === $defaultpage) { ?>
      aaa
      <?php } ?>
      
      <?php if (arg_check('read')) { ?>
      bbb
      <?php } else {?>
      ccc
      <?php } ?>
      とすればできます。
      上で説明したelse if を使うなら
      <?php if ($title === $defaultpage) { ?>
      トップページであればどの画面でも表示させたい文章
      <?php } else if (arg_check('read')) { ?>
      トップページ以外で、閲覧画面の時に表示させたい文章
      <?php } else {?>
      トップページ以外で、閲覧画面以外の時に表示させたい文章
      <?php } ?>
      というのでも実現できます。 -- 2009-04-23 (木) 16:47:16
  • elseなどの解説ありがとうございます、どのように動作するかは完璧にではないですが、なんとなくわかりました。ifを使っていけば色々条件を分岐できるのですね。今後改造する時に役立てようと思います。
    肝心の質問内容ですが、要望はトップページは含まず、1つの項目を3種類に別けたかったので、後者で完璧に動作してくれました。
    回答だけでなく、そこに至るまでの解説までしていただいて本当にありがとうございます。無事うまくいきましたので、完了としたいと思います。
    素早い回答とても助かりました。 -- ジャイアン? 2009-04-23 (木) 17:52:38


*1 例えばトップページにコメントした直後の閲覧時なら、$title の中身は「トップページ を更新しました」です。この状態でページ名(トップページ)と比較しても、同じではないと判定されてしまいます。
*2 ただ、if ~ else 構文の中にif ~ else 構文を書く入れ子構造では、条件が増えるほど位置関係が判りにくくなる場合があるので、else if を使える状況なら普通は、if ~ else if ~ else の構文を使います。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-04-23 (木) 19:27:14
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.326 sec.

OSDN