if (typeof ai_cookie_js !== 'undefined') { /*! js-cookie v3.0.5 | MIT */ ; (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (function () { var current = global.Cookies; var exports = global.Cookies = factory(); exports.noConflict = function () { global.Cookies = current; return exports; }; })()); })(this, (function () { 'use strict'; /* eslint-disable no-var */ function assign (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { target[key] = source[key]; } } return target } /* eslint-enable no-var */ /* eslint-disable no-var */ var defaultConverter = { read: function (value) { if (value[0] === '"') { value = value.slice(1, -1); } return value.replace(/(%[\dA-F]{2})+/gi, decodeURIComponent) }, write: function (value) { return encodeURIComponent(value).replace( /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g, decodeURIComponent ) } }; /* eslint-enable no-var */ /* eslint-disable no-var */ function init (converter, defaultAttributes) { function set (name, value, attributes) { if (typeof document === 'undefined') { return } attributes = assign({}, defaultAttributes, attributes); if (typeof attributes.expires === 'number') { attributes.expires = new Date(Date.now() + attributes.expires * 864e5); } if (attributes.expires) { attributes.expires = attributes.expires.toUTCString(); } name = encodeURIComponent(name) .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent) .replace(/[()]/g, escape); var stringifiedAttributes = ''; for (var attributeName in attributes) { if (!attributes[attributeName]) { continue } stringifiedAttributes += '; ' + attributeName; if (attributes[attributeName] === true) { continue } // Considers RFC 6265 section 5.2: // ... // 3. If the remaining unparsed-attributes contains a %x3B (";") // character: // Consume the characters of the unparsed-attributes up to, // not including, the first %x3B (";") character. // ... stringifiedAttributes += '=' + attributes[attributeName].split(';')[0]; } return (document.cookie = name + '=' + converter.write(value, name) + stringifiedAttributes) } function get (name) { if (typeof document === 'undefined' || (arguments.length && !name)) { return } // To prevent the for loop in the first place assign an empty array // in case there are no cookies at all. var cookies = document.cookie ? document.cookie.split('; ') : []; var jar = {}; for (var i = 0; i < cookies.length; i++) { var parts = cookies[i].split('='); var value = parts.slice(1).join('='); try { var found = decodeURIComponent(parts[0]); jar[found] = converter.read(value, found); if (name === found) { break } } catch (e) {} } return name ? jar[name] : jar } return Object.create( { set, get, remove: function (name, attributes) { set( name, '', assign({}, attributes, { expires: -1 }) ); }, withAttributes: function (attributes) { return init(this.converter, assign({}, this.attributes, attributes)) }, withConverter: function (converter) { return init(assign({}, this.converter, converter), this.attributes) } }, { attributes: { value: Object.freeze(defaultAttributes) }, converter: { value: Object.freeze(converter) } } ) } var api = init(defaultConverter, { path: '/' }); /* eslint-enable no-var */ return api; })); /*! * JavaScript Cookie v2.2.0 * https://github.com/js-cookie/js-cookie * * Copyright 2006, 2015 Klaus Hartl & Fagner Brack * Released under the MIT license */ /* ;(function (factory) { var registeredInModuleLoader; if (typeof define === 'function' && define.amd) { define(factory); registeredInModuleLoader = true; } if (typeof exports === 'object') { module.exports = factory(); registeredInModuleLoader = true; } if (!registeredInModuleLoader) { var OldCookies = window.Cookies; var api = window.Cookies = factory(); api.noConflict = function () { window.Cookies = OldCookies; return api; }; } }(function () { function extend () { var i = 0; var result = {}; for (; i < arguments.length; i++) { var attributes = arguments[ i ]; for (var key in attributes) { result[key] = attributes[key]; } } return result; } function decode (s) { return s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent); } function init (converter) { function api() {} function set (key, value, attributes) { if (typeof document === 'undefined') { return; } attributes = extend({ path: '/', sameSite: 'Lax' }, api.defaults, attributes); if (typeof attributes.expires === 'number') { attributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5); } // We're using "expires" because "max-age" is not supported by IE attributes.expires = attributes.expires ? attributes.expires.toUTCString() : ''; try { var result = JSON.stringify(value); if (/^[\{\[]/.test(result)) { value = result; } } catch (e) {} value = converter.write ? converter.write(value, key) : encodeURIComponent(String(value)) .replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent); key = encodeURIComponent(String(key)) .replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent) .replace(/[\(\)]/g, escape); var stringifiedAttributes = ''; for (var attributeName in attributes) { if (!attributes[attributeName]) { continue; } stringifiedAttributes += '; ' + attributeName; if (attributes[attributeName] === true) { continue; } // Considers RFC 6265 section 5.2: // ... // 3. If the remaining unparsed-attributes contains a %x3B (";") // character: // Consume the characters of the unparsed-attributes up to, // not including, the first %x3B (";") character. // ... stringifiedAttributes += '=' + attributes[attributeName].split(';')[0]; } return (document.cookie = key + '=' + value + stringifiedAttributes); } function get (key, json) { if (typeof document === 'undefined') { return; } var jar = {}; // To prevent the for loop in the first place assign an empty array // in case there are no cookies at all. var cookies = document.cookie ? document.cookie.split('; ') : []; var i = 0; for (; i < cookies.length; i++) { var parts = cookies[i].split('='); var cookie = parts.slice(1).join('='); if (!json && cookie.charAt(0) === '"') { cookie = cookie.slice(1, -1); } try { var name = decode(parts[0]); cookie = (converter.read || converter)(cookie, name) || decode(cookie); if (json) { try { cookie = JSON.parse(cookie); } catch (e) {} } jar[name] = cookie; if (key === name) { break; } } catch (e) {} } return key ? jar[key] : jar; } api.set = set; api.get = function (key) { return get(key, false /* read as raw * /); }; api.getJSON = function (key) { return get(key, true /* read as json * /); }; api.remove = function (key, attributes) { set(key, '', extend(attributes, { expires: -1 })); }; api.defaults = {}; api.withConverter = init; return api; } return init(function () {}); })); */ AiCookies = Cookies.noConflict(); function ai_json_data (cookie) { if (cookie == null) { return cookie; } if (cookie.charAt (0) === '"') { cookie = cookie.slice (1, -1); } try { cookie = JSON.parse (cookie); } catch (e) {} return cookie; } ai_check_block = function (block) { // var ai_debug = typeof ai_debugging !== 'undefined'; // 1 var ai_debug = false; if (block == null) { return true; } var ai_cookie_name = 'aiBLOCKS'; // ### // var ai_cookie = AiCookies.getJSON (ai_cookie_name); var ai_cookie = ai_json_data (AiCookies.get (ai_cookie_name)); ai_debug_cookie_status = ''; if (ai_cookie == null) { ai_cookie = {}; } if (typeof ai_delay_showing_pageviews !== 'undefined') { if (!ai_cookie.hasOwnProperty (block)) { ai_cookie [block] = {}; } if (!ai_cookie [block].hasOwnProperty ('d')) { ai_cookie [block]['d'] = ai_delay_showing_pageviews; if (ai_debug) console.log ('AI CHECK block', block, 'NO COOKIE DATA d, delayed for', ai_delay_showing_pageviews, 'pageviews'); } } if (ai_cookie.hasOwnProperty (block)) { for (var cookie_block_property in ai_cookie [block]) { if (cookie_block_property == 'x') { var code_hash = ''; var block_object = document.querySelectorAll ('span[data-ai-block="'+block+'"]') [0] if ("aiHash" in block_object.dataset) { code_hash = block_object.dataset.aiHash; } var cookie_code_hash = ''; if (ai_cookie [block].hasOwnProperty ('h')) { cookie_code_hash = ai_cookie [block]['h']; } if (ai_debug) console.log ('AI CHECK block', block, 'x cookie hash', cookie_code_hash, 'code hash', code_hash); var date = new Date(); var closed_for = ai_cookie [block][cookie_block_property] - Math.round (date.getTime() / 1000); if (closed_for > 0 && cookie_code_hash == code_hash) { var message = 'closed for ' + closed_for + ' s = ' + (Math.round (10000 * closed_for / 3600 / 24) / 10000) + ' days'; ai_debug_cookie_status = message; if (ai_debug) console.log ('AI CHECK block', block, message); if (ai_debug) console.log (''); return false; } else { if (ai_debug) console.log ('AI CHECK block', block, 'removing x'); ai_set_cookie (block, 'x', ''); if (!ai_cookie [block].hasOwnProperty ('i') && !ai_cookie [block].hasOwnProperty ('c')) { ai_set_cookie (block, 'h', ''); } } } else if (cookie_block_property == 'd') { if (ai_cookie [block][cookie_block_property] != 0) { var message = 'delayed for ' + ai_cookie [block][cookie_block_property] + ' pageviews'; ai_debug_cookie_status = message; if (ai_debug) console.log ('AI CHECK block', block, message); if (ai_debug) console.log (''); return false; } } else if (cookie_block_property == 'i') { var code_hash = ''; var block_object = document.querySelectorAll ('span[data-ai-block="'+block+'"]') [0] if ("aiHash" in block_object.dataset) { code_hash = block_object.dataset.aiHash; } var cookie_code_hash = ''; if (ai_cookie [block].hasOwnProperty ('h')) { cookie_code_hash = ai_cookie [block]['h']; } if (ai_debug) console.log ('AI CHECK block', block, 'i cookie hash', cookie_code_hash, 'code hash', code_hash); if (ai_cookie [block][cookie_block_property] == 0 && cookie_code_hash == code_hash) { var message = 'max impressions reached'; ai_debug_cookie_status = message; if (ai_debug) console.log ('AI CHECK block', block, message); if (ai_debug) console.log (''); return false; } else if (ai_cookie [block][cookie_block_property] < 0 && cookie_code_hash == code_hash) { var date = new Date(); var closed_for = - ai_cookie [block][cookie_block_property] - Math.round (date.getTime() / 1000); if (closed_for > 0) { var message = 'max imp. reached (' + Math. round (10000 * closed_for / 24 / 3600) / 10000 + ' days = ' + closed_for + ' s)'; ai_debug_cookie_status = message; if (ai_debug) console.log ('AI CHECK block', block, message); if (ai_debug) console.log (''); return false; } else { if (ai_debug) console.log ('AI CHECK block', block, 'removing i'); ai_set_cookie (block, 'i', ''); if (!ai_cookie [block].hasOwnProperty ('c') && !ai_cookie [block].hasOwnProperty ('x')) { if (ai_debug) console.log ('AI CHECK block', block, 'cookie h removed'); ai_set_cookie (block, 'h', ''); } } } } if (cookie_block_property == 'ipt') { if (ai_cookie [block][cookie_block_property] == 0) { var date = new Date(); var timestamp = Math.round (date.getTime() / 1000); var closed_for = ai_cookie [block]['it'] - timestamp; if (closed_for > 0) { var message = 'max imp. per time reached (' + Math. round (10000 * closed_for / 24 / 3600) / 10000 + ' days = ' + closed_for + ' s)'; ai_debug_cookie_status = message; if (ai_debug) console.log ('AI CHECK block', block, message); if (ai_debug) console.log (''); return false; } } } if (cookie_block_property == 'c') { var code_hash = ''; var block_object = document.querySelectorAll ('span[data-ai-block="'+block+'"]') [0] if ("aiHash" in block_object.dataset) { code_hash = block_object.dataset.aiHash; } var cookie_code_hash = ''; if (ai_cookie [block].hasOwnProperty ('h')) { cookie_code_hash = ai_cookie [block]['h']; } if (ai_debug) console.log ('AI CHECK block', block, 'c cookie hash', cookie_code_hash, 'code hash', code_hash); if (ai_cookie [block][cookie_block_property] == 0 && cookie_code_hash == code_hash) { var message = 'max clicks reached'; ai_debug_cookie_status = message; if (ai_debug) console.log ('AI CHECK block', block, message); if (ai_debug) console.log (''); return false; } else if (ai_cookie [block][cookie_block_property] < 0 && cookie_code_hash == code_hash) { var date = new Date(); var closed_for = - ai_cookie [block][cookie_block_property] - Math.round (date.getTime() / 1000); if (closed_for > 0) { var message = 'max clicks reached (' + Math. round (10000 * closed_for / 24 / 3600) / 10000 + ' days = ' + closed_for + ' s)'; ai_debug_cookie_status = message; if (ai_debug) console.log ('AI CHECK block', block, message); if (ai_debug) console.log (''); return false; } else { if (ai_debug) console.log ('AI CHECK block', block, 'removing c'); ai_set_cookie (block, 'c', ''); if (!ai_cookie [block].hasOwnProperty ('i') && !ai_cookie [block].hasOwnProperty ('x')) { if (ai_debug) console.log ('AI CHECK block', block, 'cookie h removed'); ai_set_cookie (block, 'h', ''); } } } } if (cookie_block_property == 'cpt') { if (ai_cookie [block][cookie_block_property] == 0) { var date = new Date(); var timestamp = Math.round (date.getTime() / 1000); var closed_for = ai_cookie [block]['ct'] - timestamp; if (closed_for > 0) { var message = 'max clicks per time reached (' + Math. round (10000 * closed_for / 24 / 3600) / 10000 + ' days = ' + closed_for + ' s)'; ai_debug_cookie_status = message; if (ai_debug) console.log ('AI CHECK block', block, message); if (ai_debug) console.log (''); return false; } } } } if (ai_cookie.hasOwnProperty ('G') && ai_cookie ['G'].hasOwnProperty ('cpt')) { if (ai_cookie ['G']['cpt'] == 0) { var date = new Date(); var timestamp = Math.round (date.getTime() / 1000); var closed_for = ai_cookie ['G']['ct'] - timestamp; if (closed_for > 0) { var message = 'max global clicks per time reached (' + Math. round (10000 * closed_for / 24 / 3600) / 10000 + ' days = ' + closed_for + ' s)'; ai_debug_cookie_status = message; if (ai_debug) console.log ('AI CHECK GLOBAL', message); if (ai_debug) console.log (''); return false; } } } } ai_debug_cookie_status = 'OK'; if (ai_debug) console.log ('AI CHECK block', block, 'OK'); if (ai_debug) console.log (''); return true; } ai_check_and_insert_block = function (block, id) { // var ai_debug = typeof ai_debugging !== 'undefined'; // 2 var ai_debug = false; if (block == null) { return true; } var ai_block_divs = document.getElementsByClassName (id); if (ai_block_divs.length) { var ai_block_div = ai_block_divs [0]; var wrapping_div = ai_block_div.closest ('.' + ai_block_class_def); var insert_block = ai_check_block (block); if (!insert_block) { // if (ai_debug) console.log ('AI CHECK FAILED, !insert_block', block); // Check for a fallback block if (parseInt (ai_block_div.getAttribute ('limits-fallback')) != 0 && ai_block_div.hasAttribute ('data-fallback-code')) { if (ai_debug) console.log ('AI CHECK FAILED, INSERTING FALLBACK BLOCK', ai_block_div.getAttribute ('limits-fallback')); ai_block_div.setAttribute ('data-code', ai_block_div.getAttribute ('data-fallback-code')); if (wrapping_div != null && wrapping_div.hasAttribute ('data-ai')) { if (ai_block_div.hasAttribute ('fallback-tracking') && ai_block_div.hasAttribute ('fallback_level')) { wrapping_div.setAttribute ('data-ai-' + ai_block_div.getAttribute ('fallback_level'), ai_block_div.getAttribute ('fallback-tracking')); } } insert_block = true; } } // Remove selector to prevent further insertions at this element ai_block_div.removeAttribute ('data-selector'); if (insert_block) { ai_insert_code (ai_block_div); if (wrapping_div) { var debug_block = wrapping_div.querySelectorAll ('.ai-debug-block'); if (/*wrapping_div && */debug_block.length) { wrapping_div.classList.remove ('ai-list-block'); wrapping_div.classList.remove ('ai-list-block-ip'); wrapping_div.classList.remove ('ai-list-block-filter'); wrapping_div.style.visibility = ''; if (wrapping_div.classList.contains ('ai-remove-position')) { wrapping_div.style.position = ''; } } } } else { var ai_block_div_data = ai_block_div.closest ('div[data-ai]'); if (ai_block_div_data != null && typeof ai_block_div_data.getAttribute ("data-ai") != "undefined") { var data = JSON.parse (b64d (ai_block_div_data.getAttribute ("data-ai"))); if (typeof data !== "undefined" && data.constructor === Array) { data [1] = ""; ai_block_div_data.setAttribute ("data-ai", b64e (JSON.stringify (data))); } } if (wrapping_div) { var debug_block = wrapping_div.querySelectorAll ('.ai-debug-block'); if (/*wrapping_div && */debug_block.length) { wrapping_div.classList.remove ('ai-list-block'); wrapping_div.classList.remove ('ai-list-block-ip'); wrapping_div.classList.remove ('ai-list-block-filter'); wrapping_div.style.visibility = ''; if (wrapping_div.classList.contains ('ai-remove-position')) { wrapping_div.style.position = ''; } } } } // Remove class ai_block_div.classList.remove (id); } var ai_debug_bars = document.querySelectorAll ('.' + id + '-dbg'); // for (let ai_debug_bar of ai_debug_bars) { for (var index = 0, len = ai_debug_bars.length; index < len; index++) { var ai_debug_bar = ai_debug_bars [index]; ai_debug_bar.querySelector ('.ai-status').textContent = ai_debug_cookie_status; ai_debug_bar.querySelector ('.ai-cookie-data').textContent = ai_get_cookie_text (block); ai_debug_bar.classList.remove (id + '-dbg'); } } ai_load_cookie = function () { // var ai_debug = typeof ai_debugging !== 'undefined'; // 3 var ai_debug = false; var ai_cookie_name = 'aiBLOCKS'; // ### // var ai_cookie = AiCookies.getJSON (ai_cookie_name); var ai_cookie = ai_json_data (AiCookies.get (ai_cookie_name)); if (ai_cookie == null) { ai_cookie = {}; if (ai_debug) console.log ('AI COOKIE NOT PRESENT'); } if (ai_debug) console.log ('AI COOKIE LOAD', ai_cookie); return ai_cookie; } function ai_get_cookie (block, property) { // var ai_debug = typeof ai_debugging !== 'undefined'; // 4 var ai_debug = false; var value = ''; var ai_cookie = ai_load_cookie (); if (ai_cookie.hasOwnProperty (block)) { if (ai_cookie [block].hasOwnProperty (property)) { value = ai_cookie [block][property]; } } if (ai_debug) console.log ('AI COOKIE GET block:', block, 'property:', property, 'value:', value); return value; } ai_set_cookie = function (block, property, value) { function isEmpty (obj) { for (var key in obj) { if (obj.hasOwnProperty (key)) return false; } return true; } var ai_cookie_name = 'aiBLOCKS'; // var ai_debug = typeof ai_debugging !== 'undefined'; // 5 var ai_debug = false; if (ai_debug) console.log ('AI COOKIE SET block:', block, 'property:', property, 'value:', value); var ai_cookie = ai_load_cookie (); if (value === '') { if (ai_cookie.hasOwnProperty (block)) { delete ai_cookie [block][property]; if (isEmpty (ai_cookie [block])) { delete ai_cookie [block]; } } } else { if (!ai_cookie.hasOwnProperty (block)) { ai_cookie [block] = {}; } ai_cookie [block][property] = value; } if (Object.keys (ai_cookie).length === 0 && ai_cookie.constructor === Object) { AiCookies.remove (ai_cookie_name); if (ai_debug) console.log ('AI COOKIE REMOVED'); } else { // ### // AiCookies.set (ai_cookie_name, ai_cookie, {expires: 365, path: '/'}); AiCookies.set (ai_cookie_name, JSON.stringify (ai_cookie), {expires: 365, path: '/'}); } if (ai_debug) { // ### // var ai_cookie_test = AiCookies.getJSON (ai_cookie_name); var ai_cookie_test = ai_json_data (AiCookies.get (ai_cookie_name)); if (typeof (ai_cookie_test) != 'undefined') { console.log ('AI COOKIE NEW', ai_cookie_test); console.log ('AI COOKIE DATA:'); for (var cookie_block in ai_cookie_test) { for (var cookie_block_property in ai_cookie_test [cookie_block]) { if (cookie_block_property == 'x') { var date = new Date(); var closed_for = ai_cookie_test [cookie_block][cookie_block_property] - Math.round (date.getTime() / 1000); console.log (' BLOCK', cookie_block, 'closed for', closed_for, 's = ', Math.round (10000 * closed_for / 3600 / 24) / 10000, 'days'); } else if (cookie_block_property == 'd') { console.log (' BLOCK', cookie_block, 'delayed for', ai_cookie_test [cookie_block][cookie_block_property], 'pageviews'); } else if (cookie_block_property == 'e') { console.log (' BLOCK', cookie_block, 'show every', ai_cookie_test [cookie_block][cookie_block_property], 'pageviews'); } else if (cookie_block_property == 'i') { var i = ai_cookie_test [cookie_block][cookie_block_property]; if (i >= 0) { console.log (' BLOCK', cookie_block, ai_cookie_test [cookie_block][cookie_block_property], 'impressions until limit'); } else { var date = new Date(); var closed_for = - i - Math.round (date.getTime() / 1000); console.log (' BLOCK', cookie_block, 'max impressions, closed for', closed_for, 's =', Math.round (10000 * closed_for / 3600 / 24) / 10000, 'days'); } } else if (cookie_block_property == 'ipt') { console.log (' BLOCK', cookie_block, ai_cookie_test [cookie_block][cookie_block_property], 'impressions until limit per time period'); } else if (cookie_block_property == 'it') { var date = new Date(); var closed_for = ai_cookie_test [cookie_block][cookie_block_property] - Math.round (date.getTime() / 1000); console.log (' BLOCK', cookie_block, 'impressions limit expiration in', closed_for, 's =', Math.round (10000 * closed_for / 3600 / 24) / 10000, 'days'); } else if (cookie_block_property == 'c') { var c = ai_cookie_test [cookie_block][cookie_block_property] if (c >= 0) { console.log (' BLOCK', cookie_block, c, 'clicks until limit'); } else { var date = new Date(); var closed_for = - c - Math.round (date.getTime() / 1000); console.log (' BLOCK', cookie_block, 'max clicks, closed for', closed_for, 's =', Math.round (10000 * closed_for / 3600 / 24) / 10000, 'days'); } } else if (cookie_block_property == 'cpt') { console.log (' BLOCK', cookie_block, ai_cookie_test [cookie_block][cookie_block_property], 'clicks until limit per time period'); } else if (cookie_block_property == 'ct') { var date = new Date(); var closed_for = ai_cookie_test [cookie_block][cookie_block_property] - Math.round (date.getTime() / 1000); console.log (' BLOCK', cookie_block, 'clicks limit expiration in ', closed_for, 's =', Math.round (10000 * closed_for / 3600 / 24) / 10000, 'days'); } else if (cookie_block_property == 'h') { console.log (' BLOCK', cookie_block, 'hash', ai_cookie_test [cookie_block][cookie_block_property]); } else console.log (' ?:', cookie_block, ':', cookie_block_property, ai_cookie_test [cookie_block][cookie_block_property]); } console.log (''); } } else console.log ('AI COOKIE NOT PRESENT'); } return ai_cookie; } ai_get_cookie_text = function (block) { var ai_cookie_name = 'aiBLOCKS'; // ### // var ai_cookie = AiCookies.getJSON (ai_cookie_name); var ai_cookie = ai_json_data (AiCookies.get (ai_cookie_name)); if (ai_cookie == null) { ai_cookie = {}; } var global_data = ''; if (ai_cookie.hasOwnProperty ('G')) { global_data = 'G[' + JSON.stringify (ai_cookie ['G']).replace (/\"/g, '').replace ('{', '').replace('}', '') + '] '; } var block_data = ''; if (ai_cookie.hasOwnProperty (block)) { block_data = JSON.stringify (ai_cookie [block]).replace (/\"/g, '').replace ('{', '').replace('}', ''); } return global_data + block_data; } } ĐỒ TRANG TRÍ VẬT PHẨM PHONG THUỶ – Đồ Gỗ Như Ý Cát Tường https://dogonhuycattuong.com Thương Hiệu đồ gỗ như ý cát tường Mon, 24 Aug 2026 10:23:46 +0000 vi hourly 1 https://wordpress.org/?v=7.0 https://dogonhuycattuong.com/wp-content/uploads/2025/03/cropped-Lo-go-NYCT3-32x32.jpg ĐỒ TRANG TRÍ VẬT PHẨM PHONG THUỶ – Đồ Gỗ Như Ý Cát Tường https://dogonhuycattuong.com 32 32 Đồng hồ hộp gỗ hương đá (Cao 215 R40 sâu 22) https://dogonhuycattuong.com/san-pham/dong-ho-hop-go-huong-da-cao-215-r40-sau-22/ https://dogonhuycattuong.com/san-pham/dong-ho-hop-go-huong-da-cao-215-r40-sau-22/#respond Sat, 19 Apr 2025 04:10:15 +0000 https://dogonhuycattuong.com/?post_type=product&p=3485

]]>
https://dogonhuycattuong.com/san-pham/dong-ho-hop-go-huong-da-cao-215-r40-sau-22/feed/ 0
Bình mai (ĐK 20 cao 30)cm đục Hồng cúc, Tùng Mai gỗ Hương lào https://dogonhuycattuong.com/san-pham/binh-mai-dk-20-cao-30cm-duc-hong-cuc-tung-mai-go-huong-lao/ https://dogonhuycattuong.com/san-pham/binh-mai-dk-20-cao-30cm-duc-hong-cuc-tung-mai-go-huong-lao/#respond Tue, 08 Apr 2025 04:26:49 +0000 https://dogonhuycattuong.com/?post_type=product&p=3392
Bình mai ĐK 20 cm và cao 30 cm, được đục họa tiết Hồng cúc và Tùng mai trên chất liệu gỗ hương. Đây là một tác phẩm thủ công có giá trị nghệ thuật cao, gỗ hương được biết đến với độ bền và màu sắc đẹp, thường được sử dụng trong chế tác đồ mỹ nghệ. Hồng cúc và Tùng mai là hai hình ảnh mang ý nghĩa phong thủy tốt lành, tượng trưng cho sự thịnh vượng, trường thọ và sức khỏe. Nếu bạn cần thêm thông tin về giá trị, cách bảo quản, hoặc các yếu tố liên quan, tôi rất sẵn sàng hỗ trợ!
]]>
https://dogonhuycattuong.com/san-pham/binh-mai-dk-20-cao-30cm-duc-hong-cuc-tung-mai-go-huong-lao/feed/ 0
Bình mai ĐK 18 cao 30 cm đục trúc mai , tùng cúc gỗ hương https://dogonhuycattuong.com/san-pham/binh-mai-dk-18-cao-30-cm-duc-truc-mai-tung-cuc-go-huong/ https://dogonhuycattuong.com/san-pham/binh-mai-dk-18-cao-30-cm-duc-truc-mai-tung-cuc-go-huong/#respond Tue, 08 Apr 2025 04:10:54 +0000 https://dogonhuycattuong.com/?post_type=product&p=3386 B ình mai được chế tác từ gỗ hương Lào, với đường kính 18 cm và chiều cao 30 cm. Bình này có họa tiết đục tứ quý, bao gồm các hình tượng tùng, cúc, trúc, mai – bốn loài cây tượng trưng cho mùa xuân, mùa hạ, mùa thu và mùa đông, mang ý nghĩa may mắn và thịnh vượng. Miệng bình được tạo hình bèo, một đặc điểm đặc trưng trong các sản phẩm gỗ thủ công mỹ nghệ.

