Odkaz na soubor
Jeden z podtypů AK_UNSTABLE
, AK_FILE
identifikátoru stránky.
HTTP požadavky na odpovídající URL se nezpracovávají přes standardní publikační rozhraní: buď je může obsluhovat webový server ze souborového systému, nebo speciální servlet.
- Z pohledu autora obsahu je to prostě odkaz na soubor obsažený v datech assetů určitých typů.
- Z pohledu kodéra jsou tu ještě dva příznaky:
- Příznak, zda má být generované URL stabilní, nebo zda se může s novými verzemi assetu měnit.
- Příznak zabezpečení, podobně jako u interního odkazu.
Vygenerovaný identifikátor stránky neobsahuje referenci na původní asset, ale na blob obsažený v datech tohoto assetu.
Poznámka: Jak je patrné z dokumentace k funkci ref, teorieticky by bylo možné mít u jednoho assetu více různých blobů (kromě defaultního pojmenovaného data). Tato možnost se ale aktuálně nepoužívá:
- Uživatelské rozhraní editoru odkazu na soubor neumožňuje zvolit z více blobů.
- Žádný typ assetu s více bloby, které by se takto používaly, se v základní verzi systému jNetPublish nevyskytuje.
Podrobnější klasifikace
AK_UNSTABLE
- nestabilní odkaz na soubor,
AK_FILE
- stabilní odkaz na soubor.
Nestabilní odkaz reprezentuje URL, které má standardně tvar /public/*. Toto URL se mění pokaždé, když se změní blob obsažený v assetu se souborem. Soubory jsou většinou poskytovány přímo webovým serverem ze souborového systému. Poskytnutí správné verze souboru pro správný projekt tedy musí být zajištěno už v okamžiku, kdy se generuje odkaz na soubor ve stránce.
Stabilní odkaz reprezentuje URL, které má standardně tvar /file/*. Toto URL se s novými verzemi blobu nemění. Bez ohledu na zvolený projekt se poskytuje verze blobu z kořenového projektu.
Nestabilní URL jsou rychlejší. Proto se obecně s ohledem na výkon a problematiku cache souborů v prohlížeči doporučuje používat nestabilní odkaz, a to zejména tam, kde URL odkazu běžný uživatel nikde nevidí: pro obrázky, skripty, CSS.
Použití stabilního musí mít nějakou motivaci; je žádoucí například:
- když se má rozesílat URL e-mailem,
- když se předpokládá, že si uživatel URL bude ukládat do oblíbených položek v prohlížeči.
Podhodnoty odkazu na soubor
Odkazovaný blob není totožný s assetem se souborem, ale lze pomocí něj například jednoduše testovat, zda dva odkazy vedou na týž soubor.
<ul>
<li><a href="{target(_asset, "attachment1")}">
První příloha
</a></li>
{/* Druhou vypíšeme, jen pokud není shodná s první */}
{if not(target(_asset, "attachment1").blob.id ==
target(_asset, "attachment2").blob.id)}
<li><a href="{target(_asset, "attachment2")}">
Druhá příloha
</a></li>
{/if}
</ul>
Asset, jehož data blob obsahují, je přístupný jako vlastnost composite
blobu.
{let tgt := target(someButton)}
<a href="{tgt}">
{someButton.title}{if tgt.blob}
({tgt.blob.composite.title}){/if}
</a>
Zda se jedná o stabilní nebo nestabilní odkaz lze pochopitelně zjistit testováním vlastnosti addressKind
.
{import com.etnetera.jnp.publish.PageIdentification}
{let tgt := target(_asset, "target")}
<a href="{tgt}">
{if tgt.addressKind == PageIdentification.AK_FILE}
{/* Stabilní URL můžeme zobrazit
jako název souboru */}
{options forceAbsoluteAddresses=1}
{tgt}
{/options}
{else}
{/* V ostatních případech vypíšeme jméno souboru */}
{_asset.displayName}
{/if}
</a>
Volba podtypu (addressKind
)
Pro odkazy na soubor platí:
- Pokud je vstupní identifikátor typu
AK_PREVIEW
, generuje se typAK_UNSTABLE
bez ohledu na požadavky autora obsahu. - Jinak se generuje typ odkazu
AK_UNSTABLE
neboAK_FILE
podle volby, kterou provedl autor obsahu nebo kodér.
Mapování na URL
URL typu AK_UNSTABLE
URL je přímá cesta k souboru. Vnějškově nijak s daty identifikátoru nesouvisí.
URL typu AK_FILE
URL má prefix /file/ a za ním následují data, která kodér může zjistit z blobu obsaženého v identifikátoru: id blobu a název souboru.