2017-07-05 3 views
0

Ist es möglich, den Array-Modaldialog zu erweitern, ohne die array-modal.js (Apostroph-Schemas/public/js) zu überschreiben?Array-Modal-Editor erweitern

Ich versuche, einen Link-Array in dem globalen Modul zu erstellen, für die ich erstellt:

... 
name: 'links', 
label: 'Links', 
type: 'array', 
titleField: 'title', 
schema: [{ 
    name: 'title', 
    label: 'Title', 
    type: 'string' 
}, { 
    name: 'url', 
    label: 'Url', 
    type: 'url' 
}, { 
    name: '_page', 
    label: 'Page', 
    type: 'joinByOne', 
    withType: 'apostrophe-page', 
    idField: 'pageId', 
    filter: { 
    projection: { 
     title: 1, 
     slug: 1 
    } 
    } 
}] 
... 

Jetzt mag ich das Titelfeld setzen und das URL-Feld zu deaktivieren, wenn eine Seite ausgewählt ist. Oder benutze das Titel- und URL-Feld. Wenn ich ein Skript wie folgt registrieren:

apos.define('apostrophe-array-editor-modal', { 
    extend: 'apostrophe-modal', 
    source: 'arrayEditor', 
    ... 
}); 

i überschreiben die ursprünglichen Array-modal.js, aber ich möchte nur eine Änderung Handler registrieren und überprüfen die Eingaben vor speichern.

Mein Ziel ist eine Liste von (footer/static) Links, die der Admin im globalen Bereich bearbeiten kann und ich kann sie auf mehreren Seiten verwenden.

Vielen Dank!

Antwort

0

Meine Empfehlung würde sein, eine Art type Feld für jeden Link zu machen, wo der Editor eine Wahl zwischen einem internen Seitenbeitritt und einer externen URL trifft.

select Schema Felder haben eine showFields Parameter,/zeigen Teile eines Schemas Form hergestellt basierend auf der Auswahl verstecken können, hier die Dokumentation überprüfen http://apostrophecms.org/docs/tutorials/getting-started/schema-guide.html#code-select-code

Ihr Code so etwas wie

name: 'links', 
    label: 'Links', 
    type: 'array', 
    titleField: 'title', 
    schema: [{ 
    name: 'title', 
    label: 'Title', 
    type: 'string' 
    }, { 
    name: 'linkType', 
    type: 'select', 
    label: 'Type', 
    choices: [{ 
     label: 'External', 
     value: 'external', 
     showFields: ['url'] 
    }, { 
     label: 'Internal', 
     value: 'internal', 
     showFields: ['_page'] 
    }] 
    }, { 
    name: 'url', 
    label: 'Url', 
    type: 'url' 
    }, { 
    name: '_page', 
    label: 'Page', 
    type: 'joinByOne', 
    withType: 'apostrophe-page', 
    idField: 'pageId', 
    filter: { 
     projection: { 
     title: 1, 
     slug: 1 
     } 
    } 
    }] 

aussehen würde In Ihrer Vorlage können Sie immer den Wert linkType überprüfen, um Auszeichnungsentscheidungen zu treffen.

+0

danke, das wird mein Problem lösen. Ist es jedoch möglich, zwei oder mehr js-Dateien für einen modalen Dialog zu laden? Oder ist es möglich, eine js-Datei/s für ein bestimmtes Feld zu laden? – ytasyol

+0

Nicht ganz sicher, was Sie zu tun versuchen, aber Sie können benutzerdefinierte js in einem Editor-Modal laden, indem Sie die Methode 'beforeShow' im' editor-modal.js' des Stückes überschreiben. Dokumentation hier http://apostrophecms.org /docs/tutorials/howtos/extending-the-pieces-editor-modal.html –