2016-06-15 9 views
7

टेम्पलेट पर विचार करें:ग्लास मैपर छवि क्षेत्र के लिए मानक मूल्यों को तोड़ने

कंपनी

  • लोगो (छवि क्षेत्र)
  • कंपनी का नाम (पाठ क्षेत्र)

Company टेम्पलेट में मानक फ़ील्ड दोनों फ़ील्ड पर सेट हैं। अगर हमें Company आइटम मिलता है और बिना किसी बदलाव किए ग्लास का उपयोग करके इसे बचाता है, तो Logo फ़ील्ड अब मानक मान का उपयोग नहीं करता है। (Company Name फ़ील्ड छूटा हुआ है।)

ऐसा लगता है कि Glass.Mapper.Sc.DataMappers.SitecoreFieldImageMapper साइटकोर के मुकाबले उस क्षेत्र के मूल्य को क्रमबद्ध करता है। जब यह सहेजने का प्रयास करता है, तो ऐसा लगता है कि यह क्षेत्र में बदलाव है और अब मानक मान का उपयोग नहीं करता है।

स्टैंडर्ड मान:

<image mediaid="{GUID}" /> 

ग्लास उत्पन्न मान:

<image height="64" width="64" mediaid="{GUID}" alt="Alt text" /> 

वहाँ ग्लास Sitecore के रूप में ही उत्पादन उत्पन्न करने के लिए एक तरीका है?

उत्तर

0

मुझे लगता है कि समस्या इस तरह से है कि कैसे SitecoreFieldImageMapper छवि छवि छवि को छवि। ऊंचाई, चौड़ाई और Alt सार्वजनिक गुणों का उपयोग किया जाता है। अगर हम परावर्तक के माध्यम से उन पर लग रही है हम है कि यह के मूल्यों क्षेत्र से सीधे नहीं मिल देखेंगे:

public string Alt 
{ 
    get 
    { 
     string text = base.GetAttribute("alt"); 
     if (text.Length == 0) 
     { 
      Item item = this.MediaItem; 
      if (item != null) 
      { 
       MediaItem mediaItem = item; 
       text = mediaItem.Alt; 
       if (text.Length == 0) 
       { 
        text = item["Alt"]; 
       } 
      } 
     } 
     return text; 
    } 
    set 
    { 
     base.SetAttribute("alt", value); 
    } 
} 

क्षेत्र मूल्य शामिल नहीं है ("alt" के लिए उदाहरण के लिए: अगर (text.Length == 0)) तो मीडियाइटम से मूल्य प्राप्त किया जाएगा जो जुड़ा हुआ है। यह ऊंचाई, चौड़ाई और फ़ील्ड की बचत के बाद मीडिया लाइब्रेरी आइटम से Alt जोड़ने का कारण बनता है। Alt संपत्ति सब कुछ के साथ

int height = 0; 
if(int.TryParse(field.GetAttribute("height"), out height)) 
{ 
    img.Height = height; 
} 


int width = 0; 
if(int.TryParse(field.GetAttribute("width"), out width)) 
{ 
    img.Width = width; 
} 

img.Alt = field.GetAttribute("alt"); 

ठीक किया जाना चाहिए:

int height = 0; 
int.TryParse(field.Height, out height); 
int width = 0; 
int.TryParse(field.Width, out width); 

img.Alt = field.Alt; 
img.Height = height; 
img.Width = width; 
गुणों का उपयोग करने के बजाय सीधा हो रही विशेषताओं के साथ

:

इस समस्या को आप इस कोड को बदलने की कोशिश कर सकते ठीक करने के लिए। लेकिन वहाँ के साथ चौड़ाई और ऊंचाई समस्याओं हो सकता है के रूप में वे Nullable नहीं हैं और मुझे यकीन है कि कैसे GlassMapper चौड़ाई और ऊंचाई आप सेट नहीं किया है के साथ छवि को संभाल लेंगे नहीं हूँ।

+0

क्या आप एक कस्टम ImageMapper बनाने और उन गुणों को अपने उत्तर में अपडेट करने का सुझाव दे रहे हैं, या मैं वास्तव में उस कोड को कहां जोड़ूं? –

+0

हां, मैं एक कस्टम ImageMapper बनाने का सुझाव देता हूं क्योंकि समस्या वहां है। मुझे यकीन नहीं है कि क्या आप कॉन्फ़िगरेशन फ़ाइलों का उपयोग करके अपने ImageMapper का उपयोग करने के लिए कॉन्फ़िगर करने में सक्षम होंगे।लेकिन ग्लासमैपर ओपन सोर्स है, आप गिटहब पर फोर्क स्रोत कर सकते हैं, आपको बदल सकते हैं और नए इमेजमैपर के साथ नई असेंबली प्राप्त कर सकते हैं। https://github.com/mikeedwards83/Glass.Mapper – Anton

+0

रेपो और बिल्डिंग क्लोन करने की बजाय, मेरा सुझाव है कि आप 'साइटकोरफिल्ल्ड इमेजमैपर' का उत्तराधिकारी प्राप्त करें, अपने कार्यान्वयन के साथ प्राप्त विधि को ओवरराइड करें और 'CreateResolver' में पंजीकृत करें: https: // jammykam .wordpress.com/2015/11/09/कस्टम-ग्लास-मैपर-डेटा-हैंडलर-भाग -2/फिर आप इसे एक आवश्यक आधार पर उपयोग कर सकते हैं। लेख के भाग -1 को भी पढ़ना सुनिश्चित करें। – jammykam

संबंधित मुद्दे