2013-08-12 10 views
6

मैं वर्तमान में एक साइट पर काम कर रहा हूं ताकि उपयोगकर्ता कस्टम उत्पाद सूची के माध्यम से खोज सकें। मैं इस साइट को विकसित करने में मदद करने के लिए ऑर्चर्ड सीएमएस का लाभ उठाने के लिए चारों ओर देख रहा हूं और प्यार करना पसंद करूंगा। मैं वर्तमान में कस्टम ऑर्चर्ड मॉड्यूल और Skywalker blog series पर Ron Petersons youtube series से गुजर चुका हूं।क्या मैं ऑर्चर्ड में ल्यूसीन के माध्यम से एक कस्टम डेटासोर्स खोज/सूचीबद्ध कर सकता हूं?

मुझे लगता है कि मेरा लक्ष्य संभव है, लेकिन मैं कुछ मान्यताओं की तलाश कर रहा हूं कि मेरी रणनीति ऑर्चर्ड ढांचे के भीतर काम करेगी या नहीं।

यह मेरा वर्तमान स्थिति है:

  1. मैं एक डिफ़ॉल्ट ऑर्चर्ड विन्यास किसी SQL डीबी ( उत्पाद-ऑर्चर्ड नामित)

  2. मुझे लगता है कि एक और एसक्यूएल के लिए अंक एक कस्टम DAL है इंगित करता हो डीबी (नामित उत्पाद)।

  3. उत्पाद आपकी सामान्य जानकारी (उत्पाद का नाम, विवरण, मूल्य, आदि) से बने होते हैं।

  4. कस्टम डीएएल में उत्पाद नामक एक पॉको मॉडल है (गुणों के साथ इंटरैक्ट के साथ) गुण, विवरण, मूल्य के साथ।

    1. कोड जनरल उपकरण के माध्यम से एक मॉड्यूल (बनाएँ:

    अब, जानकारी के आधार पर मैं ऑर्चर्ड मॉड्यूल यह कस्टम सामग्री के साथ एक कस्टम मॉड्यूल बनाने की विधि की तरह लगता है बनाने के बारे में पढ़ने के लिए है हम इसे ProductModule पी फोन करता हूँ)

  5. एक कस्टम सामग्री भाग (ProductPart)

  6. एक कस्टम सामग्री भाग रिकॉर्ड बनाएँ (roductPartRecord) भाग के लिए डेटा मॉडल के रूप में कार्य करने के लिए।

  7. एक कस्टम ContentPartHandler (ProductPartHandler) बनाएं जो सामग्री भाग की दृढ़ता को संभालता है।

  8. एक कस्टम ड्राइवर बनाएं जो यूआई को प्रस्तुत करने के लिए आकार तैयार करने के लिए प्रविष्टि है।

  9. संभावित रूप से एक ऐसी सेवा बनाएं जो ड्राइवर्स के साथ इंटरैक्ट करे?

यह वह जगह है जहां चीजें झुकाव शुरू होती हैं और मुझे यकीन नहीं है कि यह संभव है या नहीं। मैं जो करना चाहता हूं वह एक कस्टम सामग्री प्रकार बनाना है जिसे डेटा-ऑर्चर्ड डीबी के अंदर ContentPartRecord के माध्यम से डेटा संग्रहीत करने के बजाय मेरे कस्टम डीएएल द्वारा समर्थित किया गया है, लेकिन फिर भी इसे ल्यूसीन मॉड्यूल द्वारा अनुक्रमित करने की अनुमति देने की अनुमति है उत्पाद सूची की खोज के लिए।

क्या एक कस्टम सामग्री प्रकार और/या सामग्रीपार्ट बनाना संभव है जो एक अलग डेटासोर्स द्वारा समर्थित है और अभी भी लुसीन खोज क्षमताओं का लाभ उठाता है?

उच्च स्तर की शर्तों में मुझे एक उत्पाद सामग्री प्रकार चाहिए जहां सामग्री आइटम्स वास्तव में मेरे द्वितीयक डेटाबेस में संग्रहीत हैं, ऑर्चर्ड डेटाबेस नहीं (और अभी भी अनुमानों के माध्यम से लुसेन खोज का लाभ उठाने में सक्षम होना चाहते हैं)।

+0

क्या आप अपने उत्पादों को सामग्री आइटम में परिवर्तित करना चाहते हैं? – Hazza

+0

