Aangepaste component maken in WYSIWYG Authoring
Edge Delivery Services Forms biedt aanpassing, waardoor ontwikkelaars aan de voorzijde op maat aangepaste formulieronderdelen kunnen maken. Deze aangepaste componenten worden naadloos geïntegreerd in de WYSIWYG-ontwerpervaring, zodat formulierauteurs ze eenvoudig kunnen toevoegen, configureren en beheren in de formuliereditor. Met aangepaste componenten kunnen auteurs de functionaliteit verbeteren en tegelijkertijd zorgen voor een vloeiend en intuïtief ontwerpproces.
In dit document worden de stappen beschreven waarmee u aangepaste componenten kunt maken door de native HTML-formuliercomponenten op te maken om de gebruikerservaring te verbeteren en de visuele aantrekkingskracht van het formulier te vergroten.
Voorwaarden
Voordat u een aangepaste component gaat maken, moet u:
- Heb een basiskennis van inheemse componenten van HTML.
- Weet hoe te de gebieden van de stijlvorm die op gebiedstype worden gebaseerd CSS selecteurs gebruiken
Een aangepaste component maken
Als u een aangepaste component toevoegt in de Universal Editor, moet u een nieuwe component beschikbaar stellen zodat formulierauteurs deze kunnen gebruiken tijdens het ontwerpen van formulieren. Dit omvat het registreren van de component, het definiëren van de eigenschappen en het configureren van de locatie waar de component kan worden gebruikt. Aangepaste componenten maken gaat u als volgt te werk:
1. Structuur toevoegen voor nieuwe aangepaste component
2. Het bepalen van de eigenschappen van uw douanecomponent voor creatie
3. De aangepaste component zichtbaar maken in de lijst met WYSIWYG-componenten
4. Registreren van uw douanecomponent
5. Het runtimegedrag voor uw douanecomponent toevoegen
Neem een voorbeeld van het creëren van een nieuwe douanecomponent genoemd waaier. De bereikcomponent wordt weergegeven als een rechte lijn en geeft waarden weer zoals de minimum-, maximum- of geselecteerde waarde.
Aan het einde van dit artikel leert u zelf aangepaste componenten te maken.
1. Structuur toevoegen voor nieuwe aangepaste component
Voordat een aangepaste component kan worden gebruikt, moet deze zijn geregistreerd, zodat de Universal Editor deze herkent als een beschikbare optie. Dit wordt bereikt door een componentdefinitie, die een unieke id, standaardeigenschappen en de structuur van de component bevat. Voer de volgende stappen uit om de aangepaste component beschikbaar te maken voor het ontwerpen van formulieren:
-
voeg nieuwe omslag en dossiers toe
Voeg nieuwe map en bestanden toe voor uw nieuwe aangepaste component in uw AEM-project.
-
Open uw AEM-project en navigeer naar
../blocks/form/components/
. -
Voeg een nieuwe map voor uw aangepaste component toe op
../blocks/form/components/<component_name>
. In dit voorbeeld maken we een map met de naamrange
. -
Navigeer naar de nieuwe map op
../blocks/form/components/<component_name>
. Navigeer bijvoorbeeld naar../blocks/form/components/range
en voeg de volgende bestanden toe:-
/blocks/form/components/range/_range.json
- Bevat de definitie van de aangepaste component. -
../blocks/form/components/range/range.css
- Definieert de opmaak voor de aangepaste component. -
../blocks/form/components/range/range.js
: past de aangepaste component bij uitvoering aan.note note NOTE Zorg ervoor dat het JSON-bestand een onderstrepingsteken (_) als voorvoegsel in de bestandsnaam bevat.
-
-
-
Navigeer naar het
/blocks/form/components/range/_range.json
-bestand en voeg de componentdefinitie voor de aangepaste component toe. -
voeg de componentendefinitie toe
Als u de definitie wilt toevoegen, moeten de velden die in het
_range.json
-bestand moeten worden toegevoegd, als volgt worden ingesteld:- titel: De titel van de component die in de Universele Redacteur wordt getoond.
- identiteitskaart: Een uniek herkenningsteken van de component.
- fieldType: Forms steunt diverse fieldType om specifieke soorten gebruikersinput te vangen. U kunt gesteunde fieldType in de Extra sectie van de Bytevinden.
- resourceType: Elke douanecomponent heeft een geassocieerd middeltype dat op zijn fieldType wordt gebaseerd. U kunt gesteunde resourceType in de Extra sectie van de Bytevinden.
- jcr:title: Het is gelijkaardig aan een titel, maar het wordt opgeslagen binnen de structuur van de component.
- fd:viewType: Het vertegenwoordigt de naam van de douanecomponent. Dit is de unieke id voor de component. U moet een aangepaste weergave voor de component maken.
Het bestand _range.json
ziet er na het toevoegen van de componentdefinitie als volgt uit:
{
"definitions": [
{
"title": "Range",
"id": "range",
"plugins": {
"xwalk": {
"page": {
"resourceType": "core/fd/components/form/numberinput/v1/numberinput",
"template": {
"jcr:title": "Range",
"fieldType": "number-input",
"fd:viewType": "range",
"enabled": true,
"visible": true
}
}
}
}
}
]
}
2. De eigenschappen van de aangepaste component definiëren voor ontwerpen
De aangepaste component bevat een componentmodel dat aangeeft welke eigenschappen door de auteur van het formulier kunnen worden geconfigureerd. Deze eigenschappen verschijnen in de dialoog van Eigenschappen van de Universele Redacteur, toestaand auteurs om montages zoals etiketten, bevestigingsregels, stijlen, en andere attributen aan te passen. Eigenschappen definiëren:
-
Navigeer naar het
/blocks/form/components/range/_range.json
-bestand en voeg het componentmodel voor de aangepaste component toe. -
voeg het componentenmodel toe
Als u het componentmodel voor uw aangepaste component wilt definiëren, moet u de relevante velden toevoegen aan het
_range.json
-bestand.-
creeer nieuw model
- Voeg in de modellenarray een nieuw object toe en stel de
id
van het componentmodel in zodat deze overeenkomt met de eigenschapfd:viewType
die eerder in de componentdefinitie is geconfigureerd. - Neem een array met velden in dit object op.
- Voeg in de modellenarray een nieuw object toe en stel de
-
bepaalt Gebieden voor de dialoog van het Bezit
- Elk voorwerp in de gebiedsserie zou een container-type component moeten zijn, toestaand het om als lusje in de dialoog van het Bezit te verschijnen.
- Sommige velden kunnen verwijzen naar herbruikbare eigenschappen die beschikbaar zijn in
models/form-common
.
-
Gebruik een Bestaand Model van de Component als Verwijzing
- U kunt de inhoud van een bestaand componentenmodel kopiëren dat aan uw gekozen
fieldType
beantwoordt en het wijzigen zoals nodig. Bijvoorbeeld, wordt denumber-input
component uitgebreid om a waaier component tot stand te brengen, zodat kunnen wij de modelserie vanmodels/form-components/_number-input.json
als verwijzing gebruiken.
- U kunt de inhoud van een bestaand componentenmodel kopiëren dat aan uw gekozen
Het bestand
_range.json
ziet er na het toevoegen van het componentmodel als volgt uit:code language-javascript "models": [ { "id": "range", "fields": [ { "component": "container", "name": "basic", "label": "Basic", "collapsible": false, "...": "../../../../models/form-common/_basic-input-fields.json" }, { "...": "../../../../models/form-common/_help-container.json" }, { "component": "container", "name": "validation", "label": "Validation", "collapsible": true, "...": "../../../../models/form-common/_number-validation-fields.json" } ] } ]
note note NOTE Om een nieuw gebied aan de dialoog van het Bezit van een douanecomponent toe te voegen, houd aan het bepaalde schema. U kunt douaneeigenschappenaan een douanecomponent ook toevoegen om zijn functionaliteit uit te breiden.
-
Aangepaste eigenschappen voor uw aangepaste component toevoegen
Met aangepaste eigenschappen kunt u specifieke gedragingen definiëren op basis van waarden die zijn ingesteld in het dialoogvenster Eigenschappen van een component. Hierdoor worden de functionaliteit en aanpassingsopties van de component uitgebreid.
In dit voorbeeld, voegen wij de Waarde van de Stap als douanebezit aan de component van de Waaier toe.
Om het de douanebezit van de Waarde van de Stap toe te voegen, voeg het componentenmodel met de volgende lijnen van code in het _<component>.json
dossier toe:
{
"component": "number",
"name": "stepValue",
"label": "Step Value",
"valueType": "number"
}
Het fragment JSON bepaalt een douanebezit genoemd Waarde van de Stap voor de component van de Waaier van a . Hieronder volgt een uitsplitsing van elk veld:
- component: Specificeert het type van inputgebied dat in de dialoog van het Bezit wordt gebruikt. In dit geval geeft
number
aan dat het veld numerieke waarden accepteert. - naam: Het herkenningsteken voor het bezit, dat wordt gebruikt om het in de logica van de component van verwijzingen te voorzien. Hier vertegenwoordigt
stepValue
de step waarde die voor de waaier wordt geplaatst. - etiket: De vertoningsnaam van het bezit zoals gezien in de dialoog van het Bezit.
- valueType: Bepaalt het gegevenstype dat voor het bezit wordt verwacht.
number
zorgt ervoor dat alleen numerieke invoer is toegestaan.
U kunt stepValue
nu gebruiken als een aangepaste eigenschap in de JSON-eigenschappen van range.js
en dynamisch gedrag implementeren op basis van de waarde ervan bij uitvoering.
Het uiteindelijke bestand van _range.json
ziet er daarom als volgt uit na het toevoegen van de componentdefinitie, het componentmodel en de aangepaste eigenschappen:
{
"definitions": [
{
"title": "Range",
"id": "range",
"plugins": {
"xwalk": {
"page": {
"resourceType": "core/fd/components/form/numberinput/v1/numberinput",
"template": {
"jcr:title": "Range",
"fieldType": "number-input",
"fd:viewType": "range",
"enabled": true,
"visible": true
}
}
}
}
}
],
"models": [
{
"id": "range",
"fields": [
{
"component": "container",
"name": "basic",
"label": "Basic",
"collapsible": false,
"...": "../../../../models/form-common/_basic-input-fields.json"
{
"component": "number",
"name": "stepValue",
"label": "Step Value",
"valueType": "number"
}
},
{
"...": "../../../../models/form-common/_help-container.json"
},
{
"component": "container",
"name": "validation",
"label": "Validation",
"collapsible": true,
"...": "../../../../models/form-common/_number-validation-fields.json"
}
]
}
]
}
3. De aangepaste component zichtbaar maken in de lijst met WYSIWYG-componenten
Een filter bepaalt welke sectie waarin de douanecomponent in Universele Redacteur kan worden gebruikt. Dit zorgt ervoor dat de component alleen in de juiste secties kan worden gebruikt, waarbij de structuur en bruikbaarheid behouden blijven.
Om ervoor te zorgen dat de aangepaste component tijdens het ontwerpen van formulieren in WYSIWYG in de lijst met beschikbare componenten wordt weergegeven:
-
Navigeer naar het
/blocks/form/_form.json
-bestand. -
Zoek de componentenarray in het object dat
id="form"
heeft. -
Voeg de
fd:viewType
-waarde vandefinitions[]
toe aan de componentenarray van het object metid="form"
.code language-javascript "filters": [ { "id": "form", "components": [ "captcha", "checkbox", "checkbox-group", "date-input", "drop-down", "email", "file-input", "form-accordion", "form-button", "form-fragment", "form-image", "form-modal", "form-reset-button", "form-submit-button", "number-input", "panel", "plain-text", "radio-group", "rating", "telephone-input", "text-input", "tnc", "wizard", "range" ] } ]
4. Uw aangepaste component registreren
Als u wilt dat het formulierblok de aangepaste component herkent en zijn eigenschappen die in het componentmodel zijn gedefinieerd tijdens het ontwerpen van het formulier laadt, voegt u de fd:viewType
-waarde van de componentdefinitie toe aan het mappings.js
-bestand.
Een component registreren:
- Navigeer naar het
/blocks/form/mappings.js
-bestand. - Zoek de array
customComponents[]
. - Voeg de
fd:viewType
-waarde van dedefinitions[]
-array toe aan decustomComponents[]
-array.
let customComponents = ["range"];
const OOTBComponentDecorators = ['file-input',
'wizard',
'modal', 'tnc',
'toggleable-link',
'rating',
'datetime',
'list',
'location',
'accordion'];
Nadat u de bovenstaande stappen hebt uitgevoerd, wordt de aangepaste component weergegeven in de lijst met componenten van het formulier in de Universal Editor. U kunt het vervolgens slepen en neerzetten in uw formuliersectie.
In de onderstaande schermafbeelding worden de eigenschappen getoond van de component range
die aan het componentmodel is toegevoegd, waarmee de eigenschappen worden opgegeven die de auteur van het formulier kan configureren.:
U kunt nu het runtimegedrag van uw aangepaste component definiëren door stijlen en functionaliteit toe te voegen.
5. Het runtimegedrag voor uw aangepaste component toevoegen
U kunt douanecomponenten wijzigen gebruikend vooraf bepaalde prijsverhoging, zoals die in wordt verklaard het Stileren van vormgebieden. Dit kan worden bereikt met aangepaste CSS (Cascading Style Sheets) en aangepaste code om de vormgeving van de component te verbeteren. Het runtimegedrag voor de component toevoegen:
-
Als u de opmaak wilt toevoegen, navigeert u naar het
/blocks/form/components/range/range.css
-bestand en voegt u de volgende coderegel toe:code language-javascript /** Styling for range */ main .form .range-widget-wrapper.decorated input[type="range"] { margin: unset; padding: unset; appearance: none; height: 5px; border-radius: 5px; border: none; background-image: linear-gradient(to right, #ADD8E6 calc(100% - var(--current-steps)/var(--total-steps)), #C5C5C5 calc(100% - var(--current-steps)/var(--total-steps))); } main .form .range-widget-wrapper.decorated input[type="range"]:focus { outline: none; } .range-widget-wrapper.decorated input[type="range"]::-webkit-slider-thumb { appearance: none; width: 25px; height: 25px; border-radius: 50%; background: #00008B; /* Dark Blue */ border: 3px solid #00008B; /* Dark Blue */ cursor: pointer; outline: 3px solid #fff; } .range-widget-wrapper.decorated input[type="range"]:focus::-webkit-slider-thumb { border-color: #00008B; /* Dark Blue */ } .range-widget-wrapper.decorated .range-bubble { color: #00008B; /* Dark Blue */ font-size: 20px; line-height: 28px; position: relative; display: inline-block; padding-bottom: 12px; font-weight: bold; } .range-widget-wrapper.decorated .range-min, .range-widget-wrapper.decorated .range-max { font-size: 14px; line-height: 22px; color: #494f50; margin-top: 16px; display: inline-block; } .range-widget-wrapper.decorated .range-max { float: right; }
Met de code kunt u de opmaak en visuele weergave van de aangepaste component definiëren.
-
Als u de functionaliteit wilt toevoegen, navigeert u naar het
/blocks/form/components/range/range.js
-bestand en voegt u de volgende coderegel toe:code language-javascript function updateBubble(input, element) { const step = input.step || 1; const max = input.max || 0; const min = input.min || 1; const value = input.value || 1; const current = Math.ceil((value - min) / step); const total = Math.ceil((max - min) / step); const bubble = element.querySelector('.range-bubble'); // during initial render the width is 0. Hence using a default here. const bubbleWidth = bubble.getBoundingClientRect().width || 31; const left = `${(current / total) * 100}% - ${(current / total) * bubbleWidth}px`; bubble.innerText = `${value}`; const steps = { '--total-steps': Math.ceil((max - min) / step), '--current-steps': Math.ceil((value - min) / step), }; const style = Object.entries(steps).map(([varName, varValue]) => `${varName}:${varValue}`).join(';'); bubble.style.left = `calc(${left})`; element.setAttribute('style', style); } export default async function decorate(fieldDiv, fieldJson) { console.log('RANGE DIV: ', fieldDiv); console.log('RANGE JSON: fieldJson', fieldJson); const input = fieldDiv.querySelector('input'); // modify the type in case it is not range. input.type = 'range'; input.min = input.min || 10; input.max = input.max || 1000; // create a wrapper div to provide the min/max and current value const div = document.createElement('div'); div.className = 'range-widget-wrapper decorated'; input.after(div); const hover = document.createElement('span'); hover.className = 'range-bubble'; const rangeMinEl = document.createElement('span'); rangeMinEl.className = 'range-min'; const rangeMaxEl = document.createElement('span'); rangeMaxEl.className = 'range-max'; rangeMinEl.innerText = `${input.min || 1}`; rangeMaxEl.innerText = `${input.max}`; div.appendChild(hover); // move the input element within the wrapper div div.appendChild(input); div.appendChild(rangeMinEl); div.appendChild(rangeMaxEl); input.addEventListener('input', (e) => { updateBubble(e.target, div); }); updateBubble(input, div); return fieldDiv; }
Het bepaalt hoe de aangepaste component reageert op gebruikersinvoer, gegevens verwerkt en integreert met het formulierblok in de Universal Editor.
Nadat u aangepaste stijlen en functionaliteit hebt opgenomen, worden de weergave en het gedrag van de bereikcomponent verbeterd. Het bijgewerkte ontwerp weerspiegelt de toegepaste stijlen, terwijl de toegevoegde functionaliteit een dynamischere en interactieve gebruikerservaring garandeert.
In de onderstaande schermafbeelding ziet u de bijgewerkte bereikcomponent.
Veelgestelde vraag
-
als ik het stileren in zowel component.css als forms.css toevoegt, welke één prioriteit neemt?
Wanneer de stijlen in zowelcomponent.css
als forms.css worden bepaald,component.css
neemt prioriteit. Dit komt doordat stijlen op componentniveau specifieker zijn en algemene stijlen uitforms.css
overschrijven. -
Mijn douanecomponent is niet zichtbaar in de lijst van beschikbare componenten in Universele Redacteur. Hoe los ik dit op?
Als uw aangepaste component niet wordt weergegeven, controleert u de volgende bestanden om te controleren of de component correct is geregistreerd:- component-definition.json: Verifieer dat de component behoorlijk wordt bepaald.
- component-filters.json: verzeker de component in de aangewezen secties wordt toegestaan.
- component-models.json: Bevestig dat het componentenmodel correct wordt gevormd.
Aanbevolen procedures
- Het wordt geadviseerd aan opstelling een lokale ontwikkelomgeving van AEMvoor het ontwikkelen van douanestijlen en componenten plaatselijk.
Extra byte
Supported resourceType
Ondersteunde veldtypen
De ondersteunde fieldTypes voor formulieren zijn:
- tekstinvoer
- getal-invoer
- date-input
- deelvenster
- onbewerkte tekst
- bestandsinvoer
- image
- knop
- selectievakje
- vervolgkeuzelijst
- radiogroep