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

Please Sign in or register to post replies

Write your reply to:

Draft