2011-07-17 30 views
1

私はPHPのサイトを構築しており、レンダリングの問題があるようです。 私のサイトは、Header.php、sidebar.php、footer.phpなど、複数の部分に分かれています。すべてのカテゴリはサイドバーにレンダリングされますが、選択したカテゴリの製品をレンダリングしようとするとページが完全なページを表示しません。PHPページが適切にレンダリングされない

私はカテゴリーと商品を持つ簡単なデータベースを持っています。 以下は、私のconnect_db.php、categories_db.php、およびproducts_db.phpファイルのコードです。すべてのデータベースの内容を扱います。

注:すべての製品を表示するだけで、サイドバーの選択したカテゴリの製品をレンダリングする必要がある場合は、product_list.phpをレンダリングすることができます。

は以下

<?php 
error_reporting(-1); 
ini_set('display_errors', 1); 

require('models/connect_db.php'); 
require('models/categories_db.php'); 
require('models/products_db.php'); 

$categories = get_categories(); 

if (!isset($category_id)) { 
    $category_id = 1; 
} 
else { 
    $category_id = $_GET['category_id']; 
} 
// get all products by category 
$products = get_products_by_category($category_id); 

?> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
    <head> 
     <?php include('views/layout/head.php');?> 
    </head> 
    <body> 
     <!-- Wrapper --> 
     <div class="wrapper"> 
      <!-- Header --> 
      <?php include('views/layout/header.php');?> 

      <!-- Main --> 
      <div id="main"> 
       <div class="cl">&nbsp;</div> 

       <!-- Content --> 
       <div id="content"> 
       <?php include('views/product_list.php');?> 
       </div> 
       <!-- End Content --> 

       <!-- Sidebar --> 
       <?php include('views/layout/sidebar.php');?> 
      </div> 
      <!-- End Main --> 

      <!-- Footer --> 
      <?php include('views/layout/footer.php');?> 
     </div> 
     <!-- End Wrapper --> 
    </body> 
</html> 

は今サイドバーが正しくカテゴリをレンダリング私のindex.phpまたはメインビューですが、私は、カテゴリをクリックすると、期待どおりには、product_list.phpをレンダリングしません。

サイドバーがすべてのカテゴリを正しく読み込み、コードが以下のとおりです。

<?php 
    $categories; 
    $categories = get_categories(); 

    $category_id = $_GET['category_id']; 
    if (!isset($category_id)) { 
     $category_id = 1; 
    } 
?> 
<div id="sidebar"> 

    <!-- Categories --> 

    <div class="box categories"> 
     <h2>Categories </h2> 
     <div class="box-content"> 
      <ul> 
       <!-- get category menu items --> 
       <?php foreach($categories as $category) : ?> 
       <li><a href="?category_id=<?php echo $category['category_id'];?>"> 
         <?php echo $category['name'];?> 
        </a> 
       </li> 
       <?php endforeach; ?> 
      </ul> 
     </div> 
    </div> 

    <!-- End Categories --> 

</div> 
<!-- End Sidebar --> 

<div class="cl">&nbsp;</div> 

ここでレンダリングされないproduct_list.phpファイルです。

<?php 

// get all products by category 
$products = get_products_by_category($category_id); 

// get category name 
$category_name = get_category_name($category_id); 

?> 

<!-- Products --> 
<div class="products"> 
    <div class="cl">&nbsp;</div> 
    <ul> 
     <?php foreach($products as $product) : ?> 
     <li> 
      <a href="#"><img src="css/images/big1.jpg" alt="" /></a> 
      <div class="product-info"> 
       <h3><?php echo $product['name'];?></h3> 

       <div class="product-desc"> 
        <h4><?php echo $category_name;?></h4> 
        <p><?php echo $product['description'];?></p> 
        <strong class="price"><?php echo $product['price'];?></strong> 
       </div> 
      </div> 
     </li> 
     <?php endforeach; ?> 
    </ul> 
    <div class="cl">&nbsp;</div> 
