Hot Selling 50% OFF - Rustic Garden Gnome – Hand, Everyday Comfort, Was $61, Save 34%

$39.99  - $109.99
/** * 优惠码组件模型类 * 处理优惠码的显示和交互逻辑 */ class SpzCustomDiscountCodeModel extends SPZ.BaseElement { constructor(element) { super(element); // 复制按钮和内容的类名 this.copyBtnClass = "discount_code_btn" this.copyClass = "discount_code_value" } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } buildCallback() { // 初始化服务 this.action_ = SPZServices.actionServiceForDoc(this.element); this.templates_ = SPZServices.templatesForDoc(this.element); this.xhr_ = SPZServices.xhrFor(this.win); } /** * 渲染优惠码组件 * @param {Object} data - 渲染数据 */ doRender_(data) { return this.templates_ .findAndRenderTemplate(this.element, Object.assign(this.getDefaultData(), data) ) .then((el) => { this.clearDom(); this.element.appendChild(el); // 绑定复制代码功能 this.copyCode(el, data); }); } /** * 获取渲染模板 * @param {Object} data - 渲染数据 */ getRenderTemplate(data) { const renderData = Object.assign(this.getDefaultData(), data); return this.templates_ .findAndRenderTemplate(this.element, renderData) .then((el) => { this.clearDom(); return el; }); } /** * 清除DOM内容 */ clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } /** * 获取默认数据 * @returns {Object} 默认数据对象 */ getDefaultData() { return { isMobile: appDiscountUtils.judgeMobile(), isRTL: appDiscountUtils.judgeRTL(), image_domain: this.win.SHOPLAZZA.image_domain, copyBtnClass: this.copyBtnClass, copyClass: this.copyClass } } /** * 复制优惠码功能 * @param {Element} el - 当前元素 */ copyCode(el) { const copyBtnList = el.querySelectorAll(`.${this.copyBtnClass}`); if (copyBtnList.length > 0) { copyBtnList.forEach(item => { item.onclick = async () => { // 确保获取正确的元素和内容 const codeElement = item.querySelector(`.${this.copyClass}`); if (!codeElement) return; // 获取纯文本内容 const textToCopy = codeElement.innerText.trim(); // 尝试使用现代API,如果失败则使用备用方案 try { if (navigator.clipboard && navigator.clipboard.writeText) { await navigator.clipboard.writeText(textToCopy); } else { throw new Error('Clipboard API not available'); } // 显示复制成功提示 this.showCopySuccessToast(textToCopy, el); } catch (err) { console.error('Modern clipboard API failed, trying fallback...', err); // 使用备用复制方案 this.fallbackCopy(textToCopy, el); } const discountId = item.dataset["discountId"]; // 跳转决策: is_redirection + link(可选覆盖) const setting = { is_redirection: item.dataset["redirection"] === "true", link: item.dataset["link"], }; const landingUrl = `/promotions/discount-default/${discountId}`; const finalUrl = appDiscountUtils.resolveDiscountHref(setting, landingUrl); if (finalUrl && appDiscountUtils.inProductBody(this.element)) { this.win.open(finalUrl, '_blank', 'noopener'); } } }) } } /** * 使用 execCommand 的复制方案 * @param {string} codeText - 要复制的文本 * @param {Element} el - 当前元素 */ fallbackCopy(codeText, el) { const textarea = this.win.document.createElement('textarea'); textarea.value = codeText; // 设置样式使文本框不可见 textarea.style.position = 'fixed'; textarea.style.left = '-9999px'; textarea.style.top = '0'; // 添加 readonly 属性防止移动端虚拟键盘弹出 textarea.setAttribute('readonly', 'readonly'); this.win.document.body.appendChild(textarea); textarea.focus(); textarea.select(); try { this.win.document.execCommand('copy'); // 显示复制成功提示 this.showCopySuccessToast(codeText, el); } catch (err) { console.error('Copy failed:', err); } this.win.document.body.removeChild(textarea); } /** * 创建 Toast 元素 * @returns {Element} 创建的 Toast 元素 */ createToastEl_() { const toast = document.createElement('ljs-toast'); toast.setAttribute('layout', 'nodisplay'); toast.setAttribute('hidden', ''); toast.setAttribute('id', 'discount-code-toast'); toast.style.zIndex = '1051'; return toast; } /** * 挂载 Toast 元素到 body * @returns {Element} 挂载的 Toast 元素 */ mountToastToBody_() { const existingToast = this.win.document.getElementById('discount-code-toast'); if (existingToast) { return existingToast; } const toast = this.createToastEl_(); this.win.document.body.appendChild(toast); return toast; } /** * 复制成功的提醒 * @param {string} codeText - 要复制的文本 * @param {Element} el - 当前元素 */ showCopySuccessToast(codeText, el) { const $toast = this.mountToastToBody_(); SPZ.whenApiDefined($toast).then(toast => { toast.showToast("Discount code copied !"); this.codeCopyInSessionStorage(codeText); }); } /** * 复制优惠码成功后要存一份到本地存储中,购物车使用 * @param {string} codeText - 要复制的文本 */ codeCopyInSessionStorage(codeText) { try { sessionStorage.setItem('other-copied-coupon', codeText); } catch (error) { console.error(error) } } } // 注册自定义元素 SPZ.defineElement('spz-custom-discount-code-model', SpzCustomDiscountCodeModel);
/** * Custom discount code component that handles displaying and managing discount codes * @extends {SPZ.BaseElement} */ class SpzCustomDiscountCode extends SPZ.BaseElement { constructor(element) { super(element); // API endpoint for fetching discount codes this.getDiscountCodeApi = "\/api\/storefront\/promotion\/code\/list"; // Debounce timer for resize events this.timer = null; // Current variant ID this.variantId = "13f2e845-f436-458e-a0cf-535dda1bb870"; // Store discount code data this.discountCodeData = {} } /** * Check if layout is supported * @param {string} layout - Layout type * @return {boolean} */ isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } /** * Initialize component after build */ buildCallback() { this.templates_ = SPZServices.templatesForDoc(); this.viewport_ = this.getViewport(); // Bind methods to maintain context this.render = this.render.bind(this); this.resize = this.resize.bind(this); this.switchVariant = this.switchVariant.bind(this); } /** * Setup component when mounted */ mountCallback() { this.getData(); // Add event listeners this.viewport_.onResize(this.resize); this.win.document.addEventListener('dj.variantChange', this.switchVariant); } /** * Cleanup when component is unmounted */ unmountCallback() { this.viewport_.removeResize(this.resize); this.win.document.removeEventListener('dj.variantChange', this.switchVariant); // 清除定时器 if (this.timer) { clearTimeout(this.timer); this.timer = null; } } /** * Handle resize events with debouncing */ resize() { if (this.timer) { clearTimeout(this.timer) this.timer = null; } this.timer = setTimeout(() => { if (appDiscountUtils.inProductBody(this.element)) { this.render(); } else { this.renderSkeleton(); } }, 200); } /** * Handle variant changes * @param {Event} event - Variant change event */ switchVariant(event) { const variant = event.detail.selected; if (variant.product_id == 'ae71bdb2-17ae-4884-9f18-83ab3f007448' && variant.id != this.variantId) { this.variantId = variant.id; this.getData(); } } /** * Fetch discount code data from API */ getData() { if (appDiscountUtils.inProductBody(this.element)) { const reqBody = { product_id: "ae71bdb2-17ae-4884-9f18-83ab3f007448", variant_id: this.variantId, product_type: "default", } if (!reqBody.product_id || !reqBody.variant_id) return; this.discountCodeData = {}; this.win.fetch(this.getDiscountCodeApi, { method: "POST", body: JSON.stringify(reqBody), headers: { "Content-Type": "application/json" } }).then(async (response) => { if (response.ok) { let data = await response.json(); if (data.list && data.list.length > 0) { data.list[0].product_setting.template_config = JSON.parse(data.list[0].product_setting.template_config); // Format timestamps to local timezone const zone = this.win.SHOPLAZZA.shop.time_zone; data.list = data.list.map(item => { if(+item.ends_at !== -1) { item.ends_at = appDiscountUtils.convertTimestampToFormat(+item.ends_at, zone); } item.starts_at = appDiscountUtils.convertTimestampToFormat(+item.starts_at, zone); return item; }); } this.discountCodeData = data; this.render(); } else { this.clearDom(); } }).catch(err => { console.error("discount_code", err) this.clearDom(); }); } else { this.renderSkeleton(); } } /** * Clear component DOM except template */ clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } /** * Render discount codes with formatted dates */ render() { // Render using discount code model SPZ.whenApiDefined(document.querySelector('#spz_custom_discount_code_model')).then(renderApi => { renderApi.doRender_({ discountCodeData: this.discountCodeData }) }).catch(err => { this.clearDom(); }) } renderSkeleton() { // Render template for non-product pages this.templates_ .findAndRenderTemplate(this.element, { isMobile: appDiscountUtils.judgeMobile() }) .then((el) => { this.clearDom(); this.element.appendChild(el); }) .catch(err => { this.clearDom(); }); } } // Register custom element SPZ.defineElement('spz-custom-discount-code', SpzCustomDiscountCode);
Buy More, Save More!:  Red Dwarf
Quantity
Free worldwide shipping
Free returns
Sustainably made
Secure payments

Description

SHIPPING WORLDWIDE.

💯 Payments Via PayPal® and CreditCard.

⭐ Fast refund Guarantee >> Partial or full refund depends on the situation.

📦 Orders will not incur additional customs duties.

📞 Tracking Number for Every Order >>

🎁 Don't forget to buy some for your family or friends as it's a unique gift idea.❤️❤️❤️

🐞 Welcome Friends Hanging Gnome Decor

Bring a sweet and cheerful touch to your porch, patio, garden, or entryway with this adorable Ladybug Gnome Hanging Welcome Decor. Designed with a rustic wooden-style welcome sign, cute garden gnome, bright daisy flowers, red ladybug accents, and a vintage hanging bell, it instantly makes your home feel warmer and more inviting.

Whether displayed by the front door, on a porch post, garden wall, fence, or backyard tree, this charming decoration creates a friendly welcome for family, guests, and neighbors.

🌼 A Warm Welcome For Every Visitor

The top sign features the lovely words “Welcome Friends”, decorated with white daisies, green leaves, and cute red ladybugs. Its rustic wood-look design blends beautifully with farmhouse, cottage, garden, and country-style home decor.

It is a simple yet eye-catching way to make your entrance feel more personal, cozy, and full of life.

🧙 Cute Ladybug Gnome Design

At the center sits a playful garden gnome on a hanging swing. The gnome wears a red ladybug-inspired hat with black spots, has a soft white beard, tiny hands holding the chains, and a sweet little welcome sign in front.

The design feels cheerful, whimsical, and full of personality — like a tiny garden guardian waiting to greet your guests.

🐞 Ladybug & Daisy Details

This hanging decor is filled with delightful spring and summer elements:

  • Bright daisy flower accents
  • Red ladybug decorations
  • Fresh green leaf details
  • Rustic wooden-style sign
  • Vintage bell-style ornament

The red, white, green, and natural wood tones make it perfect for gardens, porches, patios, and floral outdoor spaces.

🔔 Vintage Hanging Bell Accent

A decorative bell hangs below the gnome swing, adding extra farmhouse charm and a layered look to the whole piece. The bell is decorated with matching flowers and ladybug details, making the design feel complete from top to bottom.

It is more than just a welcome sign — it is a full decorative statement piece for your outdoor space.

🏡 Perfect For Indoor & Outdoor Styling

This charming hanging ornament is perfect for many areas around the home:

  • Front porch
  • Patio corner
  • Garden fence
  • Backyard tree
  • Entryway wall
  • Balcony
  • Farmhouse kitchen or sunroom
  • Seasonal spring and summer display

For longer-lasting beauty, we recommend hanging it in a covered outdoor area such as a porch, patio, or shaded entryway.

🎁 A Lovely Gift For Garden Lovers

Looking for a thoughtful gift for someone who loves gnomes, flowers, ladybugs, gardening, or farmhouse decor? This hanging welcome decoration makes a sweet gift for birthdays, housewarmings, Mother’s Day, holidays, or anyone who enjoys making their home feel warm and inviting.

It is cute, meaningful, and easy to display.

✨ Product Highlights

  • Cute ladybug gnome sitting on a swing
  • “Welcome Friends” rustic wooden-style sign
  • Bright daisy and ladybug decorations
  • Vintage hanging bell design
  • Great for porch, garden, patio, fence, or entryway
  • Adds farmhouse, cottage, and spring-summer charm
  • Perfect gift for garden lovers and home decor fans
  • Lightweight and easy to hang

🐞 Make Your Home Feel More Welcoming

Add a little joy, color, and garden magic to your home. This adorable ladybug gnome hanging decor is the perfect way to brighten your space and welcome every guest with a smile.

👉 Hang it by your door and let your home say “Welcome Friends” every day.


Size & Specs

Style:
Rustic Bee Gnome Hanging Bell
Material:
Metal-style decorative finish
Theme:
Bee / Sunflower / Farmhouse / Cottage Garden
Use:
Porch bell, hanging décor, garden decoration
Placement:
Porch, patio, fence, garden hook, backyard, entryway
Size:
17 inches
🌎 Worldwide Shipping ✈
🚚 Insured Worldwide Shipping:

Each order includes real-time tracking details and insurance coverage in the unlikely event that a package gets lost or stolen in transit.

✉️ 24/7 Customer Support:

We have a team of live reps ready to help and answer any questions you have within a 24-hour time frame, 7 days a week.

🔒 Safe & Secure Checkouts:

We use state-of-the-art SSL Secure encryption to keep your personal and financial information 100% protected.

🔒 100% Risk-Free Purchase 🔥

If you bought it and felt that it is not for you, don't worry. Just hit the Contact us button and send us a message, and we will make it right by offering you a replacement or refund. 100% Simple & Risk-Free process.