2013-04-18 66 views

回答

2

我將使用默認的圖像成分作爲一個例子建議 - /庫/基礎/組件/圖像。

如果你把你的代碼放到你的特定頁面類型的組件,雖然,你的代碼應該是這樣的:

if (currentNode.hasNode("image")) { 
    String imagePath = currentNode.getNode("image").getPath(); 
    Resource imageRes = resourceResolver.getResource(imagePath); 
    image = new Image(imageRes); 

    image.loadStyleData(currentStyle); 
    image.setSelector(".img"); 

    if (!currentDesign.equals(resourceDesign)) { 
     image.setSuffix(currentDesign.getId()); 
    } 
    image.draw(out); 
} 

但請記住,即使你設定的圖像,它不是說它會顯示出來 - 如果你使用頁面屬性的默認頁面對話框,它只會顯示一個破碎的圖像。這是因爲CQ中存在一個bug,圖像的sling:resourceType屬性沒有設置,因此它不會顯示。這是因爲放在圖像上的.img選擇器不知道該怎麼做,除非它指向具有.img選擇器定義的資源類型,所以它可以正確地呈現圖像。

我已經上傳了一個軟件包,您可以使用該軟件包作爲默認/ libs/foundation/components/page組件對話框的問題的修補程序,以便在上載圖像時實際設置資源類型。您可以從我的Google Drive

中找到/下載包裝。希望有幫助。讓我知道你是否需要更多幫助。

編輯

如果你想從一個頁面獲得另一頁的頁面屬性圖像,你只需要使用一個資源解析器。你應該有一個提供給您的CQ,所以這將基本上代碼:

Resource imageRes = resourceResolver.getResource(pathFromYourDialog); 
Image image = new Image(imageRes); 

其餘部分將是相同的 - 你只是給它來啓動不同的路徑。

+0

感謝Nicol的迴應。這裏您使用的是currentNode,這意味着它將從當前頁面節點獲取圖像。但在我的組件中,我想從用戶使用對話框中的路徑字段獲取我正在採用的頁面的縮略圖圖像。 –

+0

您的意思是說您正在製作一個自定義組件,它將從您提供的任何頁面路徑的頁面屬性中獲取圖像?如果是這樣的話,你仍然可以做同樣的事情,但你只需要使用資源解析器。我編輯了上面的示例以向您展示。 –

+0

由於「圖像」節點是相對於頁面的,因此您希望使用'currentPage.getContentResource()。getResource(「image」)'一般地獲取頁面組件中的圖像。 –

0

我認爲Nicholaus在他的編輯答案中更加註重您的直接需求。如果用戶正在通過對話框爲您提供縮略圖的路徑(即DAM圖像)。

您可以簡單地創建圖像,或者如果它具有DAM信息,則可以將其加載爲DAM資產並提取必要的信息。

Image image = new Image(); 
Resource imageResource = resourceResolver.getResource(imageUrl); 
Asset imageAsset = imageResource.adaptTo(Asset.class); 

Map<String, Object> valueMap = imageAsset.getMetadata(); 

long width = Long.parseLong(valueMap.get("tiff:ImageWidth").toString()); 
long height = Long.parseLong(valueMap.get("tiff:ImageLength").toString()); 
Object titleObject = valueMap.get("tiff:ImageTitle"); 
String title = (titleObject == null) ? null : titleObject.toString(); 

if (title != null) 
{ 
    image.setTitle(title); 
} 

image.setWidth(width); 
image.setHeight(height); 
image.setUrl(imageUrl); 

對於Nicholaus提出的建議,Image類將根據您傳遞的資源創建它自己。 (爲此,實際上是Nicholaus,我們可以做一些優化)。

另一個更簡單的選擇是隻使用用戶通過的src,如果你正在做的是設置縮略圖。我猜你可能在做類似的安全:

在Java

String thumbSrc = properties.get("thumbSrc", "defaultThumbnail.path"); 
if (!thumbSrc.isEmpty()) 
{ 
    pageContext("thumbSrc", thumbSrc); 
} 

在JSP:

<img alt="thumbnail" src="${thumbSrc}"/> 

,或者如果你不想在java做任何事你可能只是做類似

<c:if test="${not empty properties.thumbSrc}"> 
    <img alt="thumbnail" src="${properties.thumbSrc}"/> 
</c:if> 

爲了得到相同的結果,在第一部分只是JSP,你需要換我t在選擇中,因爲在發送到查看之前通過一些處理來傳遞它可以更容易地設置默認值。

相關問題