जूमला 1.5 के लिए, सीएनसी बनाने के लिए कई घटक हैं। ये घटक डेटाबेस के सभी लिंक लिखकर काम करते हैं। यह बड़ी संख्या में पृष्ठों वाली साइट के लिए बिल्कुल भी तर्कसंगत नहीं है, क्योंकि डेटाबेस में बहुत अधिक डेटा संग्रहीत है। इन घटकों के लिए भी, आपको अपने स्वयं के प्लगइन्स लिखने की आवश्यकता है ताकि यह आपके घटक के लिंक को सही ढंग से मंत्र दे सके।
सामान्य तौर पर, मैं कभी इन घटकों का समर्थक नहीं रहा। एक बार मैंने केवल उपयोग किया, और यह नहीं कहूंगा कि यह वही है जो मैं उपयोग करना चाहता हूं। सीएनसी की ऐसी संरचना, मैं "शर्मिंदगी" कहूंगा। और ऐसे "shamanism" नहीं लिखने के लिए, Joomla 1.5 में आपके घटकों के लिए सीएनसी बनाने के मानक तरीके हैं।
सबसे पहले, प्रशासनिक भाग में, कॉन्फ़िगरेशन में, आपको सीएनसी को सक्षम करना होगा। और JRoute :: _ ('लिंक') का उपयोग करके सभी लिंक प्रदर्शित करें। हम सीएनसी के निर्माण पर विचार करेंगे, उदाहरण के लिए, मेरे घटक।
घटक के बारे में एक छोटी सी कहानी। मैंने एक सत्यापन प्रणाली के साथ ओलंपियाड समस्याओं का डेटाबेस बनाने के लिए इस घटक को बनाया। मैंने इसे अपने पाठ्यक्रम के लिए लिखा था। जैसा कि आप समझते हैं, यह प्रसिद्ध acm.timus.ru जैसा कुछ होना चाहिए। सामान्य तौर पर, हमारे पास कंप्यूटर विज्ञान में ओलंपियाड एल्गोरिथम समस्याओं का एक डेटाबेस है। एक व्यक्ति एक कार्य का चयन करता है, एक समाधान भेजता है, परिणाम को देखता है, प्रत्येक कार्य के आंकड़ों को देखने की क्षमता रखता है। लेकिन एक उदाहरण के लिए सीएनसी, मैं सिर्फ कार्य को देखने के लिए निर्माण करूंगा। यदि आपके पास प्रश्न हैं, तो अधिक के लिए कैसे करें, लिखें। लेकिन सिद्धांत रूप में, यह सादृश्य द्वारा किया जाता है।
और इसलिए, हमारे घटक को com_tasks कहा जाता है। अब हमारे कंपोनेंट के फोल्डर में राऊटर.फैप फाइल बनाएं। इस फ़ाइल में दो कार्य होते हैं: फ़ंक्शन (घटक का नाम) BuildRoute लिंक बनाने के लिए एक फ़ंक्शन है, और (घटक नाम) ParseRoute किसी लिंक को पहचानने के लिए एक फ़ंक्शन है। हम इन कार्यों पर बारी-बारी से विचार करेंगे।
(घटक का नाम) BuildRoute - लिंक बनाने के लिए कार्य करता है
फ़ीचर विवरण:
function TasksBuildRoute(&$query)
{}
हमारे पास फ़ॉर्म का एक लिंक है: /index.php?option=com_tasks&view=task&id=//ttask_idasket&Itemid=2 , हमारा कार्य / / कार्य / योजनान्तर्गत_शीर्ष_प्रकाश_सहयोग_ बनाने से है।
आइए देखें कि आईडी = 1 के साथ कार्य के लिए लिंक, $ क्वेरी सरणी बनाने के लिए हमें क्या दिया गया है।
ऐरे ( [विकल्प] => com_tasks [देखें] => कार्य [आईडी] => १ [आइटमिड] => २ )
इस फ़ंक्शन को लिंक के कुछ हिस्सों की एक सरणी वापस करनी चाहिए जो हमें चाहिए, फिर जूमला के हिस्सों के बीच "/" डालता है।
function TasksBuildRoute(&$query)
{
$segments = array();
if ($query[ 'view' ] == 'task' ) {
$segments[] = $query[ 'id' ]. '_' .$name;
unset($query[ 'view' ]); //
unset($query[ 'id' ]);
}
return $segments;
}
इस फ़ंक्शन की सहायता से, हमारे लिंक को फ़ॉर्म मिला: /component/tasks/1_.html ।
जैसा कि आप देख सकते हैं, हमें वह नहीं मिला जो हम चाहते थे। क्योंकि हमें हमारे लिए कुछ स्पष्ट नहीं मिला / घटक / । यह शब्द जूमला द्वारा लिखा गया था ताकि यह पता चल सके कि किस घटक का उपयोग करना है। ध्यान दें कि लिंक में कार्य घटक का नाम है। यदि हम अपने घटक को इंगित करते हुए एक मेनू आइटम बनाते हैं, तो इस आइटम के लिए उपनाम सेट करें और आउटपुट पर लिंक में Itemid = {हमारे घटक का आईडी} लिखें, तो हमारे पास वह होगा जो हमें चाहिए।
मैंने घटक के संदर्भ के साथ टास्क और उर्फ कार्यों के नाम के साथ एक मेनू आइटम बनाया और निम्न लिंक प्राप्त किया: कार्य / 1_.html । यहां कार्य मेनू आइटम उर्फ हैं।
चलो देखते हैं कि हमने बिल्ड फ़ंक्शन में क्या लिखा है। जैसा कि आप देख सकते हैं, हम सरणी के कुछ तत्वों को हटा देते हैं, क्योंकि जिन तत्वों को हम नहीं हटाएंगे, जूमला एक पैरामीटर के रूप में स्थानापन्न करेगा। उदाहरण के लिए, यदि आप परेशान नहीं लिखते हैं ($ क्वेरी ['दृश्य']); , तब हमें फॉर्म /tasks/1_.html?view=task का लिंक मिलेगा ।
मैं इस तथ्य पर भी आपका ध्यान आकर्षित करना चाहता हूं कि हमने अभी तक कार्य का नाम नहीं बढ़ाया है। हम किसी दिए गए $ क्वेरी ['आईडी'] डेटाबेस के लिए एक नाम प्राप्त करने के लिए अनुरोध कर सकते हैं। लेकिन एक ही समय में, यदि हमारे पास एक पृष्ठ पर कार्यों के लिए 100 लिंक हैं, तो हमारे पास डेटाबेस के 100 प्रश्न होंगे। और यह बहुत तार्किक कदम नहीं है। इस मामले में, हमें सभी कार्यों के नाम एकत्र करने के लिए एक अलग फ़ंक्शन बनाने की आवश्यकता है। हमारे घटक के लिए एक सहायक मार्ग बनाएं। ऐसा करने के लिए, हमारे घटक के फ़ोल्डर में, हेल्पर्स फ़ोल्डर और उसमें path.php फ़ाइल बनाएं ।
jimport( 'joomla.application.component.helper' );
class TasksHelperRoute
{
public static $tasks = null ;
function getTasks()
{
if (self::$tasks) return self::$tasks;
$db = &JFactory::getDBO();
$query = "SELECT `id`, `name` FROM `#__tasks`" ;
$db->setQuery($query);
$res = $db->loadObjectList();
foreach ($res as $r) {
self::$tasks[$r->id] = $r->name;
}
return self::$tasks;
}
}
अब इस फ़ाइल को कनेक्ट करें, फ़ंक्शन को कॉल करें, और कार्य के नाम को प्रतिस्थापित करें।
include_once(JPATH_ROOT.DS. 'components' .DS. 'com_tasks' .DS. 'helpers' .DS. 'route.php' );
function TasksBuildRoute(&$query){
$segments = array();
$tasks = TasksHelperRoute::getTasks();
if ($query[ 'view' ] == 'task' ) {
$segments[] = $query[ 'id' ]. '_' .$tasks[$query[ 'id' ]];
unset($query[ 'view' ]);
unset($query[ 'id' ]);
}
return $segments;
}
अब हमें फॉर्म / लिंक / 1_a_plus_b.html का लिंक मिल गया। हम इस कार्य के साथ मुकाबला किया।
इस तथ्य के कारण कि हमारे पास मददगार वर्ग में एक स्थिर चर है, डेटाबेस के लिए अनुरोध केवल एक बार होगा। उसी हेल्परे में, आप नाम को संभाल सकते हैं: रिक्त स्थान लें, सभी वर्णों को कम करें, आदि।
काम करने के लिए सीएनसी के लिए, आपको न केवल निर्माण करने की आवश्यकता है, बल्कि लिंक को पार्स करने की भी आवश्यकता है। ऐसा करने के लिए, सिस्टम से "परिचय" करें।
(घटक का नाम) ParseRoute - लिंक मान्यता के लिए कार्य करता है
यह फ़ंक्शन निम्नानुसार वर्णित है:
function TasksParseRoute($segments)
{}
$ सेगमेंट का सरणी बिलकुल वैसा ही है जैसा कि हम बिल्ड फ़ंक्शंस में लौटे हैं। आपको $ vars सरणी वापस करने की आवश्यकता है , जैसा कि हमें बिल्ड फ़ंक्शन में मिला था।
इस मामले में, हमें निम्नलिखित $ खंड दिए जाएंगे:
ऐरे ( [0] => 1_a_plus_b )
इस उदाहरण के दृश्य में , हमें हमेशा एक कार्य करना चाहिए, हमारे पास दूसरे प्रकार के लिंक नहीं हैं। और अब हमें {id} _ {name } लाइन से {id} प्राप्त करने की आवश्यकता है। यह केवल स्ट्रिंग फ़ंक्शन का उपयोग करके किया जाता है।
function TasksParseRoute($segments)
{
$vars[ 'view' ] = 'task' ;
$vars[ 'id' ] = substr($segments[0], 0, strpos( '_' , $segments[0])+1);
return $vars;
}
खैर, सामान्य तौर पर, हमने सिस्टम को अपने लिंक से परिचित कराया।
हमने सबसे आसान उदाहरणों में से एक की जांच की। आप इस उदाहरण के आधार पर, खुद को अधिक जटिल बना सकते हैं। प्रश्नों की प्रतीक्षा, सुधार के लिए सुझाव, आलोचना।