Copied to clipboard

Flag this post as spam?

This post will be reported to the moderators as potential spam to be looked at


  • Anthony Candaele 1197 posts 2049 karma points
    May 24, 2012 @ 20:39
    Anthony Candaele
    0

    how to check for mediaItem

    Hi,

    I have a problem that's kinda driving me nuts.

    I have a node (arrangement) with a 'arrangementImage' property of type Digibiz Advanced Media Picker

    The XML looks like this:

     

    <arrangementImage>

                <DAMP fullMedia="">

                  <mediaItem>

                    <ArrangementImage id="1204" version="2372a0c6-df1f-47eb-a03b-6e2d361f167b" parentID="1202" level="3" writerID="0" nodeType="1201" template="0" sortOrder="2" createDate="2012-05-24T15:01:10" updateDate="2012-05-24T15:01:10" nodeName="meeneemlunch" urlName="meeneemlunch" writerName="admin" nodeTypeAlias="ArrangementImage" path="-1,1072,1202,1204">

                      <umbracoFile>/media/1864/meeneemlunch.jpg</umbracoFile>

                      <umbracoWidth>620</umbracoWidth>

                      <umbracoHeight>495</umbracoHeight>

                      <umbracoBytes>32044</umbracoBytes>

                      <umbracoExtension>jpg</umbracoExtension>

                      <sliderCrop>

                        <crops date="2012-05-24T15:01:10">

                          <crop name="arrangementCrop" x="0" y="0" x2="620" y2="465" url="/media/1864/meeneemlunch_arrangementCrop.jpg" />

                          <crop name="arrangementImageCrop" x="76" y="0" x2="571" y2="494" url="/media/1864/meeneemlunch_arrangementImageCrop.jpg" />

                        </crops>

                      </sliderCrop>

                      <caption />

                    </ArrangementImage>

                  </mediaItem>

                </DAMP>

              </arrangementImage>

     

     

    Razor script to acces the image crop (arrangementImageCrop) looks like this:

    @inherits umbraco.MacroEngines.DynamicNodeContext
    @using DigibizAdvancedMediaPicker;
    @
    var arrangementen @Model.Children.Where("Visible");
    foreach (dynamic arrangement in arrangementen)
        {
            <h2>@arrangement.arrangementTitle</h2>
            if(arrangement.arrangementTagline != "")
            {
                <p>@arrangement.arrangementTagline</p>
            }
            var image "";        
            if (arrangement.arrangementImage.ToString(!= "")            
            {
                
             var imageCrop DAMP_Helper.GetImageCropperUrl(arrangement.arrangementImage"arrangementImageCrop");           
            
            <p>            
                <img class="bordered" src="@imageCrop" alt="" />            
                </p>
            }
            
        }
      }

    This works fine if an image was selected with the Digibiz Advanced Media Pickerk, however if no image was selected like for this node:

    <arrangementImage>1147</arrangementImage>

    Then an error is thrown for the line:

    var imageCrop DAMP_Helper.GetImageCropperUrl(arrangement.arrangementImage"arrangementImageCrop")

    saying that the best method match for the GetImageCropperUrl has some invalid arguments.

    The problem is that the code passes the condition

    if (arrangement.arrangementImage.ToString(!= "")

    So is there a way if a property of datatype DAMP does have an image selected?

    Thanks for your help and the preservation of my peace of mind,

    Anthony

  • Tom Fulton 2030 posts 4998 karma points c-trib
    May 24, 2012 @ 22:57
    Tom Fulton
    1

    Hi Anthony,

    It's probably passing the check because it's casting to DynamicXml.  Something like this might work:

    if (arrangement.HasValue("arrangementImage") && arrangement.arrangementImage.Count() > 0) {
    }

    The HasValue is needed because .Count will throw an error if its empty (and returns a DynamicNull)

    HTH,
    Tom 

  • Anthony Candaele 1197 posts 2049 karma points
    May 26, 2012 @ 15:17
    Anthony Candaele
    1

    Hi Tom,

    Thanks your suggestion works. My complete code now looks like this:

    @inherits umbraco.MacroEngines.DynamicNodeContext
    @using DigibizAdvancedMediaPicker;
    @
    var arrangementen @Model.Children.Where("Visible");
    foreach (dynamic arrangement in arrangementen)
        {
            <h2><href="@arrangement.Url">@arrangement.arrangementTitle</a></h2>
            if(arrangement.arrangementTagline != "")
            {
                <p>@arrangement.arrangementTagline</p>
            }
            if (arrangement.HasValue("arrangementImage"&arrangement.arrangementImage.Count(0)
            {            
            var imageCrop DAMP_Helper.GetImageCropperUrl(arrangement.arrangementImage"arrangementImageCrop");   
                if (arrangement.arrangementImage.mediaItem.caption != "")
                {
                    <p>
                    @{var caption arrangement.arrangementImage.mediaItem.ArrangementImage.caption;}            
                    <href="@arrangement.Url"><img class="bordered" src="@imageCrop" alt="@caption" /></a>          
                    </p>
                }
                else
                {
                    <p>            
                    <href="@arrangement.Url"><img class="bordered" src="@imageCrop" alt="" /></a>          
                    </p>
                }
            }       
            
        }
      }

    As you can see in the code I also do a check if  a ArrangementImage has a caption. The only thing I need to solve, is to put the 'nodeName' attribute of the ArrangementImage element, in case no caption was provided for the ArrangementImage. My XML looks like this:

    <mediaItem>

                    <ArrangementImage id="1211" version="6ab2c044-95f8-497f-8993-6c767528efed" parentID="1202" level="3" writerID="0" nodeType="1201" template="0" sortOrder="9" createDate="2012-05-24T15:41:27" updateDate="2012-05-24T15:41:27" nodeName="houtgestookte-pizzaoven" urlName="houtgestookte-pizzaoven" writerName="admin" nodeTypeAlias="ArrangementImage" path="-1,1072,1202,1211">

                      <umbracoFile>/media/2037/houtgestookte-pizzaoven.jpg</umbracoFile>

                      <umbracoWidth>640</umbracoWidth>

                      <umbracoHeight>427</umbracoHeight>

                      <umbracoBytes>292889</umbracoBytes>

                      <umbracoExtension>jpg</umbracoExtension>

                      <sliderCrop>

                        <crops date="2012-05-24T15:41:27">

                          <crop name="arrangementCrop" x="0" y="0" x2="569" y2="427" url="/media/2037/houtgestookte-pizzaoven_arrangementCrop.jpg" />

                        </crops>

                      </sliderCrop>

                      <caption>houtgestookte pizzaoven</caption>

                    </ArrangementImage>

                  </mediaItem>

     

    I have tried to access the nodeName attribute of the ArrangementImage with the following syntax:

    @arrangement.arrangementImage.mediaItem.ArrangementImage.nodeName

    but obviousliously this doesn't work, neither does

    @arrangement.arrangementImage.mediaItem.ArrangementImage("nodeName")

    Do you know how I can get to the nodeName (value = "houtgestookte pizzaoven") attribute of the ArrangementImage element?

    greetings,

    Anthony

  • This forum is in read-only mode while we transition to the new forum.

    You can continue this topic on the new forum by tapping the "Continue discussion" link below.

Please Sign in or register to post replies