</div> 
<!-- End Products --> 

私は、$ CATEGORY_ID設定または何を取得されていないので、それはだ場合、誰かが私はこの問題を乗り越える助けてくださいわかりません。

ERRORS:

注意:未定義の変数:行に/var/www/WidgetCorp/views/product_list.phpでCATEGORY_ID 4

注意:未定義の変数:/ varにCATEGORY_ID/WWW/WidgetCorp /ライン7

致命的なエラーに関する意見/ product_list.php:未定義のメソッドPDOへの呼び出し::フェッチ()/var/www/WidgetCorp/models/categories_db.phpにライン22

+4

puh、それは多くのコードです... –

+1

Wayyyyあまりにも多くのコードがあります。 「レンダリングしない」とはどういう意味ですか?何か間違いはありますか?あなたが望むように表示されていませんか? – Mat

+0

申し訳ありませんが...私はそれが完了したかった....任意のアイデア? –

答えて

1

に私は問題があると考えていますproduct_lisの後にsidebar.phpファイルを含めていますt.phpファイル。 Product_list.phpは$ category_idを参照していますが、sidebar.phpファイルまで$ category_idは含まれていないようです。したがって、未定義の変数をさまざまな関数に渡そうとしています。エラーが発生しています。

この問題の一部は、リソースを誤ってマーシャリングしたことです。すべてのコードをプレゼンテーションコードから分離するために、テンプレートファイル(必要なデータを取得するもの)の上部にすべてのコードを配置してみてください。あなたのコメントを参照する

、コードの順序は次のように反転する必要があります。

<?php 
/* sidebar.php */ 
$categories; 
$categories = get_categories(); 

$category_id = $_GET['category_id']; 
if (!isset($category_id)) { 
    $category_id = 1; 
} 
/* product_list.php */ 
// get all products by category 
$products = get_products_by_category($category_id); 

// get category name 
$category_name = get_category_name($category_id); 
+0

index.phpファイルの先頭にすべてのコードを追加しようとしましたが、私はまだ同じエラーが発生しています。 –

+0

サイドバーからコードを入力してくださいproduct_list.phpのコードの上に? – jacobangel

+0

私はエラーが発生し続ける... Notice:未定義のインデックス:/var/www/WidgetCorp/index.phpの11行目の未定義のインデックス: –

1

大丈夫!構造を正しく理解していれば、index.phpはヘッダー、サイドバー、プロダクト、フッターのすべての要素をレンダリングするメインスクリプトです。 sidebar.phpとproduct_list.phpは特定のコンテンツのみを表示します。

ここで、カテゴリをクリックすると、category_idがGETパラメータとしてindex.phpに渡されます。コードに「views/product_list。。

// get all products by category 
$products = get_products_by_category($_GET['category_id']); 

// get category name 
$category_name = get_category_name($_GET['category_id']); 

I:PHPは同様に、product_list.phpの最初の2文で$_GET['category_id']を使用してみてください」(オフに設定されているregister_globalsが 『それはまだ存在していない$category_idを検索私は仮定します』)また、sidebar.phpでは、$category_idを正しく設定するために$_GET['category_id']を使用していますので、$category_idがすべての次のコードで利用可能になることを意味します。 "product_list.php" "product_list.php"で利用可能です。

追加の提案

上記のシナリオでは、値が必要なすべての場所で$_GET['category_id']を使用することをお勧めします。これにより、競合や未定義の問題が回避されます。あなたの例のように一度$_GET['category_id']を読み込む必要がある場合は、インクルードされたファイルではなく、メインの "index.php"に$category_idを初期化してください。そうすることで、その変数が一貫して利用できるようになります。たとえば、最初の3文字の直後に次の行を追加することができます。

$category_id = 1; 
if (isset($_GET['category_id']) && !empty($_GET['category_id'])) { 
    $category_id = $_GET['category_id']; 
} 

希望の説明が役立ちます。

関連する問題