So setzen Sie ein Pflegeformular für öffentliche Benutzer um

Nutzbar ab: Version

Dieser Artikel beschreibt, wie Sie über die gewohnten Standardpflegemasken auch öffentlichen Benutzern die Bearbeitung von XML-basierten Anwendungen ermöglichen.

Um auch öffentlichen Benutzern auf der bekannten Basis eine Pflegemöglichkeit für diverse Anwendungen (z.B. Veranstaltungskalender, Kleinanzeigen, Vereinsverzeichnis, etc.) zu ermöglichen, können Sie nun auch für diese Benutzer die objekbasierte Umsetzung heranziehen.

Beispiel auf Basis des Anwendungsgenerators

Beispielhaft demonstrieren wir Ihnen dies anhand einer Umsetzung über den Anwendungsgenerator, der über eine bestehende CSV-Datei eine XML-basierte Anwendung erstellt. Auf diese Weise haben Sie sehr schnell eine funktionierende Anwendung, die Sie nur noch nach Ihren Bedürfnissen anpassen müssen.

Beispiel Anwendungsgenerator
Beispiel Anwendungsgenerator

Anpassungen zum Objekt-Template

Der nachfolgende Auszug aus der beispielhaften Objekt-Datei zeigt einen Teil des Pflegebereiches an, welcher hinsichtlich des pflegbaren Bildes noch um die einfache Hochladen-Möglichkeit erweitert wurde.
Im entsprechenden Bildverzeichnis müssen Sie hierzu die Rechte so setzen, dass der öffentliche Benutzer direkt oder über eine Gruppe das Recht zum Hochladen von Dateien hat.

Definieren Sie am besten über die Objekt-Datei direkt den Aufruf der Bearbeitung, welche Sie auf den öffentlichen Benutzertyp abfragen. Ein öffentlicher Benutzer erhält somit bei Aufruf der entsprechenden Seite (auf die er das Recht zur Bearbeitung hat) den "Datei bearbeiten" Button. Durch Klick auf diesen landet er in der Bearbeitung (Smart-Editor).

Beispiel: Auszug aus der produkte-demo.wObject.php

<!-- Passen Sie die Pfade in diesem Quelltextbeispiel an Ihre Projektpfade an! -->
...
  <xsl:template match="wd:object[@type = 'produkte-demo']">

    <xsl:choose>
      <!-- Darstellung im Editor (Pflegemaske)-->
      <xsl:when test="$wIsInEditor and @wEditorId">
        <wsl:ifHasPermissionDocument path="/[IHR-LAYOUT-PROJEKT]/wGlobal/layout/templates/objects/produkte-demo.wObject.php" permission="edit">
          <div class="elementClearer" style="height:10px"> </div>
          <wsl:buttonEdit showInEditor="1" style="float:right" path="/[IHR-LAYOUT-PROJEKT]/wGlobal/layout/templates/objects/produkte-demo.wObject.php" icon="organize_layout" title="Objekt-Darstellung anpassen"/>
        </wsl:ifHasPermissionDocument>

