Can I customize BBNC Grow?
Options
Hello,
I just spoke to a client who would like to implement a slider on their home page. They have the BBNC Grow plan. I notice that that package does not include access to APIs. Before I promise her a slider that I can't deliver - I want to ask if it will be possible.
I'm wondering if anyone has any experience they can share with implementing a jQuery based slideshow on this platform.
Any insight would be most appreciated!
Thanks,
Sara
I just spoke to a client who would like to implement a slider on their home page. They have the BBNC Grow plan. I notice that that package does not include access to APIs. Before I promise her a slider that I can't deliver - I want to ask if it will be possible.
I'm wondering if anyone has any experience they can share with implementing a jQuery based slideshow on this platform.
Any insight would be most appreciated!
Thanks,
Sara
Tagged:
1
Comments
-
Hey Sara,
I've seen people use jquery without the API. I don't think you'd need it. I hope that helps!
Thanks!
Karen0 -
Thanks Karen,
I was hoping to build a UI for the client to update slides without having to mess around with the code - do you think that would be possible?0 -
Hey Sara,
I've never seen that, but I also think you don't need it. After to upload an image to NetCommunity when you go into that image you can click a button to replace it with a new image. Since the URL doesn't change that's how people would update the slides. I hope that makes sense.
Thanks!
Karen0 -
Karen,
I realy appreciate your prompt reply - I hope you don't mind if I ask one more question...I am fairly new to the netcommunity platform and I'm wondering what the best practice is for using a jquery plugin. Do you upload the script using an unformatted text part and then build out the html of the slideshow using a formatted text and images part?
Any help would be greatly appreciated!
Thanks,
Sara0 -
Sara - we did release a new framework for building design driven (e.g. jQuery/Javascript/HTML) customizations we termed "custom content parts" in this past spring's 6.53 release.
This is currently being used by many customers who have either built or worked with our Blackbaud design teams to build slideshows, sliders, tabbed displays, and more. This framework allows you to be creative and works with all levels of BBNC (Spark, Grow, Pro) and BBIS and for fully hosted customers.
The beauty of this is that an experienced designer can create a part editor that makes it very easy for novice users to change content, rotate new images in, or generally manipulate without having to know jQuery/Javascript/HTML.
You can learn more about this by visiting our docs guide which has details about this, a Hello World example to build, and will be updated with more soon.
As an example, our Blackbaud design team of ninjas has built an amazing responsive slideshow part which can be easily updated by novice users who just need to swap in new pictures and captions.0 -
Sounds great! Is that slideshow available to all users, or was that a special project?
Also - is the update automatically available to all users? I ask because I was looking around another site built on Netcommunity that I have worked with a bit and I didn't see the "custom content part" - should they do something to upgrade?
Thanks again for getting back to me so quickly,
Sara0 -
Sara - that slideshow and others custom content parts have been deployed on individual sites through work with Blackbaud design teams. It's an open framework though that customers could share with the community if they produce an interesting custom content part.
If you'd like to discuss deploying a slideshow solution for your site, you can email me (justin.morrow@blackbaud.com) or your account manager for more infomation.
In the longer term, we're going to evaluate how some "best practice" examples could be shipped by default for everyone though...0 -
Justin - are you able to point me to a slightly more robust example than the "Hello World" one shared in the documentation?
Thanks,
Sara0 -
Sara,
Sure, he's another great example with code supporting it. Let's say you wanted to create a "tabbed" display custom content part where clicking on different tabs will show different content.
To do this, you can create a custom content part using the scripts below....
Paste this into the "editor" section for Custom Content Parts:
.FieldLabel {
width:70px;
}
Tabs
Use this part to create tabbed content with as many tabs as desired. The content for each tab can include HTML in order to create
rich content with images, links, and formatting.
Add Tab
")
tabInfo.attr('class', 'TabInfo');
tabInfo.append(CreateTabTextBox("Name", name));
tabInfo.append(CreateTabTextArea("Content", content));
tabInfo.append(CreateRemoveButton());
$(".MyEditorWrapper .Tabs").append(tabInfo)
}
function CreateTabTextBox(name, value) {
var textBox = $("");
textBox.val(value);
var label = $('')
label.html(name + ": ");
var field = $("
");
field.attr('class', name);
field.append(label);
field.append(textBox);
return field;
}
function CreateTabTextArea(name, value) {
var textBox = $("");
textBox.val(value);
var label = $('')
label.html(name + ": ");
var field = $("
");
field.attr('class', name);
field.append(label);
field.append(textBox);
return field;
}
function CreateRemoveButton() {
var r = $("
X
");
r.click(function () { $(this).parent().remove(); });
return r;
}
function SaveSettings() {
var settings = {};
settings.Tabs = [];
$(".ValidationWrapper").html("")
var isValid = true;
$('.MyEditorWrapper .Tabs .TabInfo').each(function () {
var name = $(this).find('.Name').find('input').val();
var content = $(this).find('.Content').find('textarea').val();
var tab = { name: name, content: content };
if (name && name.length > 0) {
settings.Tabs[settings.Tabs.length] = tab;
} else {
isValid = false;
}
});
if (isValid) {
BLACKBAUD.api.customPartEditor.settings = settings;
} else {
$(".ValidationWrapper").html("Name is required on all tabs.")
}
return isValid
}
function LoadFromSettings(settings) {
var validSettings = false;
if (settings) {
if (settings.Tabs) {
validSettings = true;
for (var i = 0; i < settings.Tabs.length; i++) {
var tab = settings.Tabs[i];
CreateTabInfo(tab.name, tab.content);
}
}
}
if (!validSettings) {
CreateTabInfo();
}
}
//END HELPER FUNCTIONS
//Bind Events
$(".AddTab").click(function () { CreateTabInfo(); });
BLACKBAUD.api.customPartEditor.onSave = SaveSettings;
//Load from previous settings
LoadFromSettings(BLACKBAUD.api.customPartEditor.settings);
})
--------------------------------------------------------------------------------------------
Paste this into Web page Display:
");
link.attr("href", "#" + label);
link.html(tab.name);
var header = $("");
header.append(link);
headers.append(header);
var content = $("");
content.attr("id", label);
content.html(tab.content);
wrapper.append(content);
}
function CreateTabsContent(parent, tabs) {
var headers = $("- ");
var wrapper = $("");
wrapper.append(headers);
for (var i = 0; i < tabs.length; i++) {
CreateTabContent(headers, wrapper, tabs[i], i);
}
parent.append(wrapper);
return wrapper;
}
//END HELPER FUNCTIONS
var settings = args.settings;
if (settings) {
var tabs = settings.Tabs;
if (tabs && tabs.length > 0) {
var parent = $('#' + args.elementId);
var tabsContainer = CreateTabsContent(parent, tabs);
tabsContainer.tabs();
}
}
});
}
0 -
Hi Justin,
This example still manages to not quite answer most of the questions. I'm working through some of these issues by trial and error, but there are still a lot of unknowns. I appreciate that Blackbaud is trying to promote its development services, but if this is really a supported feature it is necessary to provide more thorough documentation.
Questions:
1. Is "BLACKBAUD.api.customPartEditor.settings" the correct place to store these settings? This is never mentioned in the documentation. How is this data persisted? Are there limitations to what data types I can store? For example, can I store an array under the settings?
2. In your example, "CreateTabInfo" is missing. I assume the code fragment at the top of the example shows most of the function, but it uses "MyEditorWrapper" which is never defined so it's not clear how you are supposed to lay out the custom editor.
Thanks,
Ryan0 -
Here's what I did to get tabs working on our BBNC site. Hope it helps. Unfortunately no warranty or support provided ; - )
......
http://stalbansschool.org/page.aspx?p...
Here’s what they need to do to make it work:
1. Add this small line of CSS to the end of your custom stylesheet:
/* Add the code below to make custom tabs behave as expected in conjunction with jquery-ui.css which is hosted on https://ajax.googleapis.com/ajax/libs...
*/
.ui-tabs .ui-tabs-hide {
display: none !important;
}
2. Add this code to the various places for configuring a Custom Part for your OCC/ BBNC site. (NOTE: the headings for the various sections are in ALL caps and surrounded by /* */ like this: /*NAME:*/ -- obviously you don't enter these they just show you where to enter the code that follows.
/*NAME:*/
Tabs
/*DESCRIPTION:*/
Allows you to have tabbed content on page without reloading
/*INITIALIZE JAVASCRIPT FUNCTION:*/
CreateTabsPart
/*EDITOR:*/
.FieldLabel {
width:70px;
}
Tabs
Use this part to create tabbed content with as many tabs as desired. The content for each tab can include HTML in order to create
rich content with images, links, and formatting.
Add Tab
")
tabInfo.attr('class', 'TabInfo');
tabInfo.append(CreateTabTextBox("Name", name));
tabInfo.append(CreateTabTextArea("Content", content));
tabInfo.append(CreateRemoveButton());
$(".MyEditorWrapper .Tabs").append(tabInfo)
}
function CreateTabTextBox(name, value) {
var textBox = $("");
textBox.val(value);
var label = $('')
label.html(name + ": ");
var field = $("
");
field.attr('class', name);
field.append(label);
field.append(textBox);
return field;
}
function CreateTabTextArea(name, value) {
var textBox = $("");
textBox.val(value);
var label = $('')
label.html(name + ": ");
var field = $("
");
field.attr('class', name);
field.append(label);
field.append(textBox);
return field;
}
function CreateRemoveButton() {
var r = $("
X
");
r.click(function () { $(this).parent().remove(); });
return r;
}
function SaveSettings() {
var settings = {};
settings.Tabs = [];
$(".ValidationWrapper").html("")
var isValid = true;
$('.MyEditorWrapper .Tabs .TabInfo').each(function () {
var name = $(this).find('.Name').find('input').val();
var content = $(this).find('.Content').find('textarea').val();
var tab = { name: name, content: content };
if (name && name.length > 0) {
settings.Tabs[settings.Tabs.length] = tab;
} else {
isValid = false;
}
});
if (isValid) {
BLACKBAUD.api.customPartEditor.settings = settings;
} else {
$(".ValidationWrapper").html("Name is required on all tabs.")
}
return isValid
}
function LoadFromSettings(settings) {
var validSettings = false;
if (settings) {
if (settings.Tabs) {
validSettings = true;
for (var i = 0; i < settings.Tabs.length; i++) {
var tab = settings.Tabs[i];
CreateTabInfo(tab.name, tab.content);
}
}
}
if (!validSettings) {
CreateTabInfo();
}
}
//END HELPER FUNCTIONS
//Bind Events
$(".AddTab").click(function () { CreateTabInfo(); });
BLACKBAUD.api.customPartEditor.onSave = SaveSettings;
//Load from previous settings
LoadFromSettings(BLACKBAUD.api.customPartEditor.settings);
})
/*WEB PAGE DISPLAY:*/
");
link.attr("href", "#" + label);
link.html(tab.name);
var header = $("");
header.append(link);
headers.append(header);
var content = $("");
content.attr("id", label);
content.html(tab.content);
wrapper.append(content);
}
function CreateTabsContent(parent, tabs) {
var headers = $("- ");
wrapper.append(headers);
for (var i = 0; i < tabs.length; i++) {
CreateTabContent(headers, wrapper, tabs[i], i);
}
parent.append(wrapper);
return wrapper;
}
//END HELPER FUNCTIONS
var settings = args.settings;
if (settings) {
var tabs = settings.Tabs;
if (tabs && tabs.length > 0) {
var parent = $('#' + args.elementId);
var tabsContainer = CreateTabsContent(parent, tabs);
tabsContainer.tabs();
}
}
});
}
0 -
Graham Getty:
Yikes. It looks like this forum strips out a lot of the necessary code you need.
Here's what I did to get tabs working on our BBNC site. Hope it helps. Unfortunately no warranty or support provided ; - )
......
http://stalbansschool.org/page.aspx?p...
Here’s what they need to do to make it work:
1. Add this small line of CSS to the end of your custom stylesheet:
/* Add the code below to make custom tabs behave as expected in conjunction with jquery-ui.css which is hosted on https://ajax.googleapis.com/ajax/libs...
*/
.ui-tabs .ui-tabs-hide {
display: none !important;
}
2. Add this code to the various places for configuring a Custom Part for your OCC/ BBNC site. (NOTE: the headings for the various sections are in ALL caps and surrounded by /* */ like this: /*NAME:*/ -- obviously you don't enter these they just show you where to enter the code that follows.
/*NAME:*/
Tabs
/*DESCRIPTION:*/
Allows you to have tabbed content on page without reloading
/*INITIALIZE JAVASCRIPT FUNCTION:*/
CreateTabsPart
/*EDITOR:*/
.FieldLabel {
width:70px;
}
Tabs
Use this part to create tabbed content with as many tabs as desired. The content for each tab can include HTML in order to create
rich content with images, links, and formatting.
Add Tab
")
tabInfo.attr('class', 'TabInfo');
tabInfo.append(CreateTabTextBox("Name", name));
tabInfo.append(CreateTabTextArea("Content", content));
tabInfo.append(CreateRemoveButton());
$(".MyEditorWrapper .Tabs").append(tabInfo)
}
function CreateTabTextBox(name, value) {
var textBox = $("");
textBox.val(value);
var label = $('')
label.html(name + ": ");
var field = $("
");
field.attr('class', name);
field.append(label);
field.append(textBox);
return field;
}
function CreateTabTextArea(name, value) {
var textBox = $("");
textBox.val(value);
var label = $('')
label.html(name + ": ");
var field = $("
");
field.attr('class', name);
field.append(label);
field.append(textBox);
return field;
}
function CreateRemoveButton() {
var r = $("
X
");
r.click(function () { $(this).parent().remove(); });
return r;
}
function SaveSettings() {
var settings = {};
settings.Tabs = [];
$(".ValidationWrapper").html("")
var isValid = true;
$('.MyEditorWrapper .Tabs .TabInfo').each(function () {
var name = $(this).find('.Name').find('input').val();
var content = $(this).find('.Content').find('textarea').val();
var tab = { name: name, content: content };
if (name && name.length > 0) {
settings.Tabs[settings.Tabs.length] = tab;
} else {
isValid = false;
}
});
if (isValid) {
BLACKBAUD.api.customPartEditor.settings = settings;
} else {
$(".ValidationWrapper").html("Name is required on all tabs.")
}
return isValid
}
function LoadFromSettings(settings) {
var validSettings = false;
if (settings) {
if (settings.Tabs) {
validSettings = true;
for (var i = 0; i < settings.Tabs.length; i++) {
var tab = settings.Tabs[i];
CreateTabInfo(tab.name, tab.content);
}
}
}
if (!validSettings) {
CreateTabInfo();
}
}
//END HELPER FUNCTIONS
//Bind Events
$(".AddTab").click(function () { CreateTabInfo(); });
BLACKBAUD.api.customPartEditor.onSave = SaveSettings;
//Load from previous settings
LoadFromSettings(BLACKBAUD.api.customPartEditor.settings);
})
/*WEB PAGE DISPLAY:*/
");
link.attr("href", "#" + label);
link.html(tab.name);
var header = $("");
header.append(link);
headers.append(header);
var content = $("");
content.attr("id", label);
content.html(tab.content);
wrapper.append(content);
}
function CreateTabsContent(parent, tabs) {
var headers = $("- ");
wrapper.append(headers);
for (var i = 0; i < tabs.length; i++) {
CreateTabContent(headers, wrapper, tabs[i], i);
}
parent.append(wrapper);
return wrapper;
}
//END HELPER FUNCTIONS
var settings = args.settings;
if (settings) {
var tabs = settings.Tabs;
if (tabs && tabs.length > 0) {
var parent = $('#' + args.elementId);
var tabsContainer = CreateTabsContent(parent, tabs);
tabsContainer.tabs();
}
}
});
}
Here are links to two .TXT files:
Custom CSS here:
https://www.dropbox.com/s/59ivdurr5t4...
Custom Part Info here:
https://www.dropbox.com/s/1dyqi5swpzp...0 -
Grrrr. Can't edit my REPLY had to comment here are files
Yikes. It looks like this forum strips out a lot of the necessary code you need.
Here are links to two .TXT files:
Custom CSS here:
https://www.dropbox.com/s/59ivdurr5t4...
Custom Part Info here:
https://www.dropbox.com/s/1dyqi5swpzp...0
Categories
- All Categories
- Shannon parent
- shannon 2
- shannon 1
- 21 Advocacy DC Users Group
- 14 BBCRM PAG Discussions
- 89 High Education Program Advisory Group (HE PAG)
- 28 Luminate CRM DC Users Group
- 8 DC Luminate CRM Users Group
- Luminate PAG
- 5.9K Blackbaud Altru®
- 58 Blackbaud Award Management™ and Blackbaud Stewardship Management™
- 409 bbcon®
- 2.1K Blackbaud CRM™ and Blackbaud Internet Solutions™
- donorCentrics®
- 1.1K Blackbaud eTapestry®
- 2.8K Blackbaud Financial Edge NXT®
- 1.1K Blackbaud Grantmaking™
- 527 Education Management Solutions for Higher Education
- 1 JustGiving® from Blackbaud®
- 4.6K Education Management Solutions for K-12 Schools
- Blackbaud Luminate Online & Blackbaud TeamRaiser
- 16.4K Blackbaud Raiser's Edge NXT®
- 4.1K SKY Developer
- 547 ResearchPoint™
- 151 Blackbaud Tuition Management™
- 1 YourCause® from Blackbaud®
- 61 everydayhero
- 3 Campaign Ideas
- 58 General Discussion
- 115 Blackbaud ID
- 87 K-12 Blackbaud ID
- 6 Admin Console
- 949 Organizational Best Practices
- 353 The Tap (Just for Fun)
- 235 Blackbaud Community Feedback Forum
- 55 Admissions Event Management EAP
- 18 MobilePay Terminal + BBID Canada EAP
- 36 EAP for New Email Campaigns Experience in Blackbaud Luminate Online®
- 109 EAP for 360 Student Profile in Blackbaud Student Information System
- 41 EAP for Assessment Builder in Blackbaud Learning Management System™
- 9 Technical Preview for SKY API for Blackbaud CRM™ and Blackbaud Altru®
- 55 Community Advisory Group
- 46 Blackbaud Community Ideas
- 26 Blackbaud Community Challenges
- 7 Security Testing Forum
- 1.1K ARCHIVED FORUMS | Inactive and/or Completed EAPs
- 3 Blackbaud Staff Discussions
- 7.7K ARCHIVED FORUM CATEGORY [ID 304]
- 1 Blackbaud Partners Discussions
- 1 Blackbaud Giving Search™
- 35 EAP Student Assignment Details and Assignment Center
- 39 EAP Core - Roles and Tasks
- 59 Blackbaud Community All-Stars Discussions
- 20 Blackbaud Raiser's Edge NXT® Online Giving EAP
- Diocesan Blackbaud Raiser’s Edge NXT® User’s Group
- 2 Blackbaud Consultant’s Community
- 43 End of Term Grade Entry EAP
- 92 EAP for Query in Blackbaud Raiser's Edge NXT®
- 38 Standard Reports for Blackbaud Raiser's Edge NXT® EAP
- 12 Payments Assistant for Blackbaud Financial Edge NXT® EAP
- 6 Ask an All Star (Austen Brown)
- 8 Ask an All-Star Alex Wong (Blackbaud Raiser's Edge NXT®)
- 1 Ask an All-Star Alex Wong (Blackbaud Financial Edge NXT®)
- 6 Ask an All-Star (Christine Robertson)
- 21 Ask an Expert (Anthony Gallo)
- Blackbaud Francophone Group
- 22 Ask an Expert (David Springer)
- 4 Raiser's Edge NXT PowerUp Challenge #1 (Query)
- 6 Ask an All-Star Sunshine Reinken Watson and Carlene Johnson
- 4 Raiser's Edge NXT PowerUp Challenge: Events
- 14 Ask an All-Star (Elizabeth Johnson)
- 7 Ask an Expert (Stephen Churchill)
- 2025 ARCHIVED FORUM POSTS
- 322 ARCHIVED | Financial Edge® Tips and Tricks
- 164 ARCHIVED | Raiser's Edge® Blog
- 300 ARCHIVED | Raiser's Edge® Blog
- 441 ARCHIVED | Blackbaud Altru® Tips and Tricks
- 66 ARCHIVED | Blackbaud NetCommunity™ Blog
- 211 ARCHIVED | Blackbaud Target Analytics® Tips and Tricks
- 47 Blackbaud CRM Higher Ed Product Advisory Group (HE PAG)
- Luminate CRM DC Users Group
- 225 ARCHIVED | Blackbaud eTapestry® Tips and Tricks
- 1 Blackbaud eTapestry® Know How Blog
- 19 Blackbaud CRM Product Advisory Group (BBCRM PAG)
- 1 Blackbaud K-12 Education Solutions™ Blog
- 280 ARCHIVED | Mixed Community Announcements
- 3 ARCHIVED | Blackbaud Corporations™ & Blackbaud Foundations™ Hosting Status
- 1 npEngage
- 24 ARCHIVED | K-12 Announcements
- 15 ARCHIVED | FIMS Host*Net Hosting Status
- 23 ARCHIVED | Blackbaud Outcomes & Online Applications (IGAM) Hosting Status
- 22 ARCHIVED | Blackbaud DonorCentral Hosting Status
- 14 ARCHIVED | Blackbaud Grantmaking™ UK Hosting Status
- 117 ARCHIVED | Blackbaud CRM™ and Blackbaud Internet Solutions™ Announcements
- 50 Blackbaud NetCommunity™ Blog
- 169 ARCHIVED | Blackbaud Grantmaking™ Tips and Tricks
- Advocacy DC Users Group
- 718 Community News
- Blackbaud Altru® Hosting Status
- 104 ARCHIVED | Member Spotlight
- 145 ARCHIVED | Hosting Blog
- 149 JustGiving® from Blackbaud® Blog
- 97 ARCHIVED | bbcon® Blogs
- 19 ARCHIVED | Blackbaud Luminate CRM™ Announcements
- 161 Luminate Advocacy News
- 187 Organizational Best Practices Blog
- 67 everydayhero Blog
- 52 Blackbaud SKY® Reporting Announcements
- 17 ARCHIVED | Blackbaud SKY® Reporting for K-12 Announcements
- 3 Luminate Online Product Advisory Group (LO PAG)
- 81 ARCHIVED | JustGiving® from Blackbaud® Tips and Tricks
- 1 ARCHIVED | K-12 Conference Blog
- Blackbaud Church Management™ Announcements
- ARCHIVED | Blackbaud Award Management™ and Blackbaud Stewardship Management™ Announcements
- 1 Blackbaud Peer-to-Peer Fundraising™, Powered by JustGiving® Blogs
- 39 Tips, Tricks, and Timesavers!
- 56 Blackbaud Church Management™ Resources
- 154 Blackbaud Church Management™ Announcements
- 1 ARCHIVED | Blackbaud Church Management™ Tips and Tricks
- 11 ARCHIVED | Blackbaud Higher Education Solutions™ Announcements
- 7 ARCHIVED | Blackbaud Guided Fundraising™ Blog
- 2 Blackbaud Fundraiser Performance Management™ Blog
- 9 Foundations Events and Content
- 14 ARCHIVED | Blog Posts
- 2 ARCHIVED | Blackbaud FIMS™ Announcement and Tips
- 59 Blackbaud Partner Announcements
- 10 ARCHIVED | Blackbaud Impact Edge™ EAP Blogs
- 1 Community Help Blogs
- Diocesan Blackbaud Raiser’s Edge NXT® Users' Group
- Blackbaud Consultant’s Community
- Blackbaud Francophone Group
- 1 BLOG ARCHIVE CATEGORY
- Blackbaud Community™ Discussions
- 8.3K Blackbaud Luminate Online® & Blackbaud TeamRaiser® Discussions
- 5.7K Jobs Board