Multiple item templates in Grid App - templates

I'm developing a Windows Store application based on the Grid application template. Upon creating a new project, there is some sample data generated for the application. There are only three pages in the app: home, grouped items, and item details.
I'm wondering whether it's possible to have different templates for item details, and if so, how.
For instance, I have a group containing a list of smartphones and another group containing a list of printers. In the smartphones item details template, I'd probably have fields such as "Memory card", "Speakerphone", and "Operating system", whereas in the printers item details template I'd have fields such as "Speed", "Accepted cartridges", and "Paper sizes".
How should I go about adding item detail templates and using the correct one depending on which item is viewed? I've looked at http://babaandthepigman.wordpress.com/2012/02/08/datatemplateselector-winrt/ but that seems to be for XAML applications only. I'm not using XAML/VB/C++/C#, but JavaScript and HTML5.

To be clear the three pages in the grid project template are groupedItems (the "hub"), groupDetail (the "section"), and itemDetail (the "detail"). I actually wish they would have named those pages "hub", "section", and "detail".
If you're talking about having multiple item templates so that item tiles on the hub (groupedItems) page look different depending on the item type, then the easiest way is to provide the multiple item templates (WinJS.Binding.Template) in the HTML and then write a custom template selection function. It's not that difficult. You can see an example if you look at my codeSHOW app (codeshow.codeplex.com)... see the home.js page. The source is online, so you can see that page here.
If you're talking about having multiple detail (itemDetail) pages so that when a user clicks on a certain item from the hub, they might be taken to a whole page of information about a phone versus a printer, then that's simply a matter of having multiple pages and being intelligent about which page you navigate to. If the user clicks on a phone from the hub, then you navigate to /pages/phone/phone.html. If they click on a printer then you navigate to /pages/printer/printer.html.
Finally, if your entities (i.e. phones and printers) are similar enough, then you may want to keep a single page to represent them, and just make that page smart enough to modify its template for the right item. In that case, you can create two templates on the page (WinJS.Binding.Template again) and when the entity is passed in to the page (the 'options' part of ready(element,options)), you just inspect it and look at the entity type (i.e. phone or printer) and then render the data into the right template. The Binding and Templating and Fragments and Pages demos on codeSHOW may be helpful there.
If you want more help, you can schedule some 1 on 1 time with a Microsoft Developer Evangelist at usdpe.ohours.org. Have fun!

Related

Sitecore 8.1 Header and Footer Composite Component

In Sitecore I have created base Template & Renderings for "Header, Top Menu, Logo, Search ,Login Button…etc that comes in Header across all Pages of the Site."
Also the same template & Rendering is using in other website so we can't set value in Standard field.
Now the problem is “suppose we have 100 pages in a Site then each page we have to go and add/update rendering & data source.
Is there any way that a “Header rendering” contains child rendering and by placing “Header rendering” render all its child renderings.
Header Composite Component ===>
Logo Component
Top Navigation Component
Search Component
There is a composite component module on the Sitecore Marketplace :https://marketplace.sitecore.net/Modules/C/Composite_components.aspx?sc_lang=en
This fill's your requirements exactly.
It works by creating a "Composite Component" item, then you add your renderings for your header to that component. E.g. Logo, Navigation etc...
Then in the standard values of your page templates, you add a new Composite Component rendering and set the datasource to the component item you created.
The module will then inject the renderings from the component item presentation into your current item. So you only have to update a single place to update all pages etc...
I have this running in a few production sites and it works well. It even supports the Experience Editor.
I don't think there's a solution out of the box. SxA solves this with Partial and Page Designs at site level. Just wrote a blog about it:
http://reinoudvandalen.nl/blog/sitecore-experience-accelerator-partial-designs-and-page-designs/
I also made something that might help you: Partial Layout Presets
http://reinoudvandalen.nl/blog/sitecore-partial-layout-presets/
It even allows you to store presets per site, but keep in mind that it injects composed layouts. If you modify the preset then it does not get applied to the pages where it was injected (though you might be able to pull something of with a shared datasource per site).
Lastly the obvious solution would be to create a page template per site so you'll be able to have standard values per site.
You may want to take a look at using Placeholder Fallback.
This will allow you to add components and renderings to a top level page and then the child pages would "fallback" to using the renderings inserted into the placeholder of the top level page in the item hierarchy. The editors can also insert page specific renderings on each child page if required.
If you do not want to custom code and only out of the box features then you could use Devices. You can find more information in the documentation about Set up a device layout. Once the device is created you can specify a different default device per site:
Now when you open the Presentation Details on the __Standard Values of your templates you can specify a different Layout or Renderings per device, i.e. different ones for AltSiteDevice

