एक प्लगइन का उपयोग मुख्य घटक के लिए कस्टम क्षेत्रों को जोड़ने

From Joomla! Documentation

This page is a translated version of the page Adding custom fields to core components using a plugin and the translation is 100% complete.
Other languages:
Deutsch • ‎English • ‎Nederlands • ‎català • ‎español • ‎français • ‎italiano • ‎português do Brasil • ‎русский • ‎فارسی • ‎हिन्दी • ‎বাংলা • ‎中文(台灣)‎

क्या तुमने कभी चाहा com_contact में एक अतिरिक्त फोन नंबर के क्षेत्र वहाँ था या com_content में लेख के लिए एक अतिरिक्त क्षेत्र की जरूरत है? जूमला इन जैसे मुख्य घटक के साथ नए क्षेत्रों को एकीकृत करने की एक सीधे आगे हो गए हैं। सभी इसे इस लक्ष्य को हासिल करने के लिए लेता है एक सरल सामग्री प्लगइन और अपने टेम्पलेट में एक लेआउट ओवरराइड है।

यह लेख com_contact में संपर्क करने के लिए एक अतिरिक्त ईमेल पते को जोड़ने के उदाहरण का उपयोग एक प्रमुख घटक के लिए एक अतिरिक्त क्षेत्र को जोड़ने के लिए कैसे पता चलता है। आप अपने Joomla लेख के लिए com_content करने के लिए कस्टम क्षेत्रों को जोड़ने की जरूरत है, बस "संपर्क" के लिए "सामग्री" नीचे दिए गए कोड में करने के लिए किसी भी संदर्भ बदल जाते हैं। और खेतों मूल्य के लिए के रूप में अच्छी तरह से ओवरराइड के लिए सूचना है कि com_content उपयोग "गुण" और नहीं "पैरामीटर"।

एक कस्टम क्षेत्र को जोड़ने

यह अनुशंसा की जाती है कि आप पहले Joomla के लिए एक प्लगइन बनाना पढ़ा और कैसे बनाने के लिए एक प्लगइन है, जो यहाँ शामिल नहीं है स्थापित करने के लिए पर जानकारी के लिए।

एक सिस्टम घटक आप जो onContentPrepareForm घटना को चुनता है और दिए गए JForm में अपने स्वयं के क्षेत्रों को सम्मिलित करता है एक सामग्री प्लगइन बनाने की जरूरत के लिए एक क्षेत्र को जोड़ने के लिए। निम्नलिखित कोड जूमला 3.1 और बाद के लिए है।

<?php
// no direct access
defined ('_JEXEC') or die;
class plgContentExample extends JPlugin
{
	/**
	 * Load the language file on instantiation.
	 * Note this is only available in Joomla 3.1 and higher.
	 * If you want to support 3.0 series you must override the constructor
	 *
	 * @var boolean
	 * @since <your version>
	 */
	protected $autoloadLanguage = true;

	/**
	 * Prepare form and add my field.
	 *
	 * @param   JForm  $form  The form to be altered.
	 * @param   mixed  $data  The associated data for the form.
	 *
	 * @return  boolean
	 *
	 * @since   <your version>
	 */
	function onContentPrepareForm($form, $data)
	{
		$app    = JFactory::getApplication();
		$option = $app->input->get('option');

		switch($option)
		{
			case 'com_contact' :
				if ($app->isClient('administrator'))
				{
					JForm::addFormPath(__DIR__ . '/forms');
					$form->loadFile('contact', false);
				}

				return true;
		}

		return true;
	}
}
?>

को सक्षम फ्रंट एंड कस्टम फील्ड्स के संपादन

अपने नए कस्टम क्षेत्रों के लिए दृश्यपटल संपादन सक्षम करने के लिए बहुत आसान है। दृश्यपटल सामग्री को संपादित करने के लिए प्रपत्र क्षेत्रों को जोड़ने के लिए, बस कोड के इस ब्लॉक जोड़ें:

