Sitecore users to add fields to template - templates

I'm building a products table to show all the products attributes. However I need to allow users to add/edit/remove those attributes from the products later on in production without any dev work. I thought about branch templates but when I edit the branch template, existing products are not getting updated. Maybe I'm looking in the wrong direction? Any suggestions?

In an older project we have a similar setup with product and attributes and used a custom database to help us out:
products are stored as items in Sitecore
attributes are stored as items in Sitecore
a custom database stores the values of all attributes for all products
publish events are used to keep the custom database in sync when deleting products
on a product template we added an extra tab in the content editor including an aspx page that offers an editor on our custom database for that product. We use the products Sitecore ID and display all possible attributes in an editable way.
Most attributes have simple string values but that is extendable. Our attributes have a type (string, bool, (multi-)list, ..) and we use that to create the editor. The lists refer back to Sitecore items (a parent is selected on the attribute item).
Adding an extra tab in the editor can be done by creating a new item in the core database (/sitecore/content/Applications/Content Editor/Editors) that point towards your aspx file. In the standard values of your product template, you select the created "editor" in the Appearance section. (note that this is in Sitecore 6 - might have been changed although the path to the editors is still valid)
This solution does mean that the values of your attributes are stored outside Sitecore, but it worked for our requirements.

Related

Generating dynamic list columns fields in SharePoint list form

We have created a custom list form with SharePoint designer and now the requirement is like below:
User will request server creation using this form and now server can be of any type which user can choose from a drop-down such as Production,stage,Test or multiple production servers are required. And for each server type, there will be corresponding 20-25 fields which user need to fill for that server details. so i want to know the best way to achieve this as we cant create 200-250 list columns in this list and scrolling also will be a difficult task while user will submit the request. So what is the best way to achieve this requirement?
You can create a list containing all server types that will be used to create a server type lookup. Then you can create a list with a 'Server Type' column and 'Server Requirements' (multiple lines of text) column. You can store all requirements for a particular server as a JSON object e.g.:
{"RAM":"8GB", "CPU":"4"}
OR you can create a nested JSON object for each server type e.g.
{"ServerType": "Staging", "Requirements": {"RAM":"8GB", "CPU":"4"}}
wherever you want to show/send/populate data, you just need to retrieve this json and parse.
Hope this helps.
first I think the recommended way would be to try OOTB SharePoint solutions and in Your case I think You could try to use ContentTypes and OOTB list forms.
Lets say You create a content type per server type. To each type You add only the 20-25 fields that are corresponding to this server type. Then in list settings in advanced settings You turn on content type management and You add does content types to the list (also hide the default Element content type). After that when the user will want to add a new item to the list he will be albo to chose between the content types (server types in Your case), and after that the form will have only the fields that are added to this content type. Also in edit form the user will be able to pick between content types and will see only the corresponding fields. Please see the attached screens to also understand what I mean on a very simple case:
list
ContentType1 (ColumnA)
ContentType2 (ColumnB, ColumnC)
if this OOTB features are not enough and You already created a custom form using SharePoint Designer
Then You should be able to attach custom javascript file to it and jQuery library. The javascript You may store under _layouts path on server. Every field in the form has its own tr (row) You could to each row attach some custom css class like- class="forServerProd allFields" and then in js You could listen onChange event of Your list and show or hide fields with $(".allFields").css('dispaly','none'); // first hide all
$(".forServerProd ").css('dispaly','table-row'); // then show only relevant

Sitecore 8: The model item passed into the dictionary is of type 'Sitecore.Mvc.Presentation.RenderingModel'

I'm randomly getting the following error when I try to login to the Sitecore back end.
The model item passed into the dictionary is of type 'Sitecore.Mvc.Presentation.RenderingModel', but this dictionary requires a model item of type 'Sitecore.ExperienceAnalytics.Client.Mvc.Presentation.ExperienceAnalyticsLineChartViewModel'.
I experience this issue after I have build the Sitecore link databases using Sitecore Launchpad --> Control Panel --> Rebuild link databases.
When I clear the Sitecore cache using http://{your website}/sitecore/admin/cache.aspx this is error is not throwing for sometime.
Is there anyway to eliminate this error permanently ?
When you Remove Broken Links on the Core database, the Model property of the ExperienceAnalyticsLineChart rendering is erroneously deleted.
Navigate to the Core database in the Content Editor of your Sitecore instance at http://{your-sitecore-url}/sitecore/shell/default.aspx?sc_content=core.
Navigate to the ExperienceAnalyticsLineChart rendering in the item tree at /sitecore/client/Applications/ExperienceAnalytics/Common/Layouts/Renderings/ExperienceAnalyticsLineChart.
Set the Model field to Sitecore.ExperienceAnalytics.Client.Mvc.Presentation.ExperienceAnalyticsLineChartViewModel, Sitecore.ExperienceAnalytics.Client.
Save the item and click OK if prompted that the item contains broken links.
Log back into Sitecore and the Launchpad will load.
In your view you're using Sitecore.ExperienceAnalytics.Client.Mvc.Presentation.ExperienceAnalyticsLineChartViewModel instead of Sitecore.Mvc.Presentation.RenderingModel witch is the default.
If you want to use your own model you have to register it in Sitecore
Navigate to /sitecore/layout/Models and add a new model in the model type add "Sitecore.ExperienceAnalytics.Client.Mvc.Presentation.ExperienceAnalyticsLineChartViewModel, YourAssemblyName"
go to your View rendering item in sitecore and select your model in the Model field.
https://community.sitecore.net/developers/f/8/t/109 looks like they have same issue like you

