论zencart之第三连发:新产品、特价产品、推荐产品

Zen Cart 模板、教程、设计、使用交流
版面规则
严禁盗版、侵权的模板下载、讨论,违者封ID、IP。

zencart 发帖图标 论zencart之第三连发:新产品、特价产品、推荐产品

帖子happy_pai » 2014-04-05 13:06

zencart开发之初就从商家考虑,新产品、推荐产品、特价产品这些都是商家经常要用到的促销方式,默认情况下,侧边栏,首页,产品目录页等等都可以放置这些促销产品。所以新产品、推荐产品、特价产品很重要。所以我又来挑毛病了。
zencart默认产品两种列表方式:tabular和columnar,分别使用common目录里面的tpl_tabular_display.php和tpl_columnar_display.php控制输出。在web2.0的世界里,我觉得两种列表输出方式都是废品,样式完全可以控制,响应式布局和瀑布流式列表更不允许这样做。表格对优化不好我们且不谈,就拿zencart的columnar显示来说,垃圾中的战斗机,很坚挺。首先,样式直接写在html里面,而且还用width=33%这样的百分比。兼容性差,优化差,灵活性差完全是它的代名词,再看下代码,各种行,列的控制,完全是应该淘汰的,搞的代码乱七八糟一大片,我对zencart又爱又恨,很大部分是这部分原因,爱他代码原始性,没有任何的框架,简单,极速,爱哪改就哪改;恨它的自作多情,有很多不需要的东西,和缺少很多需要的东西。
废话说太多了,现在说说修改,拿新产品为例;
修改modules/你的模版/new_products.php,首先我们继续使用zencart原始的数据库查询到逐个读取显示的类:
通过$db类,得到一个产品数组,通过while (!$new_products->EOF) 和$new_products->MoveNextRandom();配合得到产品的相关信息,我们不提交给tpl_tabular_display.php显示,而是直接显示,不然又是一遍循环。
看代码:
代码: 全选
<?php
/**
 * new_products.php module
 *
 * @package modules
 * @copyright Copyright 2003-2008 Zen Cart Development Team
 * @copyright Portions Copyright 2003 osCommerce
 * @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0
 * @version $Id: new_products.php 8730 2008-06-28 01:31:22Z drbyte $
 */
if (!defined('IS_ADMIN_FLAG')) {
  die('Illegal Access');
}

// initialize vars
$categories_products_id_list = '';
$list_of_products = '';
$new_products_query = '';

$display_limit = zen_get_new_date_range();

if ( (($manufacturers_id > 0 && $_GET['filter_id'] == 0) || $_GET['music_genre_id'] > 0 || $_GET['record_company_id'] > 0) || (!isset($new_products_category_id) || $new_products_category_id == '0') ) {
  $new_products_query = "select distinct p.products_id, p.products_image, p.products_tax_class_id, pd.products_name,
                                p.products_date_added, p.products_price, p.products_type, p.master_categories_id
                           from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd
                           where p.products_id = pd.products_id
                           and pd.language_id = '" . (int)$_SESSION['languages_id'] . "'
                           and   p.products_status = 1 " . $display_limit;
} else {
  // get all products and cPaths in this subcat tree
  $productsInCategory = zen_get_categories_products_list( (($manufacturers_id > 0 && $_GET['filter_id'] > 0) ? zen_get_generated_category_path_rev($_GET['filter_id']) : $cPath), false, true, 0, $display_limit);

  if (is_array($productsInCategory) && sizeof($productsInCategory) > 0) {
    // build products-list string to insert into SQL query
    foreach($productsInCategory as $key => $value) {
      $list_of_products .= $key . ', ';
    }
    $list_of_products = substr($list_of_products, 0, -2); // remove trailing comma

    $new_products_query = "select distinct p.products_id, p.products_image, p.products_tax_class_id, pd.products_name,
                                  p.products_date_added, p.products_price, p.products_type, p.master_categories_id
                           from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd
                           where p.products_id = pd.products_id
                           and pd.language_id = '" . (int)$_SESSION['languages_id'] . "'
                           and p.products_status = 1
                           and p.products_id in (" . $list_of_products . ")";
  }
}

if ($new_products_query != '') $new_products = $db->ExecuteRandomMulti($new_products_query, MAX_DISPLAY_NEW_PRODUCTS);
$list_box_contents = array();
$title = '';

$num_products_count = ($new_products_query == '') ? 0 : $new_products->RecordCount();

// show only when 1 or more
if ($num_products_count > 0) {
   echo '<div class="newproducts">';
    if (isset($new_products_category_id) && $new_products_category_id != 0) {
      $category_title = zen_get_categories_name((int)$new_products_category_id);
      echo '<h2 class="centerBoxHeading">' . sprintf(TABLE_HEADING_NEW_PRODUCTS, strftime('%B')) . ($category_title != '' ? ' - ' . $category_title : '' ) . '</h2>';
    } else {
      echo '<h2 class="centerBoxHeading">' . sprintf(TABLE_HEADING_NEW_PRODUCTS, strftime('%B')) . '</h2>';
    }
  $item_box = '';
  $item_box .= '<div class="row">';
  while (!$new_products->EOF) {
   $item_box .= '<div class="item"><div class="thumbnail">';
   $item_box .= ($new_products->fields['products_image'] == '' and PRODUCTS_IMAGE_NO_IMAGE_STATUS == 0) ? '' : '<div class="p_image"><a href="' . zen_href_link(zen_get_info_page($new_products->fields['products_id']), 'cPath=' . $productsInCategory[$new_products->fields['products_id']] . '&products_id=' . $new_products->fields['products_id']) . '">' .zen_image(DIR_WS_IMAGES . $new_products->fields['products_image'], $new_products->fields['products_name'], IMAGE_PRODUCT_NEW_WIDTH, IMAGE_PRODUCT_NEW_HEIGHT). '</a></div>';
   $item_box .= '<div class="caption">';
   $item_box .= '<div class="p_name"><a href="' . zen_href_link(zen_get_info_page($new_products->fields['products_id']), 'cPath=' . $productsInCategory[$new_products->fields['products_id']] . '&products_id=' . $new_products->fields['products_id']) . '">' . $new_products->fields['products_name'] . '</a></div>';

    $item_box .= '<div class="p_price">'.zen_get_products_display_price($new_products->fields['products_id']);
    if (!isset($productsInCategory[$new_products->fields['products_id']])) $productsInCategory[$new_products->fields['products_id']] = zen_get_generated_category_path_rev($new_products->fields['master_categories_id']).'</div>';
   $item_box .= '</div></div></div></div>';
    $new_products->MoveNextRandom();
  }
   $item_box .= '</div>';
   echo $item_box;
   echo '</div>';
}
?>

优点:每个产品都是一个div(可灵活的改为li),在样式可以随意控制每行显示的个数。
相应按钮代码论坛上有,下次更新特价产品和推荐产品和目录下产品列表的代码.....
happy_pai
普通会员
普通会员
 
帖子: 35
注册: 2011-04-19 15:12
QQ 帐号: 530176577

  • 相关话题
    回复总数
    阅读次数
    最新文章

回到 模板美工



在线用户

正在浏览此版面的用户:没有注册用户 和 0 位游客

cron