Dynamically reference custom TeamRaiser pages by name using S-Tags
To elaborate: Let's say I have two pages in two TeamRaisers, both titled "My Test Page", but the "sid" variable in the URL of one is "13000" and the other is "13001". I feel like it's possible that [[S47]] is designed for this task, but I'm unsure. It seems like constructing this dynamic URL to point to the given page would go something like:
<a href="TR?fr_id=[[S42:0:fr-id]]&pg=informational&sid=[[S47:0:fr_informational:<?|ID>:My Test Page]]>My Link</a>
Since [[S47]] pulls information from various TeamRaiser custom components (e.g., fr_info is a reference to pg=entry), this seems like the most probable way, but the <?|ID> reflects that I don't know what would go there or after -- since, when referencing a TeamRaiser page like fr_info, that field is a number that references a variable's location in the XML file. But, in my example, I presuppose that I can tell it to look for a variable such as "ID" to pull it from the reference "My Test Page" associated with the given fr_id.
Anyone have any thoughts?
Comments
-
Hi Mark,
I can't speak to S47 in this regard, but what we do (and this only works if you can plan ahead far enough) is create "dummy" custom TR pages in an initial build. That way.. when the TR is copied (or child created if it's a blueprint), those dummy custom pages copy over and they will have the SAME sid number in each TR. This helps things work across a shared wrapper for example. Then all you need to do is call the fr_id number.. since you know the sid number is the same and can be hard-coded into the nav or link.
I know this doesn't answer your question, but wanted to share in case you weren't aware of it. I'm also interested to hear if anyone else has any thoughts on another solution, especially for TRs that already exist that don't share the sid nubmers.
Thanks,
- Jon
--
Jon Reich * Partner * Cathexis Partners * jon@cathexispartners.com * p.605.377.81470 -
We use session variables for this.
In the event pagewrapper we set the sid for our key pages like this:
[[U0:learnId=1005]]
[[U0:contactId=1003]]
Then in the Teamraiser and the wrapper, we consume them like this:
<a href="TR/Events/TeamRaiser?fr_id=[[S80:frId]]&pg=informational&sid=[[S80:contactId]]">Contact Us</a>
EDIT:
S47 allows you to pull values that are set on TR pages. So you could get the Event Coordinator Name from the field on the Greeting page.0 -
Jon Reich:
Hi Mark,
I can't speak to S47 in this regard...Thanks, Jon! This is usually what we do, there just happened to be an erroneous case and I was hoping to find a workaround utilizing the tools at hand. It's actually not too difficult to create a new TeamRaiser page with a given SID/SOID -- it's just a pain to have to create so many! I don't think I've seen that mentioned here before though, so I'll post another thread with it as a tip, but when creating a Custom Page in a TeamRaiser, the "soid" URL variable will be set to 0, telling the editor to assign the new page the next available ID number when you click save -- BUT, if you change that "0" in the URL to any other number (except for one corresponding to an existing page on that TeamRaiser), then press Enter to reload the page with the new URL variable, once you save the page, it will use the ID number you assigned to it.
1 -
Brian Mucha:
We use session variables for this...That's pretty clever -- I'll have to remember that!
0 -
Hi Mark,
In your specific case where a custom page is added later on post Blueprint initial push, or if someone just didn't start off with a Blueprint to begin with, but wanted to use the same "My Team Page" instance eventhough its off different SIDs.
You can probably tap into Angular JS mechanism -- almost similar but slightly different in purpose to what Brian has stated.
You can build up the object containing the pool of your FRIDs, and the associated SIDs -- this is the only time where you have to manually prepopulate the presets (and it's centralized in the term of repository wise for ease of maintenance)
function myFRIDsTeamPgSIDController($scope){
$scope.myfrids = [
{frid:'12345',sid:'13000'},
{frid:'10840',sid:'13001'},
{frid:'16590',sid:'13002'}
];
}
Now on your template, you could do this -- supposed you want it to dynamically show the relevant link of that "My Team Page", you loop that, use ng-show to compare the value of the frid on that loop instance with the one listed on the URL (S334 is to grab value from URL parameter called "fr_id" or you can use S80:frid that Brian use, but normally if you are using within the Teamraiser pages, the FRID is parsed as URL parameter)
<ul id="sidenav" ng-controller="myFRIDsTeamPgSIDController">
<li ng-repeat="x in myfrids" ng-show="x.frid == '[[S334:fr_id]]'"><a ng-href="../site/TR?pg=informational&fr_id={{x.frid}}&type=fr_informational&sid={{x.sid}}">My Team Page</a></li>
</ul>
Hope it helps,
p.s. but yup the ideal solution would always be to plan ahead and use Blueprint creating empty placeholder of custom pages even if at moment you might be sure you don't need it -- as Jon has stated, save hassle of having to patch it later on
regards,
Daniel0 -
Using javascript would totally work as well. Not sure if one is better than the other.
JS would be client side, S-Tags are server side. So I suppose the JS has a better chance of breaking in an obscure or untested browser. Might be a tad slower too. OTOH, we already rely pretty heavily on JS. And there is a limit to how many S-Tags you can run at once - though we haven't hit it.
In my post I simplified what we actually do, which is something similar to Daniel's approach with a repository.
We put a reusable page in each teamraiser's wrapper. That reusable has a conditional to assign variables that change from instance to instance like this:
[[?[[S80:frId]]::1390::
[[U0:learnId=2301]]
[[U0:contactId=3581]]
::[[?[[S80:frId]]::1410::
[[U0:learnId=3391]]
[[U0:contactId=4585]]
::
...and so on...
]]]]
Later we found that there are several pages which user's can visit where [[S80:frid]] doesn't work, such as UserLogin or Tell-A-Friend. So we add a single session variable assignment right above the reusable in the pagewrapper and hard code it like this:
[[U0:myId=1410]] (1410 is the teamraiser ID)
[[S51:reus_teamraiser_config_session_variables]]
And that means our conditional changes to this:
[[?[[S80:myId]]::1390::
[[U0:learnId=2301]]
[[U0:contactId=3581]]
::[[?[[S80:myId]]::1410::
[[U0:learnId=3391]]
[[U0:contactId=4585]]
::
...and so on...
]]]]0 -
BUT, if you change that "0" in the URL to any other number (except for one corresponding to an existing page on that TeamRaiser), then press Enter to reload the page with the new URL variable, once you save the page, it will use the ID number you assigned to it.
That's a nice finding -- I am learning from it now as well.
And you know (in case needed), you can automate bulk task of creating new custom page likely with this Firefox plugin called iMacros
https://addons.mozilla.org/en-us/firefox/addon/imacros-for-firefox/
Good thing about iMacros, besides its native IIM syntax -- you could create a Javascript based macros (yes, on the free edition plugin) and it could read .CSV and export back a .CSV which is handy.
Have the set of FRIDs that needed the add on custom page in a .csv (you could probably retrieve it from the query/reporting) - or depending on how you structurally name your Teamraisers (if you create a standard / conventional naming so the names would be like a pattern) -- You could tap into iMacros to search and loop into the list of those teamraisers with that naming standard, extract the IDs that is otherwise listed within those table column into a CSV file; run the IMacros then to do the bulk task of creating the same "My Team" custom page.
Expanding the original idea (potentially crazy idea)
=====================================
You can actually half automate the creation of that JSON object for the Angular JS scope -- it should likely be feasible
Once those custom pages are created we could probably loop back with iMacros, this time collecting the newly created SIDs, and built a second .CSV file.
When the .CSV is built -- you can use CSV to JSON converter and voila, that portion of the $scope is created.
regards,
Daniel
0 -
Brian Mucha:
Using javascript would totally work as well. Not sure if one is better than the other.
JS would be client side, S-Tags are server side. So I suppose the JS has a better chance of breaking in an obscure or untested browser. Might be a tad slower too. OTOH, we already rely pretty heavily on JS. And there is a limit to how many S-Tags you can run at once - though we haven't hit it.
...
In my post I simplified what we actually do, which is something similar to Daniel's approach with a repository.
...
Later we found that there are several pages which user's can visit where [[S80:frid]] doesn't work, such as UserLogin or Tell-A-Friend. So we add a single session variable assignment right above the reusable in the pagewrapper and hard code it like this:
...
And yes, the [[S80:trID]] I believe (of frid, isn't it what we thought Brian about that default S tag to retrieve it?), been experiencing moment of where it's returning "null" value for unknown reason, thus relying more on the S334:fr_id instead
@Brian -- I see now what you mean by the nested S-tag
regards,
Daniel0 -
Daniel Hartanto:
And yes, the [[S80:trID]] I believe (of frid, isn't it what we thought Brian about that default S tag to retrieve it?), been experiencing moment of where it's returning "null" value for unknown reason, thus relying more on the S334:fr_id instead
I am loving these responses. Just wanted to point out though -- [[S334:fr_id]] works only if you're sure every URL on all your links on your site are well-formed to include the fr_id. A sure-fire way to always get the fr_id of the page you're currently on is [[S42:0:fr-id]].0 -
Daniel Hartanto:
And you know (in case needed), you can automate bulk task of creating new custom page likely with this Firefox plugin called iMacros
https://addons.mozilla.org/en-us/firefox/addon/imacros-for-firefox/
I had heard of this ages ago, but it was a lot less powerful back then. Thanks for re-introducing me to it!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