So setzen Sie eine Dateiauswahlbox im Editor um

Dieser Artikel beschreibt, wie Sie für die Dateibearbeitung über den Select-Texteditor Dateien zur Auswahl anbieten können. Dies wird z.B. in den Beispielprojekten innerhalb Listendateien zur Auswahl des Darstellungs-Templates verwendet.

Um in der Seitenbearbeitung dem Benutzer z.B. in den Listenoptionen unterschiedliche Zeilentemplates zur Auswahl anzubieten, können Sie dies über den Texteditor-Select realisieren:

Beispiel: Auszug aus einem Bearbeitenelement (z.B. list.standard.wItem.php) mit Auswahl über ein Script

...
<!-- web:text:start editor="select" script="/de/wGlobal/scripts/editor/getListTemplates.php?pathProject=/deGlobal" validator="" errorMessage="" inputStyle=""--><xsl:value-of select="wd:fragment[@id='listtemplate']/text()"/><!-- web:text:stop -->
...

Beispiel: getListTemplates.php Script, das zur Auswahl verwendet wird

  require_once($_SERVER['DOCUMENT_ROOT']."/weblication/grid.php");
  
  $userType = wUserCur::getType();
  
  if($userType != 'admin' && $userType != 'standard'){
    exit;
  }

  $query              = array();
  $query['dir']       = wRequest::getParameter('pathProject').'/wGlobal/layout/templates/lists';
  $query['filterset'] = array('type' => 'and', array('wPath' => '/wd:stat/@name', 'operator' => 'contains', 'condition' => '.wFilelist.php'));

  $files = wRepository::selectDocuments($query);
  
  $result = '<entries>';
  
  foreach($files as $file){
    $title = wDocumentData::getData($file, '/wd:extension/wd:meta/wd:title/text()');
    if(strstr($file, 'album') == TRUE){
      $isDisabledStr = 'disabled="disabled"';
    }
    else{
      $isDisabledStr = '';
    }
    if($userType == 'admin'){
      $result .= '<entry '.$isDisabledStr.' value="'.$file.'">'.$title.' ('.preg_replace("/\..*/", "", wPathName::getFileNameOnly($file)).')</entry>';
    }
    else{
      $result .= '<entry value="'.$file.'">'.$title.'</entry>';
    }  
  }
  $result .= '</entries>';  

  print $result;

Das oben angeführte Script liest über die Repository-Funktion das Verzeichnis der Listentemplates (Darstellungstemplates) aus und gibt über die DocumentData-Funktion in der Auswahlbox den Pfad und den Titel der gefundenen Dateien aus.

FAQs are only visible for Weblication ai search and editors!
Wie kann ich im Seiteneditor eine Dateiauswahlbox für die Dateibearbeitung umsetzen?
Sie können für die Seitenbearbeitung, z. B. in den Listenoptionen, eine Auswahl über einen Texteditor-Select realisieren. Dazu wird im Editor-Element ein Select-Texteditor verwendet und ein Script angegeben, das die auswählbaren Dateien (z. B. Listentemplates) liefert.
Welches Editor-Element wird in dem Beispiel zur Auswahl verwendet?
Im Beispiel wird im Bearbeitenelement (z. B. <code class="codeInline">list.standard.wItem.php</code>) ein Select-Texteditor genutzt, erkennbar am Eintrag <code class="codeInline">editor="select"</code> und am <code class="codeInline">script</code>-Attribut: <code class="codeInline">getListTemplates.php?pathProject=/deGlobal</code>.
Was macht das Beispiel-Script <code class="codeInline">getListTemplates.php</code>, das für die Auswahlbox verwendet wird?
Das Script liest über eine Repository-Funktion das Verzeichnis der Listentemplates aus (<code class="codeInline">.../wGlobal/layout/templates/lists</code>). Anschließend filtert es passende Dateien (u. a. anhand von Dateien, die <code class="codeInline">.wFilelist.php</code> enthalten) und erzeugt daraus eine Ergebnisstruktur (<code class="codeInline"><entries></code> mit <code class="codeInline"><entry></code>-Elementen) für die Auswahlbox.
Wie wird im Script bestimmt, welche Listentemplates angezeigt werden?
Das Script baut eine Query zusammen: <code class="codeInline">dir</code> zeigt auf das Template-Verzeichnis und <code class="codeInline">filterset</code> filtert Dokumente so, dass sie im Pfad/Metadatenkriterium das enthalten, was für Listentemplates relevant ist (hier u. a. <code class="codeInline">.wFilelist.php</code> als Filterkriterium). Die Treffer werden danach über <code class="codeInline">wRepository::selectDocuments($query)</code> geholt.
Wie setzt das Script die Anzeige-Texte (Titel) für die Auswahl zusammen?
Für jedes gefundene Dokument holt das Script über <code class="codeInline">wDocumentData::getData(...)</code> den Titel aus den Metadaten (<code class="codeInline">/wd:extension/wd:meta/wd:title/text()</code>). Außerdem wird im Beispiel je nach Auswertung zusätzliche Information (Dateiname ohne Extension) an den Titel angehängt.
Wie funktioniert die Rollenlogik (Admin vs. andere Nutzer) im Beispiel-Script?
Das Script ermittelt den Benutzertyp (<code class="codeInline">$userType = wUserCur::getType()</code>) und unterscheidet zwischen <code class="codeInline">admin</code> und anderen (z. B. <code class="codeInline">standard</code>). Für <code class="codeInline">admin</code> werden zusätzliche Informationen im Anzeige-Text ergänzt; für Nicht-Admins wird der Auswahltext schlanker ausgegeben.
Wann wird im Beispiel ein Eintrag in der Auswahlbox deaktiviert?
Im Beispiel wird geprüft, ob der Dateipfad den String <code class="codeInline">album</code> enthält. Wenn das zutrifft, wird der Eintrag mit <code class="codeInline">disabled="disabled"</code> versehen; andernfalls wird kein <code class="codeInline">disabled</code> gesetzt.
Welche grundlegende technische Idee steckt hinter der Umsetzung der Dateiauswahlbox?
Die Idee ist, dass der Editor-Select nicht die Dateien statisch kennt, sondern ein Script verwendet, das die verfügbaren Dateien anhand eines Projektpfads und eines Repositories lädt. Dieses Script liefert dann die Einträge inkl. <code class="codeInline">value</code> (Dateipfad) und Anzeigeinformationen (Titel) an die Auswahlbox zurück.