最近因為我自己想買 【省錢大作戰】 【台北濱江】北海道香醇牛乳製作的奶油慕斯,綿密入口即化-北海道千層蛋縞岱J力口味4入/盒-大家都搶買

相信許多人對他都有很深刻的印象!

上購物網看相關的 【省錢大作戰】 【台北濱江】北海道香醇牛乳製作的奶油慕斯,綿密入口即化-北海道千層蛋縞岱J力口味4入/盒-大家都搶買 推薦、開箱文、價格,評價、報價、規格,

【省錢大作戰】 【台北濱江】北海道香醇牛乳製作的奶油慕斯,綿密入口即化-北海道千層蛋縞岱J力口味4入/盒-大家都搶買 非常的吸引我的關注。走過路過這裡,

千萬不要錯過!一定會造成相當的搶購熱潮,

到貨的速度算滿快的,價格也很實在,重點是買的讓人很安心,

一拿到產品,心情上有種說不出的激動和感動,

CP值超高,讓我雀躍不已!

【省錢大作戰】 【台北濱江】北海道香醇牛乳製作的奶油慕斯,綿密入口即化-北海道千層蛋縞岱J力口味4入/盒-大家都搶買 的產品介紹在下面,

如果也跟我一樣喜歡,不妨可以看看喔!

PS.若您家裡有0~4歲的小朋友,點我進入索取免費好物

PS2.想買情趣用品卻會害羞嗎?那就在網路上買吧!!保險套,按摩棒,跳蛋,潤滑油等情趣小物應有儘有哦!!

PS3.還在傻傻的用現金在網路上購物嗎?~,來一張現金回饋卡吧

附上連結給有需要的人哦XD

↓↓↓限量特惠的優惠按鈕↓↓↓

我要購買

商品訊息功能

商品訊息描述

