2011-07-17 47 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']; 
} 

希望上面的解释有帮助!