Kodi Community Forum

Full Version: Issue passing Skin.String into nested include
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
I have 3 different widget types set up as includes that take in a bunch of params:-

xml:
<!-- Landscape Widget -->
<include content="WidgetLandscape">
        <param name="WidgetNumber" value="1" />
        <param name="WidgetLabel" value="$INFO[Skin.String(WidgetName.1)]" />
        <param name="ListID" value="9021" />
        <param name="Content" value="$INFO[Skin.String(WidgetPath.1)]" />
        <param name="ContentType" value="$INFO[Skin.String(WidgetTarget.1)]" />
        <param name="SortBy" value="dateadded" />
        <param name="SortOrder" value="descending" />
        <param name="OnUp" value="9020" />
        <param name="OnDown" value="9022" />
        <param name="OnLeft" value="noop" />
        <param name="OnRight" value="noop" />
        <param name="OnBack" value="SetFocus(9021,0,absolute)" />
</include>
xml:
<!-- Poster Widget -->
<include content="WidgetPoster">
        <!-- EXACT SAME PARAMS AS LANDSCAPE -->
</include>
xml:
<!-- Square Widget -->
<include content="WidgetSquare">
        <!-- EXACT SAME PARAMS AS LANDSCAPE -->
</include>

Now in order for the user to select the different widget layouts I have a skin string that is set to one of the three widget types:-

Code:
Skin.SetString(WidgetAspect.1,Landscape) or
Skin.SetString(WidgetAspect.1,Poster) or
Skin.SetString(WidgetAspect.1,Square)

I then define a nested include to encapsulate the correct widget like so:-

xml:
<include name="Widget">
    <include content="Widget$PARAM[WidgetAspect]">
        <param name="WidgetNumber" value="$PARAM[WidgetNumber]" />
        <param name="WidgetLabel" value="$PARAM[WidgetLabel]" />
        <param name="ListID" value="$PARAM[ListID]" />
        <param name="Content" value="$PARAM[Content]" />
        <param name="ContentType" value="$PARAM[ContentType]" />
        <param name="SortBy" value="$PARAM[SortBy]" />
        <param name="SortOrder" value="$PARAM[SortOrder]" />
        <param name="OnUp" value="$PARAM[OnUp]" />
        <param name="OnDown" value="$PARAM[OnDown]" />
        <param name="OnLeft" value="$PARAM[OnLeft]" />
        <param name="OnRight" value="$PARAM[OnRight]" />
        <param name="OnBack" value="$PARAM[OnBack]" />
    </include>
</include>

Then when I want to display the widget I just call "Widget" like so:-

xml:
<!-- Widget 1 -->
<include content="Widget">
    <param name="WidgetNumber" value="1" />
    <param name="WidgetAspect" value="$INFO[Skin.String(WidgetAspect.1)]" />
    <param name="WidgetLabel" value="$INFO[Skin.String(WidgetName.1)]" />
    <param name="ListID" value="9021" />
    <param name="Content" value="$INFO[Skin.String(WidgetPath.1)]" />
    <param name="ContentType" value="$INFO[Skin.String(WidgetTarget.1)]" />
    <param name="SortBy" value="dateadded" />
    <param name="SortOrder" value="descending" />
    <param name="OnUp" value="9020" />
    <param name="OnDown" value="9022" />
    <param name="OnLeft" value="noop" />
    <param name="OnRight" value="noop" />
    <param name="OnBack" value="SetFocus(9021,0,absolute)" />
</include>

This should take the skin string "WidgetAspect.1" pass it into the "Widget" include and add it on the nested include
Code:
<include content="Widget$PARAM[WidgetAspect]">

Now the problem is if I pass in the text Landscape, Poster or Square the nested include works perfectly like so:-

xml:
<!-- Widget 1 -->
<include content="Widget">
    <param name="WidgetNumber" value="1" />
    <param name="WidgetAspect" value="Landscape" />  or Poster or Square - all work perfectly
    <param name="WidgetLabel" value="$INFO[Skin.String(WidgetName.1)]" />
    <param name="ListID" value="9021" />
    <param name="Content" value="$INFO[Skin.String(WidgetPath.1)]" />
    <param name="ContentType" value="$INFO[Skin.String(WidgetTarget.1)]" />
    <param name="SortBy" value="dateadded" />
    <param name="SortOrder" value="descending" />
    <param name="OnUp" value="9020" />
    <param name="OnDown" value="9022" />
    <param name="OnLeft" value="noop" />
    <param name="OnRight" value="noop" />
    <param name="OnBack" value="SetFocus(9021,0,absolute)" />