Gỗ hương Lào được ưa chuộng nhờ độ bền, màu sắc đẹp và mùi thơm tự nhiên, thích hợp cho việc chế tác các sản phẩm mỹ nghệ cao cấp. Đây là một tác phẩm không chỉ mang tính thẩm mỹ mà còn có giá trị phong thủy.

Nếu bạn muốn biết thêm thông tin về giá trị hoặc cách bảo quản sản phẩm, tôi sẵn sàng hỗ trợ!

]]>
https://dogonhuycattuong.com/san-pham/binh-mai-dk-18-cao-30-cm-duc-truc-mai-tung-cuc-go-huong/feed/ 0
Bình mai (ĐK 18 cao 30)cm đục mai quấn miệng tròn gỗ hương https://dogonhuycattuong.com/san-pham/binh-mai-dk-18-cao-30cm-duc-mai-quan-mieng-tron-go-huong/ https://dogonhuycattuong.com/san-pham/binh-mai-dk-18-cao-30cm-duc-mai-quan-mieng-tron-go-huong/#respond Tue, 08 Apr 2025 03:23:55 +0000 https://dogonhuycattuong.com/?post_type=product&p=3376
Bình mai, có đường kính 18 cm và chiều cao 30 cm, được đục mai quấn và có miệng tròn, làm từ gỗ hương Lào. Đây là một sản phẩm thủ công mỹ nghệ rất đẹp và mang đậm tính nghệ thuật. Gỗ hương Lào được biết đến với màu sắc đẹp, mùi hương tự nhiên và độ bền cao, thường được sử dụng để làm đồ nội thất và các sản phẩm thủ công mỹ nghệ cao cấp. Những chi tiết như đục mai quấn và miệng tròn tạo nên một chiếc bình vừa có giá trị thẩm mỹ, vừa có giá trị sử dụng. Nếu bạn muốn biết thêm thông tin về chiếc bình này hoặc có nhu cầu mua, bạn có thể tìm kiếm các cửa hàng hoặc nghệ nhân chuyên làm đồ gỗ thủ công để xem sản phẩm tương tự.
]]>
https://dogonhuycattuong.com/san-pham/binh-mai-dk-18-cao-30cm-duc-mai-quan-mieng-tron-go-huong/feed/ 0
Bình mai ĐK 32 cao 35 cm miệng bèo đục mai chim gỗ hương https://dogonhuycattuong.com/san-pham/binh-mai-dk-32-cao-35-cm-mieng-beo-duc-mai-chim-go-huong/ https://dogonhuycattuong.com/san-pham/binh-mai-dk-32-cao-35-cm-mieng-beo-duc-mai-chim-go-huong/#respond Tue, 08 Apr 2025 03:10:43 +0000 https://dogonhuycattuong.com/?post_type=product&p=3367 Lào là một món đồ trang trí hoặc dụng cụ nghệ thuật thường được yêu thích trong văn hóa Việt Nam. Những đặc điểm như:
 • Đường kính 32 cm: Kích thước này giúp bình có thể đặt ở nhiều vị trí, từ bàn làm việc đến các không gian lớn hơn như phòng khách.
 • Cao 35 cm: Chiều cao này tạo nên một sự cân đối đẹp mắt, không quá cao nhưng đủ để thu hút sự chú ý.
 • Miệng bèo đục: Thiết kế miệng bình thường có các họa tiết bèo đục, tạo nên vẻ đẹp nhẹ nhàng, thanh thoát.
 • Mai chim: Đây là kiểu hoa văn đục nổi, thường thấy trong nghệ thuật chạm khắc gỗ truyền thống của Việt Nam, biểu tượng của sự trường tồn và tài lộc.
 • Gỗ hương Lào: Gỗ hương Lào có màu sắc đẹp, mùi thơm đặc trưng, và độ bền cao, khiến sản phẩm vừa có giá trị sử dụng vừa có giá trị thẩm mỹ cao.
