Welcome! This is my personal blog about Web technologies, software development, open source and other related topics
The ideas and opinions expressed here are solely mine and don't represent those of others, either individuals or companies.The code snippets or references to software products or analogous are to be used without any warranty of any kind. If you enjoy the content, feel free to share it and re-use it as long as you provide a link to the original post.
0 47.60 npm notice Beginning October 4, 2021, all connections to the npm registry – including for package installation – must use TLS 1.2 or higher. You are currently using plaintext http to connect. Please visit the GitHub blog for more information: https://github.blog/2021-08-23-npm-registry-deprecating-tls-1-0-tls-1-1/
There are various ways you should be able to do this. I am adding 5 times more space to the existing indent-top style.
_indent.scss
// $middle-margin is defined in _margins.scss
.indent-large-top {
margin-top: calc($middle-margin * 5);
}
Apply a custom style to rendering
Select the component or container you want to apply style and choose option “Indent Large Top” in Spacing section
Now the space between the 2 component is increased and is 100px as per the requirement.
New style applied to container-
Apply style to specific renderings
As above when the style was created it was applied to all renderings.
If you want to restrict the style to be applied to only certain renderings you can do so by setting Allowed renderings field in new created Style item.
For “Indent Large Top” only SectionContainer will be able to see the new Spacing Style.
In Experience Editor you wont see the “Indent Large Top” for other renderings e.g.- for container rendering-
While for Section Container rendering the new style is available-
This is a very common scenario where a background image needs to be set to certain components. Banner’s on any page on your website is a very common place to have a background image.
This blog assumes you have setup the Foundation Head setup or have your own Nextjs project setup implemented using the Sitecore NextJS SDK.
Note: This is not specific to XM Cloud but for any Headless implementation
Foundation Head already has an example on setting the background image using params. In this blog post will explore how this works and where in Sitecore the image can be applied. Will see how this can applied using using OOTB _Background Image item.
To apply image background using rendering parameters to the container see this blog here
Applying background image using rendering field to the components
Background image can be applied to components inheriting the existing __Background Image item to the custom component template.
Create a template for your component. Here I am creating a Banner component-
Inherit _Background Image from /sitecore/templates/Foundation/Experience Accelerator/Presentation/_Background Image
_Background Image has “Background Image” and “Stretch mode” field.
Note that there is a space between the field names, although not recommended but this comes OOTB.
Create a “Banner” JSON Rendering and provide the “Parameters Template”, “Datasource Location” and “Datasource Template” as per your requirement and add this rendering to the “Available Renderings”
Create a Nextjs component in sxastarter project
Note below how the “Background Image” field is set. This is due to the same in field name. Not recommended but this is OOTB.
Add a newly created component (Banner) in Container placeholder-
Create or select associated content
Once the component is added you should see the button to Add Background Image ( ths is added when the template inherits from _Background Image template.
Select the Background Image and Save-
You should now able to see the background image to component-
Create a Resource group in Azure. I create this in West Us region.
Choose the template from the provided link and should take straight to your Azure subscription-
Enter the valid Vm Size and the supported crypto payment.
Select the Network – Mainnet, TestNet or regtest
Select the Ubuntu version. You may select the latest
Resources in Azure
This should create following resources in Azure in the selected resource group-
Navigate to BTCPayServerPublicIP resource. This should show the dns name.
This is your BTC pay admin portal.
Register Admin user
First time when you access the Btc Pay server should ask you to register a user. This user will be a owner.
Login to BTC pay server
Login with the newly created user
You will be asked to configure the lightining network and create a wallet.
Configuring the wallet and lightning network will follow in next blog along with integration with integration with commerce system such as Order Cloud.
Stay tuned to know how to configure this which should ulitmately sync the nodes as shown in below screen.
This is a very common scenario where a background image needs to be set to certain components. Banner’s on any page on your website is a very common place to have a background image.
Note: This is not specific to XM Cloud but for any Headless implementation
Foundation Head already has an example on setting the background image using params. In this blog post will explore how this works and where in Sitecore the image can be applied. Will see how this can applied using Rendering Parameters and using OOTB _Background Image item.
Applying background image using rendering parameters
Background image can be applied to container. If you are using Foundation Head repo you can find this component OOTB.
Thre Container rendering is at following lcoation in Sitecore –
Note Other properties- IsRenderingsWithDynamicPlaceholders and IsRenderingsWithDynamicPlaceholders is set to true
Rendering parameter is located – /sitecore/templates/Feature/JSS Experience Accelerator/Page Structure/Rendering Parameters/Container
Rendering paramter template has the BackgroundImage field. The background image will be set based on the image selected in this field.
How the image is set in Head
Lets see background image set in nextjs (sxastarter) Container.tsx
// image string from the rendering parameters
let backgroundImage = props.params.BackgroundImage as string;
let backgroundStyle: { [key: string]: string } = {};
console.log('backgroundImage1');
console.log(backgroundImage);
if (backgroundImage) {
const prefix = `${sitecoreContext.pageState !== 'normal' ? '/sitecore/shell' : ''}/-/media/`;
backgroundImage = `${backgroundImage?.match(BACKGROUND_REG_EXP)?.pop()?.replace(/-/gi, '')}`;
backgroundStyle = {
backgroundImage: `url('${prefix}${backgroundImage}')`,
};
}
return (
<div className={`component container-default ${styles}`} id={id ? id : undefined}>
// style applied to <div> having background image
<div className="component-content" style={backgroundStyle}>
<div className="row">
<Placeholder name={phKey} rendering={props.rendering} />
</div>
</div>
</div>
);
};
Lets see this in working in experience editor and rendering host
In the experience editor main section add a container component.
Once the rendering is added, goto “Edit component properties” and add an background image
Now you are able to see the background image applied ot container and I have added RichText in containerto show the image in background-
Rendering Host displays the image in background-
Nested containers to apply differnt background image or component
If you add only one container the image will be applied to the main section.
To resolve this you can add a container within main container. add mutiple containers as per your requirements. To set the background image to specific container in this example contianer-2 select the parent(i.e. container) and set the image by Editing the Component properties
This should apply the different images for various other sections in the sampe page and since the Container rendering has IsRenderingsWithDynamicPlaceholders property set this should create a unique Id for each container.
Here for example container-2 and container-3 is a child of container-1
Rendering Host displays banckgroung images with there respective components-
Isusue- Here you can see there is a white patch when applied to child container and the image is applied to inner div.
To resolev this apply the image to the outer div instead in container.tsx
In this blog blost lets create Project and Environment to deploy the sxastarter site to XM Cloud. The deployment is based on the existing repository in GitHub and have solution ready to deploy. Please see this blog posts on how to fork Foundation Head Template and setup your local instance along with creating Headless SXA Site(sxastarter) also configure the serliazation of Sitecore items.
To create project and environment you need to have access to XM Cloud either Admin or Contributor.
An organization is business unit either company or brand and contains team members and Sitecore Products you are subscribed and can have more than one Sitecore Product as seen in the below screen.
XM Cloud Deploy
As highlighted quick links container XM Cloud Deploy
Deploy contanis list of projects and deployments done for each project and environments. It also container connections to GitHub or Vercel if site is hosted their.
The highlighted shows Organization name at the top and list of projects.
Connect to GitHub (Source Control Connections)
Ensure the changes (Sitecore Items) are pushed to GitHub repo.
Recommended – create separate branch for each environment. I have created dev, staging and main(prod)
Connections – should show list of all connections for projects mainly Github and Azure Devop for Source Control, while hosting connections can be mafe to Vercel. In this section we will configure GitHub provider.
Create a new GitHub connection
Should ask to login and provide access to a repository, you may choose all or specific repository-
Since I already had connection you will be shown a different option to Install and Authorize
Create Project
Click on Create project option
This should show the type of project to be created. We want to start from our own Source Code(GitHub) based on the connection made.
Since we configured only GitHub connection defaults to this Source Control-
Your connection name will be displayed here. Choose the connection. This will also show any other connections available.
You may also create a new connection from here.
Provide the project name and the repository where Foundation Head code resides along with any other changes you might have done sa a part of development.
Environment name – provide name – should be able to relate which branch is this pulled from.
Production environment – if this is then choose yes, I have selected this as no since I ma setting dev environment
Linked branch- Select the appropriate branch ensure yuo have all the changes available in this branch which you want to deploy
Trigger deployment on commit to branch – Set if this has to be auto deployed if changes are pushed to selected branch.
Deploy. This should start the deployment. This should take 10 -15 mins. Wait for the post actions.
You should now see the newly created project with dev environment-
New Project Created
New Environment Created
New Site Created (sxastarter)
Select environment and goto Sites tab-
Will see in the next blog hot to setup the Hosting
Select environment and Details tab- You should be able to see hostname, url’s and tokens along with Environment details.
Click on the Dashboard link –> Tools to see if the items are synched-
We now have templates, content and relevant items in layouts and image created
Content Editor with Site Collection, Site and Content
Templates Created
Experience Editor
Lets check the home page in experience editor
In the next bog will configure the Site hosting to Vercel.
Errors-
In connections select Create Connection –> GitHub
Click on Uninstall “Sitecore Deploy Prod”
Follow the process of creating a Connection again and this time you will see option to Install & Authorize
Once this is done an confirmed try creating a project –
The browser ID is a universally unique identifier (UUID) that Sitecore CDP assigns to every user of your application. It associates sessions, events, and orders with the respective user.
To generate browser id at server side in this case using postman use following URL-
{{apiEndpoint}} – API target endpoint depends on the region client key is available in. Following are the regions and url available at the point of writing this blog and as per this document –
Europe – https://api.boxever.com
Asia Pacific – https://api-ap-southeast-2-production.boxever.com
Top right click the clog icon. Select API Access option
Get teh client key from this page-
Request/Response-
Status- OK. The request was served successfuly
Anantmous(Guest) should be created. Browser ID is in “ref” field in the response
Check the guest details in portal with the Browser ID-
Goto the Guests page –
Search guests with browser id. (bid: <<browser id>>)
This should the Guest Type as Visitor which means its Anonymous and not yet known or uniquely identified.
CURL code snippet-
curl --location -g --request GET 'https://api.boxever.com/v1.2/browser/create.json?client_key=<<client key>>&message={}'
C# code snippet-
var client = new RestClient("https://api.boxever.com/v1.2/browser/create.json?client_key=<<client key>>&message={}");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
Synchronizing items between environments with Sitecore Serialization. The repository already contains the necessary setup for enabling serialization if you are using an official Sitecore XM Cloud foundation template.
Pre-requisite- Setup Sitecore local instance for XM Cloud development. See this blog << Blog to setup Sitecoer instance>>
You may already see the rendering host module setup in the forked repository.
This should be available in the src folder.
Lets sync the sxastarter site created earlier whilst setting up the SXA Headless Site. << Blog post to setuop SXA headless site>>.
Please note this might not be the method you want to sync the items. Ideally you should create project in XM Cloud and site created in XM Cloud environment. I am doing the other way just to demo.
Create various modules to sync your locally created site to serialize the items
This should help to push the config and items to repository and deploy to XM Cloud later.
Sync templates-
Create a scxmcloud.templates.module.json in src folder.
We are trying to serialise templates to local. These items will be searlised-
scope by default is ItemAndDescendants. Hence not defined. Any new templates added here will be auto serialised. allowedPushOperations is set to CreateUpdateAndDelete. Like wise define the same for Feature and Foundation folders.
Define the same for Content (if required) or specific items, Media Library and Layout but this may be site specific.
For media I have configured following – Where scope id Single item and allowedPushOperations is CreateOnly, so these items are created only once.
Finally you should have following modules depending upon the youe site requirements and configuration.
Connect the local environment
After SCS configuration you should connect to local environment. To do so use the following command
This will add the endpoint in user.json file located in .sitecore folder. Alrthough there is a default endpoint which should suffice. Provide your Sitecore instnace host name as appropriate.
Local environment should be connected and now can perform sync operations.
An entry will be added in user.json file.
Next pull the items from local Sitecore instance-
dotnet sitecore ser pull -n "local"
If you see this error – ensure the names should be unique. I did a mistake by providing same name in templates module
If you see this error ensure the items to be searialised should be repeated in any other module or any other name. You may also exclude the paths for Feature and Foundation folders – /sitecore/layout/Renderings/Feature/Experience Accelerator