Twig լավագույն փորձառություններ՝ նախնական մշակումների ֆունկցիաներ և կաղապարներ
Դրա համար, որպեսզի Drupal 8 թեման հնարավորինս արդյունավետ լինի և Twig կաղապարներում ավելի շատ հարմարեցման հնարավորություններ ունենաք, հետևեք հետևյալ խորհուրդներին․
- Վերադարձնում ենք ռենդերային զանգվածներ նախնական մշակումների ֆունկցիաներից
- Կոչերի ֆիլտրեր և օգտակար ֆունկցիաներ կաղապարներում
Այս ուղեցույցը գրվել է օգնելու Drupal ծրագրավորողներին, ովքեր կարող են ունենալ փորձ Drupal 7-ում և փորձում են հեռացնել theme() կամ drupal_render() նման ֆունկցիաները, որոնք Drupal 8+-ում այլևս չպետք է օգտագործվեն։ «Նախկինում» օրինակները հիմնականում Drupal 7-ի կոդի ոճով են։
Վերադարձնում ենք ռենդերային զանգվածներ նախնական մշակումների ֆունկցիաներից
Միշտ վերադարձրեք ռենդերային զանգվածներ՝ նախնական մշակումների ֆունկցիաներում theme() կամ drupal_render() կանչելու փոխարեն։
Twig-ը ավտոմատ կերպով կցուցադրի ամեն ինչ, ուստի drupal_render() կամ theme() կանչելու անհրաժեշտություն չկա նախնական մշակումում։ Փոխարենը ռենդերային զանգվածները պետք է փոխանցվեն կաղապարին, ինչը շատ ավելի շատ հարմարեցումներ է թույլ տալիս՝ չնայած արդեն պատրաստի HTML-ի փոխարեն։
theme() հեռացնելը նախնական մշակումում՝
// Նախկինում՝ HTML-ի ռենդերացված տողի փոխանցում կաղապարին։ $variables['table'] = theme('table', ['header' => $header, 'rows' => $rows]); // Հետո՝ ռենդերային զանգվածի փոխանցում կաղապարին։ $variables['table'] = [ '#theme' => 'table', '#header' => $header, '#rows' => $rows, ];
drupal_render() հեռացնելը նախնական մշակումից պարզապես կանչի հեռացումն է․
// Նախկինում, ավելորդ drupal_render() կանչ։ $variables['teaser'] = drupal_render($node_teaser); // Հետո, drupal_render() կանչը հեռացված է։ $variables['teaser'] = $node_teaser;
Համընդհանուր դեպքն այն է, որ drupal_render()-ը կանչվում էր տվյալների աղյուսակում ավելացնելու ժամանակ։
// Նախկինում, ավելորդ drupal_render() կանչ։ $row[] = drupal_render($display['title']); // Հետո, drupal_render() կանչը հեռացված է։ $row[]['data'] = $display['title'];
Կոչերի ֆիլտրեր և օգտակար ֆունկցիաներ կաղապարներում
Չնայած ռենդերային զանգվածները տրամադրում են հասանելի, փոփոխվող կառուցվածք տվյալների համար կաղապարներին փոխանցելու ճանապարհին, ոչ բոլոր փոփոխականներն են պահանջում ռենդերային զանգվածներ։ Թեմաների ծրագրավորողները պետք է Twig կաղապարներում կանչեն ֆիլտրեր, ինչպիսիք են t, և օգտակար ֆունկցիաներ, ինչպիսիք են url(), որպեսզի չպատրաստեն ոչ մշակված տվյալները նախնական մշակումում։ Այս ֆունկցիաների կանչը Twig կաղապարում, այլ ոչ թե նախնական մշակումում, կարող է նվազեցնել ֆունկցիայի կանչերի քանակը, քանի որ որոշ փոփոխականներ կարող են ընդհանրապես չտպվել կաղապարում։
Նախկինում՝
Նախնական մշակումում՝
$variables['no_content_text'] = t('You have not created any content types yet. Go to the <a href="@create-content">content type creation page</a> to add a new content type.', array('@create-content' => url('admin/structure/types/add')));
Կաղապարում՝
<p>{{ no_content_text }}</p>
Հետո՝
Կաղապարում՝
<p>{{ 'You have not created any content types yet. Go to the <a href="@create-content">content type creation page</a> to add a new content type.'|t({'@create-content': url('admin/structure/types/add')}) }}</p>
Դրսևորել / թաքցնել և հեռացնել drupal_render_children և element_children
Եթե նախնական կաղապարում hide() կանչվել է, իսկ drupal_render_children օգտագործվել է տվյալների մնացած մասը ռենդերելու համար, ապա պետք է բոլոր այս մասը բաժանել առանձին փոփոխականների նախնական մշակումում։
Նախկինում (PHPTemplate ֆայլ)
Օգտագործեք Twig-ի «without» ֆիլտրը՝ որոշ տարրեր թաքցնելու համար։ Կարող եք օգտագործել այն ըստ անհրաժեշտության։
Հետո (Twig կաղապար)
{{ form|without('advanced', 'actions') }}{{ form.advanced }}
Այլընտրանքային մեթոդ (առայժմ անհրաժեշտ չէ):
Նախապես մշակեք ամեն բան առանձին փոփոխականների և փոխանցեք դրանք կաղապարին։ Ինքներդ կարող եք բաժանել և տպել բովանդակությունը այնպես, ինչպես նախատեսված է կաղապարում։
Նախկինում (նախնական մշակում)
function template_preprocess_node_edit_form(&$variables) { $form = $variables['form']; // @todo Update this once drupal.org/node/1920886 is resolved. $variables['advanced'] = $form['advanced']; $variables['actions'] = $form['actions']; unset($form['advanced'], $form['actions']); $variables['form'] = drupal_render_children($form); }
Հետո (Twig կաղապար)
{{ form }}{{ advanced }}
Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.