Nose Piercings - Shop Nose Piercings & Packs - Lovisa (2024)

Express your unique style with our large range of nose piercing jewelry. Choose from classic nose and septum rings to corkscrew and L-shaped studs. For more trending designs, we've got you covered with cute diamante or charm nose studs that are bound to turn heads. Our body jewelry are crafted with high-quality materials like titanium and surgical steel, so they last longer and are great for sensitive piercing areas like nose cartilage. Find the perfect nose piercings to elevate your look with Lovisa!

Express your unique style with our large range of nose piercing jewelry. Choose from classic nose and septum rings to corkscrew and L-shaped studs. For... Read more... Read less

<${args.templates.productListHeader} />

<${args.templates.filters} />

Showing ${helpers.getCurrentPage() * 48 - (48 - 1)} - ${totalpagecount} of ${helpers.getTotalProductsCount()} Results

<${args.templates.products} /> <${args.templates.productListFooter} />

${helpers.isFilterDrawerOpen() ? html`

` : ''}

<${args.templates.footer} /> `; } }, header: { render: function(html, args) { var props = args.props; var helpers = props.helpers; var labels = args.labels; var filterOptions = helpers.getTemplateOptions('filters'); return html`

Filter ${helpers.getTotalProductsCount() ? '('+helpers.getTotalProductsCount()+')' : ''} Filter ${helpers.getTotalProductsCount() ? '('+helpers.getTotalProductsCount()+')' : ''}

Sort By

${filterOptions.includeSortOptionsInFilters ? '' : html` <${args.templates.sortOptions} /> `}

`; } }, productReviews: { // Custom template to render variants render: function(html, args) { var product = args.props.product; if (typeof product.metafields.okendo == 'undefined' || typeof product.metafields.okendo.summaryData == 'undefined' || typeof product.metafields.okendo.StarRatingSnippet == 'undefined') { return null; } var reviewCount = product.metafields.okendo.summaryData.value.reviewCount; var reviewCountStr = `(${ reviewCount })`; if (reviewCount == 0 ) { reviewCountStr = ''; } var starRattingSnippet = product.metafields.okendo.StarRatingSnippet.value.replaceAll(["#oke-star-"], "#lovisa-star-") + reviewCountStr; return html``; } }, product: { render: function(html, args) { var props = args.props; var helpers = props.helpers; var product = props.product; var price = product.price; var compareAtPrice = product.compare_at_price; var productOptions = helpers.getTemplateOptions('product'); // Retrieve the product link using the productPageUrl helper var productLink = productOptions.productPageUrl(product) var variants = product.variants; var tags = product.tags; var badge = ''; var offer = ''; var offerProperty = ''; var badgeStyles = ''; var isOnlyInStore = false; var isOnlyInStoreClass = ''; if (tags.length) { tags.forEach(function(tag) { if (tag === 'in-store') { isOnlyInStore = true; isOnlyInStoreClass = 'hide'; } if (tag.includes('offer:')) { var badgeParts = tag.split(':'); badge = badgeParts[1]; offer = badgeParts[1]; badge = badge.replaceAll("-", " "); if (badgeParts[2]) { var badgeBackgroundColour = badgeParts[2]; badgeStyles = `background-color: ${badgeBackgroundColour};`; } if (badgeParts[3]) { var badgeTextColour = badgeParts[3]; badgeStyles = `${badgeStyles} color: ${badgeTextColour};`; } } }); if (offer != '') { offerProperty = offer.replace('-for-','-'); } } if (!badge) { var collections = product.collections; var collectionsMetaObject = window.theme.collectionMetaobjects; var tempbadge = false; for (var i = 0; i < collectionsMetaObject.length; i++) { for (var j = 0; j < collections.length; j++) { if (collections[j].title == collectionsMetaObject[i].collection_name) { badge = collectionsMetaObject[i].badge_text; badgeStyles = `background-color: ${collectionsMetaObject[i].badge_background_color}`; badgeStyles = `${badgeStyles}; color: ${collectionsMetaObject[i].badge_text_color};`; tempbadge = true; break; } } if (tempbadge) { break; } } } return html`
${product.images.length > 1 ? html` ` : html` `} <${args.templates.addToCartForm} product=${product} /> <${args.templates.productObj} product=${product} /> ${badge !='' ? html`${badge}` : ''} ${product.title} ${helpers.isStorefrontAPICallPending() ? html` ` : html` ${helpers.isProductOnSale(compareAtPrice, price) ? html` ${helpers.formatCurrency(price)} ` : ''} ${helpers.formatCurrency(compareAtPrice === null ? price : compareAtPrice)} `} ${helpers.isProductOnSale(compareAtPrice, price) ? html` ${ Math.round(((compareAtPrice - price) * 100) / compareAtPrice) }% Off ` : '' } <${args.templates.productReviews} product=${product} />
`; } }, filters: { options: { collapsible: true, includeSortOptionsInFilters: false, autoCollapse: true, showAppliedFilters: true, showClearAllFilters: true, showClearActionForIndividualFilters: true, showMatchingProductsCount: true, defaultExpandedFilters: [], showFiltersInDrawer: () => { return window.innerWidth <= 768; } }, render: function(html, args) { var props = args.props; var labels = args.labels; var helpers = props.helpers; var filters = helpers.getFilters(); var appliedFilters = helpers.getAppliedFilters(true); var showClearAllFiltersAction = props.showClearAllFilters && appliedFilters.length; var classes = ['filters']; if (props.collapsible) { classes.push('collapsible'); } var className = classes.join(' '); return html`

