Thoughts on the best method for using external CSS or JavaScript files?
There is no doubt more than one answer to this question but here it is:
Something I've struggled with a bit in the past is determining exactly where and how to upload individual CSS and JavaScript files for use throughout a site (COM or CMS). When creating a page wrapper in COM, for example, you may specify additional <link> and <script> tags to reference external CSS and JavaScript files. The path is relative: "../css/..." and "../js/...," and that makes total sense, but how does one manage what is actually in those directories (add, remove, etc.)? Usually, I end up simply dropping a <style> tag within the wrapper's <head> tag...
The answer may be FTP access, but this would make iterative editing a painful process (constantly uploading and retesting). Under the COM document library there isn't a type available for CSS or JavaScript files, I don't think. Under the CMS, I do believe you may add a CSS or JavaScript file, say within the Assets folder, but I haven't attempted it.
What's the "best" way, if there is just one? Does it totally depend on whether you're working within CMS or COM?
Thanks!
Nick
Comments
-
Nick,
FTP access really is the answer -- if you don't already have FTP credentials, you can get them from Convio Support. You're correct that this is not possible through the COM Document Library. Uploading into the assets folder on CMS has one problem -- on secure pages in COM, references to the non-secure CMS domain will cause browser security warnings. For wrappers that are to be used across both CMS and COM, it is probably best to use FTP.
0 -
Cool, thank you!
0 -
Nick Sturdivant:
Cool, thank you!
For CSS styles, you can also create a reusable PageBuilder page that contains your styles within a <style> tag.
Then just insert that page via the S51 tag (ie. ]) into the header of the Page Wrapper. This actually inserts the styles into the head of every document though, rather than referencing an external stylesheet.
0 -
dmartin :
For CSS styles, you can also create a reusable PageBuilder page that contains your styles within a <style> tag.
Then just insert that page via the S51 tag (ie. ]) into the header of the Page Wrapper. This actually inserts the styles into the head of every document though, rather than referencing an external stylesheet.
Well, that's still better than dropping a giant blob of styles in the wrapper (which may get dropped due to the whole design/source view switching issue); it would also prevent one from having to update various wrappers and instead update the one reusable page. Good thought.
0 -
One quirk of our FTP directory is its caching interval. Due to some of the systems we use to guarantee speedy page delivery, it can take up to 15 minutes for a change to an uploaded file to go "live". This doesn't happen with brand new files--there's no preexisting cache for them--but it can happen if you're doing development, and you're making frequent, incremental changes to your CSS or JS.
What we've learned to do at Convio is to use <style> and <script> tags during development, in reusable pages as you described. Those aren't subject to the caching interval. When development is complete and your style and script is finalized, you can then put it into linked files.
0 -
James Zetlen:
One quirk of our FTP directory is its caching interval. Due to some of the systems we use to guarantee speedy page delivery, it can take up to 15 minutes for a change to an uploaded file to go "live". This doesn't happen with brand new files--there's no preexisting cache for them--but it can happen if you're doing development, and you're making frequent, incremental changes to your CSS or JS.
What we've learned to do at Convio is to use <style> and <script> tags during development, in reusable pages as you described. Those aren't subject to the caching interval. When development is complete and your style and script is finalized, you can then put it into linked files.
Just to bring this thread back from the dead...Instead of resorting to reusable stylesheets and replacing them with absolute links after development, I use the random-number s-tag to defeat the serverside cache:
<link rel="stylesheet" href="ftp/path/to/whatever.css?nocache=]" />
or
<script type='text/javascript' src="ftp/path/to/script.js?nocache=]" />
The nocache parameter is ignored, but provides a unique url to pass to the server, and I've noticed that it just about always serves up a fresh file.
Of course, caching is good, so you still have to remove that parameter once you're done, but I think it cuts a lot of time from the overall development process.
0 -
Erland Sanborn:
Just to bring this thread back from the dead...Instead of resorting to reusable stylesheets and replacing them with absolute links after development, I use the random-number s-tag to defeat the serverside cache:
<link rel="stylesheet" href="ftp/path/to/whatever.css?nocache=]" />
or
<script type='text/javascript' src="ftp/path/to/script.js?nocache=]" />
The nocache parameter is ignored, but provides a unique url to pass to the server, and I've noticed that it just about always serves up a fresh file.
Of course, caching is good, so you still have to remove that parameter once you're done, but I think it cuts a lot of time from the overall development process.
To take that idea one step further ... with some advancements made semi-recently, it's possible to use a PageBuilder page to serve up content other than HTML, i.e. CSS. This is done using a U-Tag, U8, which sets the Content-Type response header. With this, you can use PageBuilder to create stylesheets! The advantage this provides is that since PageBuilder pages are run through Convio's templating engine, they can evaluate S-Tags and conditionals, allowing you to, for example, have a block in your stylesheet that is only rendered for TeamRaiser events.
To do this you'd create a PageBuilder page, let's call it wrapper_styles. This would be its content:
[[U8:text/css]]
body{
background:url(../images/bg.jpg);
}
#content{
margin:0 auto;
}
[[?x26x27x::x[[S334:app_id]]x::
/*TeamRaiser*/
.FormBox{
background:transparent;
}
::]]Then in your page wrapper you'd have this in the <head>:
<link rel="stylesheet" type="text/css" href="SPageServer?pagename=wrapper_styles&pgwrap=n&app_id=[[S4]]&nocache=[[S55:1000,99999]]" />
The pgwrap=n query string indicates the PageBuilder page's content should be rendered with no wrapper, and app_id=] simply passes the application ID of the requesting page to the stylesheet so it can be used in the conditional.
0 -
Noah Cooper:
To take that idea one step further ... with some advancements made semi-recently, it's possible to use a PageBuilder page to serve up content other than HTML, i.e. CSS. This is done using a U-Tag, U8, which sets the Content-Type response header. With this, you can use PageBuilder to create stylesheets! The advantage this provides is that since PageBuilder pages are run through Convio's templating engine, they can evaluate S-Tags and conditionals, allowing you to, for example, have a block in your stylesheet that is only rendered for TeamRaiser events.
To do this you'd create a PageBuilder page, let's call it wrapper_styles. This would be its content:
[[U8:text/css]]
body{
background:url(../images/bg.jpg);
}
#content{
margin:0 auto;
}
[[?x26x27x::x[[S334:app_id]]x::
/*TeamRaiser*/
.FormBox{
background:transparent;
}
::]]Then in your page wrapper you'd have this in the <head>:
<link rel="stylesheet" type="text/css" href="SPageServer?pagename=wrapper_styles&pgwrap=n&app_id=[[S4]]&nocache=[[S55:1000,99999]]" />
The pgwrap=n query string indicates the PageBuilder page's content should be rendered with no wrapper, and app_id=] simply passes the application ID of the requesting page to the stylesheet so it can be used in the conditional.
Excellent!
This solves so many problems that haven't even come up yet. Thanks!
0 -
I've officially exhumed this old thread due to something I've been trying to figure out and is in the same vein. Hello all!
Here's what i'm doing:
I have a secure Event page, with a pagebuilder page that calls in a CSS file through an S tag. Like this...[[S51:BS_Min_336_CSS]]
Within that minified CSS file, there are references to a series of @Font-Families:@font-face {
font-family: 'Glyphicons Halflings';
src: url('../fonts/glyphicons-halflings-regular.eot');
src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
}
My question is how do I mimic and securely serve these font file types -- since one can't fit these in the COM document library content types. I know for the SVG format, i can drop it straight into a pagebuilder file, but the other ones do not translate to HTML at all.
Since FTP is ruled out (as of 2009, how about 2016?) for secure files, i've been trying to dare this using the S tags. and content header declarations, but hitting console errors.
I'll leave it to the pros
Thanks in advance!
0 -
I think your best bet is going to be to upload the font files directly into a ftp directory and then call them from there. That will allow you to serve them securely.
You can't upload files using sftp into Luminate, but you can serve files out of there securely.1 -
Just to elaborate a little.
FTP is just the method you use to get files to your instance's file directory. You would use FTP to create your fonts directory and upload your files, bypassing Luminate all together.
Once that is done, your @font-face code should work just as it is.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™
- 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
- 3 Blackbaud Staff Discussions
- 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