<div class="wEditorExtensionLabel">Id</div>
<div class="wEditorExtensionValue"><!-- web:text:start editor="input" inputStyle="" --><xsl:value-of select="wd:data[@id = 'Id']"/><!-- web:text:stop --></div>
<div class="wEditorExtensionLabel">Category</div>
<div class="wEditorExtensionValue"><!-- web:text:start editor="select" multiple="" values="redline|blueline|blackline" texts="RedLine|BlueLine|BlackLine"--><xsl:value-of select="wd:data[@id = 'Category']"/><!-- web:text:stop --></div>
<div class="wEditorExtensionLabel">Title</div>
<div class="wEditorExtensionValue"><!-- web:text:start editor="hidden" value="$title" inputStyle="width:240px"--><xsl:value-of select="/wd:document/wd:extension/wd:meta/wd:title/text()"/><!-- web:text:stop --></div>
<div class="wEditorExtensionValue"><!-- web:text:start editor="input" sourceId="title" inputStyle="" --><xsl:value-of select="wd:data[@id = 'Title']"/><!-- web:text:stop --></div>
<div class="wEditorExtensionLabel">Description</div>
<div class="wEditorExtensionValue"><!-- web:text:start editor="wysiwyg" wysiwygFunctions="" --><xsl:value-of disable-output-escaping="yes" select="wd:data[@id = 'Description']"/><!-- web:text:stop --></div>
<div class="wEditorExtensionLabel">Image</div>              
<div class="wEditorExtensionValue">
  <!--web:text:start editor="file" upload="1" preview="picture" dirType="image" pathIfEmpty="/baseAssets/img/produkte" inputStyle="width:240px"--><xsl:value-of select="/wd:document/wd:extension/wd:object/wd:data[@id = 'Image']/text()"/><!--web:text:stop-->
  <xsl:if test="$wUsertype = 'public'">
  <script type="text/javascript">
    ////////////////////////////////////////////////////////////////
    //
    // Callback, das nach dem Löschen einer Datei aufgerufen wird
    // Sollte in der design.js abgelegt werden und wird nur hier im Beispiel direkt im Template definiert
    //
    ////////////////////////////////////////////////////////////////
    
    wOnBeforeClickDeleteFile = function(pathFile){
      
      console.log(pathFile);
      var inputFieldWithValue = jQuery('input[value="' + pathFile + '"]');
      if(inputFieldWithValue){
        inputFieldWithValue.val('');
      }

    };
  </script>
  <wsl:buttonDelete style="" path="{/wd:document/wd:extension/wd:object/wd:data[@id = 'Image']/text()}" caption="Bild löschen" title="Bild löschen" icon="delete" markId="" class="" questionConfirm="" onclick="" onBeforeClick="wOnBeforeClickDeleteFile('{/wd:document/wd:extension/wd:object/wd:data[@id = 'Image']/text()}');"/>
  </xsl:if>
</div>

  <wsl:editorButtonsObjectSmart/>
	<xsl:apply-templates select="/wd:document/wd:group[@id='content1']"/>
	      </xsl:when>

	      <!-- Darstellung im in der Webseite -->
	      <xsl:otherwise>
          <xsl:if test="$wUsertype = 'public'">
            <wsl:buttonEdit icon="edit" caption="Datei bearbeiten" title="" hideInEditor="1" style="float:right"/>
          </xsl:if>
	        <wsl:buttonEdit showInEditor="1" style="float:right" path="/[IHR-LAYOUT-PROJEKT]/wGlobal/layout/templates/objects/produkte-demo.wObject.php" icon="organize_layout" title="Objekt-Darstellung anpassen"/>

<h1><xsl:value-of select="wd:data[@id = 'Title']"/></h1>
<h2 class="subline"><xsl:value-of select="wd:data[@id = 'Category']"/></h2>
<p><xsl:value-of disable-output-escaping="yes" select="wd:data[@id = 'Description']/text()"/></p>
<p><img src="{wd:data[@id = 'Image']//text()}" alt=""/></p>

	        <xsl:apply-templates select="/wd:document/wd:group[@id='content1']"/>
	        <script type="text/javascript">
	        document.write('<![CDATA[<div class="elementLink"><a href="javascript:history.back()" class="back">]]><xsl:value-of select="php:functionString('wTexts::getText', 'go_back')"/><![CDATA[<'+'/a><'+'/div>]]>');
	        </script>
	      </xsl:otherwise>
	    </xsl:choose>
	  </xsl:template>
...

Über die generierte Objekt-Datei ist das wsl:editorButtonsObjectSmart Tag gesetzt, über welches ein berechtigter öffentlicher Benutzer die Bearbeitenmöglichkeit auf die entsprechenden Objekt-Daten erhält. Hierfür muss er Besitzer der betreffenden Datei sein. Weitere Informationen hierzu finden Sie im unten verlinkten DevBlog-Artikel.

Anpassen der Datei-Vorlage

