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:
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
Hi Anthony,
It's probably passing the check because it's casting to DynamicXml. Something like this might work:
The HasValue is needed because .Count will throw an error if its empty (and returns a DynamicNull)
HTH,
Tom
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><a 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;}
<a href="@arrangement.Url"><img class="bordered" src="@imageCrop" alt="@caption" /></a>
</p>
}
else
{
<p>
<a 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
is working on a reply...
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.