06.5.2018, 18:25
Dynamické odkazy na obrázky
Občas se hodí, mít možnost měnit zobrazený obrázek podle obsahu nějaké položky. Cesty jsou různé, například pomocí "visible" nebo "variables", případně jejich kombinací. Vede to často k poměrně složitému a komplikovanému kódu a k tomu, že si musíte hlídat kde a co vše je třeba upravit při nějaké změně. A přitom to někdy je velmi jednoduché. Uvedu dva příklady:
Příklad 1
Ve widget info, které zobrazuje detaily vybraného videa, jsem chtěl také zobrazit informace o zdroji - jeho název a nějakou ikonu nebo banner. Počítal jsme s tím, že si bannery předem uložím do "extras" adresáře skinu, název zdroje pak použiji z parametrů widgetu. Nechtěl jsem ale už extra zadávat název obrázku, a tak jsem drze využil jméno zdroje i v odkazu na banner. Trochu jsem se obával, co s tím udělají české háčky a čárky, ale ukázalo se, že je to v pohodě. Vytvořil jsem si adresář a do něj nakopíroval bannery a pojmenoval je názvy zdrojů (DVTV, Seznam zprávy, Šťastné pondělí, apod.). No a v parametru zobrazení banneru jsem jeho jméno sestavil následovně:
Výsledek je působivý.
[attachment=3818]
Příklad 2
Je variací prvního, tentokrát jsem potřeboval modifikovat ikony widgetu základního menu z pluginu iVysílání. Použil jsem tedy stejnou metodu, jen s tím rozdílem, že tentokrát je dynamická informace (v tomto případě o názvu položce v menu) obsažena v items containeru, do kterého se menu načetlo. Někomu se to bude zdát samozřejmé, když to fungovalo s parametrem "includes", musí to fungovat i zde. Kdo ale občas pracoval se skiny ví, že to tak samozřejmé být ani zdaleka nemusí.
Výsledek už tak působivý není, v podstatě je očekávaný a stejný, jako u ostatních widgetů. Ale cesta k tomu byla poněkud jiná.
[attachment=3817]
Občas se hodí, mít možnost měnit zobrazený obrázek podle obsahu nějaké položky. Cesty jsou různé, například pomocí "visible" nebo "variables", případně jejich kombinací. Vede to často k poměrně složitému a komplikovanému kódu a k tomu, že si musíte hlídat kde a co vše je třeba upravit při nějaké změně. A přitom to někdy je velmi jednoduché. Uvedu dva příklady:
Příklad 1
Ve widget info, které zobrazuje detaily vybraného videa, jsem chtěl také zobrazit informace o zdroji - jeho název a nějakou ikonu nebo banner. Počítal jsme s tím, že si bannery předem uložím do "extras" adresáře skinu, název zdroje pak použiji z parametrů widgetu. Nechtěl jsem ale už extra zadávat název obrázku, a tak jsem drze využil jméno zdroje i v odkazu na banner. Trochu jsem se obával, co s tím udělají české háčky a čárky, ale ukázalo se, že je to v pohodě. Vytvořil jsem si adresář a do něj nakopíroval bannery a pojmenoval je názvy zdrojů (DVTV, Seznam zprávy, Šťastné pondělí, apod.). No a v parametru zobrazení banneru jsem jeho jméno sestavil následovně:
Kód:
<control type="image">
<height>100</height>
<width>442</width>
<aspectratio aligny="center" align="left">keep</aspectratio>
<texture background="true">special://home/addons/skin.estuary.easy/extras/banners/$PARAM[source].jpg</texture>
<visible>$PARAM[header]</visible>
</control>
Výsledek je působivý.
[attachment=3818]
Příklad 2
Je variací prvního, tentokrát jsem potřeboval modifikovat ikony widgetu základního menu z pluginu iVysílání. Použil jsem tedy stejnou metodu, jen s tím rozdílem, že tentokrát je dynamická informace (v tomto případě o názvu položce v menu) obsažena v items containeru, do kterého se menu načetlo. Někomu se to bude zdát samozřejmé, když to fungovalo s parametrem "includes", musí to fungovat i zde. Kdo ale občas pracoval se skiny ví, že to tak samozřejmé být ani zdaleka nemusí.
Kód:
<include content="WidgetListCategories" condition="Skin.HasSetting(iVysilaniMenuWidget) + !Skin.HasSetting(HomeMenuNoiVysilaniButton) + System.HasAddon(plugin.video.ivysilani)">
<param name="content_path" value="plugin://plugin.video.ivysilani"/>
<param name="widget_header" value="Menu iVysílání"/>
<param name="widget_target" value="videos"/>
<param name="list_id" value="62050"/>
<param name="icon" value="special://home/addons/skin.estuary.stream-cinema/extras/icons/widgets/iVysilani/$INFO[ListItem.Title].png"/>
</include>
Výsledek už tak působivý není, v podstatě je očekávaný a stejný, jako u ostatních widgetů. Ale cesta k tomu byla poněkud jiná.
[attachment=3817]