</include>

But if I pass in $INFO[Skin.String(WidgetAspect.1)]  nothing is displayed..... And to double check I've printed the value of $INFO[Skin.String(WidgetAspect.1)] as a label and it contains the correct text, Landscape Poster or Square.

I just can't figure it out, any help please.
Hi,
Sadly that'll not work ( usage of PARAMS | INFOlabel in the include call tags iteself), you'll need to circumstance by using include conditions.  (i faced similiar issue here https://forum.kodi.tv/showthread.php?tid...pid2886762)

or a better failing vs workin example, from a code i used in the past

In the past i tried to call an include based on a window property like
failure
xml:

<control type="grouplist" id="110">
    <description>using $PARAM[win(home)prop], or just $INFO[win(home)prop] failing in include so use as condition</description>
    <include>1103_Content_$INFO[Window(home).Property(SettingSection)]</include>
</control>

                
But instead i had to use
working
xml:

<control type="grouplist" id="110">
    <description>using $PARAM[win(home)prop], or just $INFO[win(home)prop] failing in include so use as condition</description>
    - other code-
    <include condition="String.IsEqual(Window(home).Property(SettingSection),SwanWidgetShortcuts)">1103_Content_SwanWidgetShortcuts</include>
    <include condition="String.IsEqual(Window(home).Property(SettingSection),WidgetAttributes)">1103_Content_WidgetAttributes</include>
    <include condition="String.IsEqual(Window(home).Property(SettingSection),MainmenuAttributes)">1103_Content_MainmenuAttributes</include>
    <include condition="String.IsEqual(Window(home).Property(SettingSection),VideoInfoButtonVisibility)">1103_Content_VideoInfoButtonVisibility</include>
    <include condition="String.IsEqual(Window(home).Property(SettingSection),VideoInfoContainerVisibility)">1103_Content_VideoInfoContainerVisibility</include>
    <include condition="String.IsEqual(Window(home).Property(SettingSection),SetBlurStrength)">1103_Content_SetBlurStrength</include>
</control>
 
________________________________________________________

So it should be something like that, as i just overflew
xml:

<include name="Widget">
    <include condition="String.IsEqual(Skin.String(WidgetAspect.1,Landscape))" content="WidgetLandscape">
        <param name="WidgetNumber" value="$PARAM[WidgetNumber]" />
        <param name="WidgetLabel" value="$PARAM[WidgetLabel]" />
        <param name="ListID" value="$PARAM[ListID]" />
        <param name="Content" value="$PARAM[Content]" />
        <param name="ContentType" value="$PARAM[ContentType]" />
        <param name="SortBy" value="$PARAM[SortBy]" />
        <param name="SortOrder" value="$PARAM[SortOrder]" />
        <param name="OnUp" value="$PARAM[OnUp]" />
        <param name="OnDown" value="$PARAM[OnDown]" />
        <param name="OnLeft" value="$PARAM[OnLeft]" />
        <param name="OnRight" value="$PARAM[OnRight]" />
        <param name="OnBack" value="$PARAM[OnBack]" />
    </include>
    
    <include condition="String.IsEqual(Skin.String(WidgetAspect.1,Poster))" content="WidgetPoster">
        <param name="WidgetNumber" value="$PARAM[WidgetNumber]" />
        <param name="WidgetLabel" value="$PARAM[WidgetLabel]" />
        <param name="ListID" value="$PARAM[ListID]" />
        <param name="Content" value="$PARAM[Content]" />
        <param name="ContentType" value="$PARAM[ContentType]" />
        <param name="SortBy" value="$PARAM[SortBy]" />
        <param name="SortOrder" value="$PARAM[SortOrder]" />
        <param name="OnUp" value="$PARAM[OnUp]" />
        <param name="OnDown" value="$PARAM[OnDown]" />
        <param name="OnLeft" value="$PARAM[OnLeft]" />
        <param name="OnRight" value="$PARAM[OnRight]" />
        <param name="OnBack" value="$PARAM[OnBack]" />
    </include>
    
    <include condition="String.IsEqual(Skin.String(WidgetAspect.1,Square))" content="WidgetSquare">
        <param name="WidgetNumber" value="$PARAM[WidgetNumber]" />
        <param name="WidgetLabel" value="$PARAM[WidgetLabel]" />
        <param name="ListID" value="$PARAM[ListID]" />
        <param name="Content" value="$PARAM[Content]" />
        <param name="ContentType" value="$PARAM[ContentType]" />
        <param name="SortBy" value="$PARAM[SortBy]" />
        <param name="SortOrder" value="$PARAM[SortOrder]" />
        <param name="OnUp" value="$PARAM[OnUp]" />
        <param name="OnDown" value="$PARAM[OnDown]" />
        <param name="OnLeft" value="$PARAM[OnLeft]" />
        <param name="OnRight" value="$PARAM[OnRight]" />
        <param name="OnBack" value="$PARAM[OnBack]" />
    </include>
</include>
(2021-06-04, 10:01)mardukL Wrote: [ -> ]
xml:

<include name="Widget">
    <include condition="String.IsEqual(Skin.String(WidgetAspect.1,Landscape))" content="WidgetLandscape">
        <param name="WidgetNumber" value="$PARAM[WidgetNumber]" />
        <param name="WidgetLabel" value="$PARAM[WidgetLabel]" />
        <param name="ListID" value="$PARAM[ListID]" />
        <param name="Content" value="$PARAM[Content]" />
        <param name="ContentType" value="$PARAM[ContentType]" />
        <param name="SortBy" value="$PARAM[SortBy]" />
        <param name="SortOrder" value="$PARAM[SortOrder]" />
        <param name="OnUp" value="$PARAM[OnUp]" />
        <param name="OnDown" value="$PARAM[OnDown]" />
        <param name="OnLeft" value="$PARAM[OnLeft]" />
        <param name="OnRight" value="$PARAM[OnRight]" />
        <param name="OnBack" value="$PARAM[OnBack]" />
    </include>
    
    <include condition="String.IsEqual(Skin.String(WidgetAspect.1,Poster))" content="WidgetPoster">
        <param name="WidgetNumber" value="$PARAM[WidgetNumber]" />
        <param name="WidgetLabel" value="$PARAM[WidgetLabel]" />
        <param name="ListID" value="$PARAM[ListID]" />
        <param name="Content" value="$PARAM[Content]" />
        <param name="ContentType" value="$PARAM[ContentType]" />
        <param name="SortBy" value="$PARAM[SortBy]" />
        <param name="SortOrder" value="$PARAM[SortOrder]" />
        <param name="OnUp" value="$PARAM[OnUp]" />
        <param name="OnDown" value="$PARAM[OnDown]" />
        <param name="OnLeft" value="$PARAM[OnLeft]" />
        <param name="OnRight" value="$PARAM[OnRight]" />
        <param name="OnBack" value="$PARAM[OnBack]" />
    </include>
    
    <include condition="String.IsEqual(Skin.String(WidgetAspect.1,Square))" content="WidgetSquare">
        <param name="WidgetNumber" value="$PARAM[WidgetNumber]" />
        <param name="WidgetLabel" value="$PARAM[WidgetLabel]" />
        <param name="ListID" value="$PARAM[ListID]" />
        <param name="Content" value="$PARAM[Content]" />
        <param name="ContentType" value="$PARAM[ContentType]" />
        <param name="SortBy" value="$PARAM[SortBy]" />
        <param name="SortOrder" value="$PARAM[SortOrder]" />
        <param name="OnUp" value="$PARAM[OnUp]" />
        <param name="OnDown" value="$PARAM[OnDown]" />
        <param name="OnLeft" value="$PARAM[OnLeft]" />
        <param name="OnRight" value="$PARAM[OnRight]" />
        <param name="OnBack" value="$PARAM[OnBack]" />
    </include>
</include>

Yep, thanks, that was the exact work-around I also came up with Smile