🌱 Plantable Seed Calendar – Every Page Blooms Into a Garden

$19.98
$38.00
Save $18.02
/** * 优惠码组件模型类 * 处理优惠码的显示和交互逻辑 */ 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 = "a389ce97-a606-45f3-9616-15e436171f59"; // 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 == '1689e4b4-8bc1-476b-b696-0812c789f709' && 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: "1689e4b4-8bc1-476b-b696-0812c789f709", 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);
QTY
Quantity
Share the love
Description

❤️TIPS: All goods are authentic, with genuine patents, counterfeit must be investigated! Customers, please identify our products! Licensed by Putoglobal Inc.

✅ Guaranteed! GoogleTrusted Store!

✅Paypal and Credit Card secure payment.🏪PalPay certified reputable merchant.💵Has paid 100k USD in PayPal as store guarantee


😍2026 Seed Paper Calendar  - Proven Success: A Gift Everyone Will Love. 🎁

This is more than a calendar; it’s a year-round greenery guide! Each page contains specially selected flower, herb, or fruit seeds. Just tear off the page, plant it, and watch nature thrive. Made with 100% organic, non-GMO seeds and eco-friendly biodegradable paper, it’s perfect for a greener lifestyle.

100% Organic and Non-GMO: Every seed meets strict organic standards, making it safe and healthy for families, including children.

What seeds will be included in the calendar?

1. Flowers

  • Calendula (Pot Marigold) – Bright and easy to grow.
  • Cornflower (Bachelor's Button) – Colorful blooms, adaptable.
  • Zinnias – Fast-growing, vibrant flowers.
  • Echinacea (Coneflower) – Hardy and long-lasting blooms.
  • Snapdragons – Versatile and suitable for indoor or outdoor planting.
  • Daisies – Classic flowers, great for various climates.
  • Marigold – Pest-resistant and colorful.
  • Sunflowers (Dwarf varieties) – Ideal for pots or small garden spaces.

2. Fruits

  • Strawberries – Ideal for containers and garden beds.
  • Tomatoes – Easy to grow in pots or outdoors.
  • Cucumbers – Adaptable for indoor or outdoor growing.
  • Pumpkins – Suitable for outdoor gardens.
  • Watermelon – Thrives in warm conditions.
  • Lemon – Great for indoor pots with sufficient light.
  • Blueberries – Ideal for container or garden planting.

3. Herbs

  • Basil – Easy to grow, thrives in warmth and light.
  • Parsley – Hardy and suitable for both indoor and outdoor growing.
  • Mint – Fast-growing and adaptable to a variety of conditions.
  • Oregano – Versatile, grows well in pots or garden beds.
  • Thyme – Compact and aromatic, perfect for small spaces.
  • Cilantro (Coriander) – Quick-growing and flavorful.
  • Chives – Great for both indoor pots and outdoor gardens.
  • Sage – Hardy herb that works well indoors or outdoors.

🌱Monthly Surprises: Each month contains seeds tailored to that time of year, ensuring your garden stays vibrant all year round.

 100% handmade Eco-Friendly Materials
Using locally sourced recycled paper. No cheap plastic or cardboard sourced from overseas is used, ensuring no pollution and supporting sustainability.

🌱 How to Plant Your Seed Calendar:

Every piece calendar includes planting instructions on the back so they know exactly what to do!

Just requires consistent sunlight, a thin layer of soil and some light watering!

After 3-5 weeks, your friend will have a beautiful flowering card growing!

  1. Plant the Seed Calendar: Gently bury the seed card in the soil. Before planting, make sure the card is fully soaked in water until it becomes soft and damp.

  2. Daily Care: Check the soil and seed card daily to keep them moist, ensuring proper ventilation as well.

  3. Ideal Placement: Place the pot in a spot with ample sunlight, like a windowsill or sheltered balcony.

  4. Watch for Buds: Carefully observe as the seed card starts to sprout small buds—your plant is coming to life!

  5. Flexible Planting Options: The seed card contains multiple seeds; if you’d like to plant them separately, break the card into smaller pieces.

  6. Transplanting: Once the seedlings grow larger, transfer them into a bigger pot with additional soil, and gently fertilize to support continuous growth.
    🎁Each card holds a gift of growth and beauty, perfect for any occasion!

We hope to use seed paper to convey the intention of caring for the earth and to recall the love, warmth, strength and hope in people's lives.❤️

Customer Feedback

Making the Calendar Part of Our Lives

“I never imagined that a calendar could grow flowers! It’s truly amazing, and the kids absolutely love it!” — Anna K.(Purchase the 2025 Seed Calendar)

“It’s both a decoration and a planting experience. Every month brings a new surprise!” — Tom S.(Purchase the 2025 Seed Calendar)

Planting Fun: With each day, you can not only record your life but also look forward to watching the seeds sprout and bloom, bringing joy to your daily routine.

Perfect Gift: Whether for friends or yourself, this calendar is a treasured keepsake and a beautiful decoration.

As advocates of a greener lifestyle, our seed calendar isn’t just a practical tool but a part of a larger movement toward environmental sustainability. The biodegradable seed-embedded paper adds new life to the earth.

Let’s add a touch of green to the planet together and sow seeds of hope! 🌼

Buy now and embark on an eco-friendly journey in 2026!


✅ 100% Seed Sprout Guarantee: If your seeds don't sprout, we replace the page for free!

🌱 The Inspiration Behind This Seed Calendar 🌸 (50% Profit Donated)

This Seed Calendar was inspired by a day spent with children at an orphanage. Their hand-drawn pictures of gardens sparked the idea to create a calendar that lets everyone experience the magic and joy of planting. To give back, we donate 50% of our profits to support children in need, ensuring they grow up with the same hope and happiness.

Click "ADD TO CART" To Get Yours Now!


 
🌎 Worldwide Shipping ✈  
Delivery typically takes different times based on the different destination. You may receive your items earlier. Tracking Numbers will always be sent so you can track it every step of the way! 
🔒 100% Risk-Free Purchase
 
We stand behind the quality of our seed calendars. If you’re not completely satisfied, we offer a 30-day money-back guarantee for your peace of mind.
 
🏭 Our Warehouse Once your order is dispatched, depending on your country or region, products will be delivered to you as soon as possible.