Pole typu <ReferenceCollection> slouží k uložení vazby na jeden nebo více prvků kolekce. Jedná se v podstatě o kolekci polí typu <Reference>.
<ReferenceCollection name="someRefCol"
sourceCol="someCol" />
Pole typu <ReferenceCollection> je v admin rozhraní zobrazeno jako seznam, z kterého je možné vybrat více možností.
Pomocí pole typu <ReferenceCollection> lze také filtrovat prvky kolekce při jejich výpisu do stránky pomocí controlu <je:repeater>, viz atribut restrictField controlu <je:repeater>.
Atributy
allowEditFor nepovinný [seznam skupin uživatelů]
Skupiny uživatelů, kterým je pole přístupné k editaci. Pokud není atribut zadán, je pole přístupné k editace všem, kteří mají přístup do administrace. Více v článku Zabezpečení před neoprávněným přístupem do administrace.
denyEditFor nepovinný [seznam skupin uživatelů]
Skupiny uživatelů, kterým je pole znepřístupněné k editaci. Pokud není atribut zadán, je pole přístupné k editace všem, kteří mají přístup do administrace. Více v článku Zabezpečení před neoprávněným přístupem do administrace.
desc nepovinný [string]
Uživatelský popis pole, který se zobrazí v administračním rozhraní. Slouží k zapsání doplňujících údajů, jako například pokyny pro editora apod.
itemFormat nepovinný
Určuje, jakým způsobem jsou jednotlivé položky zdrojové kolekce zobrazeny v administračním rozhraní. Více o
itemFormatviz Zobrazení prvků kolekcí v administračním rozhraní.langDepend nepovinný [none, firstValue, values]
Určuje chování pole, má-li web více jazykových mutací (viz Jazyky). Možné hodnoty jsou:
- none – obsah pole je pro všechny jazyky shodný
- firstValue – pole má v každém definovaném jazyce jinou hodnotu. Pokud není hodnota pro daný jazyk zadána, použije se hodnota výchozího jazyka.
- values – pole má v každém definovaném jazyce jinou hodnotu. Pokud není hodnota v daném jazyce zadána, je pole pro daný jazyk prázdné.
name povinný [string]
Jméno pole. V rámci jednoho typu musí být jedinečné. Smí obsahovat pouze číslice a písmena bez diakritiky. Doporučuje se jména polí uvádět s počátečním malým písmenem (viz Konvence pojmenování).
required nepovinný [true, false]
Při nastavení na true se pole stane povinným a při editaci v administraci je potřeba zvolit alespoň jednu hodnotu.
sourceCol povinný [kolekce]
Absolutní nebo relativní cesta ke kolekci, z jejíchž prvků bude vybírán odkazovaný prvek. Způsoby zadávání absolutních i relativních cest ilustrují příklady uvedené níže.
sourceCol povinný [kolekce]
Absolutní nebo relativní cesta ke kolekci, z jejíchž prvků bude možno vybrat v administračním rozhraní. Způsoby zadávání a použití absolutních i relativních cest ilustrují příklady uvedené u pole typu
<Reference>.title nepovinný [string]
Uživatelský název pole, který se zobrazí v administračním rozhraní. Není-li
titleuvedeno, zobrazí sename.
Referenční integrita
Podobně jako u polí typu <Reference>, ani u polí typu <ReferenceCollection> nezajišťuje JellyPot referenční integritu. Libovolný prvek z odkazované kolekce lze smazat, i když je odkazován některým polem typu ReferenceCollection. V takovém případě se pole ReferenceCollection chová, jako by neobsahovalo odkaz na žádný prvek, a to i v případě, že je deklarováno jako povinné (required="true"). V .aspx souborech není zpravidla nutné toto chování nijak ošetřovat: pokud odkazovaný prvek není určen nebo neexistuje, nic se zkrátka nevypíše. V případě potřeby můžeme k rozlišení neexistence odkazu na prvek použít control <je:if>.
Příklad
Vraťme se k příkladu blogu u pole typu <Reference> – chtěli bychom, aby článek mohl mít přiřazenu víc než jednu rubriku. Pole typu <Reference> by stačilo změnit na pole typu <ReferenceCollection>:
<Vars>
<Collection name="blogPostCol"
itemType="BlogPostItem" />
<Collection name="blogPostCategoryCol"
itemType="BlogPostCategoryItem" />
</Vars>
<Types>
<Type name="BlogPostItem">
<SimpleText name="title" />
<Text name="text" />
<ReferenceCollection name="category"
sourceCol="blogPostCategoryCol" />
</Type>
<Type name="BlogPostCategoryItem" />
<SimpleText name="title" />
</Type>
</Types>
Výpis jednoho článku v .aspx by pak vypadal takto:
...
<je:item runat="server"
field=".title"
tag="h1" />
<je:repeater runat="server"
source=".category">
<item>
<je:item runat="server"
field=".title" />
</item>
</je:repeater>
<je:item runat="server"
field=".text" />
...