3g了 由pc->手机 我们想了些什么呢

文章回顾了从2001年进入大学学习网络技术,到2007年首次拥有个人电脑和2005年购买手机的经历。随着3G技术的发展,作者反思如何将网站软件、商务活动以及IT应用更好地融入日常生活,提出了将PC程序转移到手机、扩展商务网络至手机网络和利用3G技术将IT更多地融入生活的可能性。
<p><span style="font-size: 10pt;">虽说本人是 学网络 做程序 的<br>从进入南工的2001年起也算是个与it相关的人了</span></p><p><span style="font-size: 10pt;">但拥有自己的个人电脑却是2007的事<br>那时有款神舟的 3999元 就狠了个心 买了一台</span></p><p><span style="font-size: 10pt;">有手机相对早些 <br>毕业后工作的第一年 2005年过完春节买的诺基亚3100<br>惭愧的是 手机钱还是从家里拿的</span></p><p><span style="font-size: 10pt;">现在已经是2009年过了一个月</span></p><p><span style="font-size: 10pt;">如今<br>没有电脑的公司少了 有电脑的家庭和个人也多了<br>差不多都知道上网是个怎么回事了</span></p><p><span style="font-size: 10pt;">手机也越来越普遍了<br>短短几年 大哥大就快成传说了</span></p><p><span style="font-size: 10pt;">3g了<br>关于手机 关于pc 关于it<br>我们想了些什么呢<br>从我们的生活 从我们的技能 从我们的工作</span></p><p><span style="font-size: 10pt;">是不是需要考虑将网站 软件等程序从pc搬到手机<br>是不是需要考虑将商务从pc网络辐射到手机网络<br>是不是需要考虑将利用3g将手机 将pc 将it更多的融入到生活<br>......</span></p><p><span style="font-size: 10pt;">3g了<br>由pc->手机<br>我们的生活与it<br>......</span></p><p><span style="font-size: 10pt;">巴菲特 说<br>等到知更鸟报春,那春天就快结束了</span></p><p><span style="font-size: 10pt;"><font>--3g 是什么--<br>http://www.c114.net/keyword/3g</font></span></p><p><font>3g是英文3rdgeneration的缩写,指第三代移动通信技术。</font></p><p><font>相对第一代模拟制式手机(1g)和第二代gsm、tdma等数字手机(2g),第三代手机一般地讲,<br>是指将无线通信与国际互联网等多媒体通信结合的新一代移动通信系统。<br>它能够处理图像、音乐、视频流等多种媒体形式,提供包括网页浏览、电话会议、电子商务等多种信息服务。<br>为了提供这种服务,无线网络必须能够支持不同的数据传输速度,<br>也就是说在室内、室外和行车的环境中能够分别支持至少2mbps(兆字节/每秒)、384kbps(千字节/每秒)以及144kbps的传输速度。<br>国际电信联盟(itu)在2000年5月确定w—cdma、cdma2000和tds—cdma三大主流无线接口标准,写入3g技术指导性文件《2000年国际移动通讯计划》。</font></p><font><p><br>--3g 需要什么--</p><p><br>--3g 程序员的我们做些什么--</p></font>
cart) wc_load_cart(); $items = array(); foreach (WC()-&gt;cart-&gt;get_cart() as $ci_key =&gt; $ci) { $pid = isset($ci['product_id']) ? (int)$ci['product_id'] : 0; $vid = isset($ci['variation_id']) ? (int)$ci['variation_id'] : 0; $qty = isset($ci['quantity']) ? wc_stock_amount($ci['quantity']) : 0; $var = isset($ci['variation']) && is_array($ci['variation']) ? $ci['variation'] : array(); if ($pid && $qty &gt; 0) { $items[] = array( 'product_id' =&gt; $pid, 'variation_id' =&gt; $vid, 'variation' =&gt; array_map('wc_clean', $var), 'quantity' =&gt; $qty, ); } } return $items; } /** * 从快照恢复购物车 */ function pc_restore_cart_from_items($items) { if (!WC()-&gt;cart) wc_load_cart(); WC()-&gt;cart-&gt;empty_cart(); foreach ((array)$items as $it) { $pid = isset($it['product_id']) ? (int)$it['product_id'] : 0; $vid = isset($it['variation_id']) ? (int)$it['variation_id'] : 0; $qty = isset($it['quantity']) ? wc_stock_amount($it['quantity']) : 0; $var = isset($it['variation']) && is_array($it['variation']) ? array_map('wc_clean', $it['variation']) : array(); if ($pid && $qty &gt; 0) { WC()-&gt;cart-&gt;add_to_cart($pid, $qty, $vid, $var); } } WC()-&gt;cart-&gt;calculate_totals(); } /** * 生成瞬态键名 */ function pc_transient_key($token) { return 'pc_partial_payload_' . sanitize_key($token); } /* ------------------------------------------------- * AJAX: 当购物车为空时恢复购物车 * ------------------------------------------------- */ add_action('wp_ajax_pc_rehydrate_cart', 'pc_rehydrate_cart'); add_action('wp_ajax_nopriv_pc_rehydrate_cart', 'pc_rehydrate_cart'); function pc_rehydrate_cart() { check_ajax_referer('woocommerce-cart', 'security'); $raw = isset($_POST['items']) ? wp_unslash($_POST['items']) : ''; $items = is_string($raw) ? json_decode($raw, true) : (array)$raw; if (!is_array($items)) { wp_send_json_error(array('message' =&gt; '无效的商品数据'), 400); } if (!WC()-&gt;cart) wc_load_cart(); if (!WC()-&gt;cart-&gt;is_empty()) { wp_send_json_success(array('message' =&gt; '购物车非空')); } foreach ($items as $it) { $pid = isset($it['product_id']) ? (int)$it['product_id'] : 0; $vid = isset($it['variation_id']) ? (int)$it['variation_id'] : 0; $qty = isset($it['quantity']) ? wc_stock_amount($it['quantity']) : 0; $var = isset($it['variation']) && is_array($it['variation']) ? array_map('wc_clean', $it['variation']) : array(); if ($pid && $qty &gt; 0) { WC()-&gt;cart-&gt;add_to_cart($pid, $qty, $vid, $var); } } WC()-&gt;cart-&gt;calculate_totals(); wp_send_json_success(array('rehydrated' =&gt; true)); } /* ------------------------------------------------- * AJAX: 更新商品数量 (无需刷新页面) * ------------------------------------------------- */ add_action('wp_ajax_update_cart_item_qty', 'pc_update_cart_item_qty'); add_action('wp_ajax_nopriv_update_cart_item_qty', 'pc_update_cart_item_qty'); function pc_update_cart_item_qty() { check_ajax_referer('woocommerce-cart', 'security'); $key = isset($_POST['cart_item_key']) ? wc_clean(wp_unslash($_POST['cart_item_key'])) : ''; $qty = isset($_POST['qty']) ? wc_stock_amount($_POST['qty']) : null; if (!$key || $qty === null) { wp_send_json_error(array('message' =&gt; '缺少参数'), 400); } if (!WC()-&gt;cart) wc_load_cart(); if ($qty <= 0) { $removed = WC()-&gt;cart-&gt;remove_cart_item($key); WC()-&gt;cart-&gt;calculate_totals(); wp_send_json_success(array('removed' =&gt; (bool)$removed)); } else { $set = WC()-&gt;cart-&gt;set_quantity($key, $qty, true); WC()-&gt;cart-&gt;calculate_totals(); $cart_item = WC()-&gt;cart-&gt;get_cart_item($key); if (!$cart_item) { wp_send_json_error(array('message' =&gt; '更新后找不到商品'), 404); } $_product = $cart_item['data']; $subtotal_html = apply_filters('woocommerce_cart_item_subtotal', WC()-&gt;cart-&gt;get_product_subtotal($_product, $cart_item['quantity']), $cart_item, $key); $line_total_incl_tax = (float)($cart_item['line_total'] + $cart_item['line_tax']); wp_send_json_success(array( 'subtotal_html' =&gt; $subtotal_html, 'line_total_incl_tax' =&gt; $line_total_incl_tax, 'removed' =&gt; false )); } } /* ------------------------------------------------- * AJAX: 删除选中商品 * ------------------------------------------------- */ add_action('wp_ajax_remove_selected_cart_items', 'pc_remove_selected_cart_items'); add_action('wp_ajax_nopriv_remove_selected_cart_items', 'pc_remove_selected_cart_items'); function pc_remove_selected_cart_items() { check_ajax_referer('woocommerce-cart', 'security'); $keys = isset($_POST['selected_items']) ? (array) $_POST['selected_items'] : array(); if (!WC()-&gt;cart) wc_load_cart(); foreach ($keys as $k) { $k = wc_clean(wp_unslash($k)); WC()-&gt;cart-&gt;remove_cart_item($k); } WC()-&gt;cart-&gt;calculate_totals(); wp_send_json_success(true); } /* ------------------------------------------------- * AJAX: 清空购物车 * ------------------------------------------------- */ add_action('wp_ajax_empty_cart', 'pc_empty_cart'); add_action('wp_ajax_nopriv_empty_cart', 'pc_empty_cart'); function pc_empty_cart() { check_ajax_referer('woocommerce-cart', 'security'); if (!WC()-&gt;cart) wc_load_cart(); WC()-&gt;cart-&gt;empty_cart(); wp_send_json_success(true); } /* ------------------------------------------------- * AJAX: 应用优惠券 * ------------------------------------------------- */ add_action('wp_ajax_apply_coupon', 'pc_apply_coupon'); add_action('wp_ajax_nopriv_apply_coupon', 'pc_apply_coupon'); function pc_apply_coupon() { check_ajax_referer('woocommerce-cart', 'security'); $code = isset($_POST['coupon_code']) ? wc_format_coupon_code(wp_unslash($_POST['coupon_code'])) : ''; if (!$code) { wp_send_json_error(array('message' =&gt; __('请输入优惠券代码', 'woocommerce')), 400); } if (!WC()-&gt;cart) wc_load_cart(); $applied = WC()-&gt;cart-&gt;apply_coupon($code); WC()-&gt;cart-&gt;calculate_totals(); if (is_wp_error($applied)) { wp_send_json_error(array('message' =&gt; $applied-&gt;get_error_message()), 400); } if (!$applied) { wp_send_json_error(array('message' =&gt; __('优惠券应用失败', 'woocommerce')), 400); } wp_send_json_success(true); } /* ------------------------------------------------- * AJAX: 创建部分结算订单 * - 将快照和选中商品存储在瞬态中 * - 将会话中的token标记 * - 返回结账URL * ------------------------------------------------- */ add_action('wp_ajax_create_direct_order', 'pc_create_direct_order'); add_action('wp_ajax_nopriv_create_direct_order', 'pc_create_direct_order'); function pc_create_direct_order() { check_ajax_referer('woocommerce-cart', 'security'); // 初始化会话 if (!WC()-&gt;session) { WC()-&gt;session = new WC_Session_Handler(); WC()-&gt;session-&gt;init(); } $selected_keys = isset($_POST['selected_items']) ? (array) $_POST['selected_items'] : array(); if (empty($selected_keys)) { wp_send_json_error(array('message' =&gt; __('请选择要结算的商品', 'woocommerce')), 400); } if (!WC()-&gt;cart) wc_load_cart(); // 创建完整购物车快照 $snapshot = pc_snapshot_current_cart(); // 提取选中商品 $selected = array(); foreach (WC()-&gt;cart-&gt;get_cart() as $ci_key =&gt; $ci) { if (!in_array($ci_key, $selected_keys, true)) { continue; } $pid = isset($ci['product_id']) ? (int)$ci['product_id'] : 0; $vid = isset($ci['variation_id']) ? (int)$ci['variation_id'] : 0; $qty = isset($ci['quantity']) ? wc_stock_amount($ci['quantity']) : 0; $var = isset($ci['variation']) && is_array($ci['variation']) ? array_map('wc_clean', $ci['variation']) : array(); if ($pid && $qty &gt; 0) { $selected[] = array( 'product_id' =&gt; $pid, 'variation_id' =&gt; $vid, 'variation' =&gt; $var, 'quantity' =&gt; $qty, ); } } if (empty($selected)) { wp_send_json_error(array('message' =&gt; __('没有可结算的商品', 'woocommerce')), 400); } $token = wp_generate_uuid4(); $payload = array( 'uid' =&gt; pc_get_cart_uid(), 'snapshot' =&gt; $snapshot, 'selected' =&gt; $selected, 'created' =&gt; time(), ); set_transient(pc_transient_key($token), $payload, 2 * DAY_IN_SECONDS); // 将token存入会话 if (method_exists(WC()-&gt;session, 'set')) { WC()-&gt;session-&gt;set('pc_partial_token', $token); } $checkout_url = add_query_arg('pc_token', rawurlencode($token), wc_get_checkout_url()); wp_send_json_success(array('checkout_url' =&gt; $checkout_url)); } /* ------------------------------------------------- * 结账流程处理 * - 根据token虚拟化购物车 * - 处理前确保重新虚拟化 * - 订单标记token * - 感谢页重建购物车 * - 返回购物车时恢复快照 * ------------------------------------------------- */ // 进入结账页时虚拟化购物车 add_action('woocommerce_before_checkout_form', 'pc_virtualize_cart_on_checkout', 1); function pc_virtualize_cart_on_checkout() { if (!isset($_GET['pc_token'])) return; $token = sanitize_text_field(wp_unslash($_GET['pc_token'])); $payload = get_transient(pc_transient_key($token)); if (empty($payload) || empty($payload['selected'])) return; if (!WC()-&gt;cart) wc_load_cart(); // 仅加载选中商品 pc_restore_cart_from_items($payload['selected']); // 持久化token用于后续AJAX调用 if (method_exists(WC()-&gt;session, 'set')) { WC()-&gt;session-&gt;set('pc_partial_token', $token); } } // 订单处理前再次确保虚拟化 add_action('woocommerce_before_checkout_process', 'pc_revirtualize_before_processing', 1); function pc_revirtualize_before_processing() { if (!method_exists(WC()-&gt;session, 'get')) return; $token = WC()-&gt;session-&gt;get('pc_partial_token'); if (!$token) return; $payload = get_transient(pc_transient_key($token)); if (empty($payload) || empty($payload['selected'])) return; pc_restore_cart_from_items($payload['selected']); } // 订单标记token add_action('woocommerce_checkout_create_order', 'pc_tag_order_with_token', 10, 1); function pc_tag_order_with_token($order) { $token = null; if (isset($_GET['pc_token'])) { $token = sanitize_text_field(wp_unslash($_GET['pc_token'])); } elseif (method_exists(WC()-&gt;session, 'get')) { $token = WC()-&gt;session-&gt;get('pc_partial_token'); } if ($token) { $order-&gt;update_meta_data('_pc_partial_token', $token); } } // 感谢页重建购物车 add_action('woocommerce_thankyou', 'pc_rebuild_cart_on_thankyou', 20); function pc_rebuild_cart_on_thankyou($order_id) { $order = wc_get_order($order_id); if (!$order) return; $token = $order-&gt;get_meta('_pc_partial_token'); if (!$token) return; $payload = get_transient(pc_transient_key($token)); if (empty($payload) || empty($payload['snapshot'])) { // 清理会话token if (method_exists(WC()-&gt;session, 'set')) { WC()-&gt;session-&gt;set('pc_partial_token', null); } delete_transient(pc_transient_key($token)); return; } // 创建已购商品映射表 $purchased = array(); foreach ($order-&gt;get_items() as $item) { $pid = (int)$item-&gt;get_product_id(); $vid = (int)$item-&gt;get_variation_id(); $qty = (int)$item-&gt;get_quantity(); $k = pc_build_item_key($pid, $vid); if (!isset($purchased[$k])) $purchased[$k] = 0; $purchased[$k] += $qty; } // 剩余商品 = 快照 - 已购 $remainder = array(); foreach ($payload['snapshot'] as $it) { $pid = isset($it['product_id']) ? (int)$it['product_id'] : 0; $vid = isset($it['variation_id']) ? (int)$it['variation_id'] : 0; $qty = isset($it['quantity']) ? wc_stock_amount($it['quantity']) : 0; $var = isset($it['variation']) ? $it['variation'] : array(); $k = pc_build_item_key($pid, $vid); $take = isset($purchased[$k]) ? (int)$purchased[$k] : 0; $left = max(0, $qty - $take); if ($left &gt; 0) { $remainder[] = array( 'product_id' =&gt; $pid, 'variation_id' =&gt; $vid, 'variation' =&gt; $var, 'quantity' =&gt; $left, ); $purchased[$k] = max(0, $take - $qty); } } // 重建剩余商品的购物车 pc_restore_cart_from_items($remain You generated the code for my functions.php only till halfway, please continue from // 重建剩余商品的购物车 pc_restore_cart_from_items($remain
09-03
<think&gt; 我们注意到代码在 `pc_rebuild_cart_on_thankyou` 函数的最后部分被截断了。我们需要完成这个函数,并确保后面的代码也被正确生成。 在上一个回答中,我们生成了 `functions.php` 的大部分代码,但是在 `pc_rebuild_cart_on_thankyou` 函数的末尾被截断了。我们需要完成这个函数,并继续生成后面的代码。 根据上下文,`pc_rebuild_cart_on_thankyou` 函数应该完成以下步骤: 1. 重建剩余商品的购物车(已经完成`$remainder`数组的构建) 2. 将剩余商品恢复到购物车 3. 清理会话和瞬态 此外,我们还需要处理支付取消的情况,以及购物车恢复的钩子。 让我们继续完成 `pc_rebuild_cart_on_thankyou` 函数,并添加支付取消处理逻辑。 注意:由于代码较长,我们将从被截断的地方继续编写,并确保整个文件代码完整。 </think&gt; 让我们继续完成 `functions.php` 文件的后半部分代码,包括支付取消处理、购物车恢复逻辑以及跨标签页同步功能: ```php // 重建剩余商品的购物车 pc_restore_cart_from_items($remainder); // 清理会话token if (method_exists(WC()-&gt;session, 'set')) { WC()-&gt;session-&gt;set('pc_partial_token', null); } delete_transient(pc_transient_key($token)); } /* ------------------------------------------------- * 支付取消处理 * - 当订单取消时恢复原始购物车 * ------------------------------------------------- */ add_action('woocommerce_cancelled_order', 'pc_restore_cart_on_cancellation'); function pc_restore_cart_on_cancellation($order_id) { $order = wc_get_order($order_id); if (!$order) return; $token = $order-&gt;get_meta('_pc_partial_token'); if (!$token) return; $payload = get_transient(pc_transient_key($token)); if (empty($payload) || empty($payload['snapshot'])) { delete_transient(pc_transient_key($token)); return; } // 恢复完整购物车快照 pc_restore_cart_from_items($payload['snapshot']); // 清理会话token if (method_exists(WC()-&gt;session, 'set')) { WC()-&gt;session-&gt;set('pc_partial_token', null); } delete_transient(pc_transient_key($token)); } /* ------------------------------------------------- * 跨标签页购物车同步 * - 使用localStorage实现 * ------------------------------------------------- */ add_action('wp_footer', function() { if (!class_exists('WooCommerce')) return; ?&gt; <script&gt; jQuery(function($) { // 监听购物车变化 $(document.body).on('wc_fragments_refreshed', function() { const cart = JSON.parse(localStorage.getItem('pc_cart_snapshot') || '[]'); const current = <?php echo wp_json_encode(pc_snapshot_current_cart()); ?&gt;; // 检测变化并更新localStorage if (JSON.stringify(cart) !== JSON.stringify(current)) { localStorage.setItem('pc_cart_snapshot', JSON.stringify(current)); } }); // 跨标签页同步 $(window).on('storage', function(e) { if(e.key === 'pc_cart_snapshot') { const remoteCart = JSON.parse(e.originalEvent.newValue || '[]'); const currentCart = <?php echo wp_json_encode(pc_snapshot_current_cart()); ?&gt;; if (JSON.stringify(remoteCart) !== JSON.stringify(currentCart)) { $.ajax({ url: '<?php echo admin_url('admin-ajax.php'); ?&gt;', type: 'POST', data: { action: 'pc_rehydrate_cart', security: '<?php echo wp_create_nonce('woocommerce-cart'); ?&gt;', items: remoteCart }, success: function() { $(document.body).trigger('wc_fragment_refresh'); } }); } } }); // 初始加载时设置localStorage if (!localStorage.getItem('pc_cart_snapshot')) { localStorage.setItem('pc_cart_snapshot', JSON.stringify(<?php echo wp_json_encode(pc_snapshot_current_cart()); ?&gt;)); } }); </script&gt; <?php }); /* ------------------------------------------------- * Woodmart主题购物车图标计数兼容 * ------------------------------------------------- */ add_filter('woodmart_cart_data', function($data) { if (is_checkout() && $original = WC()-&gt;session-&gt;get('original_cart')) { $data['count'] = count($original); } return $data; }); /* ------------------------------------------------- * 辅助函数:生成UUIDv4 * ------------------------------------------------- */ if (!function_exists('wp_generate_uuid4')) { function wp_generate_uuid4() { return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x', mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0x0fff) | 0x4000, mt_rand(0, 0x3fff) | 0x8000, mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff) ); } } /* ------------------------------------------------- * 会话初始化保障 * ------------------------------------------------- */ add_action('woocommerce_init', function() { if (!WC()-&gt;session) { WC()-&gt;session = new WC_Session_Handler(); WC()-&gt;session-&gt;init(); } }); ``` ### 代码关键部分解释 1. **购物车恢复逻辑**: ```php pc_restore_cart_from_items($remainder); ``` - 使用计算出的剩余商品重建购物车 - 清理会话中的 token 和瞬态数据 2. **支付取消处理**: ```php add_action('woocommerce_cancelled_order', 'pc_restore_cart_on_cancellation'); ``` - 当订单取消时触发 - 从瞬态获取完整购物车快照 - 恢复原始购物车内容 3. **跨标签页同步**: ```javascript $(window).on('storage', function(e) { if(e.key === 'pc_cart_snapshot') { // 同步其他标签页的购物车变化 } }); ``` - 使用 `storage` 事件监听 localStorage 变化 - 通过 AJAX 请求更新当前标签页的购物车 - 使用 `wc_fragments_refreshed` 事件触发 WooCommerce 片段刷新 4. **Woodmart 主题兼容**: ```php add_filter('woodmart_cart_data', function($data) { if (is_checkout() && $original = WC()-&gt;session-&gt;get('original_cart')) { $data['count'] = count($original); } return $data; }); ``` - 在结账页面保持购物车图标显示原始商品数量 - 防止主题默认行为干扰部分结算逻辑 5. **会话初始化保障**: ```php add_action('woocommerce_init', function() { if (!WC()-&gt;session) { WC()-&gt;session = new WC_Session_Handler(); WC()-&gt;session-&gt;init(); } }); ``` - 确保在所有 WooCommerce 操作前初始化会话 - 避免 "Call to a member function on null" 错误
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值