case 'com_contact':
	if ($app->isClient('site'))
	{
		JForm::addFormPath(__DIR__ . '/forms');
		$form->loadFile('contact', false);
	}
	return true;

जोड़ है कि इसके बारे में मौजूदा उदाहरण तुरंत नीचे।

एक बार जब आप जो कुछ किया गया है, सामग्री प्रपत्र edit.php फ़ाइल के लिए एक टेम्पलेट ओवरराइड पैदा करते हैं। आप com_contact के लिए कस्टम क्षेत्रों का एक सेट बना रहे हैं, तो आप /templates/your-template-name/html/com_contact/form/edit.php को /components/com_contact/views/form/tmpl/edit.php नकल होगा

अपने लेआउट ओवरराइड अंदर,, फार्म जहाँ आप उन्हें प्रकट करना चाहते हैं (उदाहरण के लिए, शीर्षक के नीचे, विवरण नीचे) में अपने नए क्षेत्रों को जोड़ने के लिए सुनिश्चित करें कि क्षेत्र के नाम अपने प्लगइन से एक्सएमएल फ़ाइल से मेल कर रही है (यदि आप यह अगले बना देंगे )।

<?php // Checking if this is an existing item or not ?>
<?php if ($this->item->id) : ?>
  <?php // If it is an existing item, get the attribs part of the existing record ?>
  <?php $attribs = json_decode($this->item->attribs); ?>
  <?php // Set the value of the custom field to what is already saved. ?>
  <?php // Duplicate for the number of fields you need, changing the field_name as needed. ?>
  <?php echo $this->form->setValue('field_name', 'attribs', $attribs->field_name); ?>
<?php endif; ?>
<?php // This line needs added to the file right where you want to display it. So, if you want it to show right after the description field, find the description field and place this right after it. Duplicate for the number of fields you need, changing the field_name as needed. ?>
<?php // Now we display the field. If we are editing an existing item, the previously saved data will be populated already ?>
<?php echo $this->form->renderField('field_name', 'attribs'); ?>

साथ किया है, अपने खेतों अब दिखाई देगा और दृश्यपटल संपादन के माध्यम से संग्रहित किया।

अतिरिक्त क्षेत्रों प्लगइन निर्देशिका में फाइल फार्म / contact.xml से भरी हुई हैं। यह महत्वपूर्ण है कि इन क्षेत्रों के नाम संपत्ति "पैरामीटर" करने के लिए सेट के साथ एक खेतों तत्व में हैं। आप इस संपत्ति के नाम सेट नहीं करते हैं, खेतों व्यवस्थापक साइट में दिखाई देंगे लेकिन मूल्यों को बचाया नहीं किया जाएगा। ध्यान दें: com_content में अपने क्षेत्र का नाम होना चाहिए "<खेतों नाम =" गुण ">" अन्यथा क्षेत्रों व्यवस्थापक साइट में दिखाई देंगे लेकिन मूल्यों को बचाया नहीं किया जाएगा।

इस मामले में हम एक लेबल ईमेल पते के मूल्य के लिए सार्वजनिक वेबसाइट में ईमेल क्षेत्र और एक दूसरे क्षेत्र का वर्णन करने के लिए एक क्षेत्र जोड़ रहे हैं।

<?xml version="1.0" encoding="UTF-8"?>
<form>
	<fields name="params">
		<fieldset name="params" label="PLG_CONTENT_EXAMPLE_FIELDSET_LABEL">
			<field
				name="contact_emaillabel2"
				type="text"
				label="PLG_CONTENT_EXAMPLE_CONTACT_EMAILLABEL2"
			/>
			<field
				name="contact_email2"
				type="text"
				label="PLG_CONTENT_EXAMPLE_CONTACT_EMAIL2"
				filter="email"
			/>
		</fieldset>
	</fields>
</form>

