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

secure
(Boolean) příznak zabezpečení,
blob
(Blob) odkazovaný blob.

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.

Příklad: Test shody odkazovaných blobů
Vstup
<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.

Příklad: Získání assetu se souborem z odkazu
Vstup
{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.

Příklad: Ověření, zda se jedná o stabilní URL
Vstup
{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í:

  1. Pokud je vstupní identifikátor typu AK_PREVIEW, generuje se typ AK_UNSTABLE bez ohledu na požadavky autora obsahu.
  2. Jinak se generuje typ odkazu AK_UNSTABLE nebo AK_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.

Pro vložení příspěvku do diskuse se přihlašte.