A common use case for an app like disqus is to include it in a list/details scenario like a blog, where you only want the discussion items to appear on the details page. Since most such setups use the same DNN page for the list and the details, we need another mechanism to include / not-include this functionality. I present to you: conditional server-views in apps.
There's an App for That
As always you can find all this as a simple to install 2sxc app.
The Goal: Show Different Views / Templates based on a URL-condition
So this is a very common problem: an app placed on a page has different views - like a list-view, a details-view and a tags-filtered-list view. And each view still uses the same page, so DNN-modules placed on the same page would always appear as well. But this is not always desired. The basic example is the blog-list page
…which shouldn't show the disqus app, while the blog details page
…should show it. Note that this is a very generic issue which actually also appears in
- The blog list-page should show the list (duh)
- …while the details page should show the details (duh again)
Though this may seem logical, before the advent of 2sxc every module had to re-invent the mechanisms to implement this, commonly using a 'if(url.contains("post")) then…' mechanism. But 2sxc will automatically change the views based on the URL parameter thanks to the feature Switch Views On URL which even works for Token templates.
Implementing Switch Views On URL
Basically we need two views:
- The initial view, which is actually empty because in the default (list) mode it shouldn't show anything
- The optional view, which is only shown when the URL contains a parameter
Important: this optional view can use the same template as the standard disqus-view. So we don't need new HTML, we just need another rule so that 2sxc knows when to replace the empty view with the disqus view.
Step 1: The Initial Empty View
- Go to the administration > views, add a view with the name "empty" or similar and tell the system to create a new token template for it. Leave all the other settings blank.
- Then exit the administration and edit the template - either making it completely blank or in our case, just add an HTML comment so that anybody reading this know what happens
Step 2: The Conditional View
- Go to the administration > views, then add a view with the name "Show only on details" or similar.
- Re-use the existing template as this should be identical.
- The only special thing you must do is specify the url-param which should activate this view
- Optionally I would also set this view as hidden, so that it's not available in the "select view" dropdown when adding an app
Resulting View List
In the end you should have the following views
Adding to a Page
You can now add the disqus app to the page - and select the Empty view by default.
This causes the user to see nothing (by default), but when the URL parameter exists (in this case the parameter post with a value) then the view is automatically replaced by the real view.
That's all folks :)
Love from Switzerland,