Programiranje prilagođenih polja u vaš tip sadržaja
Ponekad, kada izvučete tip sadržaja iz prilagođenog modula, možete takođe dodati polja vezana za taj tip sadržaja. Mogućnost automatskog kreiranja polja omogućava vam da brišete i ponovo instalirate na više sajtova, a da ne ostavite suvišna polja i garantuje da nećete zaboraviti da ih dodate. Postoje dva načina da ta polja dodate u vašu kodnu bazu, koje ćemo razmotriti.
Preduslovi
- Drupal 8.0.x je instaliran.
- Imate prilagođeni modul (ime modula u ovom primeru je foobar).
- Imate prilagođeni tip sadržaja u modulu (molimo pratite uputstva na roditeljskoj stranici. Naziv tipa sadržaja je Car Brand).
Dodavanje dodatnih polja našem tipu sadržaja
Postoje dva načina da se ovaj korak izvrši. Možete koristiti korisnički interfejs za kreiranje polja i izvoz konfiguracije u fajlove, ili možete jednostavno napisati fajlove sami. Ja volim da koristim prvi način kako bih bio siguran da ništa nije izostavljeno, mada polja se izvoze sa prefiksom „field_“ umesto „foobar_car_brand_“ za povezivanje sa našim prilagođenim tipom sadržaja. Ovde ćemo razmotriti ručno kodiranje polja u vašem prilagođenom modulu.
Ručno kodiranje polja u vašem modulu
Kao što je ranije pomenuto, ovaj metod zahteva malo više znanja i precizno poznavanje šta polje treba da radi i kako treba da izgleda. Svako dodato polje mora imati dva YAML fajla sa informacijama o konfiguraciji. Oni se zovu ovako: field.field.node.car_brand.field_brand_information.yml i field.storage.node.field_brand_information.yml.
Uklonite prilagođeni tip sadržaja
Ako ste već omogućili modul foobar na prethodnoj stranici, sada ga uklonite.
foobar/config/install/field.storage.node.field_brand_information.yml
Ovaj fajl obaveštava Drupal da treba da kreira naše polje.
# field.storage.node.field_brand_information.yml langcode: en status: true dependencies: module: - node - text id: node.field_brand_information field_name: field_brand_information entity_type: node type: text_with_summary settings: { } module: text locked: false cardinality: 1 translatable: true indexes: { } persist_with_no_fields: false custom_storage: false
foobar/config/install/field.field.node.car_brand.field_brand_information.yml
Ovaj fajl obaveštava Drupal da treba da prikači naše polje našem tipu sadržaja.
# field.field.node.car_brand.field_brand_information.yml langcode: en status: true dependencies: config: - field.storage.node.field_brand_information - node.type.car_brand module: - text id: node.car_brand.field_brand_information field_name: field_brand_information entity_type: node bundle: car_brand label: 'Brand Information' description: 'Više specifičnih informacija o brendu automobila' required: false translatable: false default_value: { } default_value_callback: '' settings: display_summary: false field_type: text_with_summary
foobar/config/install/core.entity_form_display.node.car_brand.default.yml | foobar/config/install/core.entity_view_display.node.car_brand.default.yml
Oba ova fajla treba ažurirati sa prethodne stranice da uključe sva nova polja koja dodajete. Dodao sam dva dodatna polja pod nazivima „Additional_field_1“ i „Additional_field_2“ da biste videli kako izgleda sa više polja.
Napomena: Ako ne želite dodatna polja, uklonite zavisnosti i informacije o tim poljima u sledećem kodu.
# core.entity_view_display.node.car_brand.default.yml langcode: en status: true dependencies: config: - field.field.node.car_brand.field_brand_information - field.field.node.car_brand.field_additional_field_1 - field.field.node.car_brand.field_additional_field_2 - node.type.car_brand module: - file - text - user _core: default_config_hash: Nfnv6VMugBKl6EOqi_U0I_LQ1ZQpbNDN3a9GXHWUBz4 id: node.car_brand.default targetEntityType: node bundle: car_brand mode: default content: field_brand_information: weight: 101 label: above settings: { } third_party_settings: { } type: text_default field_additional_field_1: weight: 103 label: above settings: link_to_entity: false third_party_settings: { } type: string field_additional_field_2: weight: 102 label: above settings: { } third_party_settings: { } type: file_default links: weight: 100 hidden: { }
# core.entity_form_display.node.car_brand.default.yml langcode: en status: true dependencies: config: - field.field.node.car_brand.field_brand_information - field.field.node.car_brand.field_additional_field_1 - field.field.node.car_brand.field_additional_field_2 - node.type.car_brand module: - file - path - text _core: default_config_hash: qZE-qJ04DTTNggVVQdVOPQmpE_I69GQ_LqB32kXivVg id: node.car_brand.default targetEntityType: node bundle: car_brand mode: default content: created: type: datetime_timestamp weight: 2 settings: { } third_party_settings: { } field_brand_information: weight: 7 settings: rows: 9 summary_rows: 3 placeholder: '' third_party_settings: { } type: text_textarea_with_summary field_additional_field_1: weight: 6 settings: size: 60 placeholder: '' third_party_settings: { } type: string_textfield field_additional_field_2: weight: 8 settings: progress_indicator: throbber third_party_settings: { } type: file_generic path: type: path weight: 5 settings: { } third_party_settings: { } promote: type: boolean_checkbox settings: display_label: true weight: 3 third_party_settings: { } sticky: type: boolean_checkbox settings: display_label: true weight: 4 third_party_settings: { } title: type: string_textfield weight: 0 settings: size: 60 placeholder: '' third_party_settings: { } uid: type: entity_reference_autocomplete weight: 1 settings: match_operator: CONTAINS size: 60 placeholder: '' third_party_settings: { } hidden: { }
Omogućite prilagođeni tip sadržaja
Sada treba da omogućite modul foobar. Ako odete na stranicu za kreiranje sadržaja, videćete da možete kreirati novi čvor tipa sadržaja „Car Brand“, koji uključuje novo polje „Brand Information“.
Dodavanje ovih polja preko korisničkog interfejsa razmatraćemo na sledećoj stranici.
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.