Skip to content

Instantly share code, notes, and snippets.

View sitefinitySDK's full-sized avatar

Sitefinity SDK sitefinitySDK

View GitHub Profile
extends:
template: CICDDotNetCoreRendererTemplateV2.yaml@SitefinityCloudPipelines
parameters:
postReleaseSteps:
- task: PowerShell@2
displayName: 'Send Test Deployment Notification'
inputs:
targetType: 'inline'
pwsh: true
script: |
@sitefinitySDK
sitefinitySDK / environment_variables.env
Last active February 12, 2026 12:47
environment_variables.env
SF_CMS_URL = "authoring.your-project.sitefinitycloud.com"
SF_PROXY_ORIGINAL_HOST=x-sf-host
@sitefinitySDK
sitefinitySDK / app_settings.json
Last active February 12, 2026 12:52
app_settings.json
"Sitefinity": {
"Url": "https://authoring.your-project.cloud.sitefinity.com", // This is already set correctly by Sitefinity
"WebServicePath": "sf/cms/api/v1/default",
"SearchWebServicePath": "sf/search/api/v1/default",
"HostHeaderName": "x-sf-host",
"IgnoreSslErrors": true,
"Proxy": {
"Disable": true,
"Whitelist": [
{
import { WidgetRegistry, initRegistry, defaultWidgetRegistry } from '@progress/sitefinity-nextjs-sdk';
import { myCustomFiltering } from './components/custom-filters/my-custom-filtering';
const customWidgetRegistry: WidgetRegistry = {
widgets: {
// your custom widgets here
},
filters: [
myCustomFiltering
]
'use client';
import { WidgetMetadata } from '@progress/sitefinity-nextjs-sdk';
import { GetWidgetsArgs } from '@progress/sitefinity-nextjs-sdk';
export async function myCustomFiltering(widgetMetadata: WidgetMetadata, args: GetWidgetsArgs): Promise<boolean> {
// Your filtering logic here
// Return true to show the widget, false to hide it
// Example: Hide a specific widget based on its name
if (widgetMetadata.designerMetadata?.Name === 'MyCustomWidget') {
import { WidgetRegistry, initRegistry, defaultWidgetRegistry } from '@progress/sitefinity-nextjs-sdk';
const customWidgetRegistry: WidgetRegistry = {
widgets: {
// ... your custom widgets
},
filters: [
// ... your custom filters
]
};
import { ScriptInjectorBodyTop, ScriptInjectorBodyBottom } from '../widgets/script/script-injector';
export function SitefinityTemplate({ widgets, requestContext }: {
widgets: { [key: string]: ReactNode[] };
requestContext: RequestContext;
}): JSX.Element {
return (
<>
<ScriptInjectorBodyTop requestContext={requestContext} />
<header data-sfcontainer="Header">
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-XXXXX-Y', 'auto');
ga('send', 'pageview');
</script>
import { WidgetRegistry, initRegistry, defaultWidgetRegistry } from '@progress/sitefinity-nextjs-sdk';
import { Script } from './widgets/script/script';
import { ScriptEntity } from './widgets/script/script.entity';
const customWidgetRegistry: WidgetRegistry = {
widgets: {
'Script': {
componentType: Script,
entity: ScriptEntity,
ssr: true,
export const ScriptLocation = {
Inline: 'Inline',
BodyTop: 'BodyTop',
BodyBottom: 'BodyBottom'
} as const;
export type ScriptLocationType = typeof ScriptLocation[keyof typeof ScriptLocation];