URLs of pages on which item appears in Sitecore

In Sitecore, how can I get a list of all pages on which an item appears? Thanks
Internally Sitecore maintains a database of references between Items called the Link Database. You can query this by using the "Links" dropdown on the "Navigate" tab on the Content Editor ribbon. That may give you the information you need.
(You can also query the Links Database via code - See example code on http://laubplusco.net/sitecore-item-extensions-get-referrers-as-items/ for one example of doing this - or the docs in SDN)
If the relations to your target Item are via selection field types (multilist, treeview etc) or via the DataSource property of Renderings/Sublayouts/etc then you should be able to select the item you're interested in and click the "Links" dropdown to see a list of the relationships Sitecore has recorded. This will list system relationships (which template does this item use) as well as the sort of relationships you're interested in where one item points at another item.
Note that this approach cannot tell you about some types of relationship: the most common sort being ones which are calculated at runtime. (EG API queries, or searches) because those relationships don't exist in the Links Database.
-- edited to add --
You ask about getting the URLs for these Items. In code you can get the URL for an item by calling LinkManager.GetItemUrl() and passing in the item you're interested in. That gives you the public website URL, rather than the Sitecore Item Path that you'd get directly from the Link Database.

Sitecore query filter issue

I am new to Sitecore and have come across a situation for which I haven't been able to find any documentation.
I have two blogs, Blog A and Blog B. Each Blog has various Categories.
Now, I am trying to create a template, where the user can select a Blog and then select Categories. For Bog Selection, I have used a Droptree and for Categories Selection, I have used a Multilist. I can fetch all the Categories using the following query :
query:../../..//*[##templatename= 'Category']
But, this fetches all the categories belonging to both the Blogs. What I want to do is - when the user has selected the Blog in the DropTree, I want to populate the Multilist only with the categories belonging to that particular blog.
Any ideas? Thanks!
I don't think Sitecore Query supports what you're after (basically using a field value from another item as a variable in a query, if I understand correctly).
There's a guide to the whole of query on SDN: http://sdn.sitecore.net/reference/using%20sitecore%20query/sitecore%20query%20syntax.aspx
I think I'd look at creating a custom field type that inherited from multilist and overriding the logic that pulls items based on the data source - then you can filter it programmatically however you want. There are various blog posts available on that subject, such as http://gettingtoknowsitecore.blogspot.com/2010/03/custom-fields-part-1.html
You could also consider putting categories as subitems under each blog to drastically simplify the whole thing - then you could simply use a relative query or an ancestor-or-self query without anything custom.

Custom [admin] interfaces with Django?

I've been playing around with python/django for the last couple of weeks and whilst the overall structure and makeup of the framework is making sense I'm rather confused on how to create advanced interfaces (in relation to tasks administrators would perform). One trivial example I'm playing around with at the moment is a bulk csv product import for different suppliers which will update various fields of a particular product (keeping track of any changes), creating items where they don't already exist and applying other business logic etc.
With the data successfully in the database and the models reflecting this I envisage a view whereby one could select a supplier from a drop down, which would load all the products silently in the background and display a datagrid on success. The user could then interact with each product individually, for example selecting would display a stacked line chart of pricing history above the datagrid and an optional fly-in panel to the right with options to update prices, add notes etc.
Are there any best practice approaches for achieving something along these lines, does one create custom views/templates or put some heavy lifting into overriding the default Django admin functionality?
Any help is appreciated, thanks in advance.
You can either:
Create a custom django admin action that will appear as an option in the changelist page dropdown menu (of the Supplier model for example.) You can then apply this action to the selected rows. You can also have intermediate pages when using admin actions
You can hook your own views into the django admin for particular models and and then overwrite the appropriate django admin templates to link the two together