Try our conversational search powered by Generative AI!

Egenskapstyp Kategori som inte listar hela kategoriträdet

Vote:
 
Jag skulle behöva en egenskapstyp som är utav typen kategori men som inte listar hela kategoriträdet utan där man kan ställa in vart i trädet den ska börja lista. Är det någon som gjort en sådan lösning tidigare och som har lite kod man kan titta på? eller att man kan få se koden till standard egenskapen "Category selection" och ärva från denna? Mvh Peter Ragndahl Webupdate
#12119
Aug 27, 2004 11:22
Vote:
 
Det du kan göra är att skapa en egen property som ärver från EPiServer.Core.PropertyCategory och överlagra CreateChildControls med egen kod. Eller, om du kan vänta på nästa version av EPiServer så kommer du kunna överlagra en ny funktion, GetCategories, som läser ut kategorilistan och som även anropas internt av CreateChildControls. Då räcker det med att överlagra GetCategories för att bestämma vilka kategorier som ska gälla, övrig renderingskod anpassar sig efter det.
#13678
Aug 27, 2004 13:45
Vote:
 
Okej ja det låter bra men när kommer nästa version? Jag skulle dock vilja att man innefrån adminläget kan ställa in på den egenskap som man använder denna property på vart trädet ska börja. Vill använda denna Property på flera ställen/egenskaper/mallar men att man ska kunna lista olika kategoriträd på respektive ställe. Vore bra om jag slapp göra flera olika Properties för varje variation som jag behöver. Mvh Peter
#13679
Aug 27, 2004 14:12
Vote:
 
Vi siktar på att bli klara med v4.40 i september, något releasedatum är dock ännu ej spikat. Jag tar med din idé på önskelistan (bra idé förresten!), så får vi se om vi kan få med den.
#13680
Aug 27, 2004 15:03
Vote:
 
Det hade varit intressant med en uppföljning av detta ärende nu när v.4.40 är släppt. Fungerar det att överlagra GetCategories och hur går det med den goda iden att ställa in kategoriroten för egenskapen under admin mode? Kommer det i v.4.50? Jag hittar ingen information om GetCategories i SDK:n för v.4.40.
#13681
Jan 18, 2005 11:58
Vote:
 
Jag måste ha haft en tidig version av SDK:n för v.4.40. Med hjälp av funktionen Category.Find(int catID) kunde jag plocka ut en viss gren i kategoriträdet. protected override System.Collections.IList GetCategories() { return EPiServer.DataAbstraction.Category.Find(3).GetList(); } Dock är detta värdet hårdkodat så det hade varit snyggt med Peters lösning, dvs att man kan sätta ett dynamiskt värde i admin mode.
#13682
Jan 18, 2005 16:34
Vote:
 
Håller med, det vore en trevlig finess att ha med. Från och med v4.40 kan du dock lösa det på egen hand om du vill, genom att skapa en egen PropertyCategory som ärver från EPiServer.Core.PropertyCategory. I den egna klassen kan du överlagra GetCategories-metoden, där du returnerar den kategorikollektion (dvs träd) som kategoriobjektet ska hantera. Om du t ex läser kategori-ID för kategoriträdet från en dynamisk egenskap så kan klassen läsa olika kategoriträd på olika ställen i sidhierarkin. För att se till att den egna PropertyCategory-klassen används istället för den inbyggda så det bara att definiera om egenskapstypen Category i admin; ange klassnamn med komplett namespace, t ex "MyNameSpace.CustomPropertyCategory" samt namnet på assemblyn den ligger i, t ex "MyAssembly".
#13683
Jan 19, 2005 12:02
Vote:
 
