tpl_gallery_display.php

本文详细介绍了如何使用PHP和特定函数生成动态表格,通过数组输入实现数据展示,并且提供了关键词搜索、价格显示、库存检查等功能,适用于电商网站的商品列表展示。

<?php
/**
* Common Template - tpl_tabular_display.php
*
* This file is used for generating tabular output where needed, based on the supplied array of table-cell contents.
*
* @package templateSystem
* @copyright Copyright 2003-2006 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: tpl_tabular_display.php 3957 2006-07-13 07:27:06Z drbyte $
*/

//print_r($list_box_contents);

?>
<?php
if (!function_exists("stripos")) {
function stripos($str,$needle) {
return strpos(strtolower($str),strtolower($needle));
}
}

if($_GET['page'] < 2){
$li_list_bg = 'li_gallery_bg';
}else{
$li_list_bg = '';
}
?>

<div id="list_bg_big_img" class="<?php echo $li_list_bg; ?>">
<ul>
<?php
$list_box_contentsNum = count($list_box_contents);
for($row=0; $row<$list_box_contentsNum; $row++) {
if(isset($_GET['keyword'])){
$list_box_contents_keywordPos[$row] = stripos($list_box_contents[$row]['products_name'],$_GET['keyword']);
if (is_int($list_box_contents_keywordPos[$row])) {
$list_box_contents_name[$row] = str_ireplace($_GET['keyword'],'<span class="red">'.$_GET['keyword'].'</span>',$list_box_contents[$row]['products_name']);
}else{
$list_box_contents_name[$row] = $list_box_contents[$row]['products_name'];
}
}else {
$list_box_contents_name[$row] = $list_box_contents[$row]['products_name'];
}
?>
<li>
<div><ul><li class="relative">
<?php
//var_dump($list_box_contents[$row]);

$rs = $db->Execute("select specials_new_products_price from specials where products_id=".$list_box_contents[$row]['products_id']);
$products_price = $list_box_contents[$row]['products_price']; //caizhouqing update discount
$specials_price = $rs->fields['specials_new_products_price'];

if($products_price > 0){
$discount=100-round($specials_price / $products_price * 100);
}else{
$discount=0;
}

if($list_box_contents[$row]['products_quantity'] == 0) { ?>
<span class="sold_out_b"></span>
<?php }elseif (!empty($specials_price)){ ?>
<span class="sold_discount_gallery"><div class="sold_discount_font"><?php echo $discount;?></div></span>
<?php }
echo $list_box_contents[$row]['product_is_sale_item'].'<a href="' . zen_href_link(zen_get_info_page($list_box_contents[$row]['products_id']), 'cPath=' .zen_get_generated_category_path_rev($_GET['cPath']). '&products_id=' . $list_box_contents[$row]['products_id']) . '" class="ih" >' . zen_image_OLD(DIR_WS_IMAGES .substr_replace($list_box_contents[$row]['products_image'],'l/',0,2), $list_box_contents[$row]['products_name'], 228, 228, 'class=""') . '</a>'?>
</li>
<p>
<?php echo '<a href="' . zen_href_link(zen_get_info_page($list_box_contents[$row]['products_id']), 'cPath=' .zen_get_generated_category_path_rev($_GET['cPath']). '&products_id=' . $list_box_contents[$row]['products_id']) . '" >'.$list_box_contents_name[$row]. '</a><br/><br/>';
if($list_box_contents[$row]['product_is_wholesale']){
echo '<span class="sale_item_b"></span>';
}
echo $list_box_contents[$row]['product_is_free'];
echo $list_box_contents[$row]['product_is_always_free_shipping'];?>
</p>
<div class="black line_120 margin_t">
<strong>Our Price: </strong>
<?php
if(!empty($specials_price)){ //caizhouqing by bof
$products_price = $products_price * ($specials_price / $products_price);
echo '<a href="' . zen_href_link(zen_get_info_page($list_box_contents[$row]['products_id']), 'cPath=' .zen_get_generated_category_path_rev($_GET['cPath']). '&products_id=' . $list_box_contents[$row]['products_id'].'&action=buy_now') . '" >';
echo '<span class="car_price">';
echo ($list_box_contents[$row]['products_price'] == 0 ? $currencies->display_price($products_price,zen_get_tax_rate($products_tax_class_id)): $currencies->display_price($products_price,zen_get_tax_rate($products_tax_class_id)));
echo '</span>';
echo '</a>';
} //caizhouqing by eof
elseif ($list_box_contents[$row]['products_quantity'] > 0) {
echo '<a href="' . zen_href_link(zen_get_info_page($list_box_contents[$row]['products_id']), 'cPath=' .zen_get_generated_category_path_rev($_GET['cPath']). '&products_id=' . $list_box_contents[$row]['products_id'].'&action=buy_now') . '" >';
echo '<span class="car_price">';
echo ($list_box_contents[$row]['products_price'] == 0 ? $currencies->display_price($list_box_contents[$row]['products_price_sample'],zen_get_tax_rate($products_tax_class_id)): $currencies->display_price($list_box_contents[$row]['products_price'],zen_get_tax_rate($products_tax_class_id)));
echo '</span>';
echo '</a>';
}else{
echo '<span">';
echo ($list_box_contents[$row]['products_price'] == 0 ? $currencies->display_price($list_box_contents[$row]['products_price_sample'],zen_get_tax_rate($products_tax_class_id)): $currencies->display_price($list_box_contents[$row]['products_price'],zen_get_tax_rate($products_tax_class_id)));
echo '</span>';
}
?>
<div class="margin_t">Compare at: <?php echo $list_box_contents[$row]['products_price_retail'];?></div>
<div><span class="fl"><?php echo zen_get_reviews($list_box_contents[$row]['products_id']);?></span></div>
</div>
</ul></div>
</li>
<?php
}
?>
</ul>
</div>
<br class="clear" />