मैं केवल उत्पाद सूची से सीधे पढ़ने में सक्षम होना चाहता हूं, लेकिन यदि यह संभव नहीं है, तो हाँ मैं परिवर्तित कर सकता हूं। प्रत्येक उत्पाद में लगभग 12 गुण होते हैं, लेकिन मुझे केवल उनमें से 3 या 4 पर खोजने में सक्षम होना चाहिए। एक विकल्प जिसके साथ मैं टकरा रहा हूं वह है कि मैं उन खोज योग्य गुणों के साथ कस्टम उत्पादपार्ट बना सकता हूं। फिर जब मुझे सभी जानकारी की आवश्यकता होती है (जैसे उत्पाद विवरण पृष्ठ पर) मैं ऐसा कुछ करूंगा: http://stackoverflow.com/questions/4727843/how-to-change-orchard-record-repository। – Keith

+0

मुझे उत्पाद सूची से ऑर्चर्ड डीबी में डेटा सिंक करने के लिए सिंक प्रक्रिया की आवश्यकता होगी, जिसे मैं टालना चाहता हूं, लेकिन अगर यह सबसे अच्छा तरीका है तो मैं ऐसा कर सकता हूं। – Keith

उत्तर

7

इसी तरह के उत्तर की तलाश करने वालों के लिए, निम्नलिखित समाधान जो मैंने तय किया है। एक अलग डीएएल के साथ बातचीत करने और लुसीन इंडेक्सिंग करने के लिए मुझे कोई आसान तंत्र नहीं मिल सकता है।

  1. ऑर्चर्ड मॉड्यूल बनाएं
  2. अपने माध्यमिक डेटाबेस से डेटा आयात करने
  3. उपयोग सामग्री भाग हैंडलर में OnIndexing घटना अनुमति देने के लिए Lucene
  4. उपयोग ऑर्चर्ड कमान बुनियादी ढांचे aMigration के माध्यम से नई सामग्री भाग/प्रकार बनाएं अपने डेटासोर्स को इंडेक्स करने के लिए।
  5. एक लुकअप प्रॉपर्टी बनाएं (मैंने मेरा कंक्रीटेटप्रोपर्टी कहा है) जो ऑनलोडेड ईवेंट में द्वितीयक डीएएल के साथ बातचीत करने के लिए मॉड्यूल में बनाई गई सेवा के माध्यम से पॉप्युलेट की गई है।

मेरे अंतिम हैंडलर इस तरह देखा:

public class HomePartHandler : ContentHandler { 
    public HomePartHandler(IRepository<HomePartRecord> repository, IHomeSearchMLSService homeSearchService) { 
     Filters.Add(StorageFilter.For(repository)); 
     OnLoaded<HomePart>((ctx, part) => 
     { 
      part.ConcreteProperty = homeSearchService.GetByMlsNumber(part.MlsId) ?? new PropertyDetail(); 
     }); 
     OnIndexing<HomePart>((context, homePart) => context.DocumentIndex 
     .Add("home_StreetFullName", homePart.Record.StreetFullName).RemoveTags().Analyze().Store() 
     .Add("home_City", homePart.Record.City).RemoveTags().Analyze().Store() 
     .Add("home_State", homePart.Record.State).RemoveTags().Analyze().Store() 
     .Add("home_Zip", homePart.Record.Zip).RemoveTags().Analyze().Store() 
     .Add("home_Subdivision", homePart.Record.Subdivision).RemoveTags().Analyze().Store() 
     .Add("home_Beds", homePart.Record.Beds).RemoveTags().Analyze().Store() 
     .Add("home_Baths", homePart.Record.Baths).RemoveTags().Analyze().Store() 
     .Add("home_SquareFoot", homePart.Record.SquareFoot).RemoveTags().Analyze().Store() 
     .Add("home_PropertyType", homePart.Record.PropertyType).RemoveTags().Analyze().Store() 
     .Add("home_ListPrice", homePart.Record.ListPrice).RemoveTags().Analyze().Store() 
     .Add("home_MlsId", homePart.Record.MlsId).RemoveTags().Analyze().Store() 
     .Add("home_Latitude", (double)homePart.Record.Latitude).RemoveTags().Analyze().Store() 
     .Add("home_Longitude", (double)homePart.Record.Longitude).RemoveTags().Analyze().Store() 
     ); 
    } 
} 

यह मैं अपने सभी डेटा के माध्यम से खोज के लिए एक खोज सेवा बनाने और उसके बाद कंक्रीट संपत्ति, के माध्यम से मॉडल के लिए इसे हुक करने की अनुमति देता है वैसे भी एक प्रदर्शन दृष्टिकोण से बेहतर काम करता है।

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

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