${props.showAppliedFilters ? html` <${args.templates.appliedFilters} /> ` : ''} ${showClearAllFiltersAction ? html`

{ helpers.clearAllFilters(); clearAllFilterDataLayerEvent(props); }}> ${labels.filters.clearAllFilters}

` : ''}

<${args.templates.filtersHeader} /> ${props.includeSortOptionsInFilters === 'top' ? html` <${args.templates.sortOptionInFilters} /> ` : ''} ${filters.map( filter => html` <${args.templates.filter} filter=${filter} /> ` )} ${props.includeSortOptionsInFilters === true || props.includeSortOptionsInFilters === 'bottom' ? html` <${args.templates.sortOptionInFilters} /> ` : ''}

`; }, callbacks: { afterEveryRender: function(helpers) { const searchInputs = document.querySelectorAll('.search__input'); if (!searchInputs || searchInputs.length === 0) { return; } searchInputs.forEach(inputEL => { inputEL.addEventListener('focus', function() { const filtersDrawer = document.querySelector('.show-filters-in-drawer'); if (filtersDrawer && helpers.isFilterDrawerOpen()) { helpers.closeFilterDrawer(); } }); }); var product_card_show_variants = document.querySelectorAll(".product-card__variants--show"); product_card_show_variants.forEach((variant) => { variant.classList.remove('product-card__variants--show'); }); setTimeout(function() { var relatedProductCards = document.querySelectorAll('.product-card'); if (relatedProductCards && relatedProductCards.length) { relatedProductCards.forEach(productCardElement => { new window.theme.ProductCard(productCardElement, 'tagalys'); }); } }, 2000); setTimeout(function() { var filterBarElement = document.querySelector('.collection__tabs'); var filterWrapperElement = document.querySelector('.filter-wrapper'); var headerElement = document.querySelector('#shopify-section-header'); var headerElementHeight = (headerElement) ? headerElement.getBoundingClientRect().height : 0; var categorySubnavElement = document.querySelector('#shopify-section-category-subnavigation'); var categorySubnavElementHeight = (categorySubnavElement) ? categorySubnavElement.getBoundingClientRect().height : 0; var headerHeight = ((headerElementHeight) + (categorySubnavElementHeight) - 2); if (filterBarElement && window.innerWidth < theme.settings.grid_medium) { this.filterBar = stickybits(".plp-header", { stickyBitStickyOffset: headerHeight, useStickyClasses: true, useGetBoundingClientRect: true }); } if (filterWrapperElement && window.innerWidth > theme.settings.grid_medium) { this.filterWrapper = stickybits(".filter-wrapper", { stickyBitStickyOffset: headerHeight, useStickyClasses: true, useGetBoundingClientRect: true }); } }, 1000) } } }, filtersHeader: { render: function(html, args) { var props = args.props; var labels = args.labels; return html``; } }, appliedFilters: { render: function(html, args) { var props = args.props; var helpers = props.helpers; var appliedFilters = helpers.getAppliedFilters(true); if (!appliedFilters.length) { return html``; } return html`
    ${appliedFilters.map(appliedFilter => { if (appliedFilter.type === 'range') { return html`
  • { helpers.clearFilter(appliedFilter.id); removeFilterDataLayerEvent(props, appliedFilter.id); }} class="applied-filter"> ${helpers.labelFormatter( appliedFilter.display_format, appliedFilter.selected_min, appliedFilter.currency )} - ${helpers.labelFormatter( appliedFilter.display_format, appliedFilter.selected_max, appliedFilter.currency )} <${args.templates.closeIcon} />
  • `; } return appliedFilter.items.map(filterItem => { return html`
  • { helpers.clearFilter(appliedFilter.id, filterItem.id); removeFilterDataLayerEvent(props, appliedFilter.id, filterItem); }} > ${filterItem.name} <${args.templates.closeIcon} />
  • `; }); })}
`; } }, filter: { render: function(html, args) { var props = args.props; var helpers = props.helpers; var classes = ['collection__filter', 'filter']; var isCollapseOpen = false; if (props.collapsible) { isCollapseOpen = helpers.isCollapsibleFilterExpanded(props.filter.id); if (isCollapseOpen) { classes.push('expanded'); } else { classes.push('collapsed'); } } var className = classes.join(' '); return html`

<${args.templates.filterHeader} filterHeading=${props.filter.name} filterId=${props.filter.id} /> <${args.templates.filterItems} filter=${props.filter} />

`; } }, filterHeader: { render: function(html, args) { var props = args.props; var helpers = props.helpers; var labels = args.labels; var filterOptions = helpers.getTemplateOptions('filters'); var showClearActionForIndividualFilters = filterOptions.showClearActionForIndividualFilters && helpers.isFilterApplied(props.filterId); var toggleCollapsibleFilter = () => { helpers.toggleCollapsibleFilter(props.filterId); }; var clearFilter = event => { event.stopPropagation(); helpers.clearFilter(props.filterId); removeFilterDataLayerEvent(props, props.filterId); }; return html`

