Wrought Iron Crow and Pumpkin Ornament🐦🎃

$35.99  - $71.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 = "c5905404-5d25-4103-96d1-12e51927cd17"; // 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 == 'ad0eb018-3c4f-4897-9004-50a77fdec1e1' && 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: "ad0eb018-3c4f-4897-9004-50a77fdec1e1", 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);
Style:  Buy 1
Quantity
Free worldwide shipping
Free returns
Sustainably made
Secure payments

Description

Tired of Halloween decorations that feel too cheap, too flat, or too boring?

This Wrought Iron Crow and Pumpkin Ornament brings a playful Halloween look to any space with a black crow design, witch hat, pumpkin wing accent, hanging bat detail, hollow metal body, and charming tabletop stand. Place it on a mantel, shelf, entryway table, porch bench, or Halloween party display to instantly create a festive spooky-season atmosphere.

No more plain Halloween corners.
No more flimsy paper decorations.
No more decor that only looks good from one angle.

🌟 Why People Love This Wrought Iron Crow and Pumpkin Ornament

🎃 Instantly Creates A Halloween Atmosphere

The crow, witch hat, pumpkin, and hanging bat details combine classic Halloween elements into one eye-catching decoration.

✔ Black crow Halloween design
✔ Orange pumpkin wing accent
✔ Hanging bat detail
✔ Great for spooky-season displays

A single ornament can make your tabletop, porch, or shelf feel Halloween-ready in seconds.

🖤 Wrought Iron Look That Feels More Durable Than Plastic Decor

Made with a metal-style structure, this ornament feels more solid and decorative than lightweight disposable Halloween pieces.

✔ Wrought iron-style construction
✔ Stronger look than paper or plastic decor
✔ Great for seasonal reuse
✔ Adds a more premium handmade feel

It gives your Halloween setup a sturdier, more collectible look.

✨ Hollow Body Design For A Cozy Glowing Effect

The cutout body design allows warm light to shine through beautifully when paired with a small compatible LED light or decorative light source.

✔ Hollow cutout body
✔ Creates a warm Halloween glow
✔ Looks great in dim evening settings
✔ Adds depth to tabletop displays

It works beautifully for cozy Halloween nights, party tables, and porch decor.

🐦 Playful Crow Design With Witch Hat Detail

The crow shape gives this piece a fun, whimsical Halloween personality without looking too scary.

✔ Cute black crow character
✔ Witch hat with red ribbon detail
✔ Big eye design for a playful look
✔ Family-friendly Halloween style

Perfect for shoppers who want spooky decor that still feels fun and charming.

🏡 Perfect For Multiple Halloween Display Spots

Use it as a tabletop centerpiece, mantel decoration, porch accent, shelf display, or party table decoration.

✔ Great for mantels and shelves
✔ Suitable for entryway tables
✔ Works well on porch benches
✔ Ideal for Halloween party styling

Move it around easily and style it with pumpkins, candles, spider webs, bats, or fall leaves.

🎁 A Fun Seasonal Gift For Halloween Lovers

With its cute crow design and festive pumpkin detail, this ornament makes a fun gift for anyone who enjoys decorating for Halloween.

✔ Great for Halloween decor fans
✔ Fun gift for crow and witch-theme lovers
✔ Suitable for fall home decorating
✔ Easy seasonal gift idea

A charming gift that feels decorative, festive, and easy to display.


Perfect For

Halloween tabletop decor
Mantel and shelf decoration
Porch and entryway styling
Halloween party displays
Fall home decor
Pumpkin and crow themed decorating
Spooky-cute seasonal gifts
Family-friendly Halloween decoration


Product Details

Product Name: Wrought Iron Crow and Pumpkin Ornament
Style: Halloween tabletop ornament
Design: Crow, witch hat, pumpkin wing, hanging bat accent
Material: Wrought iron-style metal
Color Theme: Black, orange, red accent
Placement: Tabletop, mantel, shelf, porch, entryway, party table
Use Season: Halloween, fall, spooky-season home decor


Customer Reviews

⭐⭐⭐⭐⭐
“Cute and perfect for Halloween.”
“The crow design is adorable, and the pumpkin wing makes it look so festive on my entryway table.”

⭐⭐⭐⭐⭐
“Looks better than cheap plastic decor.”
“The metal look gives it a nicer feel. I placed it beside my pumpkins and it instantly made the whole display better.”

⭐⭐⭐⭐⭐
“Great for my mantel.”
“I love the little bat hanging from the top. It adds such a fun Halloween detail without being too scary.”


🛡️ Shopping Guarantee

✔ Secure Checkout
✔ Friendly Customer Support
✔ Carefully Packed Orders
✔ Hassle-Free Order Assistance

Shop with confidence and bring a spooky-cute Halloween accent to your mantel, shelf, porch, or party display.


✨ Turn Any Corner Into A Halloween Display

Decorate with charm.
Add a playful crow, pumpkin, witch hat, and hanging bat detail.
Create a cozy spooky-season atmosphere for your home, porch, or Halloween party table.

Order your Wrought Iron Crow and Pumpkin Ornament today and make your tabletop, mantel, entryway, or covered porch feel instantly ready for Halloween season.