Um ein komplett eigenes ZMI zu erstellen, kann man für ein Content-Objekt ein method-Attribut mit der Id 'manage_main' erstellen. ZMS bettet das Ergebnis des Aufrufs der manage_main-Methode dann lediglich in die notwendigen HTML-Form-Tags ein. Die Input-Felder innerhalb dieser HTML-Form müssen den gängigen Namens-Konventionen folgen, damit beim Abspeichern der HTML-Form auch die Eigenschaften richtig gesetzt werden.

Eine alternative Möglichkeit bieten Attribute vom Typ 'interface'. In diesen Attributen kann man auch eigene Input-Felder mit selbst-definiertem Verhalten platzieren. Die Input-Felder müssen den gängigen Namens-Konventionen folgen, damit beim Abspeichern der HTML-Form auch die Eigenschaften richtig gesetzt werden.
Als Beispiel kann man sich an ZMSTable aus dem ZMS-Standard-Content-Modell orientieren.
Um zu verhindern, dass ein Input-Feld vom ZMS generiert wird, muss das interface-Attribut in der Content-Objekt-Konfiguration vor dem Attribut platziert werden, für das ein eigenes Input-Feld erstellt wird. Weiterhin muss im interface das Attribut in die Liste der Hide-Elements aufgenommen werden, z.B. aus ZMSTable:

<dtml-call "REQUEST.set('ZMS_HIDE_ELEMENTS',REQUEST.get('ZMS_HIDE_ELEMENTS',[])+['type','table','colgroup','cols'])">