更改产品列表显示方式
osCommerce 默认的产品列表显示样式是从上至下的列表式,这种方式可以显示较多的产品信息, 满足用户对产品的了解;
但如果只提供给用户一种显示样式的话,用户浏览时间较长就会感觉到疲劳,而且列表式的显示方式如果要显示很多产品的话,对于排列靠后的产品,浏览起来是很困难的。
所以针对这种情况,我们将对所有产品列表增加一种表格显示方式,产品排列以表格样式显示出来,使得用户一次可以了解多个产品,对于产品的浏览有较大的帮助。
1、修改文件 includes/classes/boxes.php
我们需要修改 productListingBox 类,因为 productListingBox 类是负责产品列表输出的类,所以我 们对 productListingBox 类的修改,将影响到所以产品列表的输出,从而做到一劳永逸。
新的 productListingBox 类代码如下:
class productListingBox extends tableBox {
function productListingBox($contents) {
global $HTTP_SESSION_VARS,$PHP_SELF;
$this->table_parameters = 'class="productListing"';
// 当设置了显示样式为“grid”时,将使用自定义的方法显示产品列表
if((substr(basename($PHP_SELF), 0, 13) != 'shopping_cart') && tep_session_is_registered('product_list_style') && 'grid' == $_SESSION['product_list_style'])
$this->productListingContent($contents);
else
$this->tableBox($contents, true);
}
// 这个就是我们以表格方式显示产品列表的方法
function productListingContent($contents){
$result = '<ul class="pl_g">';
$resultArray = array();
for($i=1,$n=count($contents);$i<$n;$i++) {
$productImage = $contents[$i][0]['text'];
$productName = $contents[$i][1]['text'];
$productPrice = $contents[$i][2]['text'];
$productBuy = $contents[$i][3]['text'];
$result .= sprintf('<li>%s<br/>%s<br/><strong>%s</strong><br/><div class="bb">%s</div></li>',$productImage,$productName,$productPrice,$productBuy);
}
$result .= '<div class="clear"></div>';
$result .= '</ul>';
echo $result;
return $result;
}
}
提示:
上述代码里的 if((substr(basename($PHP_SELF), 0, 13) != 'shopping_cart')部分是为了避免购物车的显示也区分样式,因为购物车的产品列表使用了与普通产品列表一样的 productListingBox 类输出。
新的 productListingContent 方法,是我们以表格样式显示产品的关键,但笔者避免了使用 table 进行包裹的方式,改用 ul,意在提示读者我们不仅可以扩展出表格样式,而且可以扩展出更多的 个性化格局,而最终的显示样式依赖 CSS 样式表的实现,productListingContent 方法只负责数据 的输出。
2、修改文件:includes/classes/split_page_results.php
split_page_result 类是显示分页结果的封装,我们将在此文件里增加一个方法输出显示样式选择框。 增加以下方法:
function display_style(){
global $PHP_SELF;
$style = 'list';
if(tep_session_is_registered('product_list_style') && 'grid' == $_SESSION['product_list_style'])
$style = 'grid';
$result = '<span class="pl_s">'. TEXT_PRODUCT_LISTING_STYLE_LEGEND;
$result .= '<a class="'.('grid' == $style?'curr':'').'" href="' . tep_href_link(basename($PHP_SELF),tep_get_all_get_params(array('style')).'style=g rid') .'"/><img src="images/grid_icon.gif"/>'.TEXT_PRODUCT_LISTING_STYLE_GRID.'</a>';
// grid_icon.gif 图片是表格样式的图标
$result .= '<a class="'.('list' == $style?'curr':'').'" href="' . tep_href_link(basename($PHP_SELF),tep_get_all_get_params(array('style')).'style=list') .'"/><img src="images/list_icon.gif"/>'.TEXT_PRODUCT_LISTING_STYLE_LIST.'</a>';
// list_icon.gif 图片是列表样式的图标
$result .= '</span>';
return $result;
}
3、修改文件:includes/modules/product_listing.php 查找:
<td class="smallText" align="right"><?php echo TEXT_RESULT_PAGE . ' ' . $listing_split->display_links(MAX_DISPLAY_PAGE_LINKS, tep_get_all_get_params(array('page', 'info', 'x', 'y'))); ?></td>
替换成如下代码:
<td class="smallText" align="right"><?php echo $listing_split->display_style(); ?> <?php echo TEXT_RESULT_PAGE . ' ' . $listing_split->display_links(MAX_DISPLAY_PAGE_LINKS, tep_get_all_get_params(array('page', 'info', 'x', 'y'))); ?></td>
4、修改语言文件:includes/languages/english.php 增加以下定义:
define(‘TEXT_PRODUCT_LISTING_STYLE_LEGEND’,’View:’);
define(‘TEXT_PRODUCT_LISTING_STYLE_GRID’,’Grid’);
define(‘TEXT_PRODUCT_LISTING_STYLE_LIST’,’List’);
5、修改样式表:stylesheet.css
增加以下样式:
ul.pl_g{margin:0;padding:0;font-size:12px;}
ul.pl_g li{width:200px;height:240px;display:block;float:left;list-style:none;padding:10px 0 0 10px;border-bottom:1px dotted #ccc;position:relative;}
ul.pl_g li .bb{position:absolute;bottom:10px;left:10px;}
.pl_s{margin-right:10px;}
.pl_s a{margin:0 2px;padding:2px 5px;}
.pl_s a img{vertical-align:middle;}
.pl_s a.curr{background-color:#ff9;border:1px solid #ccc;font-weight:bold;}