Specify order of slides in carousel?

Is there a way to control the order of slides displayed to users in a carousel from the Experience Editor perspective? (or even the Content Editor)
Basically, based on the user that has been identified or not identified, I would like to display a different slide as the first slide of the carousel. All the other slides would still be present, just in a different, specified order.
Is there a way to accomplish this via rules or should I look at having to create separate datasources that have the different slide orders already specified?
TL;DR
Personalization can do three things:
vary a datasource for a rendering
vary a rendering (use another rendering basically)
hide a rendering.
I guess the question you need to answer is whether what you need can be accomplished by doing either one of these actions.
If you've used nested structures to represent your carousel (like we do in SCORE, you can see how it looks like here or here) it's not hard to show/hide certain panels based on personalization conditions and thus reorder the carousel. Depending on how exactly it looks on the published site you may only need to repoint datasources. Either way, it's personalization out of the box and your content structures working nicely together.
If you've used a (variation of a) MultiList field to represent a list of your panels with panels themselves being items somewhere in the shared content area it's not something personalization engine can change based on a condition. Changing a field value is, unfortunately, not on the menu. I am sure you can code around it thanks to Sitecore being so open and flexible but I am not sure you can make it seamless (e.g. variations preview in Page Editor).
Rendering parameters is also not something you can change but if yours are static and defined on the rendering definition item (as opposed to being supplied when component is bound to the placeholder and thus recorded inside the presentation details) you can get away with having two definition items for your carousel component (same code behind it) and picking the right one based on the personalization condition.
Hope it helps.

How to handle a 'signed in' versus a 'default' homepage in Sitecore

I am building a brand new website in Sitecore and I am looking for advice on the following scenario:
My site has 2 version of its homepage. Both are quite different. The layout is the same, but most of the components and sublayouts on it will change depending on whether the user is logged in or not.
Does anybody has a suggestion of a good practice, or way to do that in Sitecore? My basic requirements are, have a single URL for both (the website root, it is a homepage) and do not harm the content author experience.
My thought so far was:
Use of personalization to control the components to be displayed (Concerns: performance and the content author experience he woudnt have to change component by component to see both versions)
Use of two item in the tree and intercept a pipeline to resolve the right item at the right time (Concerns: the content author would have two home items to maintain *not actually a big problem)
Does anybody has any other approach or considerations on those I listed?
Thanks
An alternative solution would be to make use of devices, and use a pipeline to switch devices if the user is logged in.
Set up your Device in Sitecore to use the default layout as a fallback so it does not affect other pages in your site (and they continue to work as expected). You are then able to set different sublayouts and components for that Item (directly or in Standard Values for the template) for each device. You can make use the VaryByDevice caching option to make better use of the Cache.
Your content editors can also switch between the devices easily in the Page Editor from the ribbon. Any further customization you need in other areas of the site, such has switching out a single component, can be run using a Personlization Rule taking advantage of "where the current device compares to value".
It does sound like you have the need for personalization based on authenticated status, so I would recommend staying with the built-in personalization interface to avoid confusion. Authors will have been trained during Sitecore training on how to use personalization, and introducing an alternative method for accomplishing the same thing could lead to a less-than-optimal experience for the author.
To address your concern of the author needing to view components by toggling each one, I would recommend installing the Experience Explorer module. You can create presets that meet your rules on your presentation and then the author can preview the site for different 'experiences'.
If you have a single URL for the home page, it is more straight-forward to go with a single item, so I would definitely advise against having two home page items that are being resolved by the same URL.
You mentioned a concern for performance, so I would recommend you making sure that you enable your sublayout caching settings. In your case, varying by Data may be the way to go, given you would personalize with two sets of datasources.
In the past I have used the following crude technique:
Make two components, one for "logged in" and the other for anonymous.
Each rendering has just one line, a single placeholder, either:
<sc:placeholder key="logged-in" runat="server" />
or
<sc:placeholder key="anonymous" runat="server" />
For "logged in" I make a personalisation rule which hides the component if anonymous, and for the anonymous component I make a personalisation rule which hides the component if the user is logged in.
I then nest all the components under the correct placeholder key.

