zencart前页和后页算法分析

2012-05-29 11:45 来源:www.chinab4c.com 作者:zencart专家

    zencart确实是一个出色的程序,在这个系统中,各个部分都设计的非常合理,也非常的简单.比如zencart前页和后页算法分析,我们就不难发现,在这个算法里面,确实是简单而又朴素,通过分类ID取得商品的ID.还可以对各种方式进行排序,从而在zencart商品页面获得该商品前页和后页商品信息。

    先看includes/modules/product_prev_next.php页面.

     $sql = "select p.products_id, p.products_model, p.products_price_sorter, pd.products_name, p.products_sort_order
          from   " . TABLE_PRODUCTS . " p, "
  . TABLE_PRODUCTS_DESCRIPTION . " pd, "
  . TABLE_PRODUCTS_TO_CATEGORIES . " ptc
          where  p.products_status = '1' and p.products_id = pd.products_id and pd.language_id= '" . (int)$_SESSION['languages_id'] . "' and p.products_id = ptc.products_id and ptc.categories_id = '" . (int)$current_category_id . "'" .
  $prev_next_order;

  $products_ids = $db->Execute($sql);
  $products_found_count = $products_ids->RecordCount();

  while (!$products_ids->EOF) {
    $id_array[] = $products_ids->fields['products_id'];
    $products_ids->MoveNext();
  }
   通过分类,就可以取得该分类下的商品ID信息.从而进行排序.取得了商品的ID之后,我们就可以按照需求来获取我们的商品信息了,如果该商品列表只有一个商品,那么前页和后页都是本身,如果有2个商品,那么前页就是第一个商品和到2个商品。

    foreach ($id_array as $key => $value) {
      if ($value == (int)$_GET['products_id']) {
        $position = $counter;
        if ($key == 0) {
          $previous = -1; // it was the first to be found
        } else {
          $previous = $id_array[$key - 1];
        }
        if (isset($id_array[$key + 1]) && $id_array[$key + 1]) {
          $next_item = $id_array[$key + 1];
        } else {
          $next_item = $id_array[0];
        }
      }
      $last = $value;
      $counter++;
    }
   通过这段代码我们可以看到。

 1:取得zencart商品前页

   if ($key == 0) {
          $previous = -1; // it was the first to be found
        } else {
          $previous = $id_array[$key - 1];
        }
   如果该数组为空,那么就不存在商品的前面和后面关系,否则取得该商品ID的前面数组$key-1

  2:取得zencart商品后页

   if (isset($id_array[$key + 1]) && $id_array[$key + 1]) {
          $next_item = $id_array[$key + 1];
        } else {
          $next_item = $id_array[0];
        }

    如果该商品ID的后面$key+1存在,那么返回该商品,否则就返回第一个.

   3:通过循环商品ID取得商品总数量$counter

   这个算法真简洁,确实不错。以上就是对zencart前页和后页算法分析总结。

   来源:http://www.chinab4c.com