2011-07-17 155 views
1

我有一個PHP網站,我正在建設,我似乎有一些渲染問題。 我有我的網站分成多個部分,如Header.php,sidebar.php和footer.php。我的所有類別在側邊欄中都呈現沒有問題,但是當我嘗試呈現所選類別的產品並且該頁面未呈現完整頁面時。PHP頁面沒有正確渲染

我有一個簡單的數據庫與類別和產品。 下面是我的connect_db.php,categories_db.php和products_db.php文件的代碼,它處理所有數據庫的東西。

注意:如果我只是顯示所有產品,我可以讓我的product_list.php呈現,但我需要在側邊欄中呈現所選類別的產品。

下面是我的index.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> 

現在側邊欄正確呈現的類別,但是當我點擊一個類別也不會呈現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:

說明:未定義變量:在CATEGORY_ID /var/www/WidgetCorp/views/product_list.php第4行

說明:未定義變量:CATEGORY_ID在/ var/WWW/WidgetCorp /上行視圖/ product_list.php 7

致命錯誤:調用未定義方法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,但$ category_id似乎並未包含在sidebar.php文件中。所以你試圖將一個未定義的變量傳遞給你的各種函數,併產生一個錯誤。

此問題的一部分是您錯誤地編組了您的資源。嘗試將所有代碼放在模板文件(抓取所需數據的東西)的頂部,以便將它與演示文稿代碼分開。

關於你的評論,代碼的順序需要翻轉到這樣的事情:

<?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

我不斷收到錯誤... 注意:Undefined index:category_id in /var/www/WidgetCorp/index.php on line 11 –

1

好吧!如果我正確理解你的結構,index.php是渲染所有組件的主要腳本 - 標題,側邊欄,產品和頁腳。 sidebar.php和product_list.php只呈現特定的內容。

現在,當點擊一個類別時,category_id作爲GET參數傳遞給index.php。代碼中包含「views/product_list」。PHP的」,它$category_id尚不存在搜索(我假設‘register_globals的’設置爲關閉),請嘗試在product_list.php第2個語句中使用$_GET['category_id'],如:

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

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

我也注意到在sidebar.php中,您正確使用$_GET['category_id']來設置$category_id。這意味着$category_id將在以下所有代碼中可用。但是,由於「product_list.php」在「sidebar.php」之前調用,所以$category_id isn' t available in「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']; 
} 

希望上面的解釋有幫助!