Sorgen Sie in der Vorlage für neue Dateien dafür, dass das Besitzer-Feld (wd:owner) leer bleibt. Die zugewiesene Rolle für den Besitzer muss in der Vorlage das Recht zum Bearbeiten (optional auch zum Löschen) der Datei gesetzt haben (siehe Screen). Zum Erstellprozeß darf auch keine Auswahl von Vorlagen kommen, da öffentliche Benutzer dazu keine Berechtigung haben. Hinterlegen Sie in den Verzeichniseinstellungen (Vorlagen) eine konkrete Dateivorlage über das Feld "Immer folgende Dateivorlagen verwenden".

Produkte-Vorlage: Datei-Eigenschaften - Besitzer
Produkte-Vorlage: Datei-Eigenschaften - Besitzer

Anpassen der Verzeichniseinstellungen

Passen Sie zudem die Rechte für das betreffende Verzeichnis (z.B. /base/produkte-demo/data) dahingehend an, daß der öffentliche Benutzer entweder direkt oder über eine Gruppe das Recht zum Erstellen von Dateien in diesem Verzeichnis hat. Sofern im Objekt auch Bilder oder andere Binärdateien (z.B. PDF-Dateien) vom öffentlichen Benutzer hochgeladen und bearbeitet werden sollen, müssen auch im entsprechenden Assets-Pfad (z.B. /baseAssets/img/produkte) die Verzeichnisrechte und Standard-Dateieinstellungen (Dateirechte) so gesetzt sein, daß der öffentliche Benutzer das Recht zum Hochladen und ggf. bearbeiten der Binärdateien hat.

Anpassen der Metadaten-Maske

Sofern sichergestellt sein soll, dass die vom öffentlichen Benutzer bearbeitete Seite nach Speichern auch online ist, kann dies wie folgt über die Metadaten-Maske umgesetzt werden (siehe auch Beispielprojekt). Auf diese Weise kann die Vorlage für eine neue Seite standardmässig offline geschaltet sein und wird dann erst beim Speichern online gesetzt.

Beispiel: Auszug aus der standard.metadata.php zur Online-Status Pflege

...
<
wsl:ifIsAdminOrUserStandard>
<!--
Hier wird die Pflegemaske für Administratoren/Pflegebenutzer definiert -->
...
<
wsl:else />
<!--
Falls ein öffentlicher Benutzer ein Objekt bearbeitet, wird dieses beim Speichern immer online gesetzt, ohne dass der öffentliche Benutzer die Auswahl sieht-->
<!--
web:text:start inputStyle="display:none" editor="select" values="on" --><xsl:value-of select="/wd:document/wd:extension/wd:status/wd:online/@status"/><!--web:text:stop-->
</
wsl:ifIsAdminOrUserStandard>
...

Wichtige Hinweise

  • Ein Benutzer vom Benutzertyp "public" (öffentlicher Benutzer) kann den Dateiexplorer nicht aufrufen, da er keinen Zugriff auf die Verzeichnisstruktur hat!
  • Ein Benutzer vom Benutzertyp "public" (öffentlicher Benutzer) bekommt bei Bearbeitung von Metadaten zu Binärdateien die Schaltflächen für "Speichern" und "Schliessen" nur dann angezeigt, wenn auch in der Pflegemaske (meist standard.extension.php) das WSL-TAG wsl:editorButtonsObjectSmart gesetzt ist.
  • Ein Benutzer vom Benutzertyp "public" (öffentlicher Benutzer) hat nur eingeschränkte WYSIWYG-Funktionen, womit er maximal diese Funktionen nutzen kann:
    bold, italic, underline, orderedlist, unorderedlist, (clipboard), chars, undo
  • Ein Benutzer vom Benutzertyp "public" (öffentlicher Benutzer) kann keinen Mehrfach-Upload nutzen (ausgenommen ab CMS 10.x in der Cloud bzw. beim Einsatz des Formular-Weblics).
    Ab CMS-Version 011.001.029.000 kann diese Restriktion individuell über eine Conf-Einstellung gelockert werden ( /wConf/upload/limit/@numberFilesPublic = 3 ).
    Der Wert (z.B. numberFilesPublic="3") entscheidet, wieviele Dateien öffentliche Benutzer maximal über Mehrfachupload hochladen dürfen.