उन्नत थीम सेटिंग्स बनाना
Drupal प्रशासन अनुभाग में, प्रत्येक थीम की अपनी सेटिंग्स पेज होती है, जो admin/Appeance/Settings/themeName पर उपलब्ध है। इस पेज में एक फ़ॉर्म होता है जिसमें मानक सेटिंग्स होती हैं, जैसे «लोगो इमेज सेटिंग्स» और «फ़ेविकॉन सेटिंग्स»।
Drupal 8 में थीम्स पूरी थीम सेटिंग्स फ़ॉर्म को बदल सकती हैं, PHP फ़ंक्शन को या तो THEMENAME.theme फ़ाइल में जोड़कर या theme-settings.php फ़ाइल में जोड़कर। इन फ़ाइलों में से किसी एक में थीम को THEMENAME_form_system_theme_settings_alter(&$form, $form_state) हुक का उपयोग करना होगा। देखें «Drupal 8 में फ़ॉर्म API» और फ़ॉर्म और रेंडर एलिमेंट्स की पूरी सूची, साथ ही hook_form_FORM_ID_alter() डॉक्यूमेंटेशन, ताकि आप फ़ॉर्म API की पूरी लचीलापन (flexibility) को समझ सकें।
यहाँ एक उदाहरण है, यदि आपके पास «foo» नामक थीम है और आप एक टेक्स्ट फ़ील्ड जोड़ना चाहते हैं जिसका डिफ़ॉल्ट मान «blue bikeshed» है। फ़ाइल foo/foo.theme या foo/theme-settings.php में निम्नलिखित जोड़ें:
function foo_form_system_theme_settings_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id = NULL) {
// Work-around for a core bug affecting admin themes. See issue #943212.
if (isset($form_id)) {
return;
}
$form['foo_example'] = array(
'#type' => 'textfield',
'#title' => t('Widget'),
'#default_value' => theme_get_setting('foo_example'),
'#description' => t("Place this text in the widget spot on your site."),
);
}
किसी भी जोड़े गए फ़ॉर्म एलिमेंट के लिए डिफ़ॉल्ट मान सेट करने हेतु, आपको config/install/THEME.settings.yml फ़ाइल में एक साधारण लाइन जोड़नी होगी: SETTING_NAME: DEFAULT_VALUE। हमारी foo थीम के लिए, आपको फ़ाइल foo/config/install/foo.settings.yml को एडिट करके यह लाइन जोड़नी होगी:
foo_example: blue bikeshed
अपनी थीम की किसी भी PHP फ़ाइल में आप यूज़र द्वारा सेट किया गया मान इस प्रकार प्राप्त कर सकते हैं:
$foo_example = theme_get_setting('foo_example');
ध्यान दें कि थीम लेखक उन्नत फ़ॉर्म API का उपयोग करके जटिल डायनेमिक फ़ॉर्म बना सकते हैं (जैसे ऑटोकम्प्लीट, collapsible fieldsets)।
अपनी थीम फ़ाइलों में सेटिंग मान प्राप्त करना
Twig फ़ाइल में पैरामीटर का उपयोग करने के लिए, आपको THEMENAME.theme फ़ाइल में प्रीप्रोसेस फ़ंक्शन का उपयोग करके Twig फ़ाइल में एक नया वेरिएबल जोड़ना होगा।
$variables['varname'] = theme_get_setting('varname')
उदाहरण के लिए, हमारे foo_example पैरामीटर को node.html.twig फ़ाइल में जोड़ने के लिए, इसे foo.theme फ़ाइल में जोड़ें:
<?php
function foo_preprocess_node(&$variables) {
$variables['foo_example'] = theme_get_setting('foo_example');
}
फिर node.html.twig फ़ाइल में आप foo_example को किसी भी सामान्य Twig वेरिएबल की तरह एक्सेस कर सकते हैं:
{{foo_example}}
अधिक जानकारी
Drupal 8 के लिए चेंज रिकॉर्ड देखें: https://www.drupal.org/node/2382645