productDetails.html 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599
  1. {extend name="base" /}
  2. {block name="title"}GoodsDetail{/block}
  3. {block name="styles"}
  4. <link rel="stylesheet" href="/assets/index/css/productDetails.css?t=11101">
  5. {/block}
  6. {block name="mainArea"}
  7. <section class="sectionContainer">
  8. <div class="elementorContainer">
  9. <!-- 产品模块 -->
  10. <section class="productContainer">
  11. <!-- 产品图片 -->
  12. <div class="productImgContainer">
  13. <div class="prViewImgBox">
  14. <img class="prViewImg lazy" src="/assets/index/asstes/icon/transparent.png"
  15. data-original="{$goods.goods_image}" alt="">
  16. </div>
  17. <div class="prImgContainer">
  18. <div class="prImgList">
  19. {foreach $goods.goods_images as $img}
  20. <div class="prImgItem">
  21. <img class="lazy" src="/assets/index/asstes/icon/transparent.png"
  22. data-original="{$img.preview_url}" alt="">
  23. </div>
  24. {/foreach}
  25. </div>
  26. <div class="prevArrow">&lt;</div>
  27. <div class="nextArrow">&gt;</div>
  28. </div>
  29. </div>
  30. <!-- 产品信息 -->
  31. <div class="productInfoContainer">
  32. <div>
  33. <h1 class="productTitle">{$goods.goods_name}</h1>
  34. <div class="productPrice">
  35. <p><span>$</span>{$goods.goods_price_min}</p>
  36. </div>
  37. </div>
  38. <div>
  39. <!-- 口味 -->
  40. <!-- 新增开始 -->
  41. <div class="tasteContainer">
  42. <div class="tasteItem" data-id="0">Choose {$goods.selling_point} Flavors Here:<span id="totalNum">0</span></div>
  43. <div class="tasteItem" data-id="1">
  44. <div class="tasteNumberBox">
  45. <div class="tasteReduce">-</div>
  46. <input class="tasteInput" id="STRAWBERRY-MANGO-NUM" value="0" disabled type="text">
  47. <div class="tasteAdd">+</div>
  48. </div>
  49. <img class="tasteImg lazy" src="/assets/index/asstes/flavors/STRAWBERRY-MANGO.jpg"
  50. data-original="/assets/index/asstes/flavors/STRAWBERRY-MANGO.jpg" alt="">
  51. <p class="tasteTitle">STRAWBERRY MANGO</p>
  52. </div>
  53. <div class="tasteItem" data-id="2">
  54. <div class="tasteNumberBox">
  55. <div class="tasteReduce">-</div>
  56. <input class="tasteInput" id="BLUE-RAZZ-ICE-NUM" value="0" disabled type="text">
  57. <div class="tasteAdd">+</div>
  58. </div>
  59. <img class="tasteImg lazy" src="/assets/index/asstes/flavors/BLUE-RAZZ-ICE.jpg"
  60. data-original="/assets/index/asstes/flavors/BLUE-RAZZ-ICE.jpg" alt="BLUE RAZZ ICE">
  61. <p class="tasteTitle">BLUE RAZZ ICE</p>
  62. </div>
  63. <div class="tasteItem" data-id="3">
  64. <div class="tasteNumberBox">
  65. <div class="tasteReduce">-</div>
  66. <input class="tasteInput" id="WATERMELON-NUM" value="0" disabled type="text">
  67. <div class="tasteAdd">+</div>
  68. </div>
  69. <img class="tasteImg lazy" src="/assets/index/asstes/flavors/WATERMELON.jpg"
  70. data-original="/assets/index/asstes/flavors/WATERMELON.jpg" alt="WATERMELON">
  71. <p class="tasteTitle">WATERMELON</p>
  72. </div>
  73. <div class="tasteItem" data-id="4">
  74. <div class="tasteNumberBox">
  75. <div class="tasteReduce">-</div>
  76. <input class="tasteInput" id="GRAPE-NUM" value="0" disabled type="text">
  77. <div class="tasteAdd">+</div>
  78. </div>
  79. <img class="tasteImg lazy" src="/assets/index/asstes/flavors/GRAPE.jpg"
  80. data-original="/assets/index/asstes/flavors/GRAPE.jpg" alt="">
  81. <p class="tasteTitle">GRAPE</p>
  82. </div>
  83. <div class="tasteItem" data-id="5">
  84. <div class="tasteNumberBox">
  85. <div class="tasteReduce">-</div>
  86. <input class="tasteInput" id="KIWI-PASSION-FRUIT-GUAVA-NUM" value="0" disabled type="text">
  87. <div class="tasteAdd">+</div>
  88. </div>
  89. <img class="tasteImg lazy" src="/assets/index/asstes/flavors/KIWI-PASSIONFRUIT-GUAVA.jpg"
  90. data-original="/assets/index/asstes/flavors/KIWI-PASSIONFRUIT-GUAVA.jpg" alt="">
  91. <p class="tasteTitle">KIWI-PASSION-FRUIT-GUAVA</p>
  92. </div>
  93. <div class="tasteItem" data-id="6">
  94. <div class="tasteNumberBox">
  95. <div class="tasteReduce">-</div>
  96. <input class="tasteInput" id="JUICY-PEACH-NUM" value="0" disabled type="text">
  97. <div class="tasteAdd">+</div>
  98. </div>
  99. <img class="tasteImg lazy" src="/assets/index/asstes/flavors/JUICY-PEACH.jpg"
  100. data-original="/assets/index/asstes/flavors/JUICY-PEACH.jpg" alt="">
  101. <p class="tasteTitle">JUICY-PEACH</p>
  102. </div>
  103. <div class="tasteItem" data-id="7">
  104. <div class="tasteNumberBox">
  105. <div class="tasteReduce">-</div>
  106. <input class="tasteInput" id="BLUEBERRY-ICE-NUM" value="0" disabled type="text">
  107. <div class="tasteAdd">+</div>
  108. </div>
  109. <img class="tasteImg lazy" src="/assets/index/asstes/flavors/BLUEBERRY-ICE.jpg"
  110. data-original="/assets/index/asstes/flavors/BLUEBERRY-ICE.jpg" alt="">
  111. <p class="tasteTitle">BLUEBERRY-ICE</p>
  112. </div>
  113. </div>
  114. <!-- 新增结束 -->
  115. <!-- 数量 -->
  116. <div class="productNContainer">
  117. <div class="productNumberBox">
  118. <div class="numberReduce">-</div>
  119. <input id="numberInput" value="1" type="text"/>
  120. <div class="numberAdd">+</div>
  121. </div>
  122. <div class="addToCart">
  123. <p class="tag">+</p>
  124. <p>Add To Cart</p>
  125. </div>
  126. </div>
  127. <div class="safeContainer">
  128. <p class="safeTag">Guaranteed Safe Checkout</p>
  129. <div class="safeList">
  130. <div class="safeItem">
  131. <img src="/assets/index/asstes/logo/mastercard.svg"
  132. alt="">
  133. </div>
  134. <div class="safeItem">
  135. <img src="/assets/index/asstes/logo/amex.svg"
  136. alt="">
  137. </div>
  138. <div class="safeItem">
  139. <img src="/assets/index/asstes/logo/paypal.svg"
  140. alt="">
  141. </div>
  142. <div class="safeItem">
  143. <img src="/assets/index/asstes/logo/visa.svg"
  144. alt="">
  145. </div>
  146. </div>
  147. </div>
  148. </div>
  149. </div>
  150. </section>
  151. <!-- 文案模块 -->
  152. <article class="articleContainer">
  153. <div class="articleTabBox">
  154. <div class="articleTabItem active" data-type="description">
  155. <p class="tabTag"></p>
  156. <h2 class="articleTabTitle">Description</h2>
  157. </div>
  158. <div class="articleTabItem" data-type="reviews">
  159. <p class="tabTag"></p>
  160. <h2 class="articleTabTitle">Reviews ({$comment_total})</h2>
  161. </div>
  162. </div>
  163. <!-- 商品详情容器 -->
  164. <div class="articleInfo" id="articleInfo">
  165. <h2 class="articleTitle">Product description</h2>
  166. <div id="richTextContainer"></div>
  167. </div>
  168. <!-- 评价内容容器 -->
  169. <div id="reviewsInfo">
  170. <div id="reviews">
  171. </div>
  172. <div id="loadingIndicator">loading...</div>
  173. <div id="reviewsButtonContainer">
  174. <div id="reviewsButtonBox">
  175. <div id="prevPage">Prev page</div>
  176. <div id="nextPage">Next page</div>
  177. </div>
  178. </div>
  179. </div>
  180. </article>
  181. <!-- 悬浮底部模块 -->
  182. <section class="fixedAddSection">
  183. <div class="fixedAddContainer">
  184. <div class="elementorContainer">
  185. <div class="fixedAddBox">
  186. <div class="fPrInfo">
  187. <img class="img lazy" src="/assets/index/asstes/icon/transparent.png"
  188. data-original="https://www.buranshao.com/Content/Img/iqos3duo.jpg" alt="">
  189. <h3 class="fTitle">{$goods.goods_name}</h3>
  190. </div>
  191. <div class="fPrNumberContainer">
  192. <p class="fPrPrice">${$goods.goods_price_min}</p>
  193. <div class="fPrNumberBox">
  194. <div class="fPrNumberReduce">-</div>
  195. <input id="fPrNumberInput" value="1" type="text"/>
  196. <div class="fPrNumberAdd">+</div>
  197. </div>
  198. <div class="fPrAddToCart">
  199. <p class="tag">+</p>
  200. <p>Add To Cart</p>
  201. </div>
  202. </div>
  203. </div>
  204. </div>
  205. </div>
  206. </section>
  207. </div>
  208. </section>
  209. {/block}
  210. {block name="scriptSrc"}
  211. <script>
  212. $(document).ready(function () {
  213. //触屏事件 || 点击事件
  214. const tap = "ontouchstart" in window ? "touchstart" : "click";
  215. var goodsId = {$goods.goods_id};
  216. var goodsSkuId = {$goods['skuList'][0]['goods_sku_id']};
  217. var key = "{$key}";
  218. const VAPES_SHARE_KEY = "vapes_share_key"
  219. if (key != "") {
  220. localStorage.setItem(VAPES_SHARE_KEY, key);
  221. }
  222. //
  223. var needFlavorCnt = {$goods.selling_point};
  224. needFlavorCnt = parseInt(needFlavorCnt)
  225. var flavors = {
  226. 'STRAWBERRY-MANGO': 0,
  227. 'BLUE-RAZZ-ICE': 0,
  228. 'WATERMELON': 0,
  229. 'GRAPE': 0,
  230. 'KIWI-PASSION-FRUIT-GUAVA': 0,
  231. 'JUICY-PEACH': 0,
  232. 'BLUEBERRY-ICE': 0
  233. };
  234. flavors["STRAWBERRY-MANGO"] = 2;
  235. console.log(needFlavorCnt);
  236. console.log(key);
  237. //富文本处理
  238. function initRichText() {
  239. $("#richTextContainer").html(`{$goods.content | raw}`)
  240. }
  241. /**
  242. * 添加购物车
  243. * @param number 数量
  244. * @param flavors 口味
  245. * @returns
  246. */
  247. function addCart(number, flavors) {
  248. if (!number || number <= 0) {
  249. showToast("Please enter the quantity of products")
  250. return
  251. }
  252. const localKey = localStorage.getItem(VAPES_SHARE_KEY);
  253. var dp = {
  254. goodsId: goodsId,
  255. goodsSkuId: goodsSkuId,
  256. goodsNum: number,
  257. flavors: flavors,
  258. key: localKey
  259. }
  260. $.ajax({
  261. url: "/index/cart/add",
  262. headers: {platform: 'H5'},
  263. dataType: 'json',
  264. data: JSON.stringify(dp),
  265. type: "POST",
  266. contentType: 'application/json',
  267. success: function (obj) {
  268. //注册成功后进入
  269. if (obj.status === 200 || obj.status === '200') {
  270. showToast("Successful")
  271. window.location.href = '/index/cart/shoppingCart.html';
  272. return
  273. } else if (obj.status === 401 || obj.status === '401') {
  274. window.location.replace('/index/passport/login.html')
  275. } else {
  276. showToast(obj.message)
  277. }
  278. }
  279. })
  280. }
  281. /**
  282. * 吐司提示
  283. * @param message 消息
  284. * @returns
  285. */
  286. function showToast(message) {
  287. var toastElement = $('#toastContainer');
  288. toastElement.text(message);
  289. toastElement.stop(true, true).fadeIn(200).delay(2000).fadeOut(200);
  290. }
  291. //商品数量减少
  292. $('.numberReduce, .fPrNumberReduce').click(function () {
  293. var container = $(this).closest('.productNumberBox, .fPrNumberBox');
  294. var inputElement = container.find('#numberInput, #fPrNumberInput');
  295. var currentValue = parseInt(inputElement.val());
  296. if (currentValue > 1) {
  297. inputElement.val(currentValue - 1);
  298. var totalMoney = {$goods.goods_price_min} * (currentValue - 1)
  299. $('.fPrPrice').html('$' + totalMoney.toFixed(2))
  300. }
  301. });
  302. //商品数量增加
  303. $('.numberAdd, .fPrNumberAdd').click(function () {
  304. var container = $(this).closest('.productNumberBox, .fPrNumberBox');
  305. var inputElement = container.find('#numberInput, #fPrNumberInput');
  306. var currentValue = parseInt(inputElement.val());
  307. inputElement.val(currentValue + 1);
  308. var totalMoney = {$goods.goods_price_min} * (currentValue + 1)
  309. console.log(totalMoney)
  310. $('.fPrPrice').html('$' + totalMoney.toFixed(2))
  311. });
  312. // 输入框禁止为空小于等于0
  313. //$('#numberInput, #fPrNumberInput').change(function () {
  314. $('#numberInput, #fPrNumberInput,.tasteInput').change(function () {
  315. var inputElement = $(this);
  316. var currentValue = parseInt(inputElement.val());
  317. if (currentValue < 1 || isNaN(currentValue)) {
  318. inputElement.val(1);
  319. }
  320. });
  321. //上面的添加按钮
  322. $(".addToCart").on(tap, function () {
  323. const number = $('#numberInput').val();
  324. // 新增开始
  325. var totalValue = 0;
  326. var STRAWBERRY_MANGO_Num = parseInt($('#STRAWBERRY-MANGO-NUM').val());
  327. flavors["STRAWBERRY-MANGO"] = STRAWBERRY_MANGO_Num
  328. totalValue += STRAWBERRY_MANGO_Num;
  329. var BLUE_RAZZ_ICE_Num = parseInt($('#BLUE-RAZZ-ICE-NUM').val());
  330. totalValue += BLUE_RAZZ_ICE_Num;
  331. flavors["BLUE-RAZZ-ICE"] = BLUE_RAZZ_ICE_Num
  332. var WATERMELON_Num = parseInt($('#WATERMELON-NUM').val());
  333. totalValue += WATERMELON_Num;
  334. flavors["WATERMELON"] = WATERMELON_Num
  335. var KIWI_PASSION_Num = parseInt($('#KIWI-PASSION-FRUIT-GUAVA-NUM').val());
  336. totalValue += KIWI_PASSION_Num;
  337. flavors["KIWI-PASSION-FRUIT-GUAVA"] = KIWI_PASSION_Num
  338. var JUICY_PEACH_Num = parseInt($('#JUICY-PEACH-NUM').val());
  339. totalValue += JUICY_PEACH_Num;
  340. flavors["JUICY-PEACH"] = JUICY_PEACH_Num
  341. var GRAPE_Num = parseInt($('#GRAPE-NUM').val());
  342. totalValue += GRAPE_Num;
  343. flavors["GRAPE"] = GRAPE_Num
  344. var BLUEBERRY_ICE_Num = parseInt($('#BLUEBERRY-ICE-NUM').val());
  345. totalValue += BLUEBERRY_ICE_Num;
  346. flavors["BLUEBERRY-ICE"] = BLUEBERRY_ICE_Num
  347. /* $(".tasteItem").each(function () {
  348. var id = $(this).data("id");
  349. var value = parseInt($(this).find(".tasteInput").val()) || 0;
  350. totalValue += value;
  351. console.log("ID:", id, "Value:", value);
  352. });*/
  353. console.log("Total Value:", totalValue);
  354. console.log("flavors Value:", flavors);
  355. if (totalValue !== needFlavorCnt || totalValue != needFlavorCnt){
  356. showToast('You should choose '+ needFlavorCnt +' flavor first for one pack')
  357. return
  358. }
  359. // 新增结束
  360. addCart(number, flavors)
  361. });
  362. //悬浮模块的添加按钮
  363. $(".fPrAddToCart").on(tap, function () {
  364. const number = $('#fPrNumberInput').val();
  365. // 新增开始
  366. var totalValue = 0;
  367. var STRAWBERRY_MANGO_Num = parseInt($('#STRAWBERRY-MANGO-NUM').val());
  368. flavors["STRAWBERRY-MANGO"] = STRAWBERRY_MANGO_Num
  369. totalValue += STRAWBERRY_MANGO_Num;
  370. var BLUE_RAZZ_ICE_Num = parseInt($('#BLUE-RAZZ-ICE-NUM').val());
  371. totalValue += BLUE_RAZZ_ICE_Num;
  372. flavors["BLUE-RAZZ-ICE"] = BLUE_RAZZ_ICE_Num
  373. var WATERMELON_Num = parseInt($('#WATERMELON-NUM').val());
  374. totalValue += WATERMELON_Num;
  375. flavors["WATERMELON"] = WATERMELON_Num
  376. var KIWI_PASSION_Num = parseInt($('#KIWI-PASSION-FRUIT-GUAVA-NUM').val());
  377. totalValue += KIWI_PASSION_Num;
  378. flavors["KIWI-PASSION-FRUIT-GUAVA"] = KIWI_PASSION_Num
  379. var JUICY_PEACH_Num = parseInt($('#JUICY-PEACH-NUM').val());
  380. totalValue += JUICY_PEACH_Num;
  381. flavors["JUICY-PEACH"] = JUICY_PEACH_Num
  382. var GRAPE_Num = parseInt($('#GRAPE-NUM').val());
  383. totalValue += GRAPE_Num;
  384. flavors["GRAPE"] = GRAPE_Num
  385. var BLUEBERRY_ICE_Num = parseInt($('#BLUEBERRY-ICE-NUM').val());
  386. totalValue += BLUEBERRY_ICE_Num;
  387. flavors["BLUEBERRY-ICE"] = BLUEBERRY_ICE_Num
  388. console.log("Total Value:", totalValue);
  389. console.log("flavors Value:", flavors);
  390. if (totalValue !== needFlavorCnt || totalValue != needFlavorCnt){
  391. showToast('You should choose '+ needFlavorCnt +' flavor first for one pack')
  392. return
  393. }
  394. addCart(number, flavors)
  395. });
  396. initRichText()
  397. //页码
  398. let page = 1;
  399. //总页数
  400. let totalPage = {$comment_total}
  401. //页数
  402. let itemsPerPage = 10;
  403. //加载中
  404. let isLoading = false;
  405. //详情 & 评论切换
  406. $(".articleTabItem").on(tap, function () {
  407. const type = $(this).attr("data-type")
  408. $(this).addClass("active").siblings().removeClass("active")
  409. // 评论
  410. if (type === "reviews") {
  411. $("#reviewsInfo").show(0)
  412. $("#articleInfo").hide(0)
  413. getReviews()
  414. page = 1
  415. } else {
  416. // 详情
  417. $("#articleInfo").show(0)
  418. $("#reviewsInfo").hide(0)
  419. }
  420. });
  421. //上一页
  422. $("#prevPage").on(tap, function () {
  423. if (page > 1) {
  424. page--
  425. } else {
  426. page = 1
  427. }
  428. getReviews()
  429. });
  430. //下一页
  431. $("#nextPage").on(tap, function () {
  432. if (page >= totalPage) {
  433. page = totalPage
  434. } else {
  435. page++
  436. }
  437. getReviews()
  438. });
  439. // 获取评价列表
  440. function getReviews() {
  441. if (isLoading) {
  442. return;
  443. }
  444. isLoading = true;
  445. // 显示加载指示器
  446. $('#loadingIndicator').show();
  447. //调试后记得去除这段代码
  448. $.ajax({
  449. url: '/index/comment/listPage?goodsId=' + goodsId,
  450. type: 'GET',
  451. data: {
  452. page: page,
  453. per_page: itemsPerPage
  454. },
  455. success: function (response) {
  456. console.log(response.data)
  457. const data = response.data.list.data
  458. // 在页面中添加数据
  459. const container = $('#reviews');
  460. //var html = container.html();
  461. var html = '';
  462. //container.html("")
  463. $.each(data, function (index, item) {
  464. const rating = item.score / 10;
  465. let starHtml = "";
  466. for (let i = 0; i < 5; i++) {
  467. if (i < rating) {
  468. starHtml += '<img src="/assets/index/asstes/icon/selStar.png" alt="">';
  469. } else {
  470. starHtml += '<img src="/assets/index/asstes/icon/star.png" alt="">';
  471. }
  472. }
  473. html += `
  474. <div class="reviewItem">
  475. <div class="userInfo">
  476. <div class="userImg">
  477. <img src="https://himg.bdimg.com/sys/portrait/item/tb.1.772a23f6.WIunUru1_286k2Q9BG9SJg" alt="">
  478. </div>
  479. <p class="userName">${item.user.nick_name}</p>
  480. </div>
  481. <div class="reInfo">
  482. <div class="starBox">${starHtml}
  483. </div>
  484. <h3 class="reviewValues">${item.content}</h3>
  485. </div>
  486. </div>`;
  487. });
  488. container.html(html);
  489. //数据长度大于0显示上下页按钮
  490. //$('#reviewsButtonContainer').show();
  491. console.log(response.data.list.last_page, page, response.data.list.last_page > page)
  492. if (response.data.list.last_page > page) {
  493. $("#nextPage").show()
  494. } else {
  495. $("#nextPage").hide()
  496. }
  497. if (page > 1) {
  498. $("#prevPage").show()
  499. } else {
  500. $("#prevPage").hide()
  501. }
  502. // 隐藏加载指示器
  503. $('#loadingIndicator').hide();
  504. isLoading = false;
  505. },
  506. error: function () {
  507. // 处理错误情况
  508. console.log('请求数据失败');
  509. // 隐藏加载指示器
  510. $('#loadingIndicator').hide();
  511. isLoading = false;
  512. }
  513. });
  514. }
  515. // 新增开始
  516. var totalNumEle = $('#totalNum')
  517. //口味数量减少
  518. $(".tasteReduce").on(tap, function () {
  519. var inputElement = $(this).siblings('.tasteInput');
  520. var currentValue = parseInt(inputElement.val()) || 0;
  521. if (currentValue >= 1) {
  522. inputElement.val(currentValue - 1);
  523. var oldTotalNum = parseInt(totalNumEle.html())
  524. totalNumEle.html(oldTotalNum - 1)
  525. }
  526. });
  527. //口味数量增加
  528. $(".tasteAdd").on(tap, function () {
  529. var oldTotalNum = parseInt(totalNumEle.html())
  530. if (oldTotalNum >= needFlavorCnt){
  531. showToast('You have chosen enough flavors')
  532. return
  533. }
  534. var inputElement = $(this).siblings('.tasteInput');
  535. var currentValue = parseInt(inputElement.val()) || 0;
  536. inputElement.val(currentValue + 1);
  537. totalNumEle.html(oldTotalNum + 1)
  538. });
  539. // 新增结束
  540. });
  541. </script>
  542. {/block}