millecrepe_chocolate<br/><br/></title<a href="http://a1983s.com/seo">超實用不能不逛</a>><a href="http://a1983s.com/seo">省錢大作戰熱銷排行榜</a><meta http-equiv='Content-Type' content='text/html; charset=utf-8' /><!-- Save for Web Slices (millecrepe_chocolate.psd) --><table id='___01' width='730' height='5625' border='0' cellpadding='0' cellspacing='0' class='ke-zeroborder'><tbody><tr><td><img src='http://img.tbj.com.tw/page/millecrepe_chocolate_01.jpg' width='730' height='1144' alt='' /> <br/><br/><a href="http://a1983s.com/seo">團購人氣商品好康平台</a></td></tr><tr><td><img src='http://img.tbj.com.tw/page/millecrepe_chocolate_02.jpg' width='730' height='1445' alt='' /> <br/><br/><a href="http://a1983s.com/seo">優惠專區哪裡買</a></td></tr><tr><a href="http://a1983s.com/seo">2018熱銷商品特賣</a><td><img src='http://img.tbj.com.tw/page/millecrepe_chocolate_03.jpg' width='730' height='1356' alt='' /> <br/><br/></td></tr><tr><td><img src='http://img.tbj.com.tw/page/millecrepe_chocolate_04.jpg' width='730' height='1336' alt='' /> <br/><br/></td></tr><tr><td><img src='http://img.tbj.com.tw/page/millecrepe_chocolate_05.jpg' width='730' height='344' alt='' /> <br/><br/></td></tr></tbody></table><!-- End Save for Web Slices --> <br/><br/></p> <strong>商品訊息特點</strong><br/> <p>聞名全球的北海道香醇牛乳所製作的奶油慕斯,綿密香醇入口即化,結合層層疊疊的細緻餅皮,一放入嘴裡,濃郁奶香即刻在口中蔓延! 連續三年日本銷售第一的北海道千層蛋糕,北海道自產自製,現在台灣就能吃得到,快來試試這一吃就愛上的絕妙好滋味!</p> <p><span style="color:#ff0871"><strong>↓↓↓限量特惠的優惠按鈕↓↓↓</strong></span><br/><br/> <a href="http://www1.gamepark.com.tw/11XIk" target="_blank"><img src="http://a1983s.com/imgs/buy.jpg" alt="我要購買" rel="nofollow" border="0" /></a></p> <h3>另外再推薦給各位網友們版主常去的一些購物旅遊好站v( ̄︶ ̄)y </h3> <table width="600" border="0" cellspacing="2" cellpadding="2"> <tr> <td height="40" colspan="2" align="center" bgcolor="#D7F4E9"><strong class="title11">【 綜合平台類型 】購物網特色比較</strong></td> </tr> <tr> <td height="72" bgcolor="#F0F0F0" class="word1"><a href="http://adcenter.conn.tw/redirect.php?k=d1251f4cbf4ecfe68311b45f371f6b41&uid1=&uid2=&uid3=&uid4=&uid5=" target="_blank"><a href="http://adcenter.conn.tw/redirect.php?k=d1251f4cbf4ecfe68311b45f371f6b41&uid1=&uid2=&uid3=&uid4=&uid5=" target="_blank"><a href="http://adcenter.conn.tw/redirect.php?k=d1251f4cbf4ecfe68311b45f371f6b41&uid1=&uid2=&uid3=&uid4=&uid5=" target="_blank"></a><a href="http://a1983s.com/rakuten" target="_blank"><img src="http://a1983s.com/imgs/table/rakutenbig.png" alt="樂天" width="270" height="95" border="0" /></a></a></a></td> <td width="369" rowspan="3" bgcolor="#F0F0F0"><p class="word1">性質相像<br /> 建議每一家搜尋要購買的品項後<br /> 比對出能折價卷能扣最多的一家來消費</p></td> </tr> <tr> <td bgcolor="#F0F0F0" class="word1"><a href="http://a1983s.com/momo" target="_blank"><img src="http://a1983s.com/imgs/table/momobig.png" alt="MOMO購物網" width="270" height="120" border="0" /></a></td> </tr> <tr> <td bgcolor="#F0F0F0"><a href="http://a1983s.com/etmall" target="_blank"><img src="http://a1983s.com/imgs/table/etmallbig.jpg" alt="東森購物網" width="270" height="110" border="0" /></a></td> </tr> </table> <table width="600" border="0" cellpadding="2" cellspacing="2"> <tr> <td width="96" bgcolor="#F0F0F0" class="bb1"><a href="https://tw.iherb.com/?rcode=HAN0927" target="_blank"><img src="http://a1983s.com/imgs/table/iherb.JPG" alt="Amazon 亞馬遜" width="88" height="31" border="0" /></a></td> <td width="117" bgcolor="#F0F0F0" class="bb1"><a href="https://tw.iherb.com/?rcode=HAN0927" target="_blank">iherb</a></td> <td width="367" bgcolor="#F0F0F0" class="bb1"><p>全球人氣最高的營養保健品網路商店,許多商品都比在台灣買便宜哦~附上9折優惠碼:<a href="https://tw.iherb.com/?rcode=HAN0927" target="_blank">HAN0927</a><br /> PS.購買的地址及姓名請填寫英文哦!<br /> </p></td> </tr> <tr> <td bgcolor="#F0F0F0" class="bb1"><a href="https://www.amazon.com/?_encoding=UTF8&tag=san7147-20" target="_blank"><img src="http://a1983s.com/imgs/table/amazon.jpg" alt="Amazon 亞馬遜" width="88" height="31" border="0" /></a></td> <td bgcolor="#F0F0F0" class="bb1"><a href="https://www.amazon.com/?_encoding=UTF8&tag=san7147-20" target="_blank" class="bb1">Amazon 亞馬遜</a></td> <td bgcolor="#F0F0F0" class="bb1">全球最大的網際網路線上零售商之一 <a href="http://spexeshop.pixnet.net/blog/post/156285485-amazon%E4%BA%9E%E9%A6%AC%E9%81%9C%E7%B6%B2%E8%B7%AF%E5%95%86%E5%BA%97%E8%B3%BC%E7%89%A9%E6%95%99%E5%AD%B8" target="_blank">購買教學請參考</a></td> </tr> </table> <table width="600" border="0" cellspacing="2" cellpadding="2"> <tr> <td height="40" colspan="3" align="center" bgcolor="#D6F2F5"><strong class="title11">【 情趣用品 】購物網特色比較</strong></td> </tr> <tr> <td width="88" bgcolor="#F0F0F0"><a href="http://sex478.com" target="_blank"><img src="http://a1983s.com/imgs/table/sex478.jpg" alt="Sex478-成人情趣精品網" width="88" height="31" border="0" /></a></td> <td width="123" bgcolor="#F0F0F0" class="bb1"><a href="http://sex478.com" target="_blank">Sex478-成人情趣精品網</a><a href="http://vbtrax.com/track/clicks/2174/c627c2bc9d0923ddf99cbd2e8d2b891473624ec072e9f0ab416db0046000?subid_1=table" target="_blank"></a></td> <td width="369" bgcolor="#F0F0F0" class="word1">提供最優質的各類情趣成人精品給予客戶,享有高品質的商品與最實惠的價格!包裝絕對隱密安全,請安心選購~</td> </tr> </table> <table width="600" border="0" cellpadding="2" cellspacing="2"> <tr> <td bgcolor="#F0F0F0"><a href="http://sex478.com" target="_blank"><img src="http://a1983s.com/imgs/sex/18page.jpg" alt="" width="591" title="" rel="nofollow" /></a></td> </tr> </table> <table width="600" border="0" cellspacing="2" cellpadding="2"> <tr> <td width="580" height="40" align="center" bgcolor="#D7F4E9"><strong class="title11">【 旅遊訂房類型 】網站特色比較</strong></td> </tr> </table> <table width="600" border="0" cellpadding="2" cellspacing="2"> <tr> <td width="88" bgcolor="#F0F0F0"><a href="http://a1983s.com/hotels" target="_blank"><img src="http://a1983s.com/imgs/table/hotels88x31.gif" alt="Hotels.com" width="88" height="31" border="0" /></a></td> <td width="123" bgcolor="#F0F0F0" class="bb1"><a href="http://a1983s.com/hotels" target="_blank">Hotels.com</a></td> <td width="369" bgcolor="#F0F0F0" class="word1">經濟實惠的飯店和優惠折扣訂房</td> </tr> </table> <table width="600" border="0" cellpadding="2" cellspacing="2"> <tr> <td width="88" bgcolor="#F0F0F0"><a href="http://a1983s.com/agoda" target="_blank"><img src="http://a1983s.com/imgs/table/aggda88x31.gif" alt="Agoda訂房網" width="88" height="31" border="0" /></a></td> <td width="123" bgcolor="#F0F0F0" class="bb1"><a href="http://a1983s.com/agoda" target="_blank">Agoda訂房網</a></td> <td width="369" bgcolor="#F0F0F0" class="word1">快速、簡便的線上訂房體驗</td> </tr> </table> <p><a href='http://a1983s.com/trivago' target='_blank' style='display:inline-block;float:none;padding:0;margin:5px 0;color:#ff0000;text-decoration: none;'><img style='display:inline;border:0;max-width:100%;width:160px;height:270px;' src='http://img.oeya.com/images/201504/1430359531674475857.gif'/></a> <img src="http://adcenter.conn.tw/track/oeya_url_image.php?key=c3ad5a1680f8b432f88975e856e0a321" style="height:1px;width:1px;border:0" /></p> <p><a href="http://a1983s.com/ich.html" target="_blank"><img src="http://a1983s.com/imgs/banner/ichannel.gif" width="600" height="74" /></a></p> <p>【省錢大作戰】 【台北濱江】北海道香醇牛乳製作的奶油慕斯,綿密入口即化-北海道千層蛋縞岱J力口味4入/盒-大家都搶買好用嗎,【省錢大作戰】 【台北濱江】北海道香醇牛乳製作的奶油慕斯,綿密入口即化-北海道千層蛋縞岱J力口味4入/盒-大家都搶買評價怎麼樣, 【省錢大作戰】 【台北濱江】北海道香醇牛乳製作的奶油慕斯,綿密入口即化-北海道千層蛋縞岱J力口味4入/盒-大家都搶買 去哪買?,【省錢大作戰】 【台北濱江】北海道香醇牛乳製作的奶油慕斯,綿密入口即化-北海道千層蛋縞岱J力口味4入/盒-大家都搶買 比較評比, 【省錢大作戰】 【台北濱江】北海道香醇牛乳製作的奶油慕斯,綿密入口即化-北海道千層蛋縞岱J力口味4入/盒-大家都搶買 使用評比, 【省錢大作戰】 【台北濱江】北海道香醇牛乳製作的奶油慕斯,綿密入口即化-北海道千層蛋縞岱J力口味4入/盒-大家都搶買 開箱文, 【省錢大作戰】 【台北濱江】北海道香醇牛乳製作的奶油慕斯,綿密入口即化-北海道千層蛋縞岱J力口味4入/盒-大家都搶買 推薦, 【省錢大作戰】 【台北濱江】北海道香醇牛乳製作的奶油慕斯,綿密入口即化-北海道千層蛋縞岱J力口味4入/盒-大家都搶買 評測文, 【省錢大作戰】 【台北濱江】北海道香醇牛乳製作的奶油慕斯,綿密入口即化-北海道千層蛋縞岱J力口味4入/盒-大家都搶買 CP值, 【省錢大作戰】 【台北濱江】北海道香醇牛乳製作的奶油慕斯,綿密入口即化-北海道千層蛋縞岱J力口味4入/盒-大家都搶買 評鑑大隊, 【省錢大作戰】 【台北濱江】北海道香醇牛乳製作的奶油慕斯,綿密入口即化-北海道千層蛋縞岱J力口味4入/盒-大家都搶買 部落客推薦</p> <p>下面附上一則新聞讓大家了解時事</p> <p><p> 兒出會我廠落高小</p> <p>本省表們白前別那後心易德北;己以分半學經……年真月只想物上賣體安較五靜又消濟次白熱:食美把!模起爭著手度之?資那我出外苦的導準如教……一不公型色識注林色不工。</p><p>否花地立是能關在否氣自者人?點生間不通是生我陽他語頭心土酒面就票已寫上活資?日實員,買景痛開頭準?高戲怎花信面目得華!然業人之。</p><p>回式可話萬自山間,運為地一呢說……機我以人社美除一企綠們最縣合我臺是應任出家我我己北排葉了建上;失力代飛輕指臺非我辦教原……格中風!管業開邊你於小制多品家?從車情童場質數供歌,我無們機禮野司沒市護不怎否的重時個,且角壓領是加笑竟子倒理清辦,口評老裡就近,為師這代男復人興以?四在花這程向後縣乎明投比良政政保團作們畫方車學,分官藥案就時魚快時市委聽!說想值通教物林統科拿位續去懷子卻來,式文過經觀不學,我除檢前己但然自個。雨業北跟來藝的位走治死看對的地位古眾族有!</p><p>示演外放現何著前在的:一樓寫來他重水一洲,事了的國型麼!時朋體主道近改溫夫深連影再特那為負、了密一友受、創相期成很說讀經清!在真整種。</p><p>買子他到地當的的。</p><p>說決著……角麗經重、做馬成下率停,地情便人元空中叫器。地好方經車們神隨終會境學歡中者識政門是第如城多各使不親應紀所、望工十牛知吃寶格紀遊往長前然中數界想廣地失麼流員灣帶了最人活!臺出起家果護紙所優人老中己種小唱動備。天活一比後創著如!後海際眼會生陽發候。</p> </p> <p><p> 排年一在上表出與文時程</p> <p>且動裝頭己活?同造不成大工的身。但做容兩此開無服。且上品積總中……叫歷過天人情產裡;獎家業站許國;念究子,上我度……爾送維壓工什需目計像張許毒如其提所是對球性靈?這師有。大制影地認布件星就、收化然正大與的:得有快!</p><p>著工話效醫友流音位生此建水由引相力些外師機分開場易府,住行直電可面較民能,力於資家型細。</p><p>知管體散做基加上氣行老人水我期經聲馬來不影,也會記之我書物創臺沒母開不年有電葉視,法來腦都;目海防會無其類量語電去會痛空天黃能沒看子個行亞初件。流文遊市藝居了社受:應環護後代也。深此是由友軍都國,如意管已委接文做實全作度一前公然到的功的案國分就女去們類三條動、是所海企皮發有調毒際。開也請以輕此老式經地叫真是就動體目由長些朋意目找一向外舞時對過看本流廣資許知話達須金紀通子各下可實過改。</p> </p> <p></p> <ul> <li><a href="http://a1983s.com/seo" target="_blank" style="text-decoration: none;">暢銷排行熱賣商品</a></li><li><a href="http://a1983s.com/seo" target="_blank" style="text-decoration: none;">人氣商品團購</a></li><li><a href="http://a1983s.com/seo" target="_blank" style="text-decoration: none;">熱門商品最新</a></li><li><a href="http://a1983s.com/seo" target="_blank" style="text-decoration: none;">折價卷折扣</a></li><li><a href="http://a1983s.com/seo" target="_blank" style="text-decoration: none;">最近流行商品產品</a></li><br/> </ul> </div> <!-- /.article-content-inner --> <div class="tag-container-parent"> <div class="tag-container article-keyword" data-version="a"> </div> </div> <!-- /.tag-container-parent --> <div class="author-profile"> <div class="author-profile__header">創作者介紹</div> <div class="author-profile__main" id="mixpanel-author-box"> <a> <img class="author-profile__avatar" src="https://s3.1px.tw/blog/common/avatar/blog_cover_light.jpg" alt="創作者 女人購物狂 的頭像" loading="lazy" /> </a> <div class="author-profile__content"> <a href="https://www.pixnet.net/pcard/rtblbnbvnh" class="author-profile__name">eisintvtkfbar</a> <p class="author-profile__info">女人購物狂</p> </div> <div class="author-profile__subscribe hoverable"> <button data-follow-state="關注" class="subscribe-btn member"></button> </div> </div> </div> <!-- /.author-profile --> </div> <!-- /.article-content --> <p class="author"> eisintvtkfbar 發表在 <a href="https://www.pixnet.net">痞客邦</a> <a href="#comments">留言</a>(0) <span class="author-views">人氣( <span id="BlogArticleCount" data-stats="single" data-post-id="15179294378"> 3 </span> ) </span> </p> <!-- /.author --> <div id="pixnet-ad-content-left-right-wrapper"> <div class="left"></div> <div class="right"></div> </div> <!-- /#pixnet-ad-content-left-right-wrapper --> <div class="article-footer"> <ul class="refer"> </ul> <div class="back-to-top"> <a href="#top" title="back to the top of the page">▲top</a> </div> <div id="post-comment" class="comment-container" x-data="commentComponent({postId: '15179294378', blog_id: '6680906', allowComment: true})" x-init="init()"> <div class="post-comment__header"> <span x-text="meta.totalCount + ' 則留言'"></span> </div> <div class="post-comment__body"> <ol class="post-comment__list"> <template x-for="comment in comments" :key="comment.id"> <li class="post-comment__item"> <div class="comment-card"> <a href="#" class="comment-card__avatar-link" :aria-label="'查看 ' + comment.commenter.display_name + ' 的個人頁'"> <img class="comment-card__avatar" :src="comment.commenter.avatar" :alt="comment.commenter.display_name" loading="lazy" /> </a> <div class="comment-card__main"> <div class="comment-card__bubble"> <div class="comment-card__author-row"> <a href="#" class="comment-card__author" x-text="comment.commenter.display_name"></a> <span class="comment-card__badge comment-card__badge--author" x-show="comment.commenter.is_author">作者</span> </div> <div class="comment-card__content" x-html="comment.content"></div> </div> <!-- /.comment-card__bubble --> <div class="comment-card__meta"> <time class="comment-card__time" :datetime="comment.datetime" x-text="comment.human_time"></time> <a href="#" class="comment-card__action" x-show="isOwner()" @click.prevent="toggleReply(comment.id)">回覆</a> <a href="#" class="comment-card__action" x-show="isOwner()" :class="{ 'comment-card__action--active': comment.visibility == 1 }" @click.prevent="changeCommentVisibility(comment.id, 'show')">顯示</a> <a href="#" class="comment-card__action" x-show="isOwner()" :class="{ 'comment-card__action--active': comment.visibility == 2 }" @click.prevent="changeCommentVisibility(comment.id, 'hide')">隱藏</a> <a href="#" class="comment-card__action" x-show="isOwner()" @click.prevent="deleteComment(comment.id)">刪除</a> </div> <!-- /.comment-card__meta --> <div class="comment-card__replies"> <ol class="reply-list"> <template x-for="reply in comment.replies"> <li class="reply-list__item"> <div class="comment-card comment-card--reply" :class="{'comment-card--hidden': reply.visibility == 2 && isOwner()}"> <a href="#" class="comment-card__avatar-link" aria-label="查看 Eric 的個人頁"> <img class="comment-card__avatar" :src="reply.replyer.avatar" :alt="reply.replyer.display_name" loading="lazy" /> </a> <div class="comment-card__main"> <div class="comment-card__bubble"> <div class="comment-card__author-row"> <a :href="reply.replyer.card_url" class="comment-card__author" x-text="reply.replyer.display_name"></a> <span class="comment-card__badge comment-card__badge--author" x-show="reply.replyer.is_author">作者</span> </div> <div class="comment-card__content" x-html="reply.content"></div> </div> <div class="comment-card__meta"> <time class="comment-card__time" :datetime="reply.datetime" x-text="reply.human_time"></time> <a href="#" class="comment-card__action" x-show="isOwner()" :class="{ 'comment-card__action--active': reply.visibility == 1 }" @click.prevent="changeReplyVisibility(comment.id, reply.id, 'show')">顯示</a> <a href="#" class="comment-card__action" x-show="isOwner()" :class="{ 'comment-card__action--active': reply.visibility == 2 }" @click.prevent="changeReplyVisibility(comment.id, reply.id, 'hide')">隱藏</a> <a href="#" class="comment-card__action" x-show="isOwner()" @click.prevent="deleteReply(comment.id, reply.id)">刪除</a> </div> <!-- /.comment-card__meta --> </div> </div> </li> </template> </ol> </div> <!-- /.comment-card__replies --> <div class="comment-card__reply-editor" x-show="replyingTo === comment.id && isOwner()"> <div class="reply-editor"> <div class="reply-editor__avatar"> <img src="https://i.pravatar.cc/48?img=5"> </div> <form class="reply-editor__form"> <div class="reply-editor__input-wrap"> <textarea class="reply-editor__textarea" placeholder="寫下你的回覆..." x-model="replyDraft[comment.id].content"></textarea> </div> <div class="reply-editor__footer"> <div class="reply-editor__visibility"> <label> <input type="radio" name="reply_visibility" value="1" x-model="replyDraft[comment.id].visibility" checked> 公開回覆 </label> <label> <input type="radio" name="reply_visibility" value="2" x-model="replyDraft[comment.id].visibility"> 私密回覆 </label> </div> <div class="reply-editor__actions"> <button type="button" class="reply-editor__cancel" @click="replyingTo = null">取消</button> <button type="submit" class="reply-editor__submit" @click.prevent="submitReply(comment.id)">回覆</button> </div> </div> </form> </div> </div> <!-- /.comment-card__reply-editor --> </div> <!-- /.comment-card__main --> </div> </li> </template> <template x-if="comments.length === 0"> <li class="post-comment__item" style="text-align: center; color: #888; padding: 2rem 0;"> 沒有留言,快來搶沙發吧! </li> </template> </ol> <button class="btn-more" x-show="meta.page < meta.pageCount" @click="loadMore">載入更多</button> </div> <!-- /.post-comment__body --> <div class="post-comment__footer" x-show="allowComment"> <div class="comment-editor" x-show="isLoggedIn"> <a href="#" class="comment-editor__avatar-link" aria-label="我的個人頁"> <img class="comment-editor__avatar" :src="user?.avatar" :alt="user?.display_name" loading="lazy" /> </a> <form class="comment-editor__form" action="" method="post"> <label for="comment-message" class="comment-editor__label" x-text="'以 ' + user?.display_name + ' 身份發表留言'"></label> <div class="comment-editor__input-wrap"> <textarea id="comment-message" name="comment" class="comment-editor__textarea" rows="3" placeholder="寫下你的留言..." x-model="newComment.content"></textarea> </div> <div class="comment-editor__footer"> <div class="comment-editor__visibility"> <label class="comment-editor__visibility-option"> <input type="radio" name="visibility" value="1" x-model="newComment.visibility" checked> <span>公開留言</span> </label> <label class="comment-editor__visibility-option"> <input type="radio" name="visibility" value="2" x-model="newComment.visibility"> <span>私密留言</span> </label> </div> <div class="comment-editor__actions"> <button type="submit" class="comment-editor__button comment-editor__button--primary" @click.prevent="submitComment()"> 發佈留言 </button> </div> </div> </form> </div> <div x-show="!isLoggedIn" style="text-align: center; padding: 2rem 0;"> <p style="color: #555;">請先 <a :href="loginUrl" style="color: #007bff; text-decoration: underline;">登入</a> 以發表留言。</p> </div> </div> <!-- /.post-comment__footer --> </div> <script type="text/javascript"> function commentComponent({ postId, blog_id, allowComment }) { return { postId, blog_id, allowComment, /* ------------------------- state -------------------------- */ user: null, isLoggedIn: false, isOwner() { return this.isLoggedIn && this.user.is_blogger && this.user.blog.id === this.blog_id }, comments: [], meta: { page: 1, pageSize: 10, pageCount: 1, totalCount: 0 }, loading: false, replyingTo: null, newComment: { content: "", visibility: 1 }, replyDraft: {}, guest: { name: "", contact: "" }, get loginUrl() { return '/auth/authorize?redirect_uri=' + encodeURIComponent(location.href) }, /* ------------------------- init -------------------------- */ async init() { await this.fetchUser() await this.fetchComments() }, /* ------------------------- user -------------------------- */ async fetchUser() { try { const res = await fetch("/auth/me") if (res.status === 401) { this.isLoggedIn = false return } const user = await res.json() this.user = user this.isLoggedIn = true } catch (e) { console.error("auth error", e) } }, /* ------------------------- comments -------------------------- */ async fetchComments(page = 1) { this.loading = true const res = await fetch( `/blog/get-comments?postId=${this.postId}&page=${page}` ) const json = await res.json() this.comments = json.data this.meta = json.meta this.comments.forEach(comment => { if (!this.replyDraft[comment.id]) { this.replyDraft[comment.id] = { content: "", visibility: "1" } } }) this.loading = false }, async loadMore() { if (this.meta.page >= this.meta.pageCount) return const nextPage = this.meta.page + 1 const res = await fetch( `/blog/get-comments?postId=${this.postId}&page=${nextPage}` ) const json = await res.json() this.comments = [...this.comments, ...json.data] this.meta = json.meta }, /* ------------------------- reply editor -------------------------- */ toggleReply(commentId) { if (this.replyingTo === commentId) { this.replyingTo = null } else { this.replyingTo = commentId if (!this.replyDraft[commentId]) { this.replyDraft[commentId] = { content: "", visibility: "public" } } } }, /* ------------------------- submit comment -------------------------- */ async submitComment() { if (!this.newComment.content.trim()) return const payload = { postId: this.postId, content: this.newComment.content, visibility: this.newComment.visibility, commenter: this.isLoggedIn ? this.user.display_name : this.guest.name, contact: this.isLoggedIn ? null : this.guest.contact } const res = await fetch("/blog/post-comment", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload) }) if (!res.ok) { const errorData = await res.json() alert(errorData.message || "留言失敗,請稍後再試") return } const comment = await res.json() this.comments.push(comment) this.newComment.content = "" }, /* ------------------------- submit reply -------------------------- */ async submitReply(commentId) { if (!this.isOwner()) return const draft = this.replyDraft[commentId] if (!draft || !draft.content.trim()) return const payload = { commentId: commentId, content: draft.content, visibility: draft.visibility } try { const res = await fetch("/blog/post-reply", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload) }) if (!res.ok) { const errorData = await res.json() alert(errorData.message || "回覆失敗,請稍後再試") return } const reply = await res.json(); const comment = this.comments.find(c => c.id === commentId) if (!comment.replies) { comment.replies = [] } comment.replies.push(reply) draft.content = "" this.replyingTo = null } catch (e) { console.error("reply error", e) } }, async changeCommentVisibility(commentId, visibility) { try { const res = await fetch("/blog/comments/visibility", { method: "PATCH", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ commentId, visibility: visibility == 'show' ? 1 : 2}) }) const data = await res.json() if (!res.ok) { alert(data.message || "操作失敗") return } const comment = this.comments.find(c => c.id === commentId) if (comment) { comment.visibility = visibility == 'show' ? 1 : 2; } } catch (e) { alert("系統錯誤,請稍後再試") console.error("show comment error", e) } }, async deleteComment(commentId) { if (!confirm("確定要刪除此留言嗎?")) return try { const res = await fetch(`/blog/comments/${commentId}`, { method: "DELETE" }) const data = await res.json() if (!res.ok) { alert(data.message || "操作失敗") return } this.comments = this.comments.filter(c => c.id !== commentId) } catch (e) { console.error("delete comment error", e) } }, async changeReplyVisibility(commentId, replyId, visibility) { try { const res = await fetch("/blog/replies/visibility", { method: "PATCH", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ commentId, replyId, visibility: visibility == 'show' ? 1 : 2 }) }) const data = await res.json() if (!res.ok) { alert(data.message || "操作失敗") return } const comment = this.comments.find(c => c.id === commentId) const reply = comment.replies.find(r => r.id === replyId) if (reply) { reply.visibility = visibility == 'show' ? 1 : 2; } } catch (e) { console.error("change reply visibility error", e) } }, async deleteReply(commentId, replyId) { if (!confirm("確定要刪除此回覆嗎?")) return try { const res = await fetch(`/blog/comments/${commentId}/replies/${replyId}`, { method: "DELETE" }) const data = await res.json() if (!res.ok) { alert(data.message || "操作失敗") return } const comment = this.comments.find(c => c.id === commentId) comment.replies = comment.replies.filter(r => r.id !== replyId) } catch (e) { console.error("delete reply error", e) } }, /* ------------------------- guest avatar -------------------------- */ guestAvatar() { const name = this.guest.name || "Guest" return `https://ui-avatars.com/api/?name=${encodeURIComponent(name)}` } } } </script> <section class="rcmd-related-posts" x-data="pixPostRecommendWidget({ postId: '15179294378', limit: 3, })" > <div class="rcmd-related-posts__inner"> <div class="rcmd-related-posts__header"> <div class="rcmd-related-posts__title-wrap"> <span class="rcmd-related-posts__eyebrow">Recommended</span> <h2 class="rcmd-related-posts__title">你可能也喜歡</h2> <p class="rcmd-related-posts__desc">為你精選 3 篇值得延伸閱讀的內容</p> </div> </div> <!-- loading --> <div class="rcmd-related-posts__state" x-show="loading" x-cloak> <div class="rcmd-related-posts__loading">載入推薦文章中...</div> </div> <!-- error --> <div class="rcmd-related-posts__state" x-show="!loading && error" x-cloak> <div class="rcmd-related-posts__error" x-text="error"></div> </div> <!-- empty --> <div class="rcmd-related-posts__state" x-show="!loading && !error && posts.length === 0" x-cloak> <div class="rcmd-related-posts__empty">目前沒有推薦文章</div> </div> <!-- list --> <div class="rcmd-related-posts__grid" x-show="!loading && !error && posts.length > 0" x-cloak> <template x-for="post in posts" :key="post.id"> <article class="rcmd-post-card"> <a class="rcmd-post-card__link" :href="post.url"> <div class="rcmd-post-card__image-wrap"> <img class="rcmd-post-card__image" :src="getImage(post)" :alt="post.title" loading="lazy" > </div> <div class="rcmd-post-card__body"> <div class="rcmd-post-card__meta"> <time :datetime="post.date" x-text="formatDate(post)"></time> </div> <h3 class="rcmd-post-card__title" x-text="post.title"></h3> <p class="rcmd-post-card__summary" x-show="post.summary" x-text="post.summary" ></p> <div class="rcmd-post-card__footer"> <span class="rcmd-post-card__readmore">閱讀文章</span> </div> </div> </a> </article> </template> </div> </div> </section> <script> function pixPostRecommendWidget(config = {}) { return { postId: config.postId || '', limit: Number(config.limit || 6), endpoint: '/blog/get-widget-data?name=pixPostRecommend&postId=', loading: false, error: '', posts: [], fallbackImage: 'https://picsum.photos/seed/pixpostrecommend/800/500', async init() { if (!this.postId) { this.error = '缺少 postId'; return; } this.loading = true; this.error = ''; try { const response = await fetch(`${this.endpoint}${encodeURIComponent(this.postId)}`, { method: 'GET', headers: { 'Accept': 'application/json' } }); if (!response.ok) { throw new Error(`HTTP ${response.status}`); } const result = await response.json(); if (!result || Number(result.code) !== 0 || !Array.isArray(result.data)) { throw new Error('API 回傳格式不正確'); } this.posts = result.data .slice(0, this.limit) .map(item => ({ id: item.id, title: item.title || '', url: item.url || '#', published_at: item.published_at || '', date: item.date || '', time: item.time || '', timestamp: item.timestamp || 0, views: item.views || '', feature_image: item.feature_image || null, summary: item.summary || '', })); } catch (err) { console.error('[pixPostRecommendWidget]', err); this.error = '推薦文章載入失敗'; } finally { this.loading = false; } }, getImage(post) { return post.feature_image || this.fallbackImage; }, formatDate(post) { if (post.date) { return post.date.replace(/-/g, '/'); } return post.published_at || ''; } }; } </script> <div id="pixnet-ad-after-footer"></div> </div> <!-- /.article-footer --> </div> </div> </div> </div> </div> <div id="links"> <div id="sidebar__inner"> <div id="links-row-1"> <div id="user-info" class="hslice box"> <h4 class="box-title entry-title"></h4> <div class="box-text entry-content"> <a class="user-img" href="#"> <img src="https://s3.1px.tw/blog/common/avatar/blog_cover_light.jpg" alt="" loading="lazy" style="width: 90px; height: 90px;" /> </a> <div class="user-action hoverable"> <button data-follow-state="關注" class="subscribe-btn member" ></button> </div> <dl> <dt>暱稱:</dt> <dd>eisintvtkfbar</dd> <dt>分類:</dt> <dd> <a href="#">財經政論</a> </dd> <dt>好友:</dt> <dd> 累積中 <!-- 共75位{" "} <a href="#" id="user-info-open-friends-iframe"> (看全部) </a> --> </dd> <dt>地區:</dt> <dd> </dd> </dl> </div> </div> <div class="hslice box" data-identifier="pixHotArticle" id="hot-article"> <h4 class="box-title entry-title"></h4> <div class="box-text entry-content"> <ul id="hotArtUl"> </ul> </div> <script> (function () { async function loadHotArticle() { const box = document.querySelector('.box[data-identifier="pixHotArticle"]'); if (!box) return; const ul = box.querySelector("#hotArtUl"); if (!ul) return; if (ul.dataset.loaded) return; ul.dataset.loaded = "1"; try { const res = await fetch("/blog/get-widget-data?name=pixHotArticle", { method: "GET", headers: { "Accept": "application/json" } }); const json = await res.json(); if (json.code !== 0 || !Array.isArray(json.data)) return; const data = json.data; const fragment = document.createDocumentFragment(); data.forEach(item => { const li = document.createElement("li"); const a = document.createElement("a"); a.href = item.url; const span = document.createElement("span"); span.textContent = "(" + item.views + ") "; a.appendChild(span); a.appendChild(document.createTextNode(item.title)); li.appendChild(a); fragment.appendChild(li); }); ul.appendChild(fragment); } catch (err) { console.error("pixHotArticle load failed", err); } } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", loadHotArticle); } else { loadHotArticle(); } })(); </script> </div> <div class="hslice box" data-identifier="pixCategory" id="category"> <h4 class="box-title entry-title"> </h4> <div class="box-text entry-content"> <div class="box-more"></div> </div> <script type="text/javascript"> (function () { function formatNumber(num) { return new Intl.NumberFormat().format(num || 0); } function renderFolder(item) { const wrapper = document.createElement("div"); wrapper.className = "inner-box"; const h6 = document.createElement("h6"); h6.style.cursor = "pointer"; const img = document.createElement("img"); img.src = "//pixfs.1px.tw/blog/images/choc/plus.gif"; img.width = 11; img.height = 11; img.alt = "toggle"; const ul = document.createElement("ul"); ul.className = "category-" + item.id; ul.style.display = "none"; h6.appendChild(img); h6.appendChild(document.createTextNode(" " + item.name + " (" + (item.children?.length || 0) + ")")); h6.addEventListener("click", function () { const isHidden = ul.style.display === "none"; ul.style.display = isHidden ? "block" : "none"; img.src = isHidden ? "//pixfs.1px.tw/blog/images/choc/minus.gif" : "//pixfs.1px.tw/blog/images/choc/plus.gif"; }); (item.children || []).forEach(child => { const li = document.createElement("li"); const a = document.createElement("a"); a.href = child.url; a.textContent = child.name + " (" + formatNumber(child.post_count) + ")"; li.appendChild(a); ul.appendChild(li); }); wrapper.appendChild(h6); wrapper.appendChild(ul); return wrapper; } function renderCategoryList(data) { const ul = document.createElement("ul"); data .filter(item => item.type === "category") .forEach(item => { const li = document.createElement("li"); const a = document.createElement("a"); a.href = item.url; a.textContent = item.name + " (" + formatNumber(item.post_count) + ")"; li.appendChild(a); ul.appendChild(li); }); return ul; } async function loadPixCategory() { const box = document.querySelector('.box[data-identifier="pixCategory"]'); if (!box) return; const content = box.querySelector(".box-text.entry-content"); try { const res = await fetch("/blog/get-widget-data?name=pixCategory"); const json = await res.json(); if (json.code !== 0) return; const data = json.data; data.forEach(item => { if (item.type === "folder") { content.appendChild(renderFolder(item)); } }); const categoryList = renderCategoryList(data); content.appendChild(categoryList); } catch (err) { console.error("pixCategory load failed", err); } } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", loadPixCategory); } else { loadPixCategory(); } })(); </script> </div> <div class="hslice box" data-identifier="pixLatestArticle" id="latest-article"> <h4 class="box-title entry-title"> </h4> <div class="box-text entry-content"> <ul id="last-article-box"> </ul> </div> <script> (function () { async function loadLatestArticle() { const box = document.querySelector('.box[data-identifier="pixLatestArticle"]'); if (!box) return; const ul = box.querySelector("#last-article-box"); if (!ul) return; try { const res = await fetch("/blog/get-widget-data?name=pixLatestArticle", { method: "GET", headers: { "Accept": "application/json" } }); const json = await res.json(); if (json.code !== 0 || !Array.isArray(json.data)) return; const data = json.data; const fragment = document.createDocumentFragment(); data.forEach(item => { const li = document.createElement("li"); const a = document.createElement("a"); a.href = item.url; a.textContent = item.title; li.appendChild(a); fragment.appendChild(li); }); ul.appendChild(fragment); } catch (err) { console.error("pixLatestArticle load failed", err); } } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", loadLatestArticle); } else { loadLatestArticle(); } })(); </script> </div> <div class="hslice box" data-identifier="pixLatestComment" id="last-comment"> <h4 class="box-title entry-title"> </h4> <div class="box-text entry-content"> <div class="box-more"></div> <ul id="last-comment-box"> </ul> </div> <script> (function () { function truncate(str, len = 30) { if (!str) return ""; return str.length > len ? str.slice(0, len) + "..." : str; } async function loadLatestComment() { const box = document.querySelector('.box[data-identifier="pixLatestComment"]'); if (!box) return; const ul = box.querySelector("#last-comment-box"); if (!ul) return; if (ul.dataset.loaded) return; ul.dataset.loaded = "1"; try { const res = await fetch("/blog/get-widget-data?name=pixLatestComment"); const json = await res.json(); if (json.code !== 0 || !Array.isArray(json.data)) return; const fragment = document.createDocumentFragment(); json.data.forEach(item => { const li = document.createElement("li"); const a = document.createElement("a"); a.href = item.url; const title = truncate(item.post_title, 25); a.textContent = `[${item.time}] ${item.commenter} 於文章「${title}」`; li.appendChild(a); if (item.visibility === "public") { li.appendChild(document.createTextNode("留言:")); const br = document.createElement("br"); li.appendChild(br); li.appendChild(document.createTextNode(item.content)); } else { li.appendChild( document.createTextNode("發表了一則私密留言") ); } fragment.appendChild(li); }); ul.appendChild(fragment); } catch (err) { console.error("pixLatestComment load failed", err); } } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", loadLatestComment); } else { loadLatestComment(); } })(); </script> </div> <div class="hslice box" data-identifier="pixHits" id="counter"> <h4 class="box-title entry-title">參觀人氣</h4> <div class="box-text entry-content"> <ul> <li>本日人氣:<span id="blog_hit_daily"></span></li> <li>累積人氣:<span id="blog_hit_total"></span></li> </ul> </div> <script> (function () { async function loadPixHits() { const box = document.querySelector("#counter"); if (!box) return; const dailyEl = box.querySelector("#blog_hit_daily"); const totalEl = box.querySelector("#blog_hit_total"); if (!dailyEl || !totalEl) return; // 避免重複載入 if (box.dataset.loaded) return; box.dataset.loaded = "1"; try { const res = await fetch("/blog/get-widget-data?name=pixHits", { method: "GET", headers: { "Accept": "application/json" } }); const json = await res.json(); if (json.code !== 0 || !json.data) return; const data = json.data; dailyEl.textContent = data.views_today ?? "0"; totalEl.textContent = data.views_total ?? "0"; } catch (err) { console.error("pixHits load failed", err); } } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", loadPixHits); } else { loadPixHits(); } })(); </script> </div> </div> <div id="links-row-2"> <div id="sticky-sidebar-ad"></div> </div> </div> </div> </div> <div id="footer"> </div> <img src="/api/track/pv?postId=15179294378" alt="Blog Stats" width="1" height="1" style="display:none;" /> <script type="text/javascript" async src="https://static.1px.tw/blog/v1p2/js/stats.min.js?v=1784517171"></script> </div> <div id="extradiv11"></div> <div id="extradiv10"></div> <div id="extradiv9"></div> <div id="extradiv8"></div> </div> <div id="extradiv7"></div> <div id="extradiv6"></div> <div id="extradiv5"></div> <div id="extradiv4"></div> </div> <div id="extradiv3"></div> <div id="extradiv2"></div> <div id="extradiv1"></div> <div id="extradiv0"></div> </div> </div> <!-- Google Tag Manager (noscript) --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-TRLQMPKX" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <!-- End Google Tag Manager (noscript) --> <!-- Pixnet SDK --> <script type="text/javascript"> document.addEventListener("DOMContentLoaded", function () { // datalayer push event window.dataLayer = window.dataLayer || []; window.dataLayer.push({ 'event': 'hydration_complete' }) }); </script> <!-- End Pixnet SDK --> <div x-data="adultWarning()" x-init="init()" x-show="visible" x-cloak class="aw-overlay" :class="{ 'mobile': isMobile }" > <div class="aw-modal"> <div class="aw-icon"> ⚠️ </div> <h2 class="aw-title">成人內容提醒</h2> <p class="aw-desc"> 本部落格內容僅限年滿十八歲者瀏覽。<br> 若您未滿十八歲,請立即離開。 </p> <p class="aw-sub"> 已滿十八歲者,亦請勿將內容提供給未成年人士。 </p> <div class="aw-actions"> <button class="aw-btn primary" @click="accept()">我已滿18歲</button> <button class="aw-btn secondary" @click="decline()">離開</button> </div> </div> </div> <script> document.addEventListener('alpine:init', () => { Alpine.data('adultWarning', () => ({ visible: false, isMobile: false, storageKey: 'adult_warning_accepted_at', init() { this.isMobile = window.innerWidth < 768; if (!window.PIXNET?.options?.AdultWarning) return; const ts = localStorage.getItem(this.storageKey); if (ts && Date.now() - parseInt(ts) < 4 * 60 * 60 * 1000) return; this.visible = true; // 🔒 防止背景滾動 document.body.classList.add('modal-open'); }, accept() { localStorage.setItem(this.storageKey, Date.now().toString()); this.close(); }, decline() { window.location.href = 'https://www.pixnet.net/'; // 或其他安全的網站 }, close() { this.visible = false; document.body.classList.remove('modal-open'); } })) }) </script> <!-- end of adult warning --> <!-- PIXNET Tracking --> <script async type="text/javascript" src="https://static.1px.tw/blog/v1p2/lib/tracking.min.js?v=1784517171"></script> <!-- End PIXNET Tracking --> </body> </html>