How to create a left side bar on APEX 4.0 and open each value in a specific region?

Im a little newbie working with Aplication Express, I want to create an aplication which its structure could be something like this example.
http://apex.oracle.com/pls/apex/f?p=36648:1:110593396161288::NO
Anyone have some ideas to create it?
I just tried creating a List from Shared Components and then set it in a region with Page Region Template Position 3 and another Chart Region with Page Template Body (3), but in my case the side bar is placed on the right when I want it on the left... I have tried all the Template Position combination as possible.
Also when I click a value from the list, the page is opened on another tab. How can I open it on a specific region? As a frame for example
Any help will be greatly appreciated
Having a left sidebar depends on the page template you select. Some page templates will have a left sidebare, other a right one, others maybe both. And since templates are part of a theme, it may be that some templates under some themes may not have a page template that offers what you'd want.
So the first you need to do is look at what page templates you have available in your chosen theme. You can do this by going to the Shared Components and selecting templates from there. Scroll to the Page Templates and see if you can find one there.
While it's a good guess that the sidebart region will be in position 3, and position 3 is in the sidebar, it's best to verify. You can do that by checking the html of the body of the template. See if there is a region assigned to a sidebar. You'll have to divine this from the markup or an example page and which one it is (position 2? position 3? 4?).
Pro-tip: from the Shared Components > Templates, in the report overview, you can preview certain types of templates, such as the page template. Just hit the preview button and you'll get a general idea of the style and the region positioning! When viewing the template in detail, you can also preview from the preview link in the right hand menu list.
As for the list: the example you linked has a list region on the left sidebar, but all those links are links to other pages. Thus, there are as many pages as there are links in the list.
If on your environment the links are causing a new page or tab to be opened up, then that likely means the attribute target="_blank" is present on those anchor tags. Again though, this just means that that markup is being generated by the chosen list template. Try another list template (by editing the list, under Source you can chose the template) or take a look at the theme's templates. You can find the markup for the individual list items there.
It'd be better not to concern yourself too much by trying to fiddle around with iframes just yet, because even though that'd be possible it is not an out of the box feature. Unless you're already really familiar with eg javascript I'd stick to page links until you're more familiar with the environment.

How can I make Joomla 1.5 menus?

I'm making my own Joomla template, but when I check menu manager, it seems to be very confusing, because there are a lot of choices. I just need simple menu linking to my sites pages. So I need to know:
1) What kind of tag I need to insert to my template, so that it can show menus.
2) How can I link to pages on my site with that menu manager.
So, here's the five minute whirlwind tour of Joomla: You have Components, Modules, and Plugins.
Menu items link to components. This means that components are effectively "pages" in Joomla. So, you want a page to list a bunch of articles, for example? Create a menu item, and when you're asked to set it's "type" pick one the "articles" entries. Boom; you've just linked to a component.
Now, modules are odd bits and pieces of code that sit around components. Remember, the component is the "page" for all intents and purposes; modules are sidebar elements, "Related Articles" widgets and the like.
To create a new module, go to Extensions -> Module Manager and add one. Now, you can create a module that lists a batch of menu pages.
Lastly, you need someplace to put your modules on the page. The "template tag" if you're coming from Wordpres, is "". Drop that in your template on the sidebar, and change the name (the bit in parenthesis), to something like "sidebar".
Now, if you go back to the module manager, click your "Menu" widget, you should see a dropdown on the left where you can select the "position" the module should sit in. Select (or type in) "sidebar", and now that menu will be dropped into the page whereever you've placed your tag.
I would suggest you to go through the joomla 1.5 quick start guide, there you will find how to do that along with other stuff. This is the pdf file.
I'd agree with Sarfraz.
You could also check out the guides from Compass:
http://www.compassdesigns.net/joomla-tutorials/joomla-15-template-tutorial