Nếu bạn cần thêm thông tin về sản phẩm này hoặc cách bảo quản, tôi sẵn sàng hỗ trợ!
]]>
https://dogonhuycattuong.com/san-pham/binh-mai-dk-32-cao-35-cm-mieng-beo-duc-mai-chim-go-huong/feed/ 0
Bình mai (ĐK18 C30)F miệng tròn (TQ cặp TMTC) gỗ hương https://dogonhuycattuong.com/san-pham/binh-mai-dk18-c30f-mieng-tron-tq-cap-tmtc-go-huong/ https://dogonhuycattuong.com/san-pham/binh-mai-dk18-c30f-mieng-tron-tq-cap-tmtc-go-huong/#respond Tue, 08 Apr 2025 03:03:49 +0000 https://dogonhuycattuong.com/?post_type=product&p=3361
Bình mai ĐK18 cao 30 cm, miệng tròn đục tứ quý cặp 2 cảnh Tùng – Cúc – Trúc – Mai, được làm từ gỗ hương Lào, là một sản phẩm thủ công nghệ thuật tinh xảo. Gỗ hương Lào nổi tiếng với độ bền cao và màu sắc đẹp, thường được dùng trong chế tác đồ mỹ nghệ cao cấp. Việc đục tứ quý (Tùng – Cúc – Trúc – Mai) lên sản phẩm không chỉ thể hiện kỹ thuật điêu khắc điêu luyện mà còn mang đậm giá trị văn hóa, với mỗi cảnh tượng đại diện cho các đức tính cao quý: Tùng (kiên cường), Cúc (dai sức), Trúc (thẳng thắn) và Mai (vươn lên). Bình này không chỉ là vật trang trí tinh tế mà còn có thể là món quà ý nghĩa trong các dịp quan trọng.
]]>
https://dogonhuycattuong.com/san-pham/binh-mai-dk18-c30f-mieng-tron-tq-cap-tmtc-go-huong/feed/ 0
Bình mai (ĐK18 C30)F bèo đục tùng cúc, trúc mai gỗ hương https://dogonhuycattuong.com/san-pham/binh-mai-dk18-c30f-beo-duc-tung-cuc-truc-mai-go-huong/ https://dogonhuycattuong.com/san-pham/binh-mai-dk18-c30f-beo-duc-tung-cuc-truc-mai-go-huong/#respond Sat, 05 Apr 2025 02:23:08 +0000 https://dogonhuycattuong.com/?post_type=product&p=3344
Ống bút ĐK 18 cao 30 cm, miệng bèo đục Tùng Cúc Trúc Mai, làm từ gỗ hương là một sản phẩm thủ công tinh xảo, mang đậm nét văn hóa truyền thống Việt Nam. Dưới đây là một số chi tiết về sản phẩm • Miệng bèo: Đặc trưng của miệng ống bút có hình dạng bèo, tạo cảm giác mềm mại, dễ nhìn. • Đục Tùng Cúc Trúc Mai: Đây là những họa tiết tượng trưng cho sự thanh cao, quý phái và bền vững trong văn hóa Việt. Mỗi họa tiết đều mang một ý nghĩa riêng: Tùng (thông) biểu trưng cho sự kiên cường, Cúc (hoa cúc) tượng trưng cho sự trường thọ, Trúc (trúc) là biểu tượng của sự vững vàng, và Mai (hoa mai) tượng trưng cho sự kiên cường trong mùa đông. • Chất liệu gỗ hương: Gỗ hương là loại gỗ quý, có mùi thơm đặc trưng và độ bền cao, thường được sử dụng trong các sản phẩm thủ công mỹ nghệ cao cấp. Sản phẩm này có thể là một món quà trang trọng, đậm chất văn hóa và nghệ thuật, hoặc dùng trong các không gian trang trọng như phòng làm việc, phòng thờ.
]]>
https://dogonhuycattuong.com/san-pham/binh-mai-dk18-c30f-beo-duc-tung-cuc-truc-mai-go-huong/feed/ 0
Bình mai đk 18 cao 30 đục mai chim gỗ hương https://dogonhuycattuong.com/san-pham/binh-mai-dk-18-cao-30-duc-mai-chim-go-huong/ https://dogonhuycattuong.com/san-pham/binh-mai-dk-18-cao-30-duc-mai-chim-go-huong/#respond Sat, 05 Apr 2025 02:13:55 +0000 https://dogonhuycattuong.com/?post_type=product&p=3340
Bạn đang miêu tả một bình mai đục mai chim gỗ hương với kích thước 18 cm (đường kính) và chiều cao 30 cm. Bình này thường được làm thủ công, đục khắc tinh xảo hình ảnh mai chim, có thể là một sản phẩm trang trí hoặc quà tặng. Gỗ hương là một loại gỗ quý, nổi bật với màu sắc đỏ nâu và vân gỗ đẹp, mang lại giá trị thẩm mỹ cao cho sản phẩm. Bình mai đục mai chim làm từ gỗ hương không chỉ có giá trị nghệ thuật mà còn mang ý nghĩa phong thủy tốt đẹp. Nếu bạn đang tìm kiếm thông tin về cách bảo quản hay giá trị của bình mai này, tôi có thể hỗ trợ thêm!
]]>
https://dogonhuycattuong.com/san-pham/binh-mai-dk-18-cao-30-duc-mai-chim-go-huong/feed/ 0
Bình mai đk 18cao 30 cm đục tứ quý quấn gỗ hương https://dogonhuycattuong.com/san-pham/binh-mai-dk-18cao-30-cm-duc-tu-quy-quan-go-huong/ https://dogonhuycattuong.com/san-pham/binh-mai-dk-18cao-30-cm-duc-tu-quy-quan-go-huong/#respond Sat, 05 Apr 2025 02:01:21 +0000 https://dogonhuycattuong.com/?post_type=product&p=3336
Bình mai ĐK 20 cao 30 cm đục cảnh tứ quý gỗ hương là một sản phẩm thủ công tinh xảo, được chế tác từ gỗ hương, một loại gỗ quý có mùi thơm đặc trưng và độ bền cao. Với đường kính 20 và chiều cao 30 cm, chiếc bình này được khắc họa họa tiết cảnh tứ quý, biểu trưng cho bốn mùa xuân, hạ, thu, đông, thường mang ý nghĩa may mắn, tài lộc và sự trường thọ. Sản phẩm này không chỉ là vật trang trí đẹp mắt mà còn có giá trị văn hóa và phong thủy cao. Gỗ hương, với màu sắc đẹp mắt và độ bền theo thời gian, làm cho chiếc bình này càng trở nên quý giá.
]]>
https://dogonhuycattuong.com/san-pham/binh-mai-dk-18cao-30-cm-duc-tu-quy-quan-go-huong/feed/ 0