Code Samples
Due to the way in which Memberships work in Spektrix, you cannot have more than one of the same type of Membership in a Basket session at once. The examples on this page all use the same set of Memberships on the same Spektrix system, meaning that if you have already tried using one Component, others might fail due to the pre-existing Membership. In order to continue testing the others out, you'll need to delete them and empty your Basket out which can be done here.
Basic Example
Join our Gold Membership programme.
<div style="margin-bottom: 1rem;">
<spektrix-memberships client-name="iframedemo" membership-id="401ANPJQJQPQMRSBDNMVNLSPGTRBVQVRH" forward-to="https://iframetool.integrate.spektrix.com/iframedemo/website/Basket2.aspx">
<p>Join our Gold Mmbership programme.</p>
<button data-submit-membership>$100/yr</button>
<label for="autorenew">
<input type="checkbox" name="autorenew" data-set-autorenew>Autorenew?
</label>
<div data-success-container style="display: none;">Insert success content/markup here</div>
<div data-fail-container style="display: none;">Insert failure content/markup here</div>
</spektrix-memberships>
</div>
Monthly Auto-Renewing Donation
Donate $10 Monthly!
<div style="margin-bottom: 1rem;">
<spektrix-memberships client-name="iframedemo" membership-id="201AGBHDRLQHNHPHKKMPKLGPMDRDTDMVL" forward-to="https://iframetool.integrate.spektrix.com/iframedemo/website/Basket2.aspx" auto-renew>
<p>Donate $10 Monthly!</p>
<button data-submit-membership>$10/month</button>
<div data-success-container style="display: none;">Insert success content/markup here</div>
<div data-fail-container style="display: none;">Insert failure content/markup here</div>
</spektrix-memberships>
</div>
Choose your membership level
- 10% discount
- 10% discount
- Access to the members bar
<div style="margin-bottom: 1rem;">
<spektrix-memberships client-name="iframedemo" membership-id="401ANPJQJQPQMRSBDNMVNLSPGTRBVQVRH" forward-to="https://iframetool.integrate.spektrix.com/iframedemo/website/Basket2.aspx">
<button class="btn btn-dark mx-2" data-submit-membership>Buy Gold Membership</button>
<label for="autorenew">
<input type="checkbox" name="autorenew" data-set-autorenew>Autorenew?
</label>
<div data-success-container style="display: none;">Insert success content/markup here</div>
<div data-fail-container style="display: none;">Insert failure content/markup here</div>
</spektrix-memberships>
<br />
<ul>
<li>10% discount</li>
</ul>
<br />
<spektrix-memberships client-name="iframedemo" membership-id="6410ADGSLQHSNTLQCCBGCLVSMJHVNSTHK" forward-to="https://iframetool.integrate.spektrix.com/iframedemo/website/Basket2.aspx">
<button class="btn btn-dark mx-2" data-submit-membership>Buy Platinum Membership</button>
<label for="autorenew">
<input type="checkbox" name="autorenew" data-set-autorenew>Autorenew?
</label>
<div data-success-container style="display: none;">Insert success content/markup here</div>
<div data-fail-container style="display: none;">Insert failure content/markup here</div>
</spektrix-memberships>
<br />
<ul>
<li>10% discount</li>
<li>Access to the members bar</li>
</ul>
Donate to Membership
<div id="slider-box">
<h4>Amount: £<span data-item-value>0</span></h4>
<input id="sliderinput" type="range" step="1" value="0" min="0" max="200" style="width: 100%">
<span class="my-4" data-cta style="display: none;">For just £<span data-cta-amount></span> more, you could join our membership programme!</span>
</div>
<spektrix-donate style="margin-top: 2rem" client-name="iframedemo" fund-id="2603AMKKPMCKTPCPQBBCPVLVKTNCTTMPQ" donation-amount="10" forward-to="https://iframetool.integrate.spektrix.com/iframedemo/website/basket2.aspx" data-donate-component>
<button class="btn btn-dark mx-2" data-submit-donation>Donate</button>
<div class="my-4" data-success-container style="display: none;">Insert success content/markup here</div>
<div class="my-4" data-fail-container style="display: none;">Insert failure content/markup here</div>
</spektrix-donate>
<spektrix-memberships client-name="iframedemo" membership-id="7811AHVQTSPCBNLQKKQPBRJBQGNMNPTPB" forward-to="https://iframetool.integrate.spektrix.com/iframedemo/website/Basket2.aspx" data-donate-to-memberships-component style="display: none">
<button class="btn btn-dark mx-2" data-submit-membership>Buy Membership</button>
<label for="autorenew">
<input type="checkbox" name="autorenew" data-set-autorenew>Autorenew?
</label>
<div data-success-container style="display: none;">Insert success content/markup here</div>
<div data-fail-container style="display: none;">Insert failure content/markup here</div>
</spektrix-memberships>
<script>
var sliderInput = document.getElementById('sliderinput');
var itemValue = document.querySelector('[data-item-value]');
var donateComponent = document.querySelector('[data-donate-component]');
var donateToMembershipsComponent = document.querySelector('[data-donate-to-memberships-component]');
var cta = document.querySelector('[data-cta]')
var ctaAmount = document.querySelector('[data-cta-amount]')
sliderInput.addEventListener('input', function () {
if (sliderInput.value < 100) {
sliderInput.step = 1;
donateToMembershipsComponent.style.display = 'none';
donateComponent.style.display = 'block';
donateComponent.donationAmount = sliderInput.value;
} else if (sliderInput.value >= 100) {
sliderInput.step = 100;
donateComponent.style.display = 'none';
donateToMembershipsComponent.style.display = 'block';
cta.style.display = 'none';
donateToMembershipsComponent.membershipId = '401ANPJQJQPQMRSBDNMVNLSPGTRBVQVRH';
} else {
donateToMembershipsComponent.style.display = 'block';
donateToMembershipsComponent.membershipId = '601APNNMRMBJQQPBSCNQGQHGKKCRPSSGN';
}
if (sliderInput.value > 50 && sliderInput.value < 100) {
cta.style.display = 'block';
ctaAmount.textContent = 100 - sliderInput.value;
}
itemValue.textContent = sliderInput.value;
console.log('sliderInput.value', sliderInput.value)
});
</script>
Instant Priority Booking
<spektrix-memberships client-name="iframedemo" membership-id="601APNNMRMBJQQPBSCNQGQHGKKCRPSSGN" data-memb-to-priority-booking>
<button class="btn btn-dark mx-2" data-submit-membership>Add Membership and buy event</button>
<label for="autorenew">
<input type="checkbox" name="autorenew" data-set-autorenew>Autorenew?
</label>
<div data-success-container style="display: none;">Insert success content/markup here</div>
<div data-fail-container style="display: none;">Insert failure content/markup here</div>
</spektrix-memberships>
<script>
var membToPriorityBookingComponent = document.querySelector('[data-memb-to-priority-booking]');
var priorityBookingContainer = document.querySelector('[data-priority-booking-container]');
var seatingPlanDiv = document.createElement('div');
seatingPlanDiv.innerHTML =``;
membToPriorityBookingComponent.addEventListener('success', function (e) {
priorityBookingContainer.appendChild(seatingPlanDiv);
})
</script>
Comprehensive Example
This example demonstrates all the advanced features including variable pricing, loading states, multi-language period formatting, customer ownership checking, and conditional display attributes. This example also shows the react code we have used to dynamically update culture in this example for demonstration purposes.
Loading membership details...
import React from 'react'
function ComprehensiveExample() {
const [culture, setCulture] = React.useState('en')
return (
<div>
<label htmlFor="culture-select">Language: </label>
<select id="culture-select" value={culture} onChange={(e) => setCulture(e.target.value)}>
<option value="en">English</option>
<option value="fr">Français</option>
</select>
<spektrix-memberships
client-name="iframedemo"
membership-id="801ARDQDDMGGJKKRTNTJBMCCMMBCPQKCR"
forward-to="https://iframetool.integrate.spektrix.com/iframedemo/website/Basket2.aspx"
culture={culture}>
{/* Loading state */}
<div data-loading-container style={{display: 'block', textAlign: 'center', padding: '2em'}}>
<p>{culture === 'fr' ? 'Chargement...' : 'Loading membership details...'}</p>
</div>
{/* Loaded content */}
<div data-loaded-container style={{display: 'none'}}>
<h3 data-name>Membership Name</h3>
<img data-image-url style={{maxWidth: '300px', width: '100%'}} alt="" />
<div data-html-description></div>
{/* Membership period with multi-language support */}
<p>
<strong>{culture === 'fr' ? 'Durée: ' : 'Duration: '}</strong>
<span data-membership-period
data-period-format-yearsmonthsdays="{years} year(s), {months} month(s)"
data-period-format-weeksdays="{weeks} week(s), {days} day(s)"
data-period-format-fixed="Until a fixed date"
data-period-format-openended="Lifetime"
data-period-format-yearsmonthsdays-fr="{years} an(s), {months} mois"
data-period-format-weeksdays-fr="{weeks} semaine(s), {days} jour(s)"
data-period-format-fixed-fr="Jusqu'à une date fixe"
data-period-format-openended-fr="À vie">
</span>
</p>
{/* Already a member - conditional display */}
<div data-customer-holds-membership style={{display: 'none', background: '#d4edda', padding: '1em'}}>
<h4>{culture === 'fr' ? 'Vous êtes déjà membre!' : 'You\'re Already a Member!'}</h4>
<p>{culture === 'fr' ? 'Merci pour votre soutien continu.' : 'Thank you for your continued support.'}</p>
</div>
{/* Not a member - conditional display */}
<div data-customer-does-not-hold-membership style={{display: 'none'}}>
{/* Fixed price membership */}
<div data-is-not-variable-membership style={{display: 'none'}}>
<p><strong>{culture === 'fr' ? 'Prix: ' : 'Price: '}</strong><span data-price>0</span></p>
<p><strong>{culture === 'fr' ? 'Renouvellement: ' : 'Renewal: '}</strong><span data-renewal-price>0</span></p>
</div>
{/* Variable price membership */}
<div data-is-variable-membership style={{display: 'none'}}>
<p>{culture === 'fr' ? 'Choisissez votre montant:' : 'Choose your amount:'}</p>
<p>
{culture === 'fr' ? 'Entre ' : 'Between '}
<span data-price>0</span>
{culture === 'fr' ? ' et ' : ' and '}
<span data-max-price>0</span>
</p>
<input type="range" data-variable-price-input style={{width: '100%'}} />
<input type="number" data-variable-price-input
placeholder={culture === 'fr' ? 'Ou entrez le montant' : 'Or enter amount'} />
</div>
{/* Conditional: Can be gifted */}
<div data-is-giftable style={{display: 'none'}}>
<p>{culture === 'fr' ? '🎁 Peut être offert en cadeau!' : '🎁 Can be purchased as a gift!'}</p>
</div>
{/* Conditional: Can auto-renew */}
<div data-can-auto-renew style={{display: 'none'}}>
<label>
<input type="checkbox" data-set-autorenew defaultChecked />
{culture === 'fr' ? ' Renouveler automatiquement' : ' Auto-renew membership'}
</label>
</div>
{/* Conditional: Cannot auto-renew */}
<div data-cannot-auto-renew style={{display: 'none'}}>
<p>{culture === 'fr' ? 'Renouvellement automatique non disponible.' : 'Auto-renewal not available.'}</p>
</div>
<button className="button button--primary" data-submit-membership>
{culture === 'fr' ? 'Acheter l\'adhésion' : 'Purchase Membership'}
</button>
</div>
</div>
{/* Feedback containers */}
<div data-success-container style={{display: 'none', background: '#d4edda', padding: '1em'}}>
{culture === 'fr' ? 'Succès!' : 'Success! Redirecting to checkout...'}
</div>
<div data-fail-container style={{display: 'none', background: '#f8d7da', padding: '1em'}}>
{culture === 'fr' ? 'Erreur.' : 'Something went wrong. Please try again.'}
</div>
</spektrix-memberships>
</div>
)
}