0

はじめに:Wordpressではありません!単なる古いPHP。これが私がやろうとしていることです:

ページの上部に「ホーム」、「バージョン情報」、「情報」、「連絡先」のリンクが付いた水平方向のナビゲーションバーがあります。

ほとんどのページには、垂直ナビゲーションバーであるサイドバーもあります。ホームページを表示している場合は、サイドバーを表示する必要はありません。[概要]ページを表示している場合は、他のさまざまなテーマのサイドバーが必要です。お問い合わせページには、ルートの説明やお問い合わせフォームのリンクなどが記載されたサイドバーを表示する必要があります。

私は$GLOBAL変数でこれを達成することを考えていて$GLOBAL['sidebar] = 'home' $GLOBAL['sidebar'] = 'contact'、すべてのページの上になどのようなものを配置しました。サイドバーをレンダリングするPHPファイルでは、if構造を使用して、レンダリングする必要のあるサイドバーを確認します。しかし、グローバル変数の使用は私がいつも教えてきたものであり、間違っているので使用すべきではありません。その後、私の心は$ SESSION変数に移りましたが、それは実際にはまったく同じですが、session_start()などのいくつかの追加の懸念があります。

私はPHPを独学で学んでいるので、この特定の(そして非常に一般的な)「問題」を解決するために何を使用するのが最適かわかりません。この問題についての洞察をいただければ幸いです。ありがとう。

4

1 に答える 1

0

解決策は、コード構造をすでに設定した方法に大きく依存しますが、より一般的には、私が通常行う方法は次のとおりです。

すべてのページに含まれるテンプレートの一部としてサイドバーを含めます。

これに沿ってサイドバーを設定します。

<?php
if (sizeof($sidebarModules)>0) {
  ?>
  <div id="sidebar">
  <?php
    if (in_array('contact',$sidebarModules)) {
    // display contact form
  }
  if (in_array('route',$sidebarModules)) {
    // display route description
  }
  if (in_array('login',$sidebarModules)) {
    // display login
  }
  ?>
  <\div>
  <?php
}
?>

次に、各ページの上部で、配列を定義していることを確認してください$sidebarModules。何かのようなもの:

<?php
  $sidebarModules = array(
    'contact',
    'login',
    'description'
  );
?>

これが最善の解決策であるかどうかはわかりませんが、過去にはうまく機能していました。

編集:

または、テンプレートに標準の規則で名前が付けられている場合は、より効率的に実行します。例:

<?php
if (sizeof($sidebarModules)>0) {
  ?>
  <div id="sidebar">
  <?php
    foreach ($sidebarModules as $module) { // loop round all modules
      include($module.'_tpl.php'); // include module template
    }
  ?>
  <\div>
  <?php
}
?>
于 2012-08-23T14:58:00.073 に答える