अंत में हम एक भाषा फाइल की जरूरत है ताकि मापदंडों के व्यवस्थापक साइट में अच्छी तरह से प्रस्तुत किया है और अलग-अलग भाषाओं में अनुवाद कर रहे हैं। इस फ़ाइल <टीटी> en-GB.plg_content_example.ini </ टीटी> ऐसा कुछ कहा जाना चाहिए।

PLG_CONTENT_EXAMPLE_FIELDSET_LABEL="Additional Information"
PLG_CONTENT_EXAMPLE_CONTACT_EMAIL2="Additional email address"
PLG_CONTENT_EXAMPLE_CONTACT_EMAILLABEL2="Additional email label"

यही कारण है कि यह क्षेत्र com_contact को जोड़ने के लिए है। आप इस प्लगइन स्थापित हैं, तो आप संपर्क संपादन शामिल नए क्षेत्रों के साथ "अतिरिक्त जानकारी" कहा जाता है के रूप में एक अतिरिक्त टैब होगा। आप किसी संपर्क के लिए नया लेबल और ईमेल पते के क्षेत्रों में भरने, तो आप उस com_contact की दुकान है और आप के लिए जानकारी पुनः प्राप्त होगा देखेंगे।

एक ही प्लगइन विभिन्न घटकों के लिए और अधिक क्षेत्रों को जोड़ने के लिए इस्तेमाल किया जा सकता है; सिर्फ onContentPrepareForm समारोह में प्रासंगिक कोड जोड़ सकते हैं और उचित एक्सएमएल फॉर्म फाइल बनाने।

कस्टम फ़ील्ड प्रदर्शित

कस्टम फ़ील्ड प्रदर्शित करने के लिए आप अपने टेम्पलेट में प्रासंगिक घटक के लिए एक लेआउट ओवरराइड बनाने की जरूरत है। बनाने के बारे में अधिक जानकारी के लिए टेम्पलेट्स देखें एक बुनियादी जूमला बनाना! टेम्पलेट। लेआउट ओवरराइड पर जानकारी के लिए, [: | समझौता आउटपुट ओवरराइड] MyLanguage / समझौता आउटपुट ओवरराइड [एस] देखें।

फ़ाइल <टीटी> <जूमला> /components/com_contact/views/contact/tmpl/default.php </ टीटी> को <टीटी> <टेम्पलेट> /html/com_contact/contact/default.php </ टीटी> कॉपी बनाने अपने टेम्पलेट में फ़ोल्डर के रूप में आवश्यक है। हम इस फ़ाइल को संपादित करने के लिए अतिरिक्त जानकारी शामिल करने के लिए जा रहे हैं। com_contact घटक स्वचालित रूप से हमारे लिए अतिरिक्त क्षेत्रों लोड और एक चर में लोड होगा $ this-> पैरामीटर बुलाया। हम सब करने की जरूरत जाँच कर रहा है कि डेटा सेट किया जाता है और, यदि हां, तो यह प्रदर्शित करते हैं।

क्षेत्र को प्रदर्शित करने में स्थान पा <टीटी> <टेम्पलेट> /html/com_contact/contact/default.php </ टीटी> है कि आप चाहते हैं जहां अतिरिक्त ईमेल पते का प्रदर्शन किया और निम्नलिखित कोड जोड़ने जा करने के लिए मेल खाती है:

<?php if ($this->params->get('contact_emaillabel2', false)) : ?>
	<div>
		<span class="contact-additionalemail"><?php echo $this->params->get('contact_emaillabel2'); ?>:&emsp;<a href="mailto:<?php echo $this->params->get('contact_email2'); ?>"><?php echo $this->params->get('contact_email2'); ?></a><br/></span>
	</div>
<?php endif; ?>

आप इस कोड को जोड़ सकते हैं और अपने टेम्पलेट स्थापित करते हैं, अब आप अपने सार्वजनिक वेबसाइट में प्रदर्शित कस्टम क्षेत्र होगा।


श्रेणी: प्लगइन विकास श्रेणी: खाका विकास श्रेणी: ट्यूटोरियल