Hei, Janne. Jeg har testet denne gremgangsmåten, og får det ikke til å fungere. Jeg har laget en egen MyCategory-klasse som arver fra PropertyCategory. Denne har jeg definert i den innebygde Category-egenskapstypen, slik at jeg har lagt inn Klassenavn MyNamespace.MyCategory og Assembly som MyAssembly. Samtidig har jeg laget en dynamisk egenskap av typen Heltall (integer) som jeg setter til den ID'en som jeg vil kategori-listen skal starte fra. Jeg får derimot ikke til å fungere. I Edit mode på sidenes kategori-tab får jeg alltid ut hele kategori-treet, selv om jeg har satt ID'en i den dynamisk egenskapen til noe annet enn 1 (Root). Kan også si at jeg prøver å debugge inn i min klasse, men BreakPoint'et blir aldri fanget opp. Virker som den ikke finner denne klassen. Mangler jeg noe? Frank :)
#13684
Feb 16, 2005 13:07
Vote:
 
(a reply in English, so everybody in the forum can read, hope you don't mind) Sorry, I realized that I mixed custom properties with built-in properties. My previous reply, where I said that built-in properties can be replaced, was wrong. My apologies... A clarification: - Built-in properties (Boolean, Category, etc) can not be replaced. - Custom properties added by developers can be replaced. So, if you want a property that only lists a subtree of the entire category tree, create a new class that inherits from PropertyCategory and override the GetCategories function so it returns only the categories you want. I have added a sample to the code samples section: http://www.episerver.com/templates/CommunitySample.aspx?id=3385
#13685
Feb 18, 2005 14:56
Vote:
 
Hi, Janne. I'm all for English in this forum, as you've may noticed from my former postings. I just thought since it already was startet in Swedish, I'd follow up in my native tongue... :) Thanks for the reply, and sample. However, after implementing it, I ran across a few bugs in the sample. First, it doesn't include the attribute needed. [PageDefinitionTypePlugIn] Second, the InitializeData() method has a few errors. I'm including a working version in this posting: public override void InitializeData(ApplicationConfiguration config, PropertyDataCollection properties) { _pageLink = PageReference.EmptyReference; if (properties != null) { // Find out current or inherited page (if page is new) PropertyPageReference pageLinkProperty = properties["PageLink"] as PropertyPageReference; if (!pageLinkProperty.IsNull) _pageLink = pageLinkProperty.PageLink; else { PropertyPageReference parentLinkProperty = properties["PageParentLink"] as PropertyPageReference; _pageLink = (!parentLinkProperty.IsNull) ? parentLinkProperty.PageLink : PageReference.EmptyReference; } } base.InitializeData(config, properties); } The main difference is that you have to test against the internal IsNull property on the PropertyPageReference objects. Also, in the Else part, you return the "PageLink" property again. I think you want to return the "PageParentLink" here. I don't know if this is correct in all cases, but it worked in mine. I'm using a dynamic property to determine which root category to use. With these adjustments, I was able to retrieve the property value also when creating new pages. This was not working in sample posted. Frank :)
#13686
Feb 21, 2005 11:46
Vote:
 
Thanks for pointing those things out, I have updated the sample now so it should work as expected. Just a comment about the missing attribute... If the custom property is defined manually (in admin/Edit custom property types section), it does show up in the property list, even without the PageDefinitionTypePlugIn attribute. But as you noted, it is always nicer to include the attribute in the code, since it makes EPiServer notice the property automatically. Which is nice! :-D
#13687
Feb 22, 2005 11:30
Vote:
 
Hi, The following lines did not work for me in the sample: // Check property that can be dynamic or page property if (page.Property.Exists("PageStartCategory")) startCategory = (int) page.Property["PageStartCategory"].Value; The value can not be cast to an integer because ".Value" returns a CategoryList. I do not now if it´s depending of version (I´m running 4.50). However, I updated the code to the following and it works: CategoryList lstCategories = (CategoryList)page.Property["PageStartCategory"].Value; if(lstCategories.Count==1) { startCategory = int.Parse(lstCategories.ToString()); } Mvh, Jonas
#13688
May 17, 2005 20:17
* You are NOT allowed to include any hyperlinks in the post because your account hasn't associated to your company. User profile should be updated.