${props.filterHeading}

${showClearActionForIndividualFilters ? html`

${labels.filters.clearIndividualFilter}

` : ''} ${filterOptions.collapsible ? html` <${args.templates.downArrow} /> ` : ''}

`; } }, filterItems: { render: function(html, args) { var props = args.props; if (props.filter.type === 'checkbox') { return html`

<${args.templates.filterCheckBoxes} filterId=${props.filter.id} filterItems=${props.filter.items} />

`; } return html`

<${args.templates.rangeSliderFilterItem} filter=${props.filter} />

`; } }, filterCheckBoxes: { render: function(html, args) { var props = args.props; return html`
    ${props.filterItems.map(filterItem => { return html` <${args.templates.checkboxFilterItem} filterId=${props.filterId} filterItem=${filterItem} > ${ filterItem.selected && filterItem.items ? html` <${args.templates.filterCheckBoxes} filterId=${props.filterId} filterItems=${filterItem.items} /> ` : '' } ${args.templates.checkboxFilterItem}> `; })}
`; } }, checkboxFilterItem: { render: function(html, args) { var props = args.props; var helpers = props.helpers; const onFilterClick = event => { event.stopPropagation(); if (props.filterItem.selected) { helpers.clearFilter(props.filterId, props.filterItem.id); removeFilterDataLayerEvent(props, props.filterId, props.filterItem); } else { helpers.applyFilter(props.filterId, props.filterItem.id); applyFilterDataLayerEvent(props); } }; return html`
  • ${props.filterItem.name} ${props.showMatchingProductsCount ? html` (${props.filterItem.count}) ` : ''} ${props.children}
  • `; } }, rangeSliderFilterItem: { render: function(html, args) { var props = args.props; var helpers = props.helpers; var labels = args.labels; var priceLabel = 'Any'; if (props.sliderInputValues[0] > props.filter.min && props.sliderInputValues[1] < props.filter.max) { priceLabel = 'Between ' + helpers.labelFormatter(props.filter.display_format, props.sliderInputValues[0], props.filter.currency) + ' - ' + helpers.labelFormatter(props.filter.display_format, props.sliderInputValues[1], props.filter.currency); } else if (props.sliderInputValues[0] > props.filter.min) { priceLabel = 'Above ' + helpers.labelFormatter(props.filter.display_format, props.sliderInputValues[0], props.filter.currency); } else if (props.sliderInputValues[1] < props.filter.max) { priceLabel = 'Below ' + helpers.labelFormatter(props.filter.display_format, props.sliderInputValues[1], props.filter.currency); } var minPriceValue = window.Currency.formatMoney( props.sliderInputValues[0] * 100, window.Currency.moneyFormats[window.Shopify.currency.active].money_format ); var maxPriceValue = window.Currency.formatMoney( props.sliderInputValues[1] * 100, window.Currency.moneyFormats[window.Shopify.currency.active].money_format ); var priceValueLeft = '0%'; if (props.sliderInputValues[0] > props.filter.min) { priceValueLeft = ((props.sliderInputValues[0] - props.filter.min) / props.filter.max) * 100; priceValueLeft += '%'; } var priceValueRight = '0%'; if (props.sliderInputValues[1] < props.filter.max) { // eslint-disable-next-line no-mixed-operators priceValueRight = (100 - props.sliderInputValues[1] / props.filter.max) * 100; priceValueRight += '%'; } var priceValueLeftClass = ''; var priceValueRightClass = ''; if (document.querySelector('.noUi-handle-lower.noUi-active')) { priceValueLeftClass = 'drag'; } if (document.querySelector('.noUi-handle-upper.noUi-active')) { priceValueRightClass = 'drag'; } return html`

    ${priceLabel}

    ${minPriceValue} ${maxPriceValue}

    `; } }, sortOptionInFilters: { render: function(html, args) { var props = args.props; var helpers = props.helpers; var labels = args.labels; var filterOptions = helpers.getTemplateOptions('filters'); var appliedSortOption = helpers.getAppliedSortOption(); var sortOptions = helpers.getSortOptions(); let classes = ['filter']; let isCollapseOpen = false; if (filterOptions.collapsible) { isCollapseOpen = helpers.isCollapsibleFilterExpanded('sort_options'); if (isCollapseOpen) { classes.push('expanded'); } else { classes.push('collapsed'); } } var className = classes.join(' '); return html`

    <${args.templates.filterHeader} filterHeading=${labels.sortOptions.sortBy} filterId=${'sort_options'} />

      ${sortOptions.map(sortOption => { const checked = sortOption.id === appliedSortOption.id; return html`
    • { helpers.applySortOption(sortOption.id); clickSortOptionDataLayerEvent(helpers); }} > ${sortOption.label}
    • `; })}
    `; } }, downArrow: { // eslint-disable-next-line no-unused-vars render: function(html, args) { return html` `; } }, addToCartForm: { render: function(html, args) { var product = args.props.product; var variants = product.variants; var isOnlyInStore = false; var tags = product.tags; if (tags.length) { tags.forEach(function(tag) { if (tag === 'in-store') { isOnlyInStore = true; } }); } return html` `; } }, variantOption: { render: function(html, args) { var product = args.props.product; var variants = product.variants; return html`

    Please select an option below to add to cart.

    ${variants.map(variant => { if (variant.available) { return html`

    `; } else { return html`

    `; } })}

    ${variants.map(variant => { if (variant.available) { return html`

    `; } else { return html`

    `; } })}

    `; } }, variantSelect: { render: function(html, args) { var product = args.props.product; var variants = product.variants; return html` `; } }, productObj: { // Custom template to render variants render: function(html, args) { var product = args.props.product; return html` `; } }, products: { render: function(html, args) { var props = args.props; var helpers = props.helpers; var products = helpers.getProducts(); return html` ${products.map( (product, index) => html` <${args.templates.product} key=${index} product=${product} /> ` )} `; }, callbacks: { // eslint-disable-next-line no-unused-vars afterInitialRender: function(helpers) { setTimeout(function() { var relatedProductCards = document.querySelectorAll('.product-card'); if (relatedProductCards && relatedProductCards.length) { relatedProductCards.forEach(productCardElement => { new window.theme.ProductCard(productCardElement, 'tagalys'); }); } }, 2000); } } }, sortOptions: { render: function(html, args) { var props = args.props; var labels = args.labels; var helpers = props.helpers; var sortOptions = helpers.getSortOptions(); var appliedSortOption = helpers.getAppliedSortOption(); var applySortOption = event => { helpers.applySortOption(event.target.value); clickSortOptionDataLayerEvent(helpers); }; return html` `; } }, productListHeader: { render: function(html, args) { return html` <${args.templates.infoAndActions} /> `; } }, noResults: { options: '', render: function(html, args) { var props = args.props; var helpers = props.helpers; var labels = args.labels; return html`

    ${labels.searchResults.noResultsHeading.heading} "${helpers.getQuery()}" ${labels.searchResults.noResultsHeading.subHeading}

    <${args.templates.noResultsWidgets} />

    `; } }, paginationLinks: { options: { showNumberedPageLinks: true, numberedPageLinksWindowSize: 3, showPreviousPageLink: true, showFirstPageLink: true, showNextPageLink: true, scrollTop: true }, render: function(html, args) { var props = args.props; var helpers = props.helpers; var labels = args.labels; var pagesToDisplay = helpers.getPagesToDisplay(props.numberedPageLinksWindowSize); if(pagesToDisplay.length <= 1){ return; } var currentPage = helpers.getCurrentPage(); var hasPreviousPage = helpers.hasPreviousPage(); var hasNextPage = helpers.hasNextPage(); var goToFirstPage = () => { helpers.goToPage(1); }; return html`
      ${props.showFirstPageLink ? html`
    • ` : ''} ${props.showPreviousPageLink ? html`
    • ` : ''} ${props.showNumberedPageLinks ? pagesToDisplay.map(pageDetail => { console.log('showNumberedPageLinks' , pageDetail) var classes = ['ais-pagination__item']; var showEllipsis = pageDetail.jumpAfter; if (pageDetail.current) { classes.push('ais-pagination__item--active'); } if (pageDetail.jumpAfter) { classes.push('page-jump-over'); } var className = classes.join(' '); if(pageDetail.page == helpers.getTotalPages()) { return html ``; } return html`
    • `; }) : ''} ${props.showNextPageLink ? html` ${ (helpers.getCurrentPage() != helpers.getTotalPages()) ? html `
    • ` : html `
    • ` }
    • ` : ''}
    `; } }, pagination: { render: function(html, args) { var props = args.props; var helpers = props.helpers; if (props.infiniteScroll) { if (helpers.canLoadNextResults(props.showLoadNextAfterEvery)) { return html` <${args.templates.loadNext} /> `; } return ''; } return html`

    <${args.templates.paginationLinks} />

    `; } }, infoAndActions: { render: function(html, args) { var props = args.props; var helpers = props.helpers; var labels = args.labels; var filterOptions = helpers.getTemplateOptions('filters'); var getResultsLabel = () => { return labels.searchResults.productsCount.replace('', helpers.getTotalProductsCount()); }; return html`

    Filter ${helpers.getTotalProductsCount() ? '('+helpers.getTotalProductsCount()+')' : ''} ${filterOptions.includeSortOptionsInFilters ? '' : html` <${args.templates.sortOptions} /> `}

    `; } }, callbacks: { onSuccessfulAPICall: function(response, helpers) { var product_card_show_variants = document.querySelectorAll(".product-card__variants--show"); product_card_show_variants.forEach((variant) => { variant.classList.remove('product-card__variants--show'); }); setTimeout(function() { var filterBarElement = document.querySelector('.collection__tabs'); var filterWrapperElement = document.querySelector('.filter-wrapper'); var headerElement = document.querySelector('#shopify-section-header'); var headerElementHeight = (headerElement) ? headerElement.getBoundingClientRect().height : 0; var categorySubnavElement = document.querySelector('#shopify-section-category-subnavigation'); var categorySubnavElementHeight = (categorySubnavElement) ? categorySubnavElement.getBoundingClientRect().height : 0; var headerHeight = ((headerElementHeight) + (categorySubnavElementHeight) - 2); if (filterWrapperElement && window.innerWidth > theme.settings.grid_medium) { this.filterWrapper = stickybits(".filter-wrapper", { stickyBitStickyOffset: headerHeight, useStickyClasses: true, useGetBoundingClientRect: true }); } }, 1000) return response; } } } var shopifyProductListingPageTemplates = { widget: { labels: { searchResults: { heading: { standard: " search results for ''", corrected: "No results for ''. Showing results for '' instead", partialMatches: "No products exactly match ''. Showing products that partially match." }, productsCount: '()', noResultsHeading: { heading: 'Sorry! We couldn’t find any search results for ', subHeading: 'Try searching again using a different keyword or spelling' } }, filters: { heading: 'Filters', clearAllFilters: 'Clear all', clearIndividualFilter: 'Clear', drawerFilterToggle: 'Filter by', rangeFilterValueSeparator: 'to' }, sortOptions: { sortBy: 'Sort by' }, pagination: { firstPage: 'First', previousPage: 'Previous', nextPage: 'Next', loadNext: 'Load more', loading: 'Loading...' } }, options: { includeTagalysCSS: false, canAppendQueryStringToUrl: true, limit: 16 }, render: function(html, args) { var props = args.props; var helpers = props.helpers; if (helpers.isInitialLoading()) { return html` <${args.templates.loader} /> `; } let classes = ['plp', 'search-results', 'page-width-wide']; if (helpers.isFilterDrawerOpen()) { classes.push('filter-drawer-opened'); } if (helpers.isLoading()) { classes.push('loading'); } if (helpers.canShowFiltersInDrawer()) { classes.push('show-filters-in-drawer'); } var className = classes.join(' '); return html`

    <${args.templates.header} />

    <${args.templates.productListHeader} />

    <${args.templates.filters} />

    <${args.templates.products} /> <${args.templates.productListFooter} />

    ${helpers.isFilterDrawerOpen() ? html`

    ` : ''}

    <${args.templates.footer} />

    `; } }, header: { render: function(html, args) { var props = args.props; var helpers = props.helpers; var labels = args.labels; var filterOptions = helpers.getTemplateOptions('filters'); return html`

    Filter ${helpers.getTotalProductsCount() ? '('+helpers.getTotalProductsCount()+')' : ''} Filter ${helpers.getTotalProductsCount() ? '('+helpers.getTotalProductsCount()+')' : ''}

    Sort By

    ${filterOptions.includeSortOptionsInFilters ? '' : html` <${args.templates.sortOptions} /> `}

    `; } }, productReviews: { // Custom template to render variants render: function(html, args) { var product = args.props.product; if (typeof product.metafields.okendo == 'undefined' || typeof product.metafields.okendo.summaryData == 'undefined' || typeof product.metafields.okendo.StarRatingSnippet == 'undefined') { return null; } var reviewCount = product.metafields.okendo.summaryData.value.reviewCount; var reviewCountStr = `(${ reviewCount })`; if (reviewCount == 0 ) { reviewCountStr = ''; } var starRattingSnippet = product.metafields.okendo.StarRatingSnippet.value.replaceAll(["#oke-star-"], "#lovisa-star-") + reviewCountStr; return html``; } }, product: { render: function(html, args) { var props = args.props; var helpers = props.helpers; var product = props.product; var price = product.price; var compareAtPrice = product.compare_at_price; var productOptions = helpers.getTemplateOptions('product'); // Retrieve the product link using the productPageUrl helper var productLink = productOptions.productPageUrl(product) var variants = product.variants; var tags = product.tags; var badge = ''; var badgeStyles = ''; var isOnlyInStore = false; if (tags.length) { tags.forEach(function(tag) { if (tag === 'in-store') { isOnlyInStore = true; } if (tag.includes('offer:')) { var badgeParts = tag.split(':'); badge = badgeParts[1]; badge = badge.replaceAll("-", " "); if (badgeParts[2]) { var badgeBackgroundColour = badgeParts[2]; badgeStyles = `background-color: ${badgeBackgroundColour};`; } if (badgeParts[3]) { var badgeTextColour = badgeParts[3]; badgeStyles = `${badgeStyles} color: ${badgeTextColour};`; } } }); } if (!badge) { var collections = product.collections; var collectionsMetaObject = window.theme.collectionMetaobjects; var tempbadge = false; for (var i = 0; i < collectionsMetaObject.length; i++) { for (var j = 0; j < collections.length; j++) { if (collections[j].title == collectionsMetaObject[i].collection_name) { badge = collectionsMetaObject[i].badge_text; badgeStyles = `background-color: ${collectionsMetaObject[i].badge_background_color}`; badgeStyles = `${badgeStyles}; color: ${collectionsMetaObject[i].badge_text_color};`; tempbadge = true; break; } } if (tempbadge) { break; } } } return html`
    ${product.images.length > 1 ? html` ` : html` `}

    <${args.templates.addToCartForm} product=${product} /> <${args.templates.productObj} product=${product} />

    ${product.title}

    ${helpers.isStorefrontAPICallPending() ? html` ` : html` ${helpers.isProductOnSale(compareAtPrice, price) ? html` ${helpers.formatCurrency(price)} ` : ''} ${helpers.formatCurrency(compareAtPrice === null ? price : compareAtPrice)} `} ${helpers.isProductOnSale(compareAtPrice, price) ? html` ${ Math.round(((compareAtPrice - price) * 100) / compareAtPrice) }% Off ` : '' } <${args.templates.productReviews} product=${product} />

    `; } }, filters: { options: { collapsible: true, includeSortOptionsInFilters: false, autoCollapse: true, showAppliedFilters: true, showClearAllFilters: true, showClearActionForIndividualFilters: true, showMatchingProductsCount: true, defaultExpandedFilters: [], showFiltersInDrawer: () => { return window.innerWidth <= 768; } }, render: function(html, args) { var props = args.props; var labels = args.labels; var helpers = props.helpers; var filters = helpers.getFilters(); var appliedFilters = helpers.getAppliedFilters(true); var showClearAllFiltersAction = props.showClearAllFilters && appliedFilters.length; var classes = ['filters']; if (props.collapsible) { classes.push('collapsible'); } var className = classes.join(' '); return html`

    ${props.showAppliedFilters ? html` <${args.templates.appliedFilters} /> ` : ''} ${showClearAllFiltersAction ? html`

    { helpers.clearAllFilters(); clearAllFilterDataLayerEvent(props); }}> ${labels.filters.clearAllFilters}

    ` : ''}

    <${args.templates.filtersHeader} /> ${props.includeSortOptionsInFilters === 'top' ? html` <${args.templates.sortOptionInFilters} /> ` : ''} ${filters.map( filter => html` <${args.templates.filter} filter=${filter} /> ` )} ${props.includeSortOptionsInFilters === true || props.includeSortOptionsInFilters === 'bottom' ? html` <${args.templates.sortOptionInFilters} /> ` : ''}

    `; }, callbacks: { afterEveryRender: function(helpers) { const searchInputs = document.querySelectorAll('.search__input'); if (!searchInputs || searchInputs.length === 0) { return; } searchInputs.forEach(inputEL => { inputEL.addEventListener('focus', function() { const filtersDrawer = document.querySelector('.show-filters-in-drawer'); if (filtersDrawer && helpers.isFilterDrawerOpen()) { helpers.closeFilterDrawer(); } }); }); //customTagalysActionEvents(helpers); var product_card_show_variants = document.querySelectorAll(".product-card__variants--show"); product_card_show_variants.forEach((variant) => { variant.classList.remove('product-card__variants--show'); }); setTimeout(function() { var relatedProductCards = document.querySelectorAll('.product-card'); if (relatedProductCards && relatedProductCards.length) { relatedProductCards.forEach(productCardElement => { new window.theme.ProductCard(productCardElement, 'tagalys'); }); } }, 2000); } } }, filtersHeader: { render: function(html, args) { var props = args.props; var labels = args.labels; return html``; } }, appliedFilters: { render: function(html, args) { var props = args.props; var helpers = props.helpers; var appliedFilters = helpers.getAppliedFilters(true); if (!appliedFilters.length) { return html``; } return html`
      ${appliedFilters.map(appliedFilter => { if (appliedFilter.type === 'range') { return html`
    • { helpers.clearFilter(appliedFilter.id); removeFilterDataLayerEvent(props, appliedFilter.id); }} class="applied-filter"> ${helpers.labelFormatter( appliedFilter.display_format, appliedFilter.selected_min, appliedFilter.currency )} - ${helpers.labelFormatter( appliedFilter.display_format, appliedFilter.selected_max, appliedFilter.currency )} <${args.templates.closeIcon} />
    • `; } return appliedFilter.items.map(filterItem => { return html`
    • { helpers.clearFilter(appliedFilter.id, filterItem.id); removeFilterDataLayerEvent(props, appliedFilter.id, filterItem); }} > ${filterItem.name} <${args.templates.closeIcon} />
    • `; }); })}
    `; } }, filter: { render: function(html, args) { var props = args.props; var helpers = props.helpers; var classes = ['collection__filter', 'filter']; var isCollapseOpen = false; if (props.collapsible) { isCollapseOpen = helpers.isCollapsibleFilterExpanded(props.filter.id); if (isCollapseOpen) { classes.push('expanded'); } else { classes.push('collapsed'); } } var className = classes.join(' '); return html`

    <${args.templates.filterHeader} filterHeading=${props.filter.name} filterId=${props.filter.id} /> <${args.templates.filterItems} filter=${props.filter} />

    `; } }, filterHeader: { render: function(html, args) { var props = args.props; var helpers = props.helpers; var labels = args.labels; var filterOptions = helpers.getTemplateOptions('filters'); var showClearActionForIndividualFilters = filterOptions.showClearActionForIndividualFilters && helpers.isFilterApplied(props.filterId); var toggleCollapsibleFilter = () => { helpers.toggleCollapsibleFilter(props.filterId); }; var clearFilter = event => { event.stopPropagation(); helpers.clearFilter(props.filterId); removeFilterDataLayerEvent(props, props.filterId); }; return html`

    ${props.filterHeading}

    ${showClearActionForIndividualFilters ? html`

    ${labels.filters.clearIndividualFilter}

    ` : ''} ${filterOptions.collapsible ? html` <${args.templates.downArrow} /> ` : ''}

    `; } }, filterItems: { render: function(html, args) { var props = args.props; if (props.filter.type === 'checkbox') { return html`

    <${args.templates.filterCheckBoxes} filterId=${props.filter.id} filterItems=${props.filter.items} />

    `; } return html`

    <${args.templates.rangeSliderFilterItem} filter=${props.filter} />

    `; } }, filterCheckBoxes: { render: function(html, args) { var props = args.props; return html`
      ${props.filterItems.map(filterItem => { return html` <${args.templates.checkboxFilterItem} filterId=${props.filterId} filterItem=${filterItem} > ${ filterItem.selected && filterItem.items ? html` <${args.templates.filterCheckBoxes} filterId=${props.filterId} filterItems=${filterItem.items} /> ` : '' } ${args.templates.checkboxFilterItem}> `; })}
    `; } }, checkboxFilterItem: { render: function(html, args) { var props = args.props; var helpers = props.helpers; const onFilterClick = event => { event.stopPropagation(); if (props.filterItem.selected) { helpers.clearFilter(props.filterId, props.filterItem.id); removeFilterDataLayerEvent(props, props.filterId, props.filterItem); } else { helpers.applyFilter(props.filterId, props.filterItem.id); applyFilterDataLayerEvent(props); } }; return html`
  • ${props.filterItem.name} ${props.showMatchingProductsCount ? html` (${props.filterItem.count}) ` : ''} ${props.children}
  • `; } }, rangeSliderFilterItem: { render: function(html, args) { var props = args.props; var helpers = props.helpers; var labels = args.labels; var priceLabel = 'Any'; if (props.sliderInputValues[0] > props.filter.min && props.sliderInputValues[1] < props.filter.max) { priceLabel = 'Between ' + helpers.labelFormatter(props.filter.display_format, props.sliderInputValues[0], props.filter.currency) + ' - ' + helpers.labelFormatter(props.filter.display_format, props.sliderInputValues[1], props.filter.currency); } else if (props.sliderInputValues[0] > props.filter.min) { priceLabel = 'Above ' + helpers.labelFormatter(props.filter.display_format, props.sliderInputValues[0], props.filter.currency); } else if (props.sliderInputValues[1] < props.filter.max) { priceLabel = 'Below ' + helpers.labelFormatter(props.filter.display_format, props.sliderInputValues[1], props.filter.currency); } var minPriceValue = window.Currency.formatMoney( props.sliderInputValues[0] * 100, window.Currency.moneyFormats[window.Shopify.currency.active].money_format ); var maxPriceValue = window.Currency.formatMoney( props.sliderInputValues[1] * 100, window.Currency.moneyFormats[window.Shopify.currency.active].money_format ); var priceValueLeft = '0%'; if (props.sliderInputValues[0] > props.filter.min) { priceValueLeft = ((props.sliderInputValues[0] - props.filter.min) / props.filter.max) * 100; priceValueLeft += '%'; } var priceValueRight = '0%'; if (props.sliderInputValues[1] < props.filter.max) { // eslint-disable-next-line no-mixed-operators priceValueRight = (100 - props.sliderInputValues[1] / props.filter.max) * 100; priceValueRight += '%'; } var priceValueLeftClass = ''; var priceValueRightClass = ''; if (document.querySelector('.noUi-handle-lower.noUi-active')) { priceValueLeftClass = 'drag'; } if (document.querySelector('.noUi-handle-upper.noUi-active')) { priceValueRightClass = 'drag'; } return html`

    ${priceLabel}

    ${minPriceValue} ${maxPriceValue}

    `; } }, sortOptionInFilters: { render: function(html, args) { var props = args.props; var helpers = props.helpers; var labels = args.labels; var filterOptions = helpers.getTemplateOptions('filters'); var appliedSortOption = helpers.getAppliedSortOption(); var sortOptions = helpers.getSortOptions(); let classes = ['filter']; let isCollapseOpen = false; if (filterOptions.collapsible) { isCollapseOpen = helpers.isCollapsibleFilterExpanded('sort_options'); if (isCollapseOpen) { classes.push('expanded'); } else { classes.push('collapsed'); } } var className = classes.join(' '); return html`

    <${args.templates.filterHeader} filterHeading=${labels.sortOptions.sortBy} filterId=${'sort_options'} />

      ${sortOptions.map(sortOption => { const checked = sortOption.id === appliedSortOption.id; return html`
    • { helpers.applySortOption(sortOption.id); clickSortOptionDataLayerEvent(helpers); }} > ${sortOption.label}
    • `; })}
    `; } }, downArrow: { // eslint-disable-next-line no-unused-vars render: function(html, args) { return html` `; } }, addToCartForm: { render: function(html, args) { var product = args.props.product; var variants = product.variants; var isOnlyInStore = false; var tags = product.tags; if (tags.length) { tags.forEach(function(tag) { if (tag === 'in-store') { isOnlyInStore = true; } }); } return html` `; } }, variantOption: { render: function(html, args) { var product = args.props.product; var variants = product.variants; return html`

    Please select an option below to add to cart.

    ${variants.map(variant => { if (variant.available) { return html`

    `; } else { return html`

    `; } })}

    ${variants.map(variant => { if (variant.available) { return html`

    `; } else { return html`

    `; } })}

    `; } }, variantSelect: { render: function(html, args) { var product = args.props.product; var variants = product.variants; return html` `; } }, productObj: { // Custom template to render variants render: function(html, args) { var product = args.props.product; return html` `; } }, products: { render: function(html, args) { var props = args.props; var helpers = props.helpers; var products = helpers.getProducts(); return html` ${products.map( (product, index) => html` <${args.templates.product} key=${index} product=${product} /> ` )} `; }, callbacks: { // eslint-disable-next-line no-unused-vars afterInitialRender: function(helpers) { setTimeout(function() { var relatedProductCards = document.querySelectorAll('.product-card'); if (relatedProductCards && relatedProductCards.length) { relatedProductCards.forEach(productCardElement => { new window.theme.ProductCard(productCardElement, 'tagalys'); }); } }, 2000); } } }, sortOptions: { render: function(html, args) { var props = args.props; var labels = args.labels; var helpers = props.helpers; var sortOptions = helpers.getSortOptions(); var appliedSortOption = helpers.getAppliedSortOption(); var applySortOption = event => { helpers.applySortOption(event.target.value); clickSortOptionDataLayerEvent(helpers); }; return html` `; } }, productListHeader: { render: function(html, args) { return html` <${args.templates.infoAndActions} /> `; } }, noResults: { options: '', render: function(html, args) { var props = args.props; var helpers = props.helpers; var labels = args.labels; return html`

    ${labels.searchResults.noResultsHeading.heading} "${helpers.getQuery()}" ${labels.searchResults.noResultsHeading.subHeading}

    <${args.templates.noResultsWidgets} />

    `; } }, infoAndActions: { render: function(html, args) { var props = args.props var helpers = props.helpers var labels = args.labels var filterOptions = helpers.getTemplateOptions('filters') return html`

    ${filterOptions.includeSortOptionsInFilters ? '' : html`<${args.templates.sortOptions} />` }

    `; }, }, pagination: { render: function(html, args) { var props = args.props var helpers = props.helpers var labels = args.labels if (helpers.canLoadNextResults(props.showLoadNextAfterEvery)) { return html` `; } return null }, }, callbacks: { onSuccessfulAPICall: function(response, helpers) { var product_card_show_variants = document.querySelectorAll(".product-card__variants--show"); product_card_show_variants.forEach((variant) => { variant.classList.remove('product-card__variants--show'); }); setTimeout(function() { var filterBarElement = document.querySelector('.collection__tabs'); var filterWrapperElement = document.querySelector('.filter-wrapper'); var headerElement = document.querySelector('#shopify-section-header'); var headerElementHeight = (headerElement) ? headerElement.getBoundingClientRect().height : 0; var categorySubnavElement = document.querySelector('#shopify-section-category-subnavigation'); var categorySubnavElementHeight = (categorySubnavElement) ? categorySubnavElement.getBoundingClientRect().height : 0; var headerHeight = ((headerElementHeight) + (categorySubnavElementHeight) - 2); if (filterWrapperElement && window.innerWidth > theme.settings.grid_medium) { this.filterWrapper = stickybits(".filter-wrapper", { stickyBitStickyOffset: headerHeight, useStickyClasses: true, useGetBoundingClientRect: true }); } }, 1000) return response; } } } // helper for initializing the failover widget TagalysCustomisationsCollection.initializeShopifyProductListingPage = function() { return Tagalys.UIWidgets.ShopifyProductListingPage.init(selector, { params: params, templates: shopifyProductListingPageTemplates }); } // helper for initializing the primary widget TagalysCustomisationsCollection.initializeProductListingPage = function() { Tagalys.UIWidgets.ProductListingPage.init(selector, { params: params, failover: TagalysCustomisationsCollection.initializeShopifyProductListingPage, templates: productListingPageTemplates, forceFailover: window.tagalysForceFailover }); } window.addEventListener('DOMContentLoaded', () => { onTagalysReady(function() { TagalysCustomisationsCollection.initializeProductListingPage(); }); }); document.body.addEventListener('click', function(evt) { if (evt.target.closest('.collection-filters-block')) { return; } var filters = document.querySelectorAll('.collection__filter.expanded'); if (filters.length) { filters.forEach(t => t.classList.remove('expanded')); } });
    Nose Piercings - Shop Nose Piercings & Packs - Lovisa (2024)

    References

    Top Articles
    Latest Posts
    Article information

    Author: Aron Pacocha

    Last Updated:

    Views: 6580

    Rating: 4.8 / 5 (68 voted)

    Reviews: 91% of readers found this page helpful

    Author information

    Name: Aron Pacocha

    Birthday: 1999-08-12

    Address: 3808 Moen Corner, Gorczanyport, FL 67364-2074

    Phone: +393457723392

    Job: Retail Consultant

    Hobby: Jewelry making, Cooking, Gaming, Reading, Juggling, Cabaret, Origami

    Introduction: My name is Aron Pacocha, I am a happy, tasty, innocent, proud, talented, courageous, magnificent person who loves writing and wants to share my knowledge and understanding with you.