Personalized Photo Envelope Necklace
Personalized Photo Envelope Necklace
Personalized Photo Envelope Necklace
Personalized Photo Envelope Necklace
Personalized Photo Envelope Necklace
Personalized Photo Envelope Necklace
Personalized Photo Envelope Necklace
Personalized Photo Envelope Necklace
1/8
Personalized Photo Envelope Necklace
Personalized Photo Envelope Necklace
Personalized Photo Envelope Necklace
Personalized Photo Envelope Necklace
Personalized Photo Envelope Necklace
Personalized Photo Envelope Necklace
Personalized Photo Envelope Necklace
Personalized Photo Envelope Necklace
1/8

Personalized Photo Envelope Necklace

$26.90
$59.95
Save $33.05
COLORSilver
Please select a color
Quantity
/** @private {string} */ class SpzCustomAnchorScroll extends SPZ.BaseElement { static deferredMount() { return false; } constructor(element) { super(element); /** @private {Element} */ this.scrollableContainer_ = null; } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } buildCallback() { this.viewport_ = this.getViewport(); this.initActions_(); } setTarget(containerId, targetId) { this.containerId = '#' + containerId; this.targetId = '#' + targetId; } scrollToTarget() { const container = document.querySelector(this.containerId); const target = container.querySelector(this.targetId); const {scrollTop} = container; const eleOffsetTop = this.getOffsetTop_(target, container); this.viewport_ .interpolateScrollIntoView_( container, scrollTop, scrollTop + eleOffsetTop ); } initActions_() { this.registerAction( 'scrollToTarget', (invocation) => this.scrollToTarget(invocation?.caller) ); this.registerAction( 'setTarget', (invocation) => this.setTarget(invocation?.args?.containerId, invocation?.args?.targetId) ); } /** * @param {Element} element * @param {Element} container * @return {number} * @private */ getOffsetTop_(element, container) { if (!element./*OK*/ getClientRects().length) { return 0; } const rect = element./*OK*/ getBoundingClientRect(); if (rect.width || rect.height) { return rect.top - container./*OK*/ getBoundingClientRect().top; } return rect.top; } } SPZ.defineElement('spz-custom-anchor-scroll', SpzCustomAnchorScroll); const STRENGTHEN_TRUST_URL = "/api/strengthen_trust/settings"; class SpzCustomStrengthenTrust extends SPZ.BaseElement { constructor(element) { super(element); this.renderElement_ = null; } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } buildCallback() { this.xhr_ = SPZServices.xhrFor(this.win); const renderId = this.element.getAttribute('render-id'); SPZCore.Dom.waitForChild( document.body, () => !!document.getElementById(renderId), () => { this.renderElement_ = SPZCore.Dom.scopedQuerySelector( document.body, `#${renderId}` ); if (this.renderElement_) { this.render_(); } this.registerAction('track', (invocation) => { this.track_(invocation.args); }); } ); } render_() { this.fetchData_().then((data) => { if (!data) { return; } SPZ.whenApiDefined(this.renderElement_).then((apis) => { apis?.render(data); document.querySelector('#strengthen-trust-render-1539149753700').addEventListener('click',(event)=>{ if(event.target.nodeName == 'A'){ this.track_({type: 'trust_content_click'}); } }) }); }); } track_(data = {}) { const track = window.sa && window.sa.track; if (!track) { return; } track('trust_enhancement_event', data); } parseJSON_(string) { let result = {}; try { result = JSON.parse(string); } catch (e) {} return result; } fetchData_() { return this.xhr_ .fetchJson(STRENGTHEN_TRUST_URL) .then((responseData) => { if (!responseData || !responseData.data) { return null; } const data = responseData.data; const moduleSettings = (data.module_settings || []).reduce((result, moduleSetting) => { return result.concat(Object.assign(moduleSetting, { logos: (moduleSetting.logos || []).map((item) => { return moduleSetting.logos_type == 'custom' ? this.parseJSON_(item) : item; }) })); }, []); return Object.assign(data, { module_settings: moduleSettings, isEditor: window.self !== window.top, }); }); } } SPZ.defineElement('spz-custom-strengthen-trust', SpzCustomStrengthenTrust);
SKU:
Weight: 0kg
Barcode:

KEEP BEST MOMENTS WITH OUR PERSONALIZED PHOTO NECKLACE

A custom necklace for anything you love in life. Each necklace is made to order and has been designed and handcrafted by skilled artisans

This Personalized Postcard Necklace will become a precious souvenir for the next few years. Upload photos and leave us the text you like. We will guard your memory for generations. Simple style design, suitable for any occasion, birthday, party, workplace...

The creative opening and closing design, when it is closed, sincere words, let everyone admire your love for her, when it is opened, the precious memory comes out, which is amazing!

 HOW TO ORDER
Fill in the options above. If you want to order more than one necklace fill in all info for one necklace then add it to the cart. Then fill in your second necklace's info and click add to cart and so on. When uploading your picture please make sure it is a high-quality image.