你希望在 PostgreSQL 中实现如下功能: - 其他字段保持不变。 - `po_num` 字段如果有多个值(即一个 `change_no` 对应多个 `po_num`),则将这些 `po_num` 用逗号拼接成一个字符串。 - 使用 SQL 实现。 --- ### ✅ 解决方案 在 PostgreSQL 中,我们可以使用 `STRING_AGG(po_num, ',')` 函数来将多行 `po_num` 聚合为逗号分隔的字符串。你需要对查询进行分组,确保其他字段不变的前提下,对 `po_num` 进行聚合。 --- ### ✅ 修改后的 SQL 查询如下: ```sql SELECT tsk.id_ AS taskid, ap.business_key_ AS businesskey, wt.bs_proc_inst_id_ AS processinstanceid, wt.bs_state_ AS state, cinfo.id AS id, orc.change_id AS changeid, orc.change_no AS changeno, orc.project_no AS projectno, STRING_AGG(cpt.po_num, ',') AS po_num, -- 用逗号拼接所有 po_num orc.status AS status, cinfo.is_add_po AS isaddpo, cinfo.is_change_money AS ischangemoney, cinfo.is_affected_progress AS isaffectedprogress, cinfo.is_change_list AS ischangelist, cinfo.is_new_push AS ebuypushnew FROM act_hi_procinst ap LEFT JOIN tpl_wf_hi_procform_t wt ON ap.proc_inst_id_ = wt.bs_proc_inst_id_ LEFT JOIN act_ru_task tsk ON wt.bs_proc_inst_id_ = tsk.proc_inst_id_ AND tsk.proc_def_id_ LIKE 'RequirementChangeProcess%' LEFT JOIN omp_require_change_t orc ON ap.business_key_ = orc.change_no LEFT JOIN omp_require_change_info_t cinfo ON cinfo.change_no = orc.change_no LEFT JOIN omp_require_change_po_period_t cpt ON orc.change_no = cpt.launch_change_no WHERE ap.proc_def_id_ LIKE 'RequirementChangeProcess%' AND ap.business_key_ LIKE 'C%' AND wt.bs_state_ = '待Ego处理' AND orc.change_id IS NOT NULL AND cinfo.id IS NOT NULL AND cinfo.delete_flag = 'N' GROUP BY tsk.id_, ap.business_key_, wt.bs_proc_inst_id_, wt.bs_state_, cinfo.id, orc.change_id, orc.change_no, orc.project_no, orc.status, cinfo.is_add_po, cinfo.is_change_money, cinfo.is_affected_progress, cinfo.is_change_list, cinfo.is_new_push; ``` --- ### ✅ 说明 - `STRING_AGG(cpt.po_num, ',')`:将多个 `po_num` 按逗号拼接。 - `GROUP BY`:对所有非聚合字段进行分组,保证每个组合唯一,同时可以聚合 `po_num`。 - 如果某个 `cpt.po_num` 是 `NULL`,`STRING_AGG` 会自动忽略 `NULL` 值。 --- ### ✅ 如果你使用的是 PostgreSQL 9.6 或更早版本(没有 `STRING_AGG`) 可以使用 `array_to_string(array_agg(cpt.po_num), ',')` 替代: ```sql array_to_string(array_agg(cpt.